[nfft] 01/01: Imported Upstream version 3.3.0.alpha1

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Wed Jan 14 12:22:51 UTC 2015


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch upstream
in repository nfft.

commit 944741b56e362ec5f96c5d3bec034a9df42ef108
Author: Ghislain Antony Vaillant <ghisvail at gmail.com>
Date:   Wed Jan 14 12:21:38 2015 +0000

    Imported Upstream version 3.3.0.alpha1
---
 3rdparty/Makefile.in                               |   679 -
 3rdparty/cstripack/Makefile.in                     |   556 -
 3rdparty/cstripack/cstripack.c                     |     2 +-
 3rdparty/cstripack/cstripack.h                     |     2 +-
 CONVENTIONS                                        |    25 +
 ChangeLog                                          |     7 +
 INSTALL                                            |   370 -
 Makefile.am                                        |   105 +-
 Makefile.in                                        |  1050 -
 README                                             |    55 +-
 aclocal.m4                                         |  1081 -
 applications/Makefile.in                           |   650 -
 applications/doxygen.c                             |     4 +-
 applications/fastgauss/Makefile.am                 |     4 +-
 applications/fastgauss/Makefile.in                 |   555 -
 applications/fastgauss/fastgauss.c                 |   592 +-
 applications/fastgauss/levelplots.m                |     4 +-
 applications/fastgauss/output_error.m              |    52 +
 applications/fastgauss/output_error_p.m            |    52 +
 applications/fastgauss/show_results.m              |     4 +-
 applications/fastsum/Makefile.am                   |    16 +-
 applications/fastsum/Makefile.in                   |   776 -
 applications/fastsum/fastsum.c                     |  1106 +-
 applications/fastsum/fastsum.h                     |    51 +-
 applications/fastsum/fastsum.m                     |     4 +-
 applications/fastsum/fastsum_benchomp.c            |   294 +-
 .../fastsum/fastsum_benchomp_createdataset.c       |    60 +-
 applications/fastsum/fastsum_benchomp_detail.c     |   165 +-
 applications/fastsum/fastsum_matlab.c              |   187 +-
 applications/fastsum/fastsum_test.c                |   228 +-
 .../fastsum/fastsum_test.dSYM/Contents/Info.plist  |    20 +
 .../Contents/Resources/DWARF/fastsum_test          |   Bin 0 -> 75048 bytes
 applications/fastsum/fastsum_test.m                |     4 +-
 applications/fastsum/kernels.c                     |   469 +-
 applications/fastsum/kernels.h                     |    33 +-
 applications/fastsumS2/Makefile.am                 |     2 +-
 applications/fastsumS2/Makefile.in                 |   555 -
 applications/fastsumS2/doxygen.h                   |     2 +-
 applications/fastsumS2/fastsumS2.c                 |   411 +-
 applications/fastsumS2/fastsumS2.m                 |     6 +-
 applications/fastsumS2/readTestcase.m              |     4 +-
 applications/fastsumS2/writeTestcase.m             |     4 +-
 applications/iterS2/Makefile.am                    |     2 +-
 applications/iterS2/Makefile.in                    |   556 -
 applications/iterS2/doxygen.h                      |     2 +-
 applications/iterS2/iterS2.c                       |   151 +-
 applications/iterS2/writeImageTestcase.m           |     6 +-
 applications/iterS2/writeTestcase.m                |     6 +-
 applications/mri/Makefile.in                       |   638 -
 applications/mri/doxygen.c                         |     4 +-
 applications/mri/mri2d/Makefile.am                 |     2 +-
 applications/mri/mri2d/Makefile.in                 |   661 -
 applications/mri/mri2d/construct_data_2d.c         |     8 +-
 applications/mri/mri2d/construct_data_inh_2d1d.c   |    12 +-
 applications/mri/mri2d/construct_data_inh_3d.c     |    14 +-
 applications/mri/mri2d/construct_inh.m             |     4 +-
 applications/mri/mri2d/construct_knots_linogram.m  |     4 +-
 applications/mri/mri2d/construct_knots_radial.m    |     4 +-
 applications/mri/mri2d/construct_knots_rose.m      |     4 +-
 applications/mri/mri2d/construct_knots_spiral.m    |     4 +-
 applications/mri/mri2d/construct_readout_time.m    |     4 +-
 applications/mri/mri2d/doxygen.h                   |     2 +-
 applications/mri/mri2d/mri.m                       |     4 +-
 applications/mri/mri2d/mri_inh.m                   |     4 +-
 applications/mri/mri2d/phantom.m                   |     4 +-
 applications/mri/mri2d/precompute_weights.m        |     4 +-
 applications/mri/mri2d/reconstruct_data_2d.c       |    11 +-
 applications/mri/mri2d/reconstruct_data_gridding.c |    10 +-
 applications/mri/mri2d/reconstruct_data_inh_2d1d.c |    15 +-
 applications/mri/mri2d/reconstruct_data_inh_3d.c   |    15 +-
 .../mri/mri2d/reconstruct_data_inh_nnfft.c         |    11 +-
 applications/mri/mri2d/rms.m                       |     4 +-
 .../mri/mri2d/verschiebung.m                       |    17 +-
 applications/mri/mri2d/visualize_data.m            |     4 +-
 applications/mri/mri3d/Makefile.am                 |     2 +-
 applications/mri/mri3d/Makefile.in                 |   612 -
 applications/mri/mri3d/construct_data_2d1d.c       |     8 +-
 applications/mri/mri3d/construct_data_3d.c         |     8 +-
 applications/mri/mri3d/construct_knots_linogram.m  |     4 +-
 applications/mri/mri3d/construct_knots_radial.m    |     4 +-
 applications/mri/mri3d/construct_knots_radial_3d.m |     4 +-
 applications/mri/mri3d/construct_knots_rose.m      |     4 +-
 applications/mri/mri3d/construct_knots_spiral.m    |     4 +-
 applications/mri/mri3d/construct_phantom.m         |     4 +-
 applications/mri/mri3d/doxygen.h                   |     2 +-
 applications/mri/mri3d/mri.m                       |     4 +-
 applications/mri/mri3d/precompute_weights_2d.m     |     4 +-
 applications/mri/mri3d/reconstruct_data_2d1d.c     |    12 +-
 applications/mri/mri3d/reconstruct_data_3d.c       |    12 +-
 applications/mri/mri3d/reconstruct_data_gridding.c |    12 +-
 applications/mri/mri3d/rms.m                       |     4 +-
 applications/mri/mri3d/visualize_data.m            |     4 +-
 applications/polarFFT/Makefile.am                  |     8 +-
 applications/polarFFT/Makefile.in                  |   576 -
 applications/polarFFT/doxygen.h                    |     2 +-
 applications/polarFFT/fft_test.m                   |     4 +-
 applications/polarFFT/linogram_fft_test.c          |   491 +-
 applications/polarFFT/mpolar_fft_test.c            |   509 +-
 applications/polarFFT/phantom.m                    |     4 +-
 applications/polarFFT/polar_fft_test.c             |   381 +-
 applications/quadratureS2/Makefile.am              |     2 +-
 applications/quadratureS2/Makefile.in              |   555 -
 applications/quadratureS2/doxygen.h                |     2 +-
 applications/quadratureS2/lgwt.m                   |     4 +-
 applications/quadratureS2/plotGrid.m               |     6 +-
 applications/quadratureS2/quadratureS2.c           |   111 +-
 applications/quadratureS2/quadratureS2.m           |     6 +-
 applications/quadratureS2/readTestcase.m           |     6 +-
 applications/quadratureS2/writeTestcase.m          |     6 +-
 applications/quadratureS2/writeWeights.m           |     6 +-
 applications/radon/Makefile.am                     |     6 +-
 applications/radon/Makefile.in                     |   564 -
 applications/radon/inverse_radon.c                 |   245 +-
 applications/radon/phantom.m                       |     4 +-
 applications/radon/radon.c                         |   214 +-
 applications/radon/radon.m                         |     4 +-
 applications/radon/ridgelet.m                      |     4 +-
 bootstrap.sh                                       |     0
 config/compile                                     |   342 -
 config/config.guess                                |  1540 --
 config/config.sub                                  |  1779 --
 config/depcomp                                     |   707 -
 config/install-sh                                  |   527 -
 config/ltmain.sh                                   |  9655 --------
 config/missing                                     |   330 -
 configure                                          | 22488 -------------------
 configure.ac                                       |   107 +-
 doc/api/html/images/logo.png                       |   Bin 0 -> 2965 bytes
 doc/api/html/images/sphere.png                     |   Bin 0 -> 10243 bytes
 doc/api/latex/images/sphere.eps                    |    99 +
 doc/api/latex/images/sphere.pdf                    |   Bin 0 -> 55197 bytes
 doc/logo/nfft_logo.tif                             |   Bin 0 -> 56256 bytes
 doxygen.dox                                        |     2 +-
 doxygen/Makefile.in                                |   426 -
 doxygen/doxygen.Doxyfile                           |  1143 -
 doxygen/doxygen.Doxyfile.in                        |     2 +-
 examples/Makefile.in                               |   656 -
 examples/doxygen.c                                 |     4 +-
 examples/fpt/Makefile.am                           |     2 +-
 examples/fpt/Makefile.in                           |   556 -
 examples/fpt/simple_test.c                         |    11 +-
 examples/fpt/simple_test.nb                        |    79 +
 examples/mri/Makefile.am                           |     2 +-
 examples/mri/Makefile.in                           |   422 -
 examples/nfct/Makefile.am                          |     4 +-
 examples/nfct/Makefile.in                          |   555 -
 examples/nfct/simple_test.c                        |    51 +-
 examples/nfft/Makefile.am                          |    22 +-
 examples/nfft/Makefile.in                          |   710 -
 examples/nfft/flags.c                              |   424 +-
 examples/nfft/flags.m                              |     4 +-
 examples/nfft/ndft_fast.c                          |   267 +-
 examples/nfft/ndft_fast.m                          |     4 +-
 examples/nfft/nfft_benchomp.c                      |   102 +-
 examples/nfft/nfft_benchomp_createdataset.c        |    23 +-
 examples/nfft/nfft_benchomp_detail.c               |    31 +-
 examples/nfft/nfft_times.c                         |  1464 +-
 examples/nfft/simple_test.c                        |   120 +-
 examples/nfft/simple_test_threads.c                |    31 +-
 examples/nfft/taylor_nfft.c                        |   354 +-
 examples/nfft/taylor_nfft.m                        |     4 +-
 examples/nfsft/Makefile.am                         |     2 +-
 examples/nfsft/Makefile.in                         |   686 -
 examples/nfsft/nfsft_benchomp.c                    |     8 +-
 examples/nfsft/nfsft_benchomp_createdataset.c      |     7 +-
 examples/nfsft/nfsft_benchomp_detail.c             |     3 +-
 examples/nfsft/simple_test.c                       |    19 +-
 examples/nfsft/simple_test_threads.c               |    19 +-
 examples/nfsoft/Makefile.am                        |     2 +-
 examples/nfsoft/Makefile.in                        |   555 -
 examples/nfsoft/simple_test.c                      |     5 +-
 examples/nfst/Makefile.am                          |     4 +-
 examples/nfst/Makefile.in                          |   555 -
 examples/nfst/simple_test.c                        |    51 +-
 examples/nnfft/Makefile.am                         |     2 +-
 examples/nnfft/Makefile.in                         |   564 -
 examples/nnfft/accuracy.c                          |     7 +-
 examples/nnfft/accuracy.m                          |     4 +-
 examples/nnfft/simple_test.c                       |    35 +-
 examples/nsfft/Makefile.am                         |     2 +-
 examples/nsfft/Makefile.in                         |   564 -
 examples/nsfft/nsfft_test.c                        |    11 +-
 examples/nsfft/simple_test.c                       |     5 +-
 examples/solver/Makefile.am                        |     6 +-
 examples/solver/Makefile.in                        |   564 -
 examples/solver/doxygen.h                          |     2 +-
 examples/solver/glacier.c                          |   269 +-
 examples/solver/glacier.m                          |     4 +-
 examples/solver/glacier_cv.m                       |     4 +-
 examples/solver/simple_test.c                      |    87 +-
 include/Makefile.am                                |     2 +-
 include/Makefile.in                                |   560 -
 include/api.h                                      |     2 +-
 include/config.h.in                                |  2067 --
 include/cycle.h                                    |    59 +-
 include/doxygen.dox                                |    29 +
 include/infft.h                                    |   350 +-
 include/nfft3.h                                    |   263 +-
 include/nfft3conf.h                                |    45 -
 include/nfft3conf.h.in                             |    45 -
 include/nfft3util.h                                |   279 -
 include/solver_adjoint.h                           |    90 +
 include/ticks.h.in                                 |     2 +-
 kernel/Makefile.am                                 |     2 +-
 kernel/Makefile.in                                 |   762 -
 kernel/fpt/Makefile.am                             |     2 +-
 kernel/fpt/Makefile.in                             |   583 -
 kernel/fpt/fpt.c                                   |    31 +-
 kernel/fpt/fpt.h                                   |     4 +-
 kernel/mri/Makefile.in                             |   553 -
 kernel/mri/mri.c                                   |    25 +-
 kernel/nfct/Makefile.in                            |   553 -
 kernel/nfct/nfct.c                                 |  1515 +-
 kernel/nfft/Makefile.in                            |   578 -
 kernel/nfft/nfft.c                                 |  4902 ++--
 kernel/nfsft/Makefile.am                           |     2 +-
 kernel/nfsft/Makefile.in                           |   591 -
 kernel/nfsft/api.h                                 |     4 +-
 kernel/nfsft/legendre.c                            |     6 +-
 kernel/nfsft/legendre.h                            |     4 +-
 kernel/nfsft/nfsft.c                               |    37 +-
 kernel/nfsoft/Makefile.am                          |     2 +-
 kernel/nfsoft/Makefile.in                          |   556 -
 kernel/nfsoft/nfsoft.c                             |    17 +-
 kernel/nfsoft/wigner.c                             |     6 +-
 kernel/nfsoft/wigner.h                             |     4 +-
 kernel/nfst/Makefile.in                            |   553 -
 kernel/nfst/nfst.c                                 |  1798 +-
 kernel/nnfft/Makefile.in                           |   553 -
 kernel/nnfft/nnfft.c                               |    70 +-
 kernel/nsfft/Makefile.in                           |   553 -
 kernel/nsfft/nsfft.c                               |   181 +-
 kernel/solver/Makefile.in                          |   553 -
 kernel/solver/solver.c                             |   424 +-
 kernel/util/Makefile.am                            |    19 +-
 kernel/util/Makefile.in                            |   560 -
 kernel/util/{sinc.c => assert.c}                   |    39 +-
 kernel/util/bessel_i0.c                            |     6 +-
 kernel/util/bessel_i0.m                            |    72 +
 kernel/util/bessel_i0.nb                           |   979 +
 kernel/util/bspline.c                              |   109 +
 kernel/util/bspline.nb                             |   331 +
 kernel/util/damp.c                                 |   144 +
 kernel/util/error.c                                |    24 +-
 kernel/util/float.c                                |    19 +-
 kernel/util/int.c                                  |    28 +-
 kernel/util/lambda.c                               |    12 +-
 kernel/util/malloc.c                               |    32 +-
 kernel/util/print.c                                |    87 +
 kernel/util/{sinc.c => rand.c}                     |    64 +-
 kernel/util/sinc.c                                 |     4 +-
 kernel/util/sort.c                                 |   257 +
 kernel/util/{sinc.c => thread.c}                   |    36 +-
 include/api.h => kernel/util/time.c                |    15 +-
 kernel/util/vector1.c                              |    95 +
 kernel/util/vector2.c                              |    76 +
 kernel/util/vector3.c                              |   180 +
 include/ticks.h.in => kernel/util/voronoi.c        |    25 +-
 kernel/util/{sinc.c => window.c}                   |    43 +-
 m4/amx_prog_as.m4                                  |    11 +
 m4/ax_cc_blocks.m4                                 |    27 +
 m4/ax_count_cpus.m4                                |    46 +
 m4/ax_cunit.m4                                     |    82 +
 m4/ax_gcc_aligns_stack.m4                          |    50 +
 m4/ax_gcc_version.m4                               |    38 +
 m4/ax_lib_fftw3.m4                                 |    44 +-
 m4/ax_nfft_module.m4                               |    25 +-
 m4/ax_prog_matlab.m4                               |     4 +-
 m4/libtool.m4                                      |  7982 -------
 m4/ltoptions.m4                                    |   384 -
 m4/ltsugar.m4                                      |   123 -
 m4/ltversion.m4                                    |    23 -
 m4/lt~obsolete.m4                                  |    98 -
 matlab/Makefile.am                                 |    11 +-
 matlab/Makefile.in                                 |   733 -
 matlab/args.c                                      |     4 +-
 matlab/imex.h                                      |     4 +-
 matlab/malloc.c                                    |     4 +-
 matlab/nfft/FFTW_ESTIMATE.m                        |     6 +-
 matlab/nfft/FFTW_MEASURE.m                         |     6 +-
 matlab/nfft/FFT_OUT_OF_PLACE.m                     |     6 +-
 matlab/nfft/FG_PSI.m                               |     6 +-
 matlab/nfft/Makefile.am                            |     2 +-
 matlab/nfft/Makefile.in                            |   679 -
 matlab/nfft/PRE_FG_PSI.m                           |     6 +-
 matlab/nfft/PRE_FULL_PSI.m                         |     6 +-
 matlab/nfft/PRE_LIN_PSI.m                          |     6 +-
 matlab/nfft/PRE_PHI_HUT.m                          |     6 +-
 matlab/nfft/PRE_PSI.m                              |     6 +-
 matlab/nfft/ndft_adjoint.m                         |     6 +-
 matlab/nfft/ndft_trafo.m                           |     6 +-
 matlab/nfft/nfft.m                                 |    11 +-
 matlab/nfft/nfft_adjoint.m                         |     6 +-
 matlab/nfft/nfft_finalize.m                        |     6 +-
 matlab/nfft/nfft_get_f.m                           |     6 +-
 matlab/nfft/nfft_get_f_hat.m                       |     6 +-
 matlab/nfft/nfft_get_num_threads.m                 |     4 +-
 matlab/nfft/nfft_get_x.m                           |     6 +-
 matlab/nfft/nfft_init_1d.m                         |     6 +-
 matlab/nfft/nfft_init_2d.m                         |     6 +-
 matlab/nfft/nfft_init_3d.m                         |     6 +-
 matlab/nfft/nfft_init_guru.m                       |    10 +-
 matlab/nfft/nfft_precompute_psi.m                  |     6 +-
 matlab/nfft/nfft_set_f.m                           |     6 +-
 matlab/nfft/nfft_set_f_hat.m                       |     6 +-
 matlab/nfft/nfft_set_x.m                           |     6 +-
 matlab/nfft/nfft_trafo.m                           |     6 +-
 matlab/nfft/nfftmex.c                              |     9 +-
 matlab/nfft/{nfft_set_x.m => nfftmex.m}            |    10 +-
 matlab/nfft/simple_test.m                          |     6 +-
 matlab/nfft/test_nfft1d.m                          |     2 +-
 matlab/nfft/test_nfft2d.m                          |     2 +-
 matlab/nfft/test_nfft3d.m                          |     2 +-
 matlab/nfsft/@f_hat/Makefile.in                    |   480 -
 matlab/nfsft/@f_hat/char.m                         |     6 +-
 matlab/nfsft/@f_hat/display.m                      |     6 +-
 matlab/nfsft/@f_hat/double.m                       |     6 +-
 matlab/nfsft/@f_hat/f_hat.m                        |     6 +-
 matlab/nfsft/@f_hat/{plus.m => get.m}              |    20 +-
 matlab/nfsft/@f_hat/minus.m                        |     6 +-
 matlab/nfsft/@f_hat/mtimes.m                       |     6 +-
 matlab/nfsft/@f_hat/mtimesr.m                      |     6 +-
 matlab/nfsft/@f_hat/norm.m                         |     6 +-
 matlab/nfsft/@f_hat/plus.m                         |     6 +-
 matlab/nfsft/@f_hat/subsasgn.m                     |     6 +-
 matlab/nfsft/@f_hat/subsref.m                      |     6 +-
 matlab/nfsft/Makefile.am                           |     2 +-
 matlab/nfsft/Makefile.in                           |   840 -
 matlab/nfsft/NFSFT_NORMALIZED.m                    |     6 +-
 matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m           |     6 +-
 matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m             |     6 +-
 matlab/nfsft/NFSFT_PRESERVE_F_HAT.m                |     6 +-
 matlab/nfsft/NFSFT_USE_DPT.m                       |     6 +-
 matlab/nfsft/NFSFT_USE_NDFT.m                      |     6 +-
 matlab/nfsft/cc.m                                  |     6 +-
 matlab/nfsft/f_hat_index.m                         |     6 +-
 matlab/nfsft/gl.m                                  |     6 +-
 matlab/nfsft/ndsft_adjoint.m                       |     6 +-
 matlab/nfsft/ndsft_trafo.m                         |     6 +-
 matlab/nfsft/nfsft_adjoint.m                       |     6 +-
 matlab/nfsft/nfsft_finalize.m                      |     6 +-
 matlab/nfsft/nfsft_forget.m                        |     6 +-
 matlab/nfsft/nfsft_get_f.m                         |     6 +-
 matlab/nfsft/nfsft_get_f_hat.m                     |     6 +-
 matlab/nfsft/nfsft_get_f_hat_linear.m              |     6 +-
 matlab/nfsft/nfsft_get_num_threads.m               |     4 +-
 matlab/nfsft/nfsft_get_x.m                         |     6 +-
 matlab/nfsft/nfsft_init.m                          |     6 +-
 matlab/nfsft/nfsft_init_advanced.m                 |     6 +-
 matlab/nfsft/nfsft_init_guru.m                     |     6 +-
 matlab/nfsft/nfsft_precompute.m                    |     6 +-
 matlab/nfsft/nfsft_precompute_x.m                  |     6 +-
 matlab/nfsft/nfsft_set_f.m                         |     6 +-
 matlab/nfsft/nfsft_set_f_hat.m                     |     6 +-
 matlab/nfsft/nfsft_set_f_hat_linear.m              |     6 +-
 matlab/nfsft/nfsft_set_x.m                         |     6 +-
 matlab/nfsft/nfsft_trafo.m                         |     6 +-
 matlab/nfsft/nfsftmex.c                            |    17 +-
 matlab/{nfft/nfft_set_x.m => nfsft/nfsftmex.m}     |    11 +-
 matlab/nfsft/projection.m                          |     6 +-
 matlab/nfsft/simple_test.m                         |     6 +-
 matlab/nfsoft/Contents.m                           |     4 +
 matlab/nfsoft/Makefile.am                          |    41 +
 .../nfsoft_get_num_threads.m}                      |    12 +-
 matlab/nfsoft/nfsoftmex.c                          |   156 +
 matlab/nnfft/Contents.m                            |    28 +
 matlab/{nfft => nnfft}/FFTW_ESTIMATE.m             |     4 +-
 matlab/{nfft => nnfft}/FFTW_MEASURE.m              |     4 +-
 matlab/{nfft => nnfft}/FFT_OUT_OF_PLACE.m          |     4 +-
 matlab/{nfft => nnfft}/FG_PSI.m                    |     4 +-
 matlab/nnfft/Makefile.am                           |    45 +
 matlab/{nfft => nnfft}/PRE_FG_PSI.m                |     4 +-
 matlab/{nfft => nnfft}/PRE_FULL_PSI.m              |     4 +-
 matlab/{nfft => nnfft}/PRE_LIN_PSI.m               |     4 +-
 matlab/{nfft => nnfft}/PRE_PHI_HUT.m               |     4 +-
 matlab/{nfft => nnfft}/PRE_PSI.m                   |     4 +-
 matlab/nnfft/nnfft.m                               |   437 +
 .../nfft_init_guru.m => nnfft/nnfft_display.m}     |    16 +-
 .../nfft_finalize.m => nnfft/nnfft_finalize.m}     |     8 +-
 matlab/{nfft/nfft_get_f.m => nnfft/nnfft_get_f.m}  |     8 +-
 .../nfft_get_f_hat.m => nnfft/nnfft_get_f_hat.m}   |     8 +-
 .../nnfft_get_num_threads.m}                       |     8 +-
 matlab/{nfft/nfft_get_x.m => nnfft/nnfft_get_x.m}  |     8 +-
 matlab/{nfft/nfft_init_1d.m => nnfft/nnfft_init.m} |    10 +-
 .../{nfft/nfft_get_f.m => nnfft/nnfft_init_1d.m}   |    12 +-
 .../{nfft/nfft_adjoint.m => nnfft/nnfft_init_2d.m} |    12 +-
 .../{nfft/nfft_adjoint.m => nnfft/nnfft_init_3d.m} |    12 +-
 .../nfft_init_guru.m => nnfft/nnfft_init_guru.m}   |    17 +-
 .../nnfft_precompute_psi.m}                        |    10 +-
 matlab/{nfft/nfft_set_f.m => nnfft/nnfft_set_f.m}  |     8 +-
 .../nfft_set_f_hat.m => nnfft/nnfft_set_f_hat.m}   |     8 +-
 matlab/{nfft/nfft_set_x.m => nnfft/nnfft_set_v.m}  |     9 +-
 matlab/{nfft/nfft_set_x.m => nnfft/nnfft_set_x.m}  |     8 +-
 matlab/{nfft/nfft_trafo.m => nnfft/nnfft_trafo.m}  |     8 +-
 .../nfft_trafo.m => nnfft/nnfft_trafo_direct.m}    |     9 +-
 matlab/{nfft/nfftmex.c => nnfft/nnfftmex.c}        |   304 +-
 matlab/{nfft/nfft_set_x.m => nnfft/nnfftmex.m}     |    10 +-
 matlab/nnfft/out.txt                               |    32 +
 matlab/nnfft/simple_test.m                         |    87 +
 matlab/{nfft => nnfft}/test_nfft1d.m               |     2 +-
 .../{nfft/test_nfft1d.m => nnfft/test_nnfft1d.m}   |    42 +-
 .../{nfft/test_nfft1d.m => nnfft/test_nnfft2d.m}   |    52 +-
 support/Makefile.in                                |   423 -
 examples/doxygen.c => support/copyright.txt        |    10 +-
 support/copyright_m4.txt                           |    15 +
 .../nfft_set_x.m => support/copyright_matlab.txt   |    10 +-
 support/copyright_matlab_single_line.txt           |     1 +
 support/fpt.dox                                    |   134 +
 support/mri.dox                                    |   117 +
 support/nfct.dox                                   |   181 +
 support/nfft.dox                                   |   370 +
 support/nfsft.dox                                  |   580 +
 support/nfsoft.dox                                 |   329 +
 support/nfst.dox                                   |   201 +
 support/nnfft.dox                                  |   176 +
 support/nsfft.dox                                  |   124 +
 support/rem.sed                                    |     0
 support/solver.dox                                 |    77 +
 support/toc.sed                                    |     0
 support/update_copyright.sh                        |    58 +
 tests/CUnit-Run.dtd                                |    36 +
 tests/CUnitAutomated-Results.xml                   |    34 +
 tests/Makefile.am                                  |    64 +-
 tests/Makefile.in                                  |   685 -
 tests/PrintVector.m                                |    54 +
 tests/bessel.c                                     |   166 +
 applications/doxygen.c => tests/bessel.h           |    10 +-
 tests/bspline.c                                    |  6370 ++++++
 applications/doxygen.c => tests/bspline.h          |    10 +-
 tests/check.c                                      |   140 +
 tests/check_bspline.m                              |    39 +
 tests/check_bspline.nb                             |   237 +
 tests/check_nfct.m                                 |    84 +
 tests/check_nfct.nb                                |  1185 +
 tests/check_nfft.c                                 |   283 -
 tests/check_nfft.h                                 |    92 -
 tests/check_nfft.m                                 |    84 +
 tests/check_nfft.nb                                |  1200 +
 tests/check_nfft_1d.c                              |   203 -
 tests/check_nfsft.c                                |  1355 ++
 tests/check_nfsft.m                                |    84 +
 tests/check_nfsft.nb                               |  1159 +
 tests/check_nfst.m                                 |    84 +
 tests/check_nfst.nb                                |  1175 +
 tests/checkall                                     |   Bin 0 -> 497396 bytes
 tests/cunit2junit.xsl                              |    86 +
 tests/data/Makefile.am                             |   197 +
 tests/data/nfct_1d_10_1.txt                        |    21 +
 tests/data/nfct_1d_10_10.txt                       |    39 +
 tests/data/nfct_1d_10_20.txt                       |    59 +
 tests/data/nfct_1d_10_50.txt                       |   119 +
 tests/data/nfct_1d_1_1.txt                         |    12 +
 tests/data/nfct_1d_1_10.txt                        |    30 +
 tests/data/nfct_1d_1_20.txt                        |    50 +
 tests/data/nfct_1d_1_50.txt                        |   110 +
 tests/data/nfct_1d_20_1.txt                        |    31 +
 tests/data/nfct_1d_20_10.txt                       |    49 +
 tests/data/nfct_1d_20_20.txt                       |    69 +
 tests/data/nfct_1d_20_50.txt                       |   129 +
 tests/data/nfct_1d_2_1.txt                         |    13 +
 tests/data/nfct_1d_2_10.txt                        |    31 +
 tests/data/nfct_1d_2_20.txt                        |    51 +
 tests/data/nfct_1d_2_50.txt                        |   111 +
 tests/data/nfct_1d_4_1.txt                         |    15 +
 tests/data/nfct_1d_4_10.txt                        |    33 +
 tests/data/nfct_1d_4_20.txt                        |    53 +
 tests/data/nfct_1d_4_50.txt                        |   113 +
 tests/data/nfct_1d_50_1.txt                        |    61 +
 tests/data/nfct_1d_50_10.txt                       |    79 +
 tests/data/nfct_1d_50_20.txt                       |    99 +
 tests/data/nfct_1d_50_50.txt                       |   159 +
 tests/data/nfct_2d_10_10_20.txt                    |   170 +
 tests/data/nfct_2d_10_10_50.txt                    |   260 +
 tests/data/nfct_2d_10_20_20.txt                    |   270 +
 tests/data/nfct_2d_10_20_50.txt                    |   360 +
 tests/data/nfct_2d_20_10_20.txt                    |   270 +
 tests/data/nfct_2d_20_10_50.txt                    |   360 +
 tests/data/nfct_2d_20_20_20.txt                    |   470 +
 tests/data/nfct_2d_20_20_50.txt                    |   560 +
 tests/data/nfct_3d_10_10_10_10.txt                 |  1051 +
 tests/data/nfct_adjoint_1d_10_1.txt                |    21 +
 tests/data/nfct_adjoint_1d_10_10.txt               |    39 +
 tests/data/nfct_adjoint_1d_10_20.txt               |    59 +
 tests/data/nfct_adjoint_1d_10_50.txt               |   119 +
 tests/data/nfct_adjoint_1d_1_1.txt                 |    12 +
 tests/data/nfct_adjoint_1d_1_10.txt                |    30 +
 tests/data/nfct_adjoint_1d_1_20.txt                |    50 +
 tests/data/nfct_adjoint_1d_1_50.txt                |   110 +
 tests/data/nfct_adjoint_1d_20_1.txt                |    31 +
 tests/data/nfct_adjoint_1d_20_10.txt               |    49 +
 tests/data/nfct_adjoint_1d_20_20.txt               |    69 +
 tests/data/nfct_adjoint_1d_20_50.txt               |   129 +
 tests/data/nfct_adjoint_1d_2_1.txt                 |    13 +
 tests/data/nfct_adjoint_1d_2_10.txt                |    31 +
 tests/data/nfct_adjoint_1d_2_20.txt                |    51 +
 tests/data/nfct_adjoint_1d_2_50.txt                |   111 +
 tests/data/nfct_adjoint_1d_4_1.txt                 |    15 +
 tests/data/nfct_adjoint_1d_4_10.txt                |    33 +
 tests/data/nfct_adjoint_1d_4_20.txt                |    53 +
 tests/data/nfct_adjoint_1d_4_50.txt                |   113 +
 tests/data/nfct_adjoint_1d_50_1.txt                |    61 +
 tests/data/nfct_adjoint_1d_50_10.txt               |    79 +
 tests/data/nfct_adjoint_1d_50_20.txt               |    99 +
 tests/data/nfct_adjoint_1d_50_50.txt               |   159 +
 tests/data/nfct_adjoint_2d_10_10_20.txt            |   170 +
 tests/data/nfct_adjoint_2d_10_10_50.txt            |   260 +
 tests/data/nfct_adjoint_2d_10_20_20.txt            |   270 +
 tests/data/nfct_adjoint_2d_10_20_50.txt            |   360 +
 tests/data/nfct_adjoint_2d_20_10_20.txt            |   270 +
 tests/data/nfct_adjoint_2d_20_10_50.txt            |   360 +
 tests/data/nfct_adjoint_2d_20_20_20.txt            |   470 +
 tests/data/nfct_adjoint_2d_20_20_50.txt            |   560 +
 tests/data/nfct_adjoint_3d_10_10_10_10.txt         |  1051 +
 tests/data/nfft_1d_10_1.txt                        |    21 +
 tests/data/nfft_1d_10_10.txt                       |    39 +
 tests/data/nfft_1d_10_20.txt                       |    59 +
 tests/data/nfft_1d_10_50.txt                       |   119 +
 tests/data/nfft_1d_1_1.txt                         |    12 +
 tests/data/nfft_1d_1_10.txt                        |    30 +
 tests/data/nfft_1d_1_20.txt                        |    50 +
 tests/data/nfft_1d_1_50.txt                        |   110 +
 tests/data/nfft_1d_20_1.txt                        |    31 +
 tests/data/nfft_1d_20_10.txt                       |    49 +
 tests/data/nfft_1d_20_20.txt                       |    69 +
 tests/data/nfft_1d_20_50.txt                       |   129 +
 tests/data/nfft_1d_2_1.txt                         |    13 +
 tests/data/nfft_1d_2_10.txt                        |    31 +
 tests/data/nfft_1d_2_20.txt                        |    51 +
 tests/data/nfft_1d_2_50.txt                        |   111 +
 tests/data/nfft_1d_4_1.txt                         |    15 +
 tests/data/nfft_1d_4_10.txt                        |    33 +
 tests/data/nfft_1d_4_20.txt                        |    53 +
 tests/data/nfft_1d_4_50.txt                        |   113 +
 tests/data/nfft_1d_50_1.txt                        |    61 +
 tests/data/nfft_1d_50_10.txt                       |    79 +
 tests/data/nfft_1d_50_20.txt                       |    99 +
 tests/data/nfft_1d_50_50.txt                       |   159 +
 tests/data/nfft_2d_10_10_20.txt                    |   170 +
 tests/data/nfft_2d_10_10_50.txt                    |   260 +
 tests/data/nfft_2d_10_20_20.txt                    |   270 +
 tests/data/nfft_2d_10_20_50.txt                    |   360 +
 tests/data/nfft_2d_20_10_20.txt                    |   270 +
 tests/data/nfft_2d_20_10_50.txt                    |   360 +
 tests/data/nfft_2d_20_20_20.txt                    |   470 +
 tests/data/nfft_2d_20_20_50.txt                    |   560 +
 tests/data/nfft_3d_10_10_10_10.txt                 |  1051 +
 tests/data/nfft_adjoint_1d_10_1.txt                |    21 +
 tests/data/nfft_adjoint_1d_10_10.txt               |    39 +
 tests/data/nfft_adjoint_1d_10_20.txt               |    59 +
 tests/data/nfft_adjoint_1d_10_50.txt               |   119 +
 tests/data/nfft_adjoint_1d_1_1.txt                 |    12 +
 tests/data/nfft_adjoint_1d_1_10.txt                |    30 +
 tests/data/nfft_adjoint_1d_1_20.txt                |    50 +
 tests/data/nfft_adjoint_1d_1_50.txt                |   110 +
 tests/data/nfft_adjoint_1d_20_1.txt                |    31 +
 tests/data/nfft_adjoint_1d_20_10.txt               |    49 +
 tests/data/nfft_adjoint_1d_20_20.txt               |    69 +
 tests/data/nfft_adjoint_1d_20_50.txt               |   129 +
 tests/data/nfft_adjoint_1d_2_1.txt                 |    13 +
 tests/data/nfft_adjoint_1d_2_10.txt                |    31 +
 tests/data/nfft_adjoint_1d_2_20.txt                |    51 +
 tests/data/nfft_adjoint_1d_2_50.txt                |   111 +
 tests/data/nfft_adjoint_1d_4_1.txt                 |    15 +
 tests/data/nfft_adjoint_1d_4_10.txt                |    33 +
 tests/data/nfft_adjoint_1d_4_20.txt                |    53 +
 tests/data/nfft_adjoint_1d_4_50.txt                |   113 +
 tests/data/nfft_adjoint_1d_50_1.txt                |    61 +
 tests/data/nfft_adjoint_1d_50_10.txt               |    79 +
 tests/data/nfft_adjoint_1d_50_20.txt               |    99 +
 tests/data/nfft_adjoint_1d_50_50.txt               |   159 +
 tests/data/nfft_adjoint_2d_10_10_20.txt            |   170 +
 tests/data/nfft_adjoint_2d_10_10_50.txt            |   260 +
 tests/data/nfft_adjoint_2d_10_20_20.txt            |   270 +
 tests/data/nfft_adjoint_2d_10_20_50.txt            |   360 +
 tests/data/nfft_adjoint_2d_20_10_20.txt            |   270 +
 tests/data/nfft_adjoint_2d_20_10_50.txt            |   360 +
 tests/data/nfft_adjoint_2d_20_20_20.txt            |   470 +
 tests/data/nfft_adjoint_2d_20_20_50.txt            |   560 +
 tests/data/nfft_adjoint_3d_10_10_10_10.txt         |  1051 +
 tests/data/nfst_1d_10_1.txt                        |    20 +
 tests/data/nfst_1d_10_10.txt                       |    38 +
 tests/data/nfst_1d_10_2.txt                        |    22 +
 tests/data/nfst_1d_10_20.txt                       |    58 +
 tests/data/nfst_1d_10_50.txt                       |   118 +
 tests/data/nfst_1d_20_1.txt                        |    30 +
 tests/data/nfst_1d_20_10.txt                       |    48 +
 tests/data/nfst_1d_20_2.txt                        |    32 +
 tests/data/nfst_1d_20_20.txt                       |    68 +
 tests/data/nfst_1d_20_50.txt                       |   128 +
 tests/data/nfst_1d_2_1.txt                         |    12 +
 tests/data/nfst_1d_2_10.txt                        |    30 +
 tests/data/nfst_1d_2_2.txt                         |    14 +
 tests/data/nfst_1d_2_20.txt                        |    50 +
 tests/data/nfst_1d_2_50.txt                        |   110 +
 tests/data/nfst_1d_4_1.txt                         |    14 +
 tests/data/nfst_1d_4_10.txt                        |    32 +
 tests/data/nfst_1d_4_2.txt                         |    16 +
 tests/data/nfst_1d_4_20.txt                        |    52 +
 tests/data/nfst_1d_4_50.txt                        |   112 +
 tests/data/nfst_1d_50_1.txt                        |    60 +
 tests/data/nfst_1d_50_10.txt                       |    78 +
 tests/data/nfst_1d_50_2.txt                        |    62 +
 tests/data/nfst_1d_50_20.txt                       |    98 +
 tests/data/nfst_1d_50_50.txt                       |   158 +
 tests/data/nfst_2d_10_10_20.txt                    |   151 +
 tests/data/nfst_2d_10_10_50.txt                    |   241 +
 tests/data/nfst_2d_10_20_20.txt                    |   241 +
 tests/data/nfst_2d_10_20_50.txt                    |   331 +
 tests/data/nfst_2d_20_10_20.txt                    |   241 +
 tests/data/nfst_2d_20_10_50.txt                    |   331 +
 tests/data/nfst_2d_20_20_20.txt                    |   431 +
 tests/data/nfst_2d_20_20_50.txt                    |   521 +
 tests/data/nfst_3d_10_10_10_10.txt                 |   780 +
 tests/data/nfst_adjoint_1d_10_1.txt                |    20 +
 tests/data/nfst_adjoint_1d_10_10.txt               |    38 +
 tests/data/nfst_adjoint_1d_10_20.txt               |    58 +
 tests/data/nfst_adjoint_1d_10_50.txt               |   118 +
 tests/data/nfst_adjoint_1d_20_1.txt                |    30 +
 tests/data/nfst_adjoint_1d_20_10.txt               |    48 +
 tests/data/nfst_adjoint_1d_20_20.txt               |    68 +
 tests/data/nfst_adjoint_1d_20_50.txt               |   128 +
 tests/data/nfst_adjoint_1d_2_1.txt                 |    12 +
 tests/data/nfst_adjoint_1d_2_10.txt                |    30 +
 tests/data/nfst_adjoint_1d_2_20.txt                |    50 +
 tests/data/nfst_adjoint_1d_2_50.txt                |   110 +
 tests/data/nfst_adjoint_1d_4_1.txt                 |    14 +
 tests/data/nfst_adjoint_1d_4_10.txt                |    32 +
 tests/data/nfst_adjoint_1d_4_20.txt                |    52 +
 tests/data/nfst_adjoint_1d_4_50.txt                |   112 +
 tests/data/nfst_adjoint_1d_50_1.txt                |    60 +
 tests/data/nfst_adjoint_1d_50_10.txt               |    78 +
 tests/data/nfst_adjoint_1d_50_20.txt               |    98 +
 tests/data/nfst_adjoint_1d_50_50.txt               |   158 +
 tests/data/nfst_adjoint_2d_10_10_20.txt            |   151 +
 tests/data/nfst_adjoint_2d_10_10_50.txt            |   241 +
 tests/data/nfst_adjoint_2d_10_20_20.txt            |   241 +
 tests/data/nfst_adjoint_2d_10_20_50.txt            |   331 +
 tests/data/nfst_adjoint_2d_20_10_20.txt            |   241 +
 tests/data/nfst_adjoint_2d_20_10_50.txt            |   331 +
 tests/data/nfst_adjoint_2d_20_20_20.txt            |   431 +
 tests/data/nfst_adjoint_2d_20_20_50.txt            |   521 +
 tests/data/nfst_adjoint_3d_10_10_10_10.txt         |   780 +
 tests/nfct.c                                       |  1263 ++
 tests/nfct.h                                       |    46 +
 tests/nfft.c                                       |  1490 ++
 tests/nfft.h                                       |    48 +
 tests/nfst.c                                       |  1255 ++
 tests/nfst.h                                       |    46 +
 util/Makefile.am                                   |    21 -
 util/Makefile.in                                   |   580 -
 util/util.c                                        |  1488 --
 651 files changed, 66198 insertions(+), 90593 deletions(-)

diff --git a/3rdparty/Makefile.in b/3rdparty/Makefile.in
deleted file mode 100644
index 52c2a8e..0000000
--- a/3rdparty/Makefile.in
+++ /dev/null
@@ -1,679 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = 3rdparty
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-lib3rdparty_la_DEPENDENCIES = cstripack/libcstripack.la
-am_lib3rdparty_la_OBJECTS =
-lib3rdparty_la_OBJECTS = $(am_lib3rdparty_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(lib3rdparty_la_SOURCES)
-DIST_SOURCES = $(lib3rdparty_la_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = cstripack .
-noinst_LTLIBRARIES = lib3rdparty.la
-lib3rdparty_la_SOURCES = 
-lib3rdparty_la_LIBADD = cstripack/libcstripack.la
-EXTRA_DIST = README
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu 3rdparty/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu 3rdparty/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-lib3rdparty.la: $(lib3rdparty_la_OBJECTS) $(lib3rdparty_la_DEPENDENCIES) $(EXTRA_lib3rdparty_la_DEPENDENCIES) 
-	$(LINK)  $(lib3rdparty_la_OBJECTS) $(lib3rdparty_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(LTLIBRARIES)
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
-	cscopelist-recursive ctags-recursive install-am install-strip \
-	tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \
-	ctags-recursive distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/3rdparty/cstripack/Makefile.in b/3rdparty/cstripack/Makefile.in
deleted file mode 100644
index 30e9115..0000000
--- a/3rdparty/cstripack/Makefile.in
+++ /dev/null
@@ -1,556 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = 3rdparty/cstripack
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libcstripack_la_DEPENDENCIES =
-am_libcstripack_la_OBJECTS = cstripack.lo
-libcstripack_la_OBJECTS = $(am_libcstripack_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libcstripack_la_SOURCES)
-DIST_SOURCES = $(libcstripack_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-HEADERS = $(noinst_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-noinst_LTLIBRARIES = libcstripack.la
-libcstripack_la_SOURCES = cstripack.c
-libcstripack_la_LIBADD = 
-noinst_HEADERS = cstripack.h
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu 3rdparty/cstripack/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu 3rdparty/cstripack/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libcstripack.la: $(libcstripack_la_OBJECTS) $(libcstripack_la_DEPENDENCIES) $(EXTRA_libcstripack_la_DEPENDENCIES) 
-	$(LINK)  $(libcstripack_la_OBJECTS) $(libcstripack_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cstripack.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/3rdparty/cstripack/cstripack.c b/3rdparty/cstripack/cstripack.c
index d0c5baa..8c35229 100644
--- a/3rdparty/cstripack/cstripack.c
+++ b/3rdparty/cstripack/cstripack.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/3rdparty/cstripack/cstripack.h b/3rdparty/cstripack/cstripack.h
index 7ef8d1f..b6da9ea 100644
--- a/3rdparty/cstripack/cstripack.h
+++ b/3rdparty/cstripack/cstripack.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/CONVENTIONS b/CONVENTIONS
new file mode 100644
index 0000000..af27c52
--- /dev/null
+++ b/CONVENTIONS
@@ -0,0 +1,25 @@
+Code conventions used internally by NFFT3 (not in API):
+
+   Common names:
+
+   R          : real type, (typically fftw_real)
+   E          : real type for local variables (possibly extra precision)
+   C          : complex type
+   A          : assert
+   CK         : check
+   X(...)     : used for mangling of external names (see below)
+   Y(...)     : used for mangling of external names (see below)
+   FFTW(...)  : used for mangling of FFTW API names
+
+NAME MANGLING: use Y(foo) for external names instead of nfft_foo.
+    Y(foo) expands to nfftf_foo, nfftl_foo, or nfft_foo, depending
+    on the precision.
+    
+    X(foo) also expands to the corresponding prefix, but is local 
+    to each module. I.e. X(foo) will expand to nfct_foo in the 
+    NFCT module, but Y(foo) will always be nfft_foo.
+    
+    FFTW(foo) expands to fftw_foo.
+    
+    Names that are not exported do not need to be mangled.
+   
\ No newline at end of file
diff --git a/ChangeLog b/ChangeLog
index d872da4..38f0ae9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 This file contains the version history for NFFT 3.x.x. 
 
+Changes in version 3.3.0:
+  - Added unit tests for some parts of the library. They are invoked via make
+    check, but only if the CUnit framework was found on the build host.
+
+Changes in version 3.2.4
+  - Fixed an issue when linker flags were not set correctly.
+
 Changes in version 3.2.3
   - Added a workaround for an internal compiler error occuring with gcc 4.7.1
     in kernel/mri
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index 6e90e07..0000000
--- a/INSTALL
+++ /dev/null
@@ -1,370 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
-Inc.
-
-   Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.  This file is offered as-is,
-without warranty of any kind.
-
-Basic Installation
-==================
-
-   Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package.  The following
-more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.  Some packages provide this
-`INSTALL' file but do not implement all of the features documented
-below.  The lack of an optional feature in a given package is not
-necessarily a bug.  More recommendations for GNU packages can be found
-in *note Makefile Conventions: (standards)Makefile Conventions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You need `configure.ac' if
-you want to change it or regenerate `configure' using a newer version
-of `autoconf'.
-
-   The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.
-
-     Running `configure' might take a while.  While running, it prints
-     some messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package, generally using the just-built uninstalled binaries.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.  When installing into a prefix owned by root, it is
-     recommended that the package be configured and built as a regular
-     user, and only the `make install' phase executed with root
-     privileges.
-
-  5. Optionally, type `make installcheck' to repeat any self-tests, but
-     this time using the binaries in their final installed location.
-     This target does not install anything.  Running this target as a
-     regular user, particularly if the prior `make install' required
-     root privileges, verifies that the installation completed
-     correctly.
-
-  6. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-  7. Often, you can also type `make uninstall' to remove the installed
-     files again.  In practice, not all packages have tested that
-     uninstallation works correctly, even though it is required by the
-     GNU Coding Standards.
-
-  8. Some packages, particularly those that use Automake, provide `make
-     distcheck', which can by used by developers to test that all other
-     targets like `make install' and `make uninstall' work correctly.
-     This target is generally not run by end users.
-
-Compilers and Options
-=====================
-
-   Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  Run `./configure --help'
-for details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you can use GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.  This
-is known as a "VPATH" build.
-
-   With a non-GNU `make', it is safer to compile the package for one
-architecture at a time in the source code directory.  After you have
-installed the package for one architecture, use `make distclean' before
-reconfiguring for another architecture.
-
-   On MacOS X 10.5 and later systems, you can create libraries and
-executables that work on multiple system types--known as "fat" or
-"universal" binaries--by specifying multiple `-arch' options to the
-compiler but only a single `-arch' option to the preprocessor.  Like
-this:
-
-     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-                 CPP="gcc -E" CXXCPP="g++ -E"
-
-   This is not guaranteed to produce working output in all cases, you
-may have to build one architecture at a time and combine the results
-using the `lipo' tool if you have problems.
-
-Installation Names
-==================
-
-   By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX', where PREFIX must be an
-absolute file name.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.  In general, the
-default for these options is expressed in terms of `${prefix}', so that
-specifying just `--prefix' will affect all of the other directory
-specifications that were not explicitly provided.
-
-   The most portable way to affect installation locations is to pass the
-correct locations to `configure'; however, many packages provide one or
-both of the following shortcuts of passing variable assignments to the
-`make install' command line to change installation locations without
-having to reconfigure or recompile.
-
-   The first method involves providing an override variable for each
-affected directory.  For example, `make install
-prefix=/alternate/directory' will choose an alternate location for all
-directory configuration variables that were expressed in terms of
-`${prefix}'.  Any directories that were specified during `configure',
-but not in terms of `${prefix}', must each be overridden at install
-time for the entire installation to be relocated.  The approach of
-makefile variable overrides for each directory variable is required by
-the GNU Coding Standards, and ideally causes no recompilation.
-However, some platforms have known limitations with the semantics of
-shared libraries that end up requiring recompilation when using this
-method, particularly noticeable in packages that use GNU Libtool.
-
-   The second method involves providing the `DESTDIR' variable.  For
-example, `make install DESTDIR=/alternate/directory' will prepend
-`/alternate/directory' before all installation names.  The approach of
-`DESTDIR' overrides is not required by the GNU Coding Standards, and
-does not work on platforms that have drive letters.  On the other hand,
-it does better at avoiding recompilation issues, and works well even
-when some directory options were not specified in terms of `${prefix}'
-at `configure' time.
-
-Optional Features
-=================
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-   Some packages offer the ability to configure how verbose the
-execution of `make' will be.  For these packages, running `./configure
---enable-silent-rules' sets the default to minimal output, which can be
-overridden with `make V=1'; while running `./configure
---disable-silent-rules' sets the default to verbose, which can be
-overridden with `make V=0'.
-
-Particular systems
-==================
-
-   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
-CC is not installed, it is recommended to use the following options in
-order to use an ANSI C compiler:
-
-     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
-
-and if that doesn't work, install pre-built binaries of GCC for HP-UX.
-
-   HP-UX `make' updates targets which have the same time stamps as
-their prerequisites, which makes it generally unusable when shipped
-generated files such as `configure' are involved.  Use GNU `make'
-instead.
-
-   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
-parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
-a workaround.  If GNU CC is not installed, it is therefore recommended
-to try
-
-     ./configure CC="cc"
-
-and if that doesn't work, try
-
-     ./configure CC="cc -nodtk"
-
-   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
-directory contains several dysfunctional programs; working variants of
-these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
-in your `PATH', put it _after_ `/usr/bin'.
-
-   On Haiku, software installed for all users goes in `/boot/common',
-not `/usr/local'.  It is recommended to use the following options:
-
-     ./configure --prefix=/boot/common
-
-Specifying the System Type
-==========================
-
-   There may be some features `configure' cannot figure out
-automatically, but needs to determine by the type of machine the package
-will run on.  Usually, assuming the package is built to be run on the
-_same_ architectures, `configure' can figure that out, but if it prints
-a message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS
-     KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-   Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf limitation.  Until the limitation is lifted, you can use
-this workaround:
-
-     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-`configure' Invocation
-======================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
-     Print a summary of all of the options to `configure', and exit.
-
-`--help=short'
-`--help=recursive'
-     Print a summary of the options unique to this package's
-     `configure', and exit.  The `short' variant lists options used
-     only in the top level, while the `recursive' variant lists options
-     also present in any nested packages.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--prefix=DIR'
-     Use DIR as the installation prefix.  *note Installation Names::
-     for more details, including other options available for fine-tuning
-     the installation locations.
-
-`--no-create'
-`-n'
-     Run the configure checks, but stop before creating any output
-     files.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
diff --git a/Makefile.am b/Makefile.am
index 47589c7..135cf92 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,67 +1,83 @@
-# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
-
+# $Id$
 LIBTOOL_DEPS = @LIBTOOL_DEPS@
 
 libtool: $(LIBTOOL_DEPS)
 	$(SHELL) ./config.status --recheck
 
 # Subdirectories
-DIST_SUBDIRS=3rdparty include util kernel . tests examples applications matlab support doxygen
+DIST_SUBDIRS=3rdparty include kernel . tests examples applications matlab support doxygen
+
+if HAVE_EXAMPLES
+  EXAMPLE_DIRS=examples
+else
+  EXAMPLE_DIRS=
+endif
+
+if HAVE_APPLICATIONS
+  APPLICATION_DIRS=applications
+else
+  APPLICATION_DIRS=
+endif
 
 if HAVE_MATLAB
   MATLAB_DIRS=matlab
-  LIBNFFT3_MATLAB_LA=libnfft3_matlab.la
+  LIBNFFT3_MATLAB_LA=libnfft3 at PREC_SUFFIX@_matlab.la
 else
   MATLAB_DIRS=
   LIBNFFT3_MATLAB_LA=
 endif
 
 if HAVE_THREADS
-  LIBNFFT3_THREADS_LA = libnfft3_threads.la
+  LIBNFFT3_THREADS_LA = libnfft3 at PREC_SUFFIX@_threads.la
 else
   LIBNFFT3_THREADS_LA =
 endif
 
-SUBDIRS= 3rdparty include util kernel . tests examples applications $(MATLAB_DIRS)
+SUBDIRS= 3rdparty include kernel . tests $(EXAMPLE_DIRS) $(APPLICATION_DIRS) $(MATLAB_DIRS)
 
-lib_LTLIBRARIES = libnfft3.la $(LIBNFFT3_THREADS_LA)
+lib_LTLIBRARIES = libnfft3 at PREC_SUFFIX@.la $(LIBNFFT3_THREADS_LA)
 noinst_LTLIBRARIES = $(LIBNFFT3_MATLAB_LA)
 
-libnfft3_la_SOURCES =
-libnfft3_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @fftw3_LIBS@ -lm
-libnfft3_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
+libnfft3 at PREC_SUFFIX@_la_SOURCES =
+libnfft3 at PREC_SUFFIX@_la_LIBADD = 3rdparty/lib3rdparty.la kernel/libkernel.la @fftw3_LIBS@ -lm
+libnfft3 at PREC_SUFFIX@_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
 
 if HAVE_THREADS
-libnfft3_threads_la_SOURCES =
-libnfft3_threads_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @fftw3_threads_LIBS@ -lm
-libnfft3_threads_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
+libnfft3 at PREC_SUFFIX@_threads_la_SOURCES =
+libnfft3 at PREC_SUFFIX@_threads_la_LIBADD = 3rdparty/lib3rdparty.la kernel/libkernel_threads.la @fftw3_threads_LIBS@ -lm
+libnfft3 at PREC_SUFFIX@_threads_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
 if HAVE_OPENMP
-  libnfft3_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+  libnfft3 at PREC_SUFFIX@_threads_la_CFLAGS = $(OPENMP_CFLAGS)
 endif
 endif
 
 if HAVE_MATLAB
-  libnfft3_matlab_la_SOURCES =
+  libnfft3 at PREC_SUFFIX@_matlab_la_SOURCES =
 if HAVE_MATLAB_THREADS
-    libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @matlab_fftw3_LIBS@ -lm
+    libnfft3 at PREC_SUFFIX@_matlab_la_LIBADD = 3rdparty/lib3rdparty.la kernel/libkernel_threads.la @matlab_fftw3_LIBS@ -lm
 else
-    libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @matlab_fftw3_LIBS@ -lm
+    libnfft3 at PREC_SUFFIX@_matlab_la_LIBADD = 3rdparty/lib3rdparty.la kernel/libkernel.la @matlab_fftw3_LIBS@ -lm
 endif
-  libnfft3_matlab_la_LDFLAGS = @matlab_fftw3_LDFLAGS@
+  libnfft3 at PREC_SUFFIX@_matlab_la_LDFLAGS = @matlab_fftw3_LDFLAGS@
 endif
 
 EXTRA_DIST = bootstrap.sh doxygen.dox nfft3.pc.in
 
-pkgconfigdir=$(libdir)/pkgconfig
-pkgconfig_DATA = nfft3.pc
+nfft3 at PREC_SUFFIX@.pc: nfft3.pc
+	cp -f nfft3.pc nfft3 at PREC_SUFFIX@.pc
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = nfft3 at PREC_SUFFIX@.pc
 
-#install-data-hook:
-#	$(MKDIR_P) $(docdir)
-#	cp -R $(srcdir)/doc/* $(docdir)/
-#	chmod -R u+rwX,g+rX,g-w,o+rX,o-w $(docdir)
+install-data-hook:
+	chmod u+wX $(prefix)
+	$(install_sh) -d $(datarootdir)
+	chmod -R u+wX $(datarootdir)
+	$(install_sh) -d $(docdir)
+	chmod -Rf u+rwX $(srcdir)/doc
+	cp -R $(srcdir)/doc/* $(docdir)/
 
-#uninstall-hook:
-#	rm -Rf $(docdir)
+uninstall-hook:
+	rm -Rf $(docdir)
 
 maintainer-clean-local:
 	rm -f $(srcdir)/doc/api/html/*.html
@@ -76,17 +92,32 @@ maintainer-clean-local:
 	rm -f $(srcdir)/doc/api/latex/Makefile
 
 dist-hook:
-	echo `pwd`
-	chmod -Rf u+rwX $(srcdir)/doc
-	sed 's/^ \* \\section \([a-zA-Z0-9_]*\) \(.*\)/<ul><li><a href="#\1">\2<\/a><\/li><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
-	sed 's/^ \* \\subsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
-	sed 's/^ \* \\subsubsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
-	doxygen $(builddir)/doxygen/doxygen.Doxyfile
-	rm -f $(srcdir)/doc/api/html/toc.txt
-	$(srcdir)/support/rem.sed < $(srcdir)/doc/api/html/index.html > $(srcdir)/doc/api/html/index.html.new
-	mv $(srcdir)/doc/api/html/index.html.new $(srcdir)/doc/api/html/index.html
-	cp -R $(srcdir)/doc $(distdir)/
-	rm -Rf `find $(distdir) -name .svn -type d`
+	if test ! -f "$(srcdir)/doc/tutorial/tutorial.pdf"; then \
+		chmod -Rf u+rwX $(srcdir)/doc; \
+		sed 's/^ \* \\section \([a-zA-Z0-9_]*\) \(.*\)/<ul><li><a href="#\1">\2<\/a><\/li><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt; \
+		sed 's/^ \* \\subsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt; \
+		sed 's/^ \* \\subsubsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt; \
+		doxygen $(builddir)/doxygen/doxygen.Doxyfile; \
+		rm -f $(srcdir)/doc/api/html/toc.txt; \
+		$(srcdir)/support/rem.sed < $(srcdir)/doc/api/html/index.html > $(srcdir)/doc/api/html/index.html.new; \
+		mv $(srcdir)/doc/api/html/index.html.new $(srcdir)/doc/api/html/index.html; \
+		cp -R $(srcdir)/doc $(distdir)/; \
+		rm -Rf `find $(distdir) -name .svn -type d`; \
+		pwd; \
+		echo $(distdir); \
+		echo $(top_srcdir); \
+		echo $(srcdir); \
+		(cd $(distdir)/doc/tutorial && pdflatex paper.tex); \
+		mv $(distdir)/doc/tutorial/paper.pdf $(distdir)/doc/tutorial.pdf; \
+		rm -Rf $(distdir)/doc/tutorial/*; \
+		mv $(distdir)/doc/tutorial.pdf $(distdir)/doc/tutorial/tutorial.pdf; \
+		rm -Rf $(distdir)/doc/logo; \
+		rm -Rf $(distdir)/doc/api/latex; \
+	else \
+		cp -R $(srcdir)/doc $(distdir)/; \
+	fi
+
+doc:
 
 # Flags to be passed to aclocal.
 ACLOCAL_AMFLAGS = -I m4
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index e048ffe..0000000
--- a/Makefile.in
+++ /dev/null
@@ -1,1050 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
-
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/nfft3.pc.in \
-	$(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \
-	$(top_srcdir)/config/config.sub \
-	$(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
-	$(top_srcdir)/config/missing $(top_srcdir)/configure AUTHORS \
-	COPYING ChangeLog INSTALL NEWS config/compile \
-	config/config.guess config/config.sub config/depcomp \
-	config/install-sh config/ltmain.sh config/missing
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno config.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES = nfft3.pc
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)"
-LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
-libnfft3_la_DEPENDENCIES = 3rdparty/lib3rdparty.la util/libutil.la \
-	kernel/libkernel.la
-am_libnfft3_la_OBJECTS =
-libnfft3_la_OBJECTS = $(am_libnfft3_la_OBJECTS)
-libnfft3_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(libnfft3_la_LDFLAGS) $(LDFLAGS) -o $@
- at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_DEPENDENCIES = 3rdparty/lib3rdparty.la \
- at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE@	util/libutil.la \
- at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE@	kernel/libkernel.la
- at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_DEPENDENCIES = 3rdparty/lib3rdparty.la \
- at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE@	util/libutil_threads.la \
- at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE@	kernel/libkernel_threads.la
-am_libnfft3_matlab_la_OBJECTS =
-libnfft3_matlab_la_OBJECTS = $(am_libnfft3_matlab_la_OBJECTS)
-libnfft3_matlab_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(libnfft3_matlab_la_LDFLAGS) $(LDFLAGS) -o $@
- at HAVE_MATLAB_TRUE@am_libnfft3_matlab_la_rpath =
- at HAVE_THREADS_TRUE@libnfft3_threads_la_DEPENDENCIES =  \
- at HAVE_THREADS_TRUE@	3rdparty/lib3rdparty.la \
- at HAVE_THREADS_TRUE@	util/libutil_threads.la \
- at HAVE_THREADS_TRUE@	kernel/libkernel_threads.la
-am_libnfft3_threads_la_OBJECTS =
-libnfft3_threads_la_OBJECTS = $(am_libnfft3_threads_la_OBJECTS)
-libnfft3_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(libnfft3_threads_la_CFLAGS) $(CFLAGS) \
-	$(libnfft3_threads_la_LDFLAGS) $(LDFLAGS) -o $@
- at HAVE_THREADS_TRUE@am_libnfft3_threads_la_rpath = -rpath $(libdir)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libnfft3_la_SOURCES) $(libnfft3_matlab_la_SOURCES) \
-	$(libnfft3_threads_la_SOURCES)
-DIST_SOURCES = $(libnfft3_la_SOURCES) $(libnfft3_matlab_la_SOURCES) \
-	$(libnfft3_threads_la_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-DATA = $(pkgconfig_DATA)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	cscope distdir dist dist-all distcheck
-ETAGS = etags
-CTAGS = ctags
-CSCOPE = cscope
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  if test -d "$(distdir)"; then \
-    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-      && rm -rf "$(distdir)" \
-      || { sleep 5 && rm -rf "$(distdir)"; }; \
-  else :; fi
-am__post_remove_distdir = $(am__remove_distdir)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-DIST_TARGETS = dist-gzip
-distuninstallcheck_listfiles = find . -type f -print
-am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
-  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
-distcleancheck_listfiles = find . -type f -print
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-
-# Subdirectories
-DIST_SUBDIRS = 3rdparty include util kernel . tests examples applications matlab support doxygen
- at HAVE_MATLAB_FALSE@MATLAB_DIRS = 
- at HAVE_MATLAB_TRUE@MATLAB_DIRS = matlab
- at HAVE_MATLAB_FALSE@LIBNFFT3_MATLAB_LA = 
- at HAVE_MATLAB_TRUE@LIBNFFT3_MATLAB_LA = libnfft3_matlab.la
- at HAVE_THREADS_FALSE@LIBNFFT3_THREADS_LA = 
- at HAVE_THREADS_TRUE@LIBNFFT3_THREADS_LA = libnfft3_threads.la
-SUBDIRS = 3rdparty include util kernel . tests examples applications $(MATLAB_DIRS)
-lib_LTLIBRARIES = libnfft3.la $(LIBNFFT3_THREADS_LA)
-noinst_LTLIBRARIES = $(LIBNFFT3_MATLAB_LA)
-libnfft3_la_SOURCES = 
-libnfft3_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @fftw3_LIBS@ -lm
-libnfft3_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
- at HAVE_THREADS_TRUE@libnfft3_threads_la_SOURCES = 
- at HAVE_THREADS_TRUE@libnfft3_threads_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @fftw3_threads_LIBS@ -lm
- at HAVE_THREADS_TRUE@libnfft3_threads_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @fftw3_LDFLAGS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libnfft3_threads_la_CFLAGS = $(OPENMP_CFLAGS)
- at HAVE_MATLAB_TRUE@libnfft3_matlab_la_SOURCES = 
- at HAVE_MATLAB_THREADS_FALSE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil.la kernel/libkernel.la @matlab_fftw3_LIBS@ -lm
- at HAVE_MATLAB_THREADS_TRUE@@HAVE_MATLAB_TRUE at libnfft3_matlab_la_LIBADD = 3rdparty/lib3rdparty.la util/libutil_threads.la kernel/libkernel_threads.la @matlab_fftw3_LIBS@ -lm
- at HAVE_MATLAB_TRUE@libnfft3_matlab_la_LDFLAGS = @matlab_fftw3_LDFLAGS@
-EXTRA_DIST = bootstrap.sh doxygen.dox nfft3.pc.in
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = nfft3.pc
-
-# Flags to be passed to aclocal.
-ACLOCAL_AMFLAGS = -I m4
-all: all-recursive
-
-.SUFFIXES:
-am--refresh: Makefile
-	@:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
-	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    echo ' $(SHELL) ./config.status'; \
-	    $(SHELL) ./config.status;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	$(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	$(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-$(am__aclocal_m4_deps):
-nfft3.pc: $(top_builddir)/config.status $(srcdir)/nfft3.pc.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-	@$(NORMAL_INSTALL)
-	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
-	list2=; for p in $$list; do \
-	  if test -f $$p; then \
-	    list2="$$list2 $$p"; \
-	  else :; fi; \
-	done; \
-	test -z "$$list2" || { \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
-	}
-
-uninstall-libLTLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
-	done
-
-clean-libLTLIBRARIES:
-	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-	@list='$(lib_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libnfft3.la: $(libnfft3_la_OBJECTS) $(libnfft3_la_DEPENDENCIES) $(EXTRA_libnfft3_la_DEPENDENCIES) 
-	$(libnfft3_la_LINK) -rpath $(libdir) $(libnfft3_la_OBJECTS) $(libnfft3_la_LIBADD) $(LIBS)
-libnfft3_matlab.la: $(libnfft3_matlab_la_OBJECTS) $(libnfft3_matlab_la_DEPENDENCIES) $(EXTRA_libnfft3_matlab_la_DEPENDENCIES) 
-	$(libnfft3_matlab_la_LINK) $(am_libnfft3_matlab_la_rpath) $(libnfft3_matlab_la_OBJECTS) $(libnfft3_matlab_la_LIBADD) $(LIBS)
-libnfft3_threads.la: $(libnfft3_threads_la_OBJECTS) $(libnfft3_threads_la_DEPENDENCIES) $(EXTRA_libnfft3_threads_la_DEPENDENCIES) 
-	$(libnfft3_threads_la_LINK) $(am_libnfft3_threads_la_rpath) $(libnfft3_threads_la_OBJECTS) $(libnfft3_threads_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-distclean-libtool:
-	-rm -f libtool config.lt
-install-pkgconfigDATA: $(pkgconfig_DATA)
-	@$(NORMAL_INSTALL)
-	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
-	done
-
-uninstall-pkgconfigDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscope: cscope.files
-	test ! -s cscope.files \
-	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
-
-clean-cscope:
-	-rm -f cscope.files
-
-cscope.files: clean-cscope cscopelist-recursive cscopelist
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
-
-distdir: $(DISTFILES)
-	$(am__remove_distdir)
-	test -d "$(distdir)" || mkdir "$(distdir)"
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-	$(MAKE) $(AM_MAKEFLAGS) \
-	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
-	  dist-hook
-	-test -n "$(am__skip_mode_fix)" \
-	|| find "$(distdir)" -type d ! -perm -755 \
-		-exec chmod u+rwx,go+rx {} \; -o \
-	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
-	|| chmod -R a+r "$(distdir)"
-dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__post_remove_distdir)
-
-dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
-	$(am__post_remove_distdir)
-
-dist-lzip: distdir
-	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
-	$(am__post_remove_distdir)
-
-dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
-	$(am__post_remove_distdir)
-
-dist-tarZ: distdir
-	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__post_remove_distdir)
-
-dist-shar: distdir
-	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__post_remove_distdir)
-
-dist-zip: distdir
-	-rm -f $(distdir).zip
-	zip -rq $(distdir).zip $(distdir)
-	$(am__post_remove_distdir)
-
-dist dist-all:
-	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
-	$(am__post_remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-	case '$(DIST_ARCHIVES)' in \
-	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
-	*.tar.bz2*) \
-	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.lz*) \
-	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
-	*.tar.xz*) \
-	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
-	*.tar.Z*) \
-	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
-	*.zip*) \
-	  unzip $(distdir).zip ;;\
-	esac
-	chmod -R a-w $(distdir); chmod u+w $(distdir)
-	mkdir $(distdir)/_build
-	mkdir $(distdir)/_inst
-	chmod a-w $(distdir)
-	test -d $(distdir)/_build || exit 0; \
-	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build \
-	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
-	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
-	    $(DISTCHECK_CONFIGURE_FLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
-	  && $(MAKE) $(AM_MAKEFLAGS) check \
-	  && $(MAKE) $(AM_MAKEFLAGS) install \
-	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-	        distuninstallcheck \
-	  && chmod -R a-w "$$dc_install_base" \
-	  && ({ \
-	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
-	  && rm -rf "$$dc_destdir" \
-	  && $(MAKE) $(AM_MAKEFLAGS) dist \
-	  && rm -rf $(DIST_ARCHIVES) \
-	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
-	  && cd "$$am__cwd" \
-	  || exit 1
-	$(am__post_remove_distdir)
-	@(echo "$(distdir) archives ready for distribution: "; \
-	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
-	@test -n '$(distuninstallcheck_dir)' || { \
-	  echo 'ERROR: trying to run $@ with an empty' \
-	       '$$(distuninstallcheck_dir)' >&2; \
-	  exit 1; \
-	}; \
-	$(am__cd) '$(distuninstallcheck_dir)' || { \
-	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
-	  exit 1; \
-	}; \
-	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
-	   || { echo "ERROR: files left after uninstall:" ; \
-	        if test -n "$(DESTDIR)"; then \
-	          echo "  (check DESTDIR support)"; \
-	        fi ; \
-	        $(distuninstallcheck_listfiles) ; \
-	        exit 1; } >&2
-distcleancheck: distclean
-	@if test '$(srcdir)' = . ; then \
-	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
-	  exit 1 ; \
-	fi
-	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
-	  || { echo "ERROR: files left in build directory after distclean:" ; \
-	       $(distcleancheck_listfiles) ; \
-	       exit 1; } >&2
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(LTLIBRARIES) $(DATA)
-installdirs: installdirs-recursive
-installdirs-am:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
-	clean-noinstLTLIBRARIES mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-libtool distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-pkgconfigDATA
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am: install-libLTLIBRARIES
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic \
-	maintainer-clean-local
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
-	cscopelist-recursive ctags-recursive install-am install-strip \
-	tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am am--refresh check check-am clean clean-cscope \
-	clean-generic clean-libLTLIBRARIES clean-libtool \
-	clean-noinstLTLIBRARIES cscope cscopelist cscopelist-recursive \
-	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
-	dist-hook dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
-	distcheck distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distcleancheck distdir \
-	distuninstallcheck dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am \
-	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
-	install-pkgconfigDATA install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs installdirs-am \
-	maintainer-clean maintainer-clean-generic \
-	maintainer-clean-local mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-am \
-	uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
-
-
-libtool: $(LIBTOOL_DEPS)
-	$(SHELL) ./config.status --recheck
-
-#install-data-hook:
-#	$(MKDIR_P) $(docdir)
-#	cp -R $(srcdir)/doc/* $(docdir)/
-#	chmod -R u+rwX,g+rX,g-w,o+rX,o-w $(docdir)
-
-#uninstall-hook:
-#	rm -Rf $(docdir)
-
-maintainer-clean-local:
-	rm -f $(srcdir)/doc/api/html/*.html
-	rm -f $(srcdir)/doc/api/html/*.png
-	rm -f $(srcdir)/doc/api/html/*.gif
-	rm -f $(srcdir)/doc/api/html/doxygen.css
-	rm -f $(srcdir)/doc/api/html/formula.repository
-	rm -f $(srcdir)/doc/api/latex/*.tex
-	rm -f $(srcdir)/doc/api/latex/*.sty
-	rm -f $(srcdir)/doc/api/latex/*.ttf
-	rm -f $(srcdir)/doc/api/latex/*.pdf
-	rm -f $(srcdir)/doc/api/latex/Makefile
-
-dist-hook:
-	echo `pwd`
-	chmod -Rf u+rwX $(srcdir)/doc
-	sed 's/^ \* \\section \([a-zA-Z0-9_]*\) \(.*\)/<ul><li><a href="#\1">\2<\/a><\/li><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
-	sed 's/^ \* \\subsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
-	sed 's/^ \* \\subsubsection \([a-zA-Z0-9_]*\) \(.*\)/<ul><ul><ul><li><a href="#\1">\2<\/a><\/li><\/ul><\/ul><\/ul>/' < $(srcdir)/doxygen.dox > $(srcdir)/doc/api/html/toc.txt
-	doxygen $(builddir)/doxygen/doxygen.Doxyfile
-	rm -f $(srcdir)/doc/api/html/toc.txt
-	$(srcdir)/support/rem.sed < $(srcdir)/doc/api/html/index.html > $(srcdir)/doc/api/html/index.html.new
-	mv $(srcdir)/doc/api/html/index.html.new $(srcdir)/doc/api/html/index.html
-	cp -R $(srcdir)/doc $(distdir)/
-	rm -Rf `find $(distdir) -name .svn -type d`
-
-#distclean-local:
-#	rm -Rf `find $(builddir) -type f -name *.Po`
-#	rm -Rf `find $(builddir) -type f -name Makefile`
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/README b/README
index e1d2d40..7bc5619 100644
--- a/README
+++ b/README
@@ -38,33 +38,34 @@ to cite NFFT, is: The paper by Keiner, J., Kunis, S., and Potts, D.
 ACM Trans. Math. Software,36, Article 19, 1-30,  2009 
 Directory structure
 -------------------
-3rdparty (dir)		Third-party source code
-aclocal.m4		Macros for configure script
+3rdparty (dir)	    Third-party source code
+aclocal.m4		    Macros for configure script
 applications (dir)	Application programs (see 4) above)
-AUTHORS			Information about the authors of NFFT3
-bootstrap.sh		Bootstrap shell script that call Autoconf and friends
-ChangeLog		A short version history
-config.guess		Used by configure script
-config.sub		Used by configure script
-configure		Configure script
-configure.in		Autoconf configure script template
-COPYING			Information about redistributing NFFT3
-depcomp			Used by configure script
-doc (dir)		User and developer documentation
-examples (dir)		Simple examples for using NFFT3 routines
-include (dir)		Header files
-INSTALL			Installation instructions
-install-sh		Used by configure script
-kernel (dir)		Source code for core library routines
-ltmain.sh		Used by configure script
-Makefile.am		Automake Makefile template
-Makefile.in		Makefile template generated from Makefile.am,
-                        processed by configure script
-missing			Used by configure script
-NEWS			New and noteworthy
-README			This file
-TODO			Current work to be done
-util (dir)		Source code for auxilliary routines
+AUTHORS			    Information about the authors of NFFT3
+bootstrap.sh	    Bootstrap shell script that call Autoconf and friends
+ChangeLog		    A short version history
+config.guess        Used by configure script
+config.sub          Used by configure script
+configure           Configure script
+configure.in        Autoconf configure script template
+CONVENTIONS         Internal coding conventions
+COPYING             Information about redistributing NFFT3
+depcomp             Used by configure script
+doc (dir)           User and developer documentation
+examples (dir)      Simple examples for using NFFT3 routines
+include (dir)       Header files
+INSTALL             Installation instructions
+install-sh          Used by configure script
+kernel (dir)        Source code for core library routines
+ltmain.sh           Used by configure script
+Makefile.am         Automake Makefile template
+Makefile.in         Makefile template generated from Makefile.am,
+                    processed by configure script
+missing             Used by configure script
+NEWS                New and noteworthy
+README              This file
+TODO                Work to be done
+util (dir)          Source code for auxilliary routines
 
 Feedback
 --------
@@ -87,7 +88,7 @@ you are using NFFT3 for!
 
 Legal Information & Credits
 ---------------------------
-Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
 This software was written by Jens Keiner, Stefan Kunis and Daniel Potts.
 It was developed at the Mathematical Institute, University of
diff --git a/aclocal.m4 b/aclocal.m4
deleted file mode 100644
index df123fe..0000000
--- a/aclocal.m4
+++ /dev/null
@@ -1,1081 +0,0 @@
-# generated automatically by aclocal 1.12.1 -*- Autoconf -*-
-
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
-[m4_warning([this file was generated for autoconf 2.69.
-You have another version of autoconf.  It may work, but is not guaranteed to.
-If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically 'autoreconf'.])])
-
-# Copyright (C) 2002-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 8
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-# (This private macro should not be called outside this file.)
-AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.12'
-dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
-dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.12.1], [],
-      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
-])
-
-# _AM_AUTOCONF_VERSION(VERSION)
-# -----------------------------
-# aclocal traces this macro to find the Autoconf version.
-# This is a private macro too.  Using m4_define simplifies
-# the logic in aclocal, which can simply ignore this definition.
-m4_define([_AM_AUTOCONF_VERSION], [])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.12.1])dnl
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
-
-# Figure out how to run the assembler.                      -*- Autoconf -*-
-
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_PROG_AS
-# ----------
-AC_DEFUN([AM_PROG_AS],
-[# By default we simply use the C compiler to build assembly code.
-AC_REQUIRE([AC_PROG_CC])
-test "${CCAS+set}" = set || CCAS=$CC
-test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
-AC_ARG_VAR([CCAS],      [assembler compiler command (defaults to CC)])
-AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
-_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
-])
-
-# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
-
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
-# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory.  The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run.  This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-#    fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-#    fails if $ac_aux_dir is absolute,
-#    fails when called from a subdirectory in a VPATH build with
-#          a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is '.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
-#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-#   MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH.  The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL                                            -*- Autoconf -*-
-
-# Copyright (C) 1997-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 10
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ([2.52])dnl
- m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])dnl
-AC_SUBST([$1_FALSE])dnl
-_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-m4_define([_AM_COND_VALUE_$1], [$2])dnl
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
-else
-  $1_TRUE='#'
-  $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 17
-
-# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery.  Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
-      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
-      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
-      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
-      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                    [depcc="$$1"   am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
-               [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named 'D' -- because '-MD' means "put the output
-  # in D".
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_$1_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
-  fi
-  am__universal=false
-  m4_case([$1], [CC],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac],
-    [CXX],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac])
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_$1_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE([dependency-tracking], [dnl
-AS_HELP_STRING(
-  [--enable-dependency-tracking],
-  [do not reject slow dependency extractors])
-AS_HELP_STRING(
-  [--disable-dependency-tracking],
-  [speeds up one-time build])])
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-  am__nodep='_no'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
-AC_SUBST([am__nodep])dnl
-_AM_SUBST_NOTMAKE([am__nodep])dnl
-])
-
-# Generate code to set up dependency tracking.              -*- Autoconf -*-
-
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named 'Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`AS_DIRNAME("$mf")`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running 'make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`AS_DIRNAME(["$file"])`
-      AS_MKDIR_P([$dirpart/$fdir])
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each '.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
-     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake.                             -*- Autoconf -*-
-
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 19
-
-# This macro actually does too much.  Some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.62])dnl
-dnl Autoconf wants to disallow AM_ names.  We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[AC_DIAGNOSE([obsolete],
-[$0: two- and three-arguments forms are deprecated.  For more info, see:
-http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
-m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
-dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(
-  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
-  [ok:ok],,
-  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
- AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
-AM_MISSING_PROG([AUTOCONF], [autoconf])
-AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
-AM_MISSING_PROG([AUTOHEADER], [autoheader])
-AM_MISSING_PROG([MAKEINFO], [makeinfo])
-AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-			     [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-		  [_AM_DEPENDENCIES([CC])],
-		  [m4_define([AC_PROG_CC],
-			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-		  [_AM_DEPENDENCIES([CXX])],
-		  [m4_define([AC_PROG_CXX],
-			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-		  [_AM_DEPENDENCIES([OBJC])],
-		  [m4_define([AC_PROG_OBJC],
-			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
-dnl Support for Objective C++ was only introduced in Autoconf 2.65,
-dnl but we still cater to Autoconf 2.62.
-m4_ifdef([AC_PROG_OBJCXX],
-[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
-		  [_AM_DEPENDENCIES([OBJCXX])],
-		  [m4_define([AC_PROG_OBJCXX],
-			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
-])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
-dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
-AC_CONFIG_COMMANDS_PRE(dnl
-[m4_provide_if([_AM_COMPILER_EXEEXT],
-  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-])
-
-dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
-dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
-dnl mangled by Autoconf and run in a shell conditional statement.
-m4_define([_AC_COMPILER_EXEEXT],
-m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated.  The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_arg=$1
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 8
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-AC_SUBST([install_sh])])
-
-# Copyright (C) 2003-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot.  For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
-# From Jim Meyering
-
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 7
-
-# AM_MAINTAINER_MODE([DEFAULT-MODE])
-# ----------------------------------
-# Control maintainer-specific portions of Makefiles.
-# Default is to disable them, unless 'enable' is passed literally.
-# For symmetry, 'disable' may be passed as well.  Anyway, the user
-# can override the default with the --enable/--disable switch.
-AC_DEFUN([AM_MAINTAINER_MODE],
-[m4_case(m4_default([$1], [disable]),
-       [enable], [m4_define([am_maintainer_other], [disable])],
-       [disable], [m4_define([am_maintainer_other], [enable])],
-       [m4_define([am_maintainer_other], [enable])
-        m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
-AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
-  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
-  AC_ARG_ENABLE([maintainer-mode],
-    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
-      am_maintainer_other[ make rules and dependencies not useful
-      (and sometimes confusing) to the casual installer])],
-    [USE_MAINTAINER_MODE=$enableval],
-    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
-  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
-  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
-  MAINT=$MAINTAINER_MODE_TRUE
-  AC_SUBST([MAINT])dnl
-]
-)
-
-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
-
-# Check to see how 'make' treats includes.	            -*- Autoconf -*-
-
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# AM_PROG_CC_C_O
-# --------------
-# Like AC_PROG_CC_C_O, but changed for automake.
-AC_DEFUN([AM_PROG_CC_C_O],
-[AC_REQUIRE([AC_PROG_CC_C_O])dnl
-AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([compile])dnl
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-dnl Make sure AC_PROG_CC is never called again, or it will override our
-dnl setting of CC.
-m4_define([AC_PROG_CC],
-          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
-])
-
-# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
-
-# Copyright (C) 1997-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 7
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([missing])dnl
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  AC_MSG_WARN(['missing' script is too old or missing])
-fi
-])
-
-# Helper functions for option handling.                     -*- Autoconf -*-
-
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# --------------------
-# Set option NAME.  Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
-
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 9
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[[\\\"\#\$\&\'\`$am_lf]]*)
-    AC_MSG_ERROR([unsafe absolute working directory name]);;
-esac
-case $srcdir in
-  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
-    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
-esac
-
-# Do 'set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   am_has_slept=no
-   for am_try in 1 2; do
-     echo "timestamp, slept: $am_has_slept" > conftest.file
-     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-     if test "$[*]" = "X"; then
-	# -L didn't work.
-	set X `ls -t "$srcdir/configure" conftest.file`
-     fi
-     if test "$[*]" != "X $srcdir/configure conftest.file" \
-	&& test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-	# If neither matched, then we have a broken ls.  This can happen
-	# if, for instance, CONFIG_SHELL is bash and it inherits a
-	# broken ls alias from the environment.  This has actually
-	# happened.  Such a system could not be considered "sane".
-	AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-  alias in your environment])
-     fi
-     if test "$[2]" = conftest.file || test $am_try -eq 2; then
-       break
-     fi
-     # Just in case.
-     sleep 1
-     am_has_slept=yes
-   done
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT([yes])
-# If we didn't sleep, we still need to ensure time stamps of config.status and
-# generated files are strictly newer.
-am_sleep_pid=
-if grep 'slept: no' conftest.file >/dev/null 2>&1; then
-  ( sleep 1 ) &
-  am_sleep_pid=$!
-fi
-AC_CONFIG_COMMANDS_PRE(
-  [AC_MSG_CHECKING([that generated files are newer than configure])
-   if test -n "$am_sleep_pid"; then
-     # Hide warnings about reused PIDs.
-     wait $am_sleep_pid 2>/dev/null
-   fi
-   AC_MSG_RESULT([done])])
-rm -f conftest.file
-])
-
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor 'install' (even GNU) is that you can't
-# specify the program used to strip binaries.  This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in "make install-strip", and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using 'strip' when the user
-# run "make install-strip".  However 'strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the 'STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
-if test "$cross_compiling" != no; then
-  AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Copyright (C) 2006-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# _AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-# This macro is traced by Automake.
-AC_DEFUN([_AM_SUBST_NOTMAKE])
-
-# AM_SUBST_NOTMAKE(VARIABLE)
-# --------------------------
-# Public sister of _AM_SUBST_NOTMAKE.
-AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
-
-# Check how to create a tarball.                            -*- Autoconf -*-
-
-# Copyright (C) 2004-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of 'v7', 'ustar', or 'pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-#     tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-#     $(am__untar) < result.tar
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.  Yes, it's still used
-# in the wild :-(  We should find a proper way to deprecate it ...
-AC_SUBST([AMTAR], ['$${TAR-tar}'])
-m4_if([$1], [v7],
-     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of '-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
-
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
-
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-  rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
-
-m4_include([m4/ax_apple_gcc_archflag.m4])
-m4_include([m4/ax_cc_maxopt.m4])
-m4_include([m4/ax_check_compiler_flags.m4])
-m4_include([m4/ax_check_dir.m4])
-m4_include([m4/ax_compiler_vendor.m4])
-m4_include([m4/ax_gcc_archflag.m4])
-m4_include([m4/ax_gcc_x86_cpuid.m4])
-m4_include([m4/ax_lib_fftw3.m4])
-m4_include([m4/ax_nfft_module.m4])
-m4_include([m4/ax_openmp.m4])
-m4_include([m4/ax_prog_matlab.m4])
-m4_include([m4/libtool.m4])
-m4_include([m4/ltoptions.m4])
-m4_include([m4/ltsugar.m4])
-m4_include([m4/ltversion.m4])
-m4_include([m4/lt~obsolete.m4])
diff --git a/applications/Makefile.in b/applications/Makefile.in
deleted file mode 100644
index cc6ff4c..0000000
--- a/applications/Makefile.in
+++ /dev/null
@@ -1,650 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = applications
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
- at HAVE_NFSFT_FALSE@DIR_FASTSUMS2 = 
- at HAVE_NFSFT_TRUE@DIR_FASTSUMS2 = fastsumS2
- at HAVE_NFSFT_FALSE@DIR_QUADRATURES2 = 
- at HAVE_NFSFT_TRUE@DIR_QUADRATURES2 = quadratureS2
- at HAVE_NFSFT_FALSE@DIR_ITERS2 = 
- at HAVE_NFSFT_TRUE@DIR_ITERS2 = iterS2
- at HAVE_MRI_FALSE@DIR_MRI = 
- at HAVE_MRI_TRUE@DIR_MRI = mri
-DIST_SUBDIRS = fastgauss fastsum fastsumS2 mri polarFFT \
-  quadratureS2 radon iterS2
-
-SUBDIRS = fastgauss fastsum $(DIR_FASTSUMS2) $(DIR_MRI) polarFFT \
-  $(DIR_QUADRATURES2) radon $(DIR_ITERS2)
-
-EXTRA_DIST = doxygen.c
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
-	cscopelist-recursive ctags-recursive install-am install-strip \
-	tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	cscopelist cscopelist-recursive ctags ctags-recursive \
-	distclean distclean-generic distclean-libtool distclean-tags \
-	distdir dvi dvi-am html html-am info info-am install \
-	install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags tags-recursive uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/doxygen.c b/applications/doxygen.c
index 710c986..028b487 100644
--- a/applications/doxygen.c
+++ b/applications/doxygen.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id$ */
 
 /**
  * \defgroup applications Applications
diff --git a/applications/fastgauss/Makefile.am b/applications/fastgauss/Makefile.am
index b8b2f4b..0f52319 100644
--- a/applications/fastgauss/Makefile.am
+++ b/applications/fastgauss/Makefile.am
@@ -1,10 +1,10 @@
-# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
 noinst_PROGRAMS = fastgauss
 
 fastgauss_SOURCES = fastgauss.c
-fastgauss_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+fastgauss_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 EXTRA_DIST = levelplots.m  show_results.m README
diff --git a/applications/fastgauss/Makefile.in b/applications/fastgauss/Makefile.in
deleted file mode 100644
index 700063c..0000000
--- a/applications/fastgauss/Makefile.in
+++ /dev/null
@@ -1,555 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = fastgauss$(EXEEXT)
-subdir = applications/fastgauss
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_fastgauss_OBJECTS = fastgauss.$(OBJEXT)
-fastgauss_OBJECTS = $(am_fastgauss_OBJECTS)
-fastgauss_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(fastgauss_SOURCES)
-DIST_SOURCES = $(fastgauss_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-fastgauss_SOURCES = fastgauss.c
-fastgauss_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = levelplots.m  show_results.m README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/fastgauss/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/fastgauss/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-fastgauss$(EXEEXT): $(fastgauss_OBJECTS) $(fastgauss_DEPENDENCIES) $(EXTRA_fastgauss_DEPENDENCIES) 
-	@rm -f fastgauss$(EXEEXT)
-	$(LINK) $(fastgauss_OBJECTS) $(fastgauss_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastgauss.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/fastgauss/fastgauss.c b/applications/fastgauss/fastgauss.c
index 26da31f..8f1063a 100644
--- a/applications/fastgauss/fastgauss.c
+++ b/applications/fastgauss/fastgauss.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: fastgauss.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /**
  * \defgroup applications_fastgauss Fast Gauss transfrom with complex parameter
@@ -34,7 +34,6 @@
 #endif
 
 #include "nfft3.h"
-#include "nfft3util.h"
 #include "infft.h"
 
 /**
@@ -71,29 +70,29 @@
 /** Structure for the Gauss transform */
 typedef struct
 {
-  int N;                                /**< number of source nodes          */
-  int M;                                /**< number of target nodes          */
+  int N; /**< number of source nodes          */
+  int M; /**< number of target nodes          */
 
-  double _Complex *alpha;                /**< source coefficients             */
-  double _Complex *f;                    /**< target evaluations              */
+  C *alpha; /**< source coefficients             */
+  C *f; /**< target evaluations              */
 
-  unsigned flags;                       /**< flags for precomputation and
-					     approximation type              */
+  unsigned flags; /**< flags for precomputation and
+   approximation type              */
 
-  double _Complex sigma;                 /**< parameter of the Gaussian       */
+  C sigma; /**< parameter of the Gaussian       */
 
-  double *x;                            /**< source nodes in \f$[-1/4,1/4]\f$*/
-  double *y;                            /**< target nodes in \f$[-1/4,1/4]\f$*/
+  R *x; /**< source nodes in \f$[-1/4,1/4]\f$*/
+  R *y; /**< target nodes in \f$[-1/4,1/4]\f$*/
 
-  double _Complex *pre_cexp;             /**< precomputed values for dgt      */
+  C *pre_cexp; /**< precomputed values for dgt      */
 
-  int n;                                /**< expansion degree                */
-  double p;                             /**< period, at least 1              */
+  int n; /**< expansion degree                */
+  R p; /**< period, at least 1              */
 
-  double _Complex *b;                    /**< expansion coefficients          */
+  C *b; /**< expansion coefficients          */
 
-  nfft_plan *nplan1;                    /**< source nfft plan                */
-  nfft_plan *nplan2;                    /**< target nfft plan                */
+  NFFT(plan) *nplan1; /**< source nfft plan                */
+  NFFT(plan) *nplan2; /**< target nfft plan                */
 
 } fgt_plan;
 
@@ -104,22 +103,24 @@ typedef struct
  *
  * \author Stefan Kunis
  */
-void dgt_trafo(fgt_plan *ths)
+static void dgt_trafo(fgt_plan *ths)
 {
-  int j,k,l;
+  INT j, k, l;
 
-  for(j=0; j<ths->M; j++)
-    ths->f[j] = 0;
+  for (j = 0; j < ths->M; j++)
+    ths->f[j] = K(0.0);
 
-  if(ths->flags & DGT_PRE_CEXP)
-    for(j=0,l=0; j<ths->M; j++)
-      for(k=0; k<ths->N; k++,l++)
-        ths->f[j] += ths->alpha[k]*ths->pre_cexp[l];
+  if (ths->flags & DGT_PRE_CEXP)
+    for (j = 0, l = 0; j < ths->M; j++)
+      for (k = 0; k < ths->N; k++, l++)
+        ths->f[j] += ths->alpha[k] * ths->pre_cexp[l];
   else
-    for(j=0; j<ths->M; j++)
-      for(k=0; k<ths->N; k++)
-        ths->f[j] += ths->alpha[k]*cexp(-ths->sigma*(ths->y[j]-ths->x[k])*
-					(ths->y[j]-ths->x[k]));
+    for (j = 0; j < ths->M; j++)
+      for (k = 0; k < ths->N; k++)
+        ths->f[j] += ths->alpha[k]
+            * CEXP(
+                -ths->sigma * (ths->y[j] - ths->x[k])
+                    * (ths->y[j] - ths->x[k]));
 }
 
 /**
@@ -129,28 +130,28 @@ void dgt_trafo(fgt_plan *ths)
  *
  * \author Stefan Kunis
  */
-void fgt_trafo(fgt_plan *ths)
+static void fgt_trafo(fgt_plan *ths)
 {
-  int l;
+  INT l;
 
-  if(ths->flags & FGT_NDFT)
-    {
-      nfft_adjoint_direct(ths->nplan1);
+  if (ths->flags & FGT_NDFT)
+  {
+    NFFT(adjoint_direct)(ths->nplan1);
 
-      for(l=0; l<ths->n; l++)
-        ths->nplan1->f_hat[l] *= ths->b[l];
+    for (l = 0; l < ths->n; l++)
+      ths->nplan1->f_hat[l] *= ths->b[l];
 
-      nfft_trafo_direct(ths->nplan2);
-    }
+    NFFT(trafo_direct)(ths->nplan2);
+  }
   else
-    {
-      nfft_adjoint(ths->nplan1);
+  {
+    NFFT(adjoint)(ths->nplan1);
 
-      for(l=0; l<ths->n; l++)
-        ths->nplan1->f_hat[l] *= ths->b[l];
+    for (l = 0; l < ths->n; l++)
+      ths->nplan1->f_hat[l] *= ths->b[l];
 
-      nfft_trafo(ths->nplan2);
-    }
+    NFFT(trafo)(ths->nplan2);
+  }
 }
 
 /**
@@ -167,63 +168,67 @@ void fgt_trafo(fgt_plan *ths)
  *
  * \author Stefan Kunis
  */
-void fgt_init_guru(fgt_plan *ths, int N, int M, double _Complex sigma, int n,
-		   double p, int m, unsigned flags)
+static void fgt_init_guru(fgt_plan *ths, int N, int M, C sigma, int n, R p, int m,
+    unsigned flags)
 {
-  int j,n_fftw;
-  fftw_plan fplan;
+  int j, n_fftw;
+  FFTW(plan) fplan;
 
   ths->M = M;
   ths->N = N;
   ths->sigma = sigma;
   ths->flags = flags;
 
-  ths->x = (double*)nfft_malloc(ths->N*sizeof(double));
-  ths->y = (double*)nfft_malloc(ths->M*sizeof(double));
-  ths->alpha = (double _Complex*)nfft_malloc(ths->N*sizeof(double _Complex));
-  ths->f = (double _Complex*)nfft_malloc(ths->M*sizeof(double _Complex));
+  ths->x = (R*) NFFT(malloc)((size_t)(ths->N) * sizeof(R));
+  ths->y = (R*) NFFT(malloc)((size_t)(ths->M) * sizeof(R));
+  ths->alpha = (C*) NFFT(malloc)((size_t)(ths->N) * sizeof(C));
+  ths->f = (C*) NFFT(malloc)((size_t)(ths->M) * sizeof(C));
 
   ths->n = n;
   ths->p = p;
 
-  ths->b = (double _Complex*)nfft_malloc(ths->n*sizeof(double _Complex));
+  ths->b = (C*) NFFT(malloc)((size_t)(ths->n) * sizeof(C));
 
-  ths->nplan1 = (nfft_plan*) nfft_malloc(sizeof(nfft_plan));
-  ths->nplan2 = (nfft_plan*) nfft_malloc(sizeof(nfft_plan));
+  ths->nplan1 = (NFFT(plan)*) NFFT(malloc)(sizeof(NFFT(plan)));
+  ths->nplan2 = (NFFT(plan)*) NFFT(malloc)(sizeof(NFFT(plan)));
 
-  n_fftw=X(next_power_of_2)(2*ths->n);
+  n_fftw = (int)NFFT(next_power_of_2)(2 * ths->n);
 
-  nfft_init_guru(ths->nplan1, 1, &(ths->n), ths->N, &n_fftw, m, PRE_PHI_HUT|
-                 PRE_PSI| MALLOC_X| MALLOC_F_HAT| FFTW_INIT, FFTW_MEASURE);
-  nfft_init_guru(ths->nplan2, 1, &(ths->n), ths->M, &n_fftw, m, PRE_PHI_HUT|
-                 PRE_PSI| MALLOC_X| FFTW_INIT, FFTW_MEASURE);
+  {
+    NFFT(init_guru)(ths->nplan1, 1, &(ths->n), ths->N, &n_fftw, m, PRE_PHI_HUT |
+    PRE_PSI | MALLOC_X | MALLOC_F_HAT | FFTW_INIT, FFTW_MEASURE);
+    NFFT(init_guru)(ths->nplan2, 1, &(ths->n), ths->M, &n_fftw, m, PRE_PHI_HUT |
+    PRE_PSI | MALLOC_X | FFTW_INIT, FFTW_MEASURE);
+  }
 
   ths->nplan1->f = ths->alpha;
   ths->nplan2->f_hat = ths->nplan1->f_hat;
   ths->nplan2->f = ths->f;
 
-  if(ths->flags & FGT_APPROX_B)
-    {
-      fplan = fftw_plan_dft_1d(ths->n, ths->b, ths->b, FFTW_FORWARD,
-                               FFTW_MEASURE);
+  if (ths->flags & FGT_APPROX_B)
+  {
+    fplan = FFTW(plan_dft_1d)(ths->n, ths->b, ths->b, FFTW_FORWARD,
+    FFTW_MEASURE);
 
-      for(j=0; j<ths->n; j++)
-	ths->b[j] = cexp(-ths->p*ths->p*ths->sigma*(j-ths->n/2)*(j-ths->n/2)/
-                          ((double)ths->n*ths->n)) / ths->n;
+    for (j = 0; j < ths->n; j++)
+      ths->b[j] = CEXP(
+          -ths->p * ths->p * ths->sigma * ((R)(j) - (R)(ths->n) / K(2.0)) * ((R)(j) - (R)(ths->n) / K(2.0))
+              / ((R) (ths->n * ths->n))) / ((R)(ths->n));
 
-      nfft_fftshift_complex(ths->b, 1, &ths->n);
-      fftw_execute(fplan);
-      nfft_fftshift_complex(ths->b, 1, &ths->n);
+    NFFT(fftshift_complex_int)(ths->b, 1, &ths->n);
+    FFTW(execute)(fplan);
+    NFFT(fftshift_complex_int)(ths->b, 1, &ths->n);
 
-      fftw_destroy_plan(fplan);
-    }
+    FFTW(destroy_plan)(fplan);
+  }
   else
-    {
-      for(j=0; j<ths->n; j++)
-	ths->b[j] = 1.0/ths->p * csqrt(PI/ths->sigma)*
-	  cexp(-PI*PI*(j-ths->n/2)*(j-ths->n/2)/
-	       (ths->p*ths->p*ths->sigma));
-    }
+  {
+    for (j = 0; j < ths->n; j++)
+      ths->b[j] = K(1.0) / ths->p * CSQRT(KPI / ths->sigma)
+          * CEXP(
+              -KPI * KPI * ((R)(j) - (R)(ths->n) / K(2.0)) * ((R)(j) - (R)(ths->n) / K(2.0))
+                  / (ths->p * ths->p * ths->sigma));
+  }
 }
 
 /**
@@ -237,21 +242,19 @@ void fgt_init_guru(fgt_plan *ths, int N, int M, double _Complex sigma, int n,
  *
  * \author Stefan Kunis
  */
-void fgt_init(fgt_plan *ths, int N, int M, double _Complex sigma, double eps)
+static void fgt_init(fgt_plan *ths, int N, int M, C sigma, R eps)
 {
-  double p;
+  R p;
   int n;
 
-  p=0.5+sqrt(-log(eps)/creal(sigma));
-  if(p<1)
-    p=1;
+  p = K(0.5) + SQRT(-LOG(eps) / CREAL(sigma));
 
-  n=2*((int)ceil(p*cabs(sigma)/PI * sqrt(-log(eps)/creal(sigma))));
+  if (p < K(1.0))
+    p = K(1.0);
 
-  if(N*M<=((int)(1U<<20)))
-    fgt_init_guru(ths, N, M, sigma, n, p, 7, DGT_PRE_CEXP);
-  else
-    fgt_init_guru(ths, N, M, sigma, n, p, 7, 0);
+  n = (int)(2 * (LRINT(CEIL(p * CABS(sigma) / KPI * SQRT(-LOG(eps) / CREAL(sigma))))));
+
+  fgt_init_guru(ths, N, M, sigma, n, p, 7, N * M <= ((INT) (1U << 20)) ? DGT_PRE_CEXP : 0);
 }
 
 /**
@@ -260,30 +263,29 @@ void fgt_init(fgt_plan *ths, int N, int M, double _Complex sigma, double eps)
  * \arg ths The pointer to a fpt plan
  * \author Stefan Kunis
  */
-void fgt_init_node_dependent(fgt_plan *ths)
+static void fgt_init_node_dependent(fgt_plan *ths)
 {
-  int j,k,l;
-
-  if(ths->flags & DGT_PRE_CEXP)
-   {
-     ths->pre_cexp=(double _Complex*)nfft_malloc(ths->M*ths->N*
-						sizeof(double _Complex));
-
-     for(j=0,l=0; j<ths->M; j++)
-       for(k=0; k<ths->N; k++,l++)
-         ths->pre_cexp[l]=cexp(-ths->sigma*(ths->y[j]-ths->x[k])*
-                                (ths->y[j]-ths->x[k]));
-   }
-
-  for(j=0; j<ths->nplan1->M_total; j++)
-    ths->nplan1->x[j] = ths->x[j]/ths->p;
-  for(j=0; j<ths->nplan2->M_total; j++)
-    ths->nplan2->x[j] = ths->y[j]/ths->p;
-
-  if(ths->nplan1->nfft_flags & PRE_PSI)
-    nfft_precompute_psi(ths->nplan1);
-  if(ths->nplan2->nfft_flags & PRE_PSI)
-    nfft_precompute_psi(ths->nplan2);
+  int j, k, l;
+
+  if (ths->flags & DGT_PRE_CEXP)
+  {
+    ths->pre_cexp = (C*) NFFT(malloc)((size_t)(ths->M * ths->N) * sizeof(C));
+
+    for (j = 0, l = 0; j < ths->M; j++)
+      for (k = 0; k < ths->N; k++, l++)
+        ths->pre_cexp[l] = CEXP(
+            -ths->sigma * (ths->y[j] - ths->x[k]) * (ths->y[j] - ths->x[k]));
+  }
+
+  for (j = 0; j < ths->nplan1->M_total; j++)
+    ths->nplan1->x[j] = ths->x[j] / ths->p;
+  for (j = 0; j < ths->nplan2->M_total; j++)
+    ths->nplan2->x[j] = ths->y[j] / ths->p;
+
+  if (ths->nplan1->flags & PRE_PSI)
+    NFFT(precompute_psi)(ths->nplan1);
+  if (ths->nplan2->flags & PRE_PSI)
+    NFFT(precompute_psi)(ths->nplan2);
 }
 
 /**
@@ -292,21 +294,21 @@ void fgt_init_node_dependent(fgt_plan *ths)
  * \arg ths The pointer to the fgt plan
  * \author Stefan Kunis
  */
-void fgt_finalize(fgt_plan *ths)
+static void fgt_finalize(fgt_plan *ths)
 {
-  nfft_finalize(ths->nplan2);
-  nfft_finalize(ths->nplan1);
+  NFFT(finalize)(ths->nplan2);
+  NFFT(finalize)(ths->nplan1);
 
-  nfft_free(ths->nplan2);
-  nfft_free(ths->nplan1);
+  NFFT(free)(ths->nplan2);
+  NFFT(free)(ths->nplan1);
 
-  nfft_free(ths->b);
+  NFFT(free)(ths->b);
 
-  nfft_free(ths->f);
-  nfft_free(ths->y);
+  NFFT(free)(ths->f);
+  NFFT(free)(ths->y);
 
-  nfft_free(ths->alpha);
-  nfft_free(ths->x);
+  NFFT(free)(ths->alpha);
+  NFFT(free)(ths->x);
 }
 
 /**
@@ -315,19 +317,19 @@ void fgt_finalize(fgt_plan *ths)
  * \arg ths The pointer to the fgt plan
  * \author Stefan Kunis
  */
-void fgt_test_init_rand(fgt_plan *ths)
+static void fgt_test_init_rand(fgt_plan *ths)
 {
-  int j,k;
+  INT j, k;
 
-  for(k=0; k<ths->N; k++)
-    ths->x[k] = (double)rand()/(2.0*RAND_MAX)-1.0/4.0;
+  for (k = 0; k < ths->N; k++)
+    ths->x[k] = NFFT(drand48)() / K(2.0) - K(1.0) / K(4.0);
 
-  for(j=0; j<ths->M; j++)
-    ths->y[j] = (double)rand()/(2.0*RAND_MAX)-1.0/4.0;
+  for (j = 0; j < ths->M; j++)
+    ths->y[j] = NFFT(drand48)() / K(2.0) - K(1.0) / K(4.0);
 
-  for(k=0; k<ths->N; k++)
-    ths->alpha[k] =   (double)rand()/(RAND_MAX)-1.0/2.0
-	          + _Complex_I*(double)rand()/(RAND_MAX)-I/2.0;
+  for (k = 0; k < ths->N; k++)
+    ths->alpha[k] = NFFT(drand48)() - K(1.0) / K(2.0)
+        + II * (NFFT(drand48)() - K(1.0) / K(2.0));
 }
 
 /**
@@ -338,27 +340,27 @@ void fgt_test_init_rand(fgt_plan *ths)
  *
  * \author Stefan Kunis
  */
-double fgt_test_measure_time(fgt_plan *ths, unsigned dgt)
+static R fgt_test_measure_time(fgt_plan *ths, unsigned dgt)
 {
   int r;
   ticks t0, t1;
-  double t_out;
-  double tau=0.01;
-
-  t_out=0;
-  r=0;
-  while(t_out<tau)
-    {
-      r++;
-      t0 = getticks();
-      if (dgt)
-        dgt_trafo(ths);
-      else
-        fgt_trafo(ths);
-      t1 = getticks();
-      t_out += nfft_elapsed_seconds(t1,t0);
-    }
-  t_out/=r;
+  R t_out;
+  R tau = K(0.01);
+
+  t_out = K(0.0);
+  r = 0;
+  while (t_out < tau)
+  {
+    r++;
+    t0 = getticks();
+    if (dgt)
+      dgt_trafo(ths);
+    else
+      fgt_trafo(ths);
+    t1 = getticks();
+    t_out += NFFT(elapsed_seconds)(t1, t0);
+  }
+  t_out /= (R)(r);
 
   return t_out;
 }
@@ -372,29 +374,30 @@ double fgt_test_measure_time(fgt_plan *ths, unsigned dgt)
  *
  * \author Stefan Kunis
  */
-void fgt_test_simple(int N, int M, double _Complex sigma, double eps)
+static void fgt_test_simple(int N, int M, C sigma, R eps)
 {
   fgt_plan my_plan;
-  double _Complex *swap_dgt;
+  C *swap_dgt;
 
   fgt_init(&my_plan, N, M, sigma, eps);
-  swap_dgt = (double _Complex*)nfft_malloc(my_plan.M*sizeof(double _Complex));
+  swap_dgt = (C*) NFFT(malloc)((size_t)(my_plan.M) * sizeof(C));
 
   fgt_test_init_rand(&my_plan);
   fgt_init_node_dependent(&my_plan);
 
-  NFFT_SWAP_complex(swap_dgt,my_plan.f);
+  CSWAP(swap_dgt, my_plan.f);
   dgt_trafo(&my_plan);
-  nfft_vpr_complex(my_plan.f,my_plan.M,"discrete gauss transform");
-  NFFT_SWAP_complex(swap_dgt,my_plan.f);
+  NFFT(vpr_complex)(my_plan.f, my_plan.M, "discrete gauss transform");
+  CSWAP(swap_dgt, my_plan.f);
 
   fgt_trafo(&my_plan);
-  nfft_vpr_complex(my_plan.f,my_plan.M,"fast gauss transform");
+  NFFT(vpr_complex)(my_plan.f, my_plan.M, "fast gauss transform");
 
-  printf("\n relative error: %1.3e\n", X(error_l_infty_1_complex)(swap_dgt,
-         my_plan.f, my_plan.M, my_plan.alpha, my_plan.N));
+  printf("\n relative error: %1.3" __FES__ "\n",
+      NFFT(error_l_infty_1_complex)(swap_dgt, my_plan.f, my_plan.M,
+          my_plan.alpha, my_plan.N));
 
-  nfft_free(swap_dgt);
+  NFFT(free)(swap_dgt);
   fgt_finalize(&my_plan);
 }
 
@@ -402,74 +405,69 @@ void fgt_test_simple(int N, int M, double _Complex sigma, double eps)
  * Compares accuracy and execution time of the fast Gauss transform with
  * increasing expansion degree.
  * Similar to the test in F. Andersson and G. Beylkin.
- * The fast Gauss transform with double _Complex parameters.
+ * The fast Gauss transform with complex parameters.
  * J. Comput. Physics 203 (2005) 274-286
  *
  * \author Stefan Kunis
  */
-void fgt_test_andersson(void)
+static void fgt_test_andersson(void)
 {
   fgt_plan my_plan;
-  double _Complex *swap_dgt;
+  C *swap_dgt;
   int N;
 
-  double _Complex sigma=4*(138+ _Complex_I*100);
-  int n=128;
-  int N_dgt_pre_exp=(int)(1U<<11);
-  int N_dgt=(int)(1U<<19);
-
-  printf("n=%d, sigma=%1.3e+i%1.3e\n",n,creal(sigma),cimag(sigma));
+  C sigma = K(4.0) * (K(138.0) + II * K(100.0));
+  int n = 128;
+  int N_dgt_pre_exp = (int) (1U << 11);
+  int N_dgt = (int) (1U << 19);
 
-  for(N=((int)(1U<<6)); N<((int)(1U<<22)); N=N<<1)
-    {
-      printf("$%d$\t & ",N);
+  printf("n=%d, sigma=%1.3" __FES__ "+i%1.3" __FES__ "\n", n, CREAL(sigma), CIMAG(sigma));
 
-      if(N<N_dgt_pre_exp)
-        fgt_init_guru(&my_plan, N, N, sigma, n, 1, 7, DGT_PRE_CEXP);
-      else
-        fgt_init_guru(&my_plan, N, N, sigma, n, 1, 7, 0);
+  for (N = ((INT) (1U << 6)); N < ((INT) (1U << 22)); N = N << 1)
+  {
+    printf("$%d$\t & ", N);
 
-      swap_dgt = (double _Complex*)nfft_malloc(my_plan.M*
-					      sizeof(double _Complex));
+    fgt_init_guru(&my_plan, N, N, sigma, n, 1, 7, N < N_dgt_pre_exp ? DGT_PRE_CEXP : 0);
 
-      fgt_test_init_rand(&my_plan);
+    swap_dgt = (C*) NFFT(malloc)((size_t)(my_plan.M) * sizeof(C));
 
-      fgt_init_node_dependent(&my_plan);
+    fgt_test_init_rand(&my_plan);
 
-      if(N<N_dgt)
-	{
-          NFFT_SWAP_complex(swap_dgt,my_plan.f);
-          if(N<N_dgt_pre_exp)
-            my_plan.flags^=DGT_PRE_CEXP;
-
-	  printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 1));
-          if(N<N_dgt_pre_exp)
-            my_plan.flags^=DGT_PRE_CEXP;
-          NFFT_SWAP_complex(swap_dgt,my_plan.f);
-	}
-      else
-	printf("\t\t & ");
-
-      if(N<N_dgt_pre_exp)
-	printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 1));
-      else
-	printf("\t\t & ");
-
-      my_plan.flags^=FGT_NDFT;
-      printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 0));
-      my_plan.flags^=FGT_NDFT;
-
-      printf("$%1.1e$\t & ",fgt_test_measure_time(&my_plan, 0));
-
-      printf("$%1.1e$\t \\\\ \n",
-	     X(error_l_infty_1_complex)(swap_dgt, my_plan.f, my_plan.M,
-					  my_plan.alpha, my_plan.N));
-      fflush(stdout);
+    fgt_init_node_dependent(&my_plan);
 
-      nfft_free(swap_dgt);
-      fgt_finalize(&my_plan);
-      fftw_cleanup();
+    if (N < N_dgt)
+    {
+      CSWAP(swap_dgt, my_plan.f);
+      if (N < N_dgt_pre_exp)
+        my_plan.flags ^= DGT_PRE_CEXP;
+
+      printf("$%1.1" __FES__ "$\t & ", fgt_test_measure_time(&my_plan, 1));
+      if (N < N_dgt_pre_exp)
+        my_plan.flags ^= DGT_PRE_CEXP;
+      CSWAP(swap_dgt, my_plan.f);
     }
+    else
+      printf("\t\t & ");
+
+    if (N < N_dgt_pre_exp)
+      printf("$%1.1" __FES__ "$\t & ", fgt_test_measure_time(&my_plan, 1));
+    else
+      printf("\t\t & ");
+
+    my_plan.flags ^= FGT_NDFT;
+    printf("$%1.1" __FES__ "$\t & ", fgt_test_measure_time(&my_plan, 0));
+    my_plan.flags ^= FGT_NDFT;
+
+    printf("$%1.1" __FES__ "$\t & ", fgt_test_measure_time(&my_plan, 0));
+
+    printf("$%1.1" __FES__ "$\t \\\\ \n",
+    NFFT(error_l_infty_1_complex)(swap_dgt, my_plan.f, my_plan.M, my_plan.alpha, my_plan.N));
+    fflush(stdout);
+
+    NFFT(free)(swap_dgt);
+    fgt_finalize(&my_plan);
+    FFTW(cleanup)();
+  }
 }
 
 /**
@@ -478,49 +476,50 @@ void fgt_test_andersson(void)
  *
  * \author Stefan Kunis
  */
-void fgt_test_error(void)
+static void fgt_test_error(void)
 {
   fgt_plan my_plan;
-  double _Complex *swap_dgt;
-  int n,mi;
+  C *swap_dgt;
+  int n, mi;
 
-  double _Complex sigma=4*(138+ _Complex_I*100);
-  int N=1000;
-  int M=1000;
-  int m[2]={7,3};
+  C sigma = K(4.0) * (K(138.0) + II * K(100.0));
+  int N = 1000;
+  int M = 1000;
+  int m[2] = { 7, 3 };
 
-  printf("N=%d;\tM=%d;\nsigma=%1.3e+i*%1.3e;\n",N,M,creal(sigma),cimag(sigma));
+  printf("N=%d;\tM=%d;\nsigma=%1.3" __FES__ "+i*%1.3" __FES__ ";\n", N, M, CREAL(sigma),
+      CIMAG(sigma));
   printf("error=[\n");
 
-  swap_dgt = (double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+  swap_dgt = (C*) NFFT(malloc)((size_t)(M) * sizeof(C));
 
-  for(n=8; n<=128; n+=4)
+  for (n = 8; n <= 128; n += 4)
+  {
+    printf("%d\t", n);
+    for (mi = 0; mi < 2; mi++)
     {
-      printf("%d\t",n);
-      for(mi=0;mi<2;mi++)
-        {
-          fgt_init_guru(&my_plan, N, M, sigma, n, 1, m[mi], 0);
-          fgt_test_init_rand(&my_plan);
-          fgt_init_node_dependent(&my_plan);
-
-          NFFT_SWAP_complex(swap_dgt,my_plan.f);
-          dgt_trafo(&my_plan);
-          NFFT_SWAP_complex(swap_dgt,my_plan.f);
-
-          fgt_trafo(&my_plan);
-
-          printf("%1.3e\t", X(error_l_infty_1_complex)(swap_dgt, my_plan.f,
-                 my_plan.M, my_plan.alpha, my_plan.N));
-          fflush(stdout);
-
-          fgt_finalize(&my_plan);
-          fftw_cleanup();
-        }
-      printf("\n");
+      fgt_init_guru(&my_plan, N, M, sigma, n, 1, m[mi], 0);
+      fgt_test_init_rand(&my_plan);
+      fgt_init_node_dependent(&my_plan);
+
+      CSWAP(swap_dgt, my_plan.f);
+      dgt_trafo(&my_plan);
+      CSWAP(swap_dgt, my_plan.f);
+
+      fgt_trafo(&my_plan);
+
+      printf("%1.3" __FES__ "\t",
+        NFFT(error_l_infty_1_complex)(swap_dgt, my_plan.f, my_plan.M, my_plan.alpha, my_plan.N));
+      fflush(stdout);
+
+      fgt_finalize(&my_plan);
+      FFTW(cleanup)();
     }
+    printf("\n");
+  }
   printf("];\n");
 
-  nfft_free(swap_dgt);
+  NFFT(free)(swap_dgt);
 }
 
 /**
@@ -529,46 +528,47 @@ void fgt_test_error(void)
  *
  * \author Stefan Kunis
  */
-void fgt_test_error_p(void)
+static void fgt_test_error_p(void)
 {
   fgt_plan my_plan;
-  double _Complex *swap_dgt;
-  int n,pi;
+  C *swap_dgt;
+  int n, pi;
 
-  double _Complex sigma=20+40*_Complex_I;
-  int N=1000;
-  int M=1000;
-  double p[3]={1,1.5,2};
+  C sigma = K(20.0) + K(40.0) * II;
+  int N = 1000;
+  int M = 1000;
+  R p[3] = {K(1.0), K(1.5), K(2.0)};
 
-  printf("N=%d;\tM=%d;\nsigma=%1.3e+i*%1.3e;\n",N,M,creal(sigma),cimag(sigma));
+  printf("N=%d;\tM=%d;\nsigma=%1.3" __FES__ "+i*%1.3" __FES__ ";\n", N, M, CREAL(sigma),
+      CIMAG(sigma));
   printf("error=[\n");
 
-  swap_dgt = (double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+  swap_dgt = (C*) NFFT(malloc)((size_t)(M) * sizeof(C));
 
-  for(n=8; n<=128; n+=4)
+  for (n = 8; n <= 128; n += 4)
+  {
+    printf("%d\t", n);
+    for (pi = 0; pi < 3; pi++)
     {
-      printf("%d\t",n);
-      for(pi=0;pi<3;pi++)
-        {
-          fgt_init_guru(&my_plan, N, M, sigma, n, p[pi], 7, 0);
-          fgt_test_init_rand(&my_plan);
-          fgt_init_node_dependent(&my_plan);
-
-          NFFT_SWAP_complex(swap_dgt,my_plan.f);
-          dgt_trafo(&my_plan);
-          NFFT_SWAP_complex(swap_dgt,my_plan.f);
-
-          fgt_trafo(&my_plan);
-
-          printf("%1.3e\t", X(error_l_infty_1_complex)(swap_dgt, my_plan.f,
-                 my_plan.M, my_plan.alpha, my_plan.N));
-          fflush(stdout);
-
-          fgt_finalize(&my_plan);
-          fftw_cleanup();
-        }
-      printf("\n");
+      fgt_init_guru(&my_plan, N, M, sigma, n, p[pi], 7, 0);
+      fgt_test_init_rand(&my_plan);
+      fgt_init_node_dependent(&my_plan);
+
+      CSWAP(swap_dgt, my_plan.f);
+      dgt_trafo(&my_plan);
+      CSWAP(swap_dgt, my_plan.f);
+
+      fgt_trafo(&my_plan);
+
+      printf("%1.3" __FES__ "\t",
+      NFFT(error_l_infty_1_complex)(swap_dgt, my_plan.f, my_plan.M, my_plan.alpha, my_plan.N));
+      fflush(stdout);
+
+      fgt_finalize(&my_plan);
+      FFTW(cleanup)();
     }
+    printf("\n");
+  }
   printf("];\n");
 }
 
@@ -577,34 +577,34 @@ void fgt_test_error_p(void)
  *
  * \author Stefan Kunis
  */
-int main(int argc,char **argv)
+int main(int argc, char **argv)
 {
-  if(argc!=2)
-    {
-      fprintf(stderr,"fastgauss type\n");
-      fprintf(stderr," type\n");
-      fprintf(stderr,"  0 - Simple test.\n");
-      fprintf(stderr,"  1 - Compares accuracy and execution time.\n");
-      fprintf(stderr,"      Pipe to output_andersson.tex\n");
-      fprintf(stderr,"  2 - Compares accuracy.\n");
-      fprintf(stderr,"      Pipe to output_error.m\n");
-      fprintf(stderr,"  3 - Compares accuracy.\n");
-      fprintf(stderr,"      Pipe to output_error_p.m\n");
-      return -1;
-    }
-
-  if(atoi(argv[1])==0)
-    fgt_test_simple(10, 10, 5+3*_Complex_I, 0.001);
-
-  if(atoi(argv[1])==1)
+  if (argc != 2)
+  {
+    fprintf(stderr, "fastgauss type\n");
+    fprintf(stderr, " type\n");
+    fprintf(stderr, "  0 - Simple test.\n");
+    fprintf(stderr, "  1 - Compares accuracy and execution time.\n");
+    fprintf(stderr, "      Pipe to output_andersson.tex\n");
+    fprintf(stderr, "  2 - Compares accuracy.\n");
+    fprintf(stderr, "      Pipe to output_error.m\n");
+    fprintf(stderr, "  3 - Compares accuracy.\n");
+    fprintf(stderr, "      Pipe to output_error_p.m\n");
+    return EXIT_FAILURE;
+  }
+
+  if (atoi(argv[1]) == 0)
+    fgt_test_simple(10, 10, K(5.0) + K(3.0) * II, K(0.001));
+
+  if (atoi(argv[1]) == 1)
     fgt_test_andersson();
 
-  if(atoi(argv[1])==2)
+  if (atoi(argv[1]) == 2)
     fgt_test_error();
 
-  if(atoi(argv[1])==3)
+  if (atoi(argv[1]) == 3)
     fgt_test_error_p();
 
-  return 1;
+  return EXIT_SUCCESS;
 }
 /* \} */
diff --git a/applications/fastgauss/levelplots.m b/applications/fastgauss/levelplots.m
index 4fa5084..9d5b0bb 100644
--- a/applications/fastgauss/levelplots.m
+++ b/applications/fastgauss/levelplots.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: levelplots.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 clear;
 n=128;
 p=1;
diff --git a/applications/fastgauss/output_error.m b/applications/fastgauss/output_error.m
new file mode 100644
index 0000000..a97278c
--- /dev/null
+++ b/applications/fastgauss/output_error.m
@@ -0,0 +1,52 @@
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id$
+N=1000;	M=1000;
+delta=5.520e+02+i*4.000e+02;
+error=[
+8	1.459e-02	1.459e-02	1.459e-02	1.748e-02	1.748e-02	1.748e-02
+12	9.688e-03	9.688e-03	9.688e-03	1.212e-02	1.212e-02	1.212e-02
+16	5.186e-03	5.186e-03	5.186e-03	7.868e-03	7.868e-03	7.868e-03
+20	5.493e-03	5.493e-03	5.493e-03	6.925e-03	6.925e-03	6.925e-03
+24	2.641e-03	2.641e-03	2.641e-03	3.190e-03	3.190e-03	3.190e-03
+28	7.300e-04	7.300e-04	7.300e-04	1.181e-03	1.181e-03	1.181e-03
+32	3.378e-04	3.378e-04	3.378e-04	5.849e-04	5.849e-04	5.849e-04
+36	1.425e-04	1.425e-04	1.426e-04	1.829e-04	1.829e-04	1.829e-04
+40	6.382e-05	6.382e-05	6.381e-05	8.337e-05	8.337e-05	8.337e-05
+44	1.630e-05	1.630e-05	1.630e-05	2.820e-05	2.820e-05	2.819e-05
+48	6.291e-06	6.291e-06	6.293e-06	8.636e-06	8.636e-06	8.618e-06
+52	2.105e-06	2.105e-06	2.110e-06	2.701e-06	2.701e-06	2.710e-06
+56	6.697e-07	6.697e-07	6.758e-07	1.062e-06	1.062e-06	1.065e-06
+60	2.041e-07	2.041e-07	2.170e-07	2.543e-07	2.543e-07	2.552e-07
+64	2.205e-08	2.205e-08	5.198e-08	3.413e-08	3.413e-08	6.138e-08
+68	3.523e-09	3.523e-09	3.502e-08	9.928e-09	9.928e-09	3.745e-08
+72	1.056e-09	1.056e-09	5.175e-08	1.489e-09	1.489e-09	5.231e-08
+76	1.781e-10	1.781e-10	2.979e-08	3.771e-10	3.771e-10	2.992e-08
+80	3.189e-11	3.189e-11	3.221e-08	5.446e-11	5.446e-11	3.220e-08
+84	2.943e-12	2.943e-12	3.287e-08	3.739e-12	3.739e-12	3.287e-08
+88	7.051e-13	7.051e-13	3.262e-08	1.039e-12	1.039e-12	3.262e-08
+92	8.021e-14	8.041e-14	3.834e-08	1.675e-13	1.676e-13	3.834e-08
+96	6.945e-15	7.029e-15	4.199e-08	1.540e-14	1.532e-14	4.199e-08
+100	4.382e-16	7.516e-16	3.566e-08	8.655e-16	1.063e-15	3.566e-08
+104	7.821e-17	4.575e-16	3.811e-08	8.676e-17	4.271e-16	3.811e-08
+108	7.166e-17	5.269e-16	4.142e-08	7.515e-17	5.257e-16	4.142e-08
+112	3.767e-17	4.911e-16	2.658e-08	3.993e-17	4.923e-16	2.658e-08
+116	3.286e-17	2.782e-16	3.143e-08	3.264e-17	2.790e-16	3.143e-08
+120	4.229e-17	4.084e-16	3.057e-08	4.211e-17	4.076e-16	3.057e-08
+124	5.182e-17	3.743e-16	3.312e-08	5.084e-17	3.716e-16	3.312e-08
+128	4.748e-17	3.891e-16	3.163e-08	4.748e-17	3.882e-16	3.163e-08
+];
diff --git a/applications/fastgauss/output_error_p.m b/applications/fastgauss/output_error_p.m
new file mode 100644
index 0000000..fb28cd4
--- /dev/null
+++ b/applications/fastgauss/output_error_p.m
@@ -0,0 +1,52 @@
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id$
+N=1000;	M=1000;
+delta=2.000e+01+i*4.000e+01;
+error=[
+8	1.451e-03	4.437e-03	9.238e-03
+12	2.694e-04	1.785e-03	6.038e-03
+16	2.198e-05	6.606e-04	1.779e-03
+20	6.005e-05	1.084e-04	8.691e-04
+24	5.849e-05	2.308e-05	2.467e-04
+28	4.324e-05	2.349e-06	5.028e-05
+32	6.813e-05	6.029e-08	7.187e-06
+36	7.196e-05	5.159e-09	2.697e-06
+40	3.732e-05	7.599e-11	9.629e-08
+44	3.987e-05	1.102e-11	2.765e-08
+48	6.336e-05	1.013e-11	3.984e-09
+52	3.398e-05	7.971e-12	2.666e-10
+56	3.791e-05	4.946e-12	1.691e-11
+60	4.210e-05	1.251e-11	6.452e-13
+64	5.044e-05	1.025e-11	4.226e-14
+68	2.582e-05	4.764e-12	2.546e-15
+72	4.118e-05	8.966e-12	1.958e-16
+76	4.142e-05	8.439e-12	1.198e-16
+80	6.218e-05	1.454e-11	2.520e-16
+84	7.961e-05	1.330e-11	9.814e-17
+88	4.900e-05	1.787e-11	1.585e-16
+92	5.378e-05	1.005e-11	2.645e-16
+96	2.436e-05	5.746e-12	1.541e-16
+100	4.269e-05	1.186e-11	1.027e-16
+104	3.258e-05	8.346e-12	1.648e-16
+108	4.094e-05	1.176e-11	3.433e-16
+112	6.134e-05	1.921e-11	2.092e-16
+116	8.709e-05	1.517e-11	1.741e-16
+120	2.122e-05	6.791e-12	3.134e-16
+124	5.029e-05	5.540e-12	5.232e-16
+128	3.538e-05	7.571e-12	5.073e-16
+];
diff --git a/applications/fastgauss/show_results.m b/applications/fastgauss/show_results.m
index a67bc80..1e3164e 100644
--- a/applications/fastgauss/show_results.m
+++ b/applications/fastgauss/show_results.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: show_results.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 output_error
 
 a=real(delta);
diff --git a/applications/fastsum/Makefile.am b/applications/fastsum/Makefile.am
index 92a05d1..2879f86 100644
--- a/applications/fastsum/Makefile.am
+++ b/applications/fastsum/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
@@ -39,14 +39,14 @@ endif
 endif
 
 fastsum_test_SOURCES = fastsum_test.c
-fastsum_test_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
+fastsum_test_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3 at PREC_SUFFIX@.la
 
 fastsum_matlab_SOURCES = fastsum_matlab.c
-fastsum_matlab_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
+fastsum_matlab_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3 at PREC_SUFFIX@.la
 
 if HAVE_THREADS
   fastsum_test_threads_SOURCES = fastsum_test.c
-  fastsum_test_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la
+  fastsum_test_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3 at PREC_SUFFIX@_threads.la
 if HAVE_OPENMP
   fastsum_test_threads_CFLAGS = $(OPENMP_CFLAGS)
 endif
@@ -55,17 +55,17 @@ endif
 if HAVE_THREADS
 if HAVE_OPENMP
   fastsum_benchomp_SOURCES = fastsum_benchomp.c
-  fastsum_benchomp_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  fastsum_benchomp_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3 at PREC_SUFFIX@_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
   fastsum_benchomp_CFLAGS = $(OPENMP_CFLAGS)
 
   fastsum_benchomp_createdataset_SOURCES = fastsum_benchomp_createdataset.c
-  fastsum_benchomp_createdataset_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+  fastsum_benchomp_createdataset_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
   fastsum_benchomp_detail_single_SOURCES = fastsum_benchomp_detail.c
-  fastsum_benchomp_detail_single_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+  fastsum_benchomp_detail_single_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
   fastsum_benchomp_detail_threads_SOURCES = fastsum_benchomp_detail.c
-  fastsum_benchomp_detail_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  fastsum_benchomp_detail_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3 at PREC_SUFFIX@_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
   fastsum_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
 endif
 endif
diff --git a/applications/fastsum/Makefile.in b/applications/fastsum/Makefile.in
deleted file mode 100644
index 9157fa7..0000000
--- a/applications/fastsum/Makefile.in
+++ /dev/null
@@ -1,776 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
-
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = fastsum_test$(EXEEXT) fastsum_matlab$(EXEEXT) \
-	$(am__EXEEXT_1) $(am__EXEEXT_2)
-subdir = applications/fastsum
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libfastsum_la_DEPENDENCIES =
-am_libfastsum_la_OBJECTS = fastsum.lo
-libfastsum_la_OBJECTS = $(am_libfastsum_la_OBJECTS)
-libfastsum_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(libfastsum_la_LDFLAGS) $(LDFLAGS) -o $@
-libfastsum_threads_la_DEPENDENCIES =
-am__libfastsum_threads_la_SOURCES_DIST = fastsum.c fastsum.h kernels.h
- at HAVE_THREADS_TRUE@am_libfastsum_threads_la_OBJECTS =  \
- at HAVE_THREADS_TRUE@	libfastsum_threads_la-fastsum.lo
-libfastsum_threads_la_OBJECTS = $(am_libfastsum_threads_la_OBJECTS)
-libfastsum_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(libfastsum_threads_la_CFLAGS) $(CFLAGS) \
-	$(libfastsum_threads_la_LDFLAGS) $(LDFLAGS) -o $@
- at HAVE_THREADS_TRUE@am_libfastsum_threads_la_rpath =
-libkernels_la_LIBADD =
-am_libkernels_la_OBJECTS = kernels.lo
-libkernels_la_OBJECTS = $(am_libkernels_la_OBJECTS)
- at HAVE_THREADS_TRUE@am__EXEEXT_1 = fastsum_test_threads$(EXEEXT)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am__EXEEXT_2 = fastsum_benchomp$(EXEEXT) \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	fastsum_benchomp_createdataset$(EXEEXT) \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	fastsum_benchomp_detail_single$(EXEEXT) \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	fastsum_benchomp_detail_threads$(EXEEXT)
-PROGRAMS = $(noinst_PROGRAMS)
-am__fastsum_benchomp_SOURCES_DIST = fastsum_benchomp.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_OBJECTS = fastsum_benchomp-fastsum_benchomp.$(OBJEXT)
-fastsum_benchomp_OBJECTS = $(am_fastsum_benchomp_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_DEPENDENCIES =  \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libfastsum_threads.la \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libkernels.la \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3_threads.la
-fastsum_benchomp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(fastsum_benchomp_CFLAGS) \
-	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am__fastsum_benchomp_createdataset_SOURCES_DIST =  \
-	fastsum_benchomp_createdataset.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_createdataset_OBJECTS = fastsum_benchomp_createdataset.$(OBJEXT)
-fastsum_benchomp_createdataset_OBJECTS =  \
-	$(am_fastsum_benchomp_createdataset_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_createdataset_DEPENDENCIES =  \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libfastsum.la \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libkernels.la \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3.la
-am__fastsum_benchomp_detail_single_SOURCES_DIST =  \
-	fastsum_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_detail_single_OBJECTS = fastsum_benchomp_detail.$(OBJEXT)
-fastsum_benchomp_detail_single_OBJECTS =  \
-	$(am_fastsum_benchomp_detail_single_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_single_DEPENDENCIES =  \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libfastsum.la \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libkernels.la \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3.la
-am__fastsum_benchomp_detail_threads_SOURCES_DIST =  \
-	fastsum_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_fastsum_benchomp_detail_threads_OBJECTS = fastsum_benchomp_detail_threads-fastsum_benchomp_detail.$(OBJEXT)
-fastsum_benchomp_detail_threads_OBJECTS =  \
-	$(am_fastsum_benchomp_detail_threads_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_DEPENDENCIES =  \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libfastsum_threads.la \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	libkernels.la \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3_threads.la
-fastsum_benchomp_detail_threads_LINK = $(LIBTOOL) --tag=CC \
-	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) \
-	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_fastsum_matlab_OBJECTS = fastsum_matlab.$(OBJEXT)
-fastsum_matlab_OBJECTS = $(am_fastsum_matlab_OBJECTS)
-fastsum_matlab_DEPENDENCIES = libfastsum.la libkernels.la \
-	$(top_builddir)/libnfft3.la
-am_fastsum_test_OBJECTS = fastsum_test.$(OBJEXT)
-fastsum_test_OBJECTS = $(am_fastsum_test_OBJECTS)
-fastsum_test_DEPENDENCIES = libfastsum.la libkernels.la \
-	$(top_builddir)/libnfft3.la
-am__fastsum_test_threads_SOURCES_DIST = fastsum_test.c
- at HAVE_THREADS_TRUE@am_fastsum_test_threads_OBJECTS = fastsum_test_threads-fastsum_test.$(OBJEXT)
-fastsum_test_threads_OBJECTS = $(am_fastsum_test_threads_OBJECTS)
- at HAVE_THREADS_TRUE@fastsum_test_threads_DEPENDENCIES =  \
- at HAVE_THREADS_TRUE@	libfastsum_threads.la libkernels.la \
- at HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3_threads.la
-fastsum_test_threads_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(fastsum_test_threads_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libfastsum_la_SOURCES) $(libfastsum_threads_la_SOURCES) \
-	$(libkernels_la_SOURCES) $(fastsum_benchomp_SOURCES) \
-	$(fastsum_benchomp_createdataset_SOURCES) \
-	$(fastsum_benchomp_detail_single_SOURCES) \
-	$(fastsum_benchomp_detail_threads_SOURCES) \
-	$(fastsum_matlab_SOURCES) $(fastsum_test_SOURCES) \
-	$(fastsum_test_threads_SOURCES)
-DIST_SOURCES = $(libfastsum_la_SOURCES) \
-	$(am__libfastsum_threads_la_SOURCES_DIST) \
-	$(libkernels_la_SOURCES) $(am__fastsum_benchomp_SOURCES_DIST) \
-	$(am__fastsum_benchomp_createdataset_SOURCES_DIST) \
-	$(am__fastsum_benchomp_detail_single_SOURCES_DIST) \
-	$(am__fastsum_benchomp_detail_threads_SOURCES_DIST) \
-	$(fastsum_matlab_SOURCES) $(fastsum_test_SOURCES) \
-	$(am__fastsum_test_threads_SOURCES_DIST)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
- at HAVE_THREADS_FALSE@FASTSUM_TEST_THREADS = 
- at HAVE_THREADS_TRUE@FASTSUM_TEST_THREADS = fastsum_test_threads
- at HAVE_THREADS_FALSE@LIBFASTSUM_THREADS = 
- at HAVE_THREADS_TRUE@LIBFASTSUM_THREADS = libfastsum_threads.la
- at HAVE_OPENMP_FALSE@@HAVE_THREADS_TRUE at FASTSUM_BENCHOMP_PROGS = 
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at FASTSUM_BENCHOMP_PROGS = fastsum_benchomp fastsum_benchomp_createdataset fastsum_benchomp_detail_single fastsum_benchomp_detail_threads
- at HAVE_THREADS_FALSE@FASTSUM_BENCHOMP_PROGS = 
-noinst_LTLIBRARIES = libfastsum.la libkernels.la $(LIBFASTSUM_THREADS)
-libfastsum_la_SOURCES = fastsum.c fastsum.h kernels.h
-libfastsum_la_LIBADD = @fftw3_LIBS@
-libfastsum_la_LDFLAGS = @fftw3_LDFLAGS@
-libkernels_la_SOURCES = kernels.c
- at HAVE_THREADS_TRUE@libfastsum_threads_la_SOURCES = fastsum.c fastsum.h kernels.h
- at HAVE_THREADS_TRUE@libfastsum_threads_la_LIBADD = @fftw3_threads_LIBS@
- at HAVE_THREADS_TRUE@libfastsum_threads_la_LDFLAGS = @fftw3_threads_LDFLAGS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libfastsum_threads_la_CFLAGS = $(OPENMP_CFLAGS)
-fastsum_test_SOURCES = fastsum_test.c
-fastsum_test_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
-fastsum_matlab_SOURCES = fastsum_matlab.c
-fastsum_matlab_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la
- at HAVE_THREADS_TRUE@fastsum_test_threads_SOURCES = fastsum_test.c
- at HAVE_THREADS_TRUE@fastsum_test_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_test_threads_CFLAGS = $(OPENMP_CFLAGS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_SOURCES = fastsum_benchomp.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_CFLAGS = $(OPENMP_CFLAGS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_createdataset_SOURCES = fastsum_benchomp_createdataset.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_createdataset_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_single_SOURCES = fastsum_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_single_LDADD = libfastsum.la libkernels.la $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_SOURCES = fastsum_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_LDADD = libfastsum_threads.la libkernels.la $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at fastsum_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
-EXTRA_DIST = fastsum.m fastsum_test.m README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/fastsum/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/fastsum/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libfastsum.la: $(libfastsum_la_OBJECTS) $(libfastsum_la_DEPENDENCIES) $(EXTRA_libfastsum_la_DEPENDENCIES) 
-	$(libfastsum_la_LINK)  $(libfastsum_la_OBJECTS) $(libfastsum_la_LIBADD) $(LIBS)
-libfastsum_threads.la: $(libfastsum_threads_la_OBJECTS) $(libfastsum_threads_la_DEPENDENCIES) $(EXTRA_libfastsum_threads_la_DEPENDENCIES) 
-	$(libfastsum_threads_la_LINK) $(am_libfastsum_threads_la_rpath) $(libfastsum_threads_la_OBJECTS) $(libfastsum_threads_la_LIBADD) $(LIBS)
-libkernels.la: $(libkernels_la_OBJECTS) $(libkernels_la_DEPENDENCIES) $(EXTRA_libkernels_la_DEPENDENCIES) 
-	$(LINK)  $(libkernels_la_OBJECTS) $(libkernels_la_LIBADD) $(LIBS)
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-fastsum_benchomp$(EXEEXT): $(fastsum_benchomp_OBJECTS) $(fastsum_benchomp_DEPENDENCIES) $(EXTRA_fastsum_benchomp_DEPENDENCIES) 
-	@rm -f fastsum_benchomp$(EXEEXT)
-	$(fastsum_benchomp_LINK) $(fastsum_benchomp_OBJECTS) $(fastsum_benchomp_LDADD) $(LIBS)
-fastsum_benchomp_createdataset$(EXEEXT): $(fastsum_benchomp_createdataset_OBJECTS) $(fastsum_benchomp_createdataset_DEPENDENCIES) $(EXTRA_fastsum_benchomp_createdataset_DEPENDENCIES) 
-	@rm -f fastsum_benchomp_createdataset$(EXEEXT)
-	$(LINK) $(fastsum_benchomp_createdataset_OBJECTS) $(fastsum_benchomp_createdataset_LDADD) $(LIBS)
-fastsum_benchomp_detail_single$(EXEEXT): $(fastsum_benchomp_detail_single_OBJECTS) $(fastsum_benchomp_detail_single_DEPENDENCIES) $(EXTRA_fastsum_benchomp_detail_single_DEPENDENCIES) 
-	@rm -f fastsum_benchomp_detail_single$(EXEEXT)
-	$(LINK) $(fastsum_benchomp_detail_single_OBJECTS) $(fastsum_benchomp_detail_single_LDADD) $(LIBS)
-fastsum_benchomp_detail_threads$(EXEEXT): $(fastsum_benchomp_detail_threads_OBJECTS) $(fastsum_benchomp_detail_threads_DEPENDENCIES) $(EXTRA_fastsum_benchomp_detail_threads_DEPENDENCIES) 
-	@rm -f fastsum_benchomp_detail_threads$(EXEEXT)
-	$(fastsum_benchomp_detail_threads_LINK) $(fastsum_benchomp_detail_threads_OBJECTS) $(fastsum_benchomp_detail_threads_LDADD) $(LIBS)
-fastsum_matlab$(EXEEXT): $(fastsum_matlab_OBJECTS) $(fastsum_matlab_DEPENDENCIES) $(EXTRA_fastsum_matlab_DEPENDENCIES) 
-	@rm -f fastsum_matlab$(EXEEXT)
-	$(LINK) $(fastsum_matlab_OBJECTS) $(fastsum_matlab_LDADD) $(LIBS)
-fastsum_test$(EXEEXT): $(fastsum_test_OBJECTS) $(fastsum_test_DEPENDENCIES) $(EXTRA_fastsum_test_DEPENDENCIES) 
-	@rm -f fastsum_test$(EXEEXT)
-	$(LINK) $(fastsum_test_OBJECTS) $(fastsum_test_LDADD) $(LIBS)
-fastsum_test_threads$(EXEEXT): $(fastsum_test_threads_OBJECTS) $(fastsum_test_threads_DEPENDENCIES) $(EXTRA_fastsum_test_threads_DEPENDENCIES) 
-	@rm -f fastsum_test_threads$(EXEEXT)
-	$(fastsum_test_threads_LINK) $(fastsum_test_threads_OBJECTS) $(fastsum_test_threads_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp_createdataset.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp_detail.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_matlab.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_test.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsum_test_threads-fastsum_test.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/kernels.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libfastsum_threads_la-fastsum.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-libfastsum_threads_la-fastsum.lo: fastsum.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfastsum_threads_la_CFLAGS) $(CFLAGS) -MT libfastsum_threads_la-fastsum.lo -MD -MP -MF $(DEPDIR)/libfastsum_threads_la-fastsum.Tpo -c -o libfastsum_threads_la-fastsum.lo `test -f 'fastsum.c' || echo '$(srcdir)/'`fastsum.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfastsum_threads_la-fastsum.Tpo $(DEPDIR)/libfastsum_threads_la-fastsum.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum.c' object='libfastsum_threads_la-fastsum.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfastsum_threads_la_CFLAGS) $(CFLAGS) -c -o libfastsum_threads_la-fastsum.lo `test -f 'fastsum.c' || echo '$(srcdir)/'`fastsum.c
-
-fastsum_benchomp-fastsum_benchomp.o: fastsum_benchomp.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -MT fastsum_benchomp-fastsum_benchomp.o -MD -MP -MF $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo -c -o fastsum_benchomp-fastsum_benchomp.o `test -f 'fastsum_benchomp.c' || echo '$(srcdir)/'`fastsum_benchomp.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_benchomp.c' object='fastsum_benchomp-fastsum_benchomp.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp-fastsum_benchomp.o `test -f 'fastsum_benchomp.c' || echo '$(srcdir)/'`fastsum_benchomp.c
-
-fastsum_benchomp-fastsum_benchomp.obj: fastsum_benchomp.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -MT fastsum_benchomp-fastsum_benchomp.obj -MD -MP -MF $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo -c -o fastsum_benchomp-fastsum_benchomp.obj `if test -f 'fastsum_benchomp.c'; then $(CYGPATH_W) 'fastsum_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp.c'; fi`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Tpo $(DEPDIR)/fastsum_benchomp-fastsum_benchomp.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_benchomp.c' object='fastsum_benchomp-fastsum_benchomp.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp-fastsum_benchomp.obj `if test -f 'fastsum_benchomp.c'; then $(CYGPATH_W) 'fastsum_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp.c'; fi`
-
-fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o: fastsum_benchomp_detail.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o -MD -MP -MF $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o `test -f 'fastsum_benchomp_detail.c' || echo '$(srcdir)/'`fastsum_benchomp_detail.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_benchomp_detail.c' object='fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.o `test -f 'fastsum_benchomp_detail.c' || echo '$(srcdir)/'`fastsum_benchomp_detail.c
-
-fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj: fastsum_benchomp_detail.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj -MD -MP -MF $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj `if test -f 'fastsum_benchomp_detail.c'; then $(CYGPATH_W) 'fastsum_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp_ [...]
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Tpo $(DEPDIR)/fastsum_benchomp_detail_threads-fastsum_benchomp_detail.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_benchomp_detail.c' object='fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o fastsum_benchomp_detail_threads-fastsum_benchomp_detail.obj `if test -f 'fastsum_benchomp_detail.c'; then $(CYGPATH_W) 'fastsum_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_benchomp_detail.c'; fi`
-
-fastsum_test_threads-fastsum_test.o: fastsum_test.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -MT fastsum_test_threads-fastsum_test.o -MD -MP -MF $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo -c -o fastsum_test_threads-fastsum_test.o `test -f 'fastsum_test.c' || echo '$(srcdir)/'`fastsum_test.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo $(DEPDIR)/fastsum_test_threads-fastsum_test.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_test.c' object='fastsum_test_threads-fastsum_test.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -c -o fastsum_test_threads-fastsum_test.o `test -f 'fastsum_test.c' || echo '$(srcdir)/'`fastsum_test.c
-
-fastsum_test_threads-fastsum_test.obj: fastsum_test.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -MT fastsum_test_threads-fastsum_test.obj -MD -MP -MF $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo -c -o fastsum_test_threads-fastsum_test.obj `if test -f 'fastsum_test.c'; then $(CYGPATH_W) 'fastsum_test.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_test.c'; fi`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/fastsum_test_threads-fastsum_test.Tpo $(DEPDIR)/fastsum_test_threads-fastsum_test.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fastsum_test.c' object='fastsum_test_threads-fastsum_test.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fastsum_test_threads_CFLAGS) $(CFLAGS) -c -o fastsum_test_threads-fastsum_test.obj `if test -f 'fastsum_test.c'; then $(CYGPATH_W) 'fastsum_test.c'; else $(CYGPATH_W) '$(srcdir)/fastsum_test.c'; fi`
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	clean-noinstPROGRAMS mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \
-	cscopelist ctags distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/fastsum/fastsum.c b/applications/fastsum/fastsum.c
index 8bb53e0..5aaf49e 100644
--- a/applications/fastsum/fastsum.c
+++ b/applications/fastsum/fastsum.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: fastsum.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /*! \file fastsum.c
  *  \brief Fast NFFT-based summation algorithm.
@@ -32,7 +32,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "fastsum.h"
 #include "infft.h"
@@ -46,317 +45,378 @@
  */
 
 /** max */
-int max_i(int a, int b)
+static int max_i(int a, int b)
 {
   return a >= b ? a : b;
 }
 
 /** factorial */
-double fak(int n)
+static R fak(int n)
 {
-  if (n<=1) return 1.0;
-  else return (double)n*fak(n-1);
+  if (n <= 1)
+    return K(1.0);
+  else
+    return (R)(n) * fak(n - 1);
 }
 
 /** binomial coefficient */
-double binom(int n, int m)
+static R binom(int n, int m)
 {
-  return fak(n)/fak(m)/fak(n-m);
+  return fak(n) / fak(m) / fak(n - m);
 }
 
 /** basis polynomial for regularized kernel */
-double BasisPoly(int m, int r, double xx)
+static R BasisPoly(int m, int r, R xx)
 {
   int k;
-  double sum=0.0;
+  R sum = K(0.0);
 
-  for (k=0; k<=m-r; k++) {
-    sum+=binom(m+k,k)*pow((xx+1.0)/2.0,(double)k);
+  for (k = 0; k <= m - r; k++)
+  {
+    sum += binom(m + k, k) * POW((xx + K(1.0)) / K(2.0), (R) k);
   }
-  return sum*pow((xx+1.0),(double)r)*pow(1.0-xx,(double)(m+1))/(1<<(m+1))/fak(r); /* 1<<(m+1) = 2^(m+1) */
+  return sum * POW((xx + K(1.0)), (R) r) * POW(K(1.0) - xx, (R) (m + 1))
+      / (R)(1 << (m + 1)) / fak(r); /* 1<<(m+1) = 2^(m+1) */
 }
 
 /** regularized kernel with K_I arbitrary and K_B smooth to zero */
-double _Complex regkern(kernel k, double xx, int p, const double *param, double a, double b)
+C regkern(kernel k, R xx, int p, const R *param, R a, R b)
 {
   int r;
-  double _Complex sum=0.0;
-
-  if (xx<-0.5)
-    xx=-0.5;
-  if (xx>0.5)
-    xx=0.5;
-  if ((xx>=-0.5+b && xx<=-a) || (xx>=a && xx<=0.5-b)) {
-    return k(xx,0,param);
-  }
-  else if (xx<-0.5+b) {
-    sum=(k(-0.5,0,param)+k(0.5,0,param))/2.0
-        *BasisPoly(p-1,0,2.0*xx/b+(1.0-b)/b);
-    for (r=0; r<p; r++) {
-      sum+=pow(-b/2.0,(double)r)
-          *k(-0.5+b,r,param)
-          *BasisPoly(p-1,r,-2.0*xx/b+(b-1.0)/b);
+  C sum = K(0.0);
+
+  if (xx < -K(0.5))
+    xx = -K(0.5);
+  if (xx > K(0.5))
+    xx = K(0.5);
+  if ((xx >= -K(0.5) + b && xx <= -a) || (xx >= a && xx <= K(0.5) - b))
+  {
+    return k(xx, 0, param);
+  }
+  else if (xx < -K(0.5) + b)
+  {
+    sum = (k(-K(0.5), 0, param) + k(K(0.5), 0, param)) / K(2.0)
+        * BasisPoly(p - 1, 0, K(2.0) * xx / b + (K(1.0) - b) / b);
+    for (r = 0; r < p; r++)
+    {
+      sum += POW(-b / K(2.0), (R) r) * k(-K(0.5) + b, r, param)
+          * BasisPoly(p - 1, r, -K(2.0) * xx / b + (b - K(1.0)) / b);
     }
     return sum;
   }
-  else if ((xx>-a) && (xx<a)) {
-    for (r=0; r<p; r++) {
-      sum+=pow(a,(double)r)
-          *( k(-a,r,param)*BasisPoly(p-1,r,xx/a)
-              +k( a,r,param)*BasisPoly(p-1,r,-xx/a)*(r & 1 ? -1 : 1));
+  else if ((xx > -a) && (xx < a))
+  {
+    for (r = 0; r < p; r++)
+    {
+      sum +=
+          POW(a, (R) r)
+              * (k(-a, r, param) * BasisPoly(p - 1, r, xx / a)
+                  + k(a, r, param) * BasisPoly(p - 1, r, -xx / a)
+                      * (r & 1 ? -1 : 1));
     }
     return sum;
   }
-  else if (xx>0.5-b) {
-    sum=(k(-0.5,0,param)+k(0.5,0,param))/2.0
-        *BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b);
-    for (r=0; r<p; r++) {
-      sum+=pow(b/2.0,(double)r)
-          *k(0.5-b,r,param)
-          *BasisPoly(p-1,r,2.0*xx/b-(1.0-b)/b);
+  else if (xx > K(0.5) - b)
+  {
+    sum = (k(-K(0.5), 0, param) + k(K(0.5), 0, param)) / K(2.0)
+        * BasisPoly(p - 1, 0, -K(2.0) * xx / b + (K(1.0) - b) / b);
+    for (r = 0; r < p; r++)
+    {
+      sum += POW(b / K(2.0), (R) r) * k(K(0.5) - b, r, param)
+          * BasisPoly(p - 1, r, K(2.0) * xx / b - (K(1.0) - b) / b);
     }
     return sum;
   }
-  return k(xx,0,param);
+  return k(xx, 0, param);
 }
 
 /** regularized kernel with K_I arbitrary and K_B periodized
  *  (used in 1D)
  */
-double _Complex regkern1(kernel k, double xx, int p, const double *param, double a, double b)
+static C regkern1(kernel k, R xx, int p, const R *param, R a, R b)
 {
   int r;
-  double _Complex sum=0.0;
+  C sum = K(0.0);
 
-  if (xx<-0.5)
-    xx=-0.5;
-  if (xx>0.5)
-    xx=0.5;
-  if ((xx>=-0.5+b && xx<=-a) || (xx>=a && xx<=0.5-b))
+  if (xx < -K(0.5))
+    xx = -K(0.5);
+  if (xx > K(0.5))
+    xx = K(0.5);
+  if ((xx >= -K(0.5) + b && xx <= -a) || (xx >= a && xx <= K(0.5) - b))
   {
-    return k(xx,0,param);
+    return k(xx, 0, param);
   }
-  else if ((xx>-a) && (xx<a))
+  else if ((xx > -a) && (xx < a))
   {
-    for (r=0; r<p; r++) {
-      sum+=pow(a,(double)r)
-          *( k(-a,r,param)*BasisPoly(p-1,r,xx/a)
-              +k( a,r,param)*BasisPoly(p-1,r,-xx/a)*(r & 1 ? -1 : 1));
+    for (r = 0; r < p; r++)
+    {
+      sum +=
+          POW(a, (R) r)
+              * (k(-a, r, param) * BasisPoly(p - 1, r, xx / a)
+                  + k(a, r, param) * BasisPoly(p - 1, r, -xx / a)
+                      * (r & 1 ? -1 : 1));
     }
     return sum;
   }
-  else if (xx<-0.5+b)
+  else if (xx < -K(0.5) + b)
   {
-    for (r=0; r<p; r++) {
-      sum+=pow(b,(double)r)
-          *( k(0.5-b,r,param)*BasisPoly(p-1,r,(xx+0.5)/b)
-              +k(-0.5+b,r,param)*BasisPoly(p-1,r,-(xx+0.5)/b)*(r & 1 ? -1 : 1));
+    for (r = 0; r < p; r++)
+    {
+      sum += POW(b, (R) r)
+          * (k(K(0.5) - b, r, param) * BasisPoly(p - 1, r, (xx + K(0.5)) / b)
+              + k(-K(0.5) + b, r, param) * BasisPoly(p - 1, r, -(xx + K(0.5)) / b)
+                  * (r & 1 ? -1 : 1));
     }
     return sum;
   }
-  else if (xx>0.5-b)
+  else if (xx > K(0.5) - b)
   {
-    for (r=0; r<p; r++) {
-      sum+=pow(b,(double)r)
-          *( k(0.5-b,r,param)*BasisPoly(p-1,r,(xx-0.5)/b)
-              +k(-0.5+b,r,param)*BasisPoly(p-1,r,-(xx-0.5)/b)*(r & 1 ? -1 : 1));
+    for (r = 0; r < p; r++)
+    {
+      sum += POW(b, (R) r)
+          * (k(K(0.5) - b, r, param) * BasisPoly(p - 1, r, (xx - K(0.5)) / b)
+              + k(-K(0.5) + b, r, param) * BasisPoly(p - 1, r, -(xx - K(0.5)) / b)
+                  * (r & 1 ? -1 : 1));
     }
     return sum;
   }
-  return k(xx,0,param);
+  return k(xx, 0, param);
 }
 
 /** regularized kernel for even kernels with K_I even and K_B mirrored */
-double _Complex regkern2(kernel k, double xx, int p, const double *param, double a, double b)
-{
-  int r;
-  double _Complex sum=0.0;
-
-  xx=fabs(xx);
-
-  if (xx>0.5) {
-    for (r=0; r<p; r++) {
-      sum+=pow(b,(double)r)*k(0.5-b,r,param)
-          *(BasisPoly(p-1,r,0)+BasisPoly(p-1,r,0));
-    }
-    return sum;
-  }
-  else if ((a<=xx) && (xx<=0.5-b)) {
-    return k(xx,0,param);
-  }
-  else if (xx<a) {
-    for (r=0; r<p; r++) {
-      sum+=pow(-a,(double)r)*k(a,r,param)
-          *(BasisPoly(p-1,r,xx/a)+BasisPoly(p-1,r,-xx/a));
-    }
-    return sum;
-  }
-  else if ((0.5-b<xx) && (xx<=0.5)) {
-    for (r=0; r<p; r++) {
-      sum+=pow(b,(double)r)*k(0.5-b,r,param)
-          *(BasisPoly(p-1,r,(xx-0.5)/b)+BasisPoly(p-1,r,-(xx-0.5)/b));
-    }
-    return sum;
-  }
-  return 0.0;
-}
+//static C regkern2(kernel k, R xx, int p, const R *param, R a, R b)
+//{
+//  int r;
+//  C sum = K(0.0);
+//
+//  xx = FABS(xx);
+//
+//  if (xx > K(0.5))
+//  {
+//    for (r = 0; r < p; r++)
+//    {
+//      sum += POW(b, (R) r) * k(K(0.5) - b, r, param)
+//          * (BasisPoly(p - 1, r, 0) + BasisPoly(p - 1, r, 0));
+//    }
+//    return sum;
+//  }
+//  else if ((a <= xx) && (xx <= K(0.5) - b))
+//  {
+//    return k(xx, 0, param);
+//  }
+//  else if (xx < a)
+//  {
+//    for (r = 0; r < p; r++)
+//    {
+//      sum += POW(-a, (R) r) * k(a, r, param)
+//          * (BasisPoly(p - 1, r, xx / a) + BasisPoly(p - 1, r, -xx / a));
+//    }
+//    return sum;
+//  }
+//  else if ((K(0.5) - b < xx) && (xx <= K(0.5)))
+//  {
+//    for (r = 0; r < p; r++)
+//    {
+//      sum += POW(b, (R) r) * k(K(0.5) - b, r, param)
+//          * (BasisPoly(p - 1, r, (xx - K(0.5)) / b)
+//              + BasisPoly(p - 1, r, -(xx - K(0.5)) / b));
+//    }
+//    return sum;
+//  }
+//  return K(0.0);
+//}
 
 /** regularized kernel for even kernels with K_I even
  *  and K_B mirrored smooth to K(1/2) (used in dD, d>1)
  */
-double _Complex regkern3(kernel k, double xx, int p, const double *param, double a, double b)
+static C regkern3(kernel k, R xx, int p, const R *param, R a, R b)
 {
   int r;
-  double _Complex sum=0.0;
+  C sum = K(0.0);
 
-  xx=fabs(xx);
+  xx = FABS(xx);
 
-  if (xx>=0.5) {
-    /*return kern(typ,c,0,0.5);*/
-    xx=0.5;
+  if (xx >= K(0.5))
+  {
+    /*return kern(typ,c,0,K(0.5));*/
+    xx = K(0.5);
   }
   /* else */
-  if ((a<=xx) && (xx<=0.5-b)) {
-    return k(xx,0,param);
+  if ((a <= xx) && (xx <= K(0.5) - b))
+  {
+    return k(xx, 0, param);
   }
-  else if (xx<a) {
-    for (r=0; r<p; r++) {
-      sum+=pow(-a,(double)r)*k(a,r,param)
-          *(BasisPoly(p-1,r,xx/a)+BasisPoly(p-1,r,-xx/a));
+  else if (xx < a)
+  {
+    for (r = 0; r < p; r++)
+    {
+      sum += POW(-a, (R) r) * k(a, r, param)
+          * (BasisPoly(p - 1, r, xx / a) + BasisPoly(p - 1, r, -xx / a));
     }
     /*sum=kern(typ,c,0,xx); */
     return sum;
   }
-  else if ((0.5-b<xx) && (xx<=0.5)) {
-    sum=k(0.5,0,param)*BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b);
-    /* sum=regkern2(typ,c,p,a,b, 0.5)*BasisPoly(p-1,0,-2.0*xx/b+(1.0-b)/b); */
-    for (r=0; r<p; r++) {
-      sum+=pow(b/2.0,(double)r)
-          *k(0.5-b,r,param)
-          *BasisPoly(p-1,r,2.0*xx/b-(1.0-b)/b);
+  else if ((K(0.5) - b < xx) && (xx <= K(0.5)))
+  {
+    sum = k(K(0.5), 0, param) * BasisPoly(p - 1, 0, -K(2.0) * xx / b + (K(1.0) - b) / b);
+    /* sum=regkern2(typ,c,p,a,b, K(0.5))*BasisPoly(p-1,0,-K(2.0)*xx/b+(K(1.0)-b)/b); */
+    for (r = 0; r < p; r++)
+    {
+      sum += POW(b / K(2.0), (R) r) * k(K(0.5) - b, r, param)
+          * BasisPoly(p - 1, r, K(2.0) * xx / b - (K(1.0) - b) / b);
     }
     return sum;
   }
-  return 0.0;
+  return K(0.0);
 }
 
 /** linear spline interpolation in near field with even kernels */
-double _Complex linintkern(const double x, const double _Complex *Add,
-  const int Ad, const double a)
-{
-  double c,c1,c3;
-  int r;
-  double _Complex f1,f2;
-
-  c=x*Ad/a;
-  r=c; r=abs(r);
-  f1=Add[r];f2=Add[r+1];
-  c=fabs(c);
-  c1=c-r;
-  c3=c1-1.0;
-  return (-f1*c3+f2*c1);
-}
-
-double _Complex quadrintkern(const double x, const double _Complex *Add,
-  const int Ad, const double a)
-{
-  double c,c1,c2,c3;
-  int r;
-  double _Complex f0,f1,f2;
-
-  c=x*Ad/a;
-  r=c; r=abs(r);
-  if (r==0) {f0=Add[r+1];f1=Add[r];f2=Add[r+1];}
-  else { f0=Add[r-1];f1=Add[r];f2=Add[r+1];}
-  c=fabs(c);
-  c1=c-r;
-  c2=c1+1.0;
-  c3=c1-1.0;
-  return (f0*c1*c3/2.0-f1*c2*c3+f2*c2*c1/2.0);
-}
+//static C linintkern(const R x, const C *Add, const int Ad, const R a)
+//{
+//  R c, c1, c3;
+//  int r;
+//  C f1, f2;
+//
+//  c = x * Ad / a;
+//  r = (int)(LRINT(c));
+//  r = abs(r);
+//  f1 = Add[r];
+//  f2 = Add[r + 1];
+//  c = FABS(c);
+//  c1 = c - r;
+//  c3 = c1 - K(1.0);
+//  return (-f1 * c3 + f2 * c1);
+//}
+//
+//static C quadrintkern(const R x, const C *Add, const int Ad, const R a)
+//{
+//  R c, c1, c2, c3;
+//  int r;
+//  C f0, f1, f2;
+//
+//  c = x * Ad / a;
+//  r = (int)(LRINT(c));
+//  r = abs(r);
+//  if (r == 0)
+//  {
+//    f0 = Add[r + 1];
+//    f1 = Add[r];
+//    f2 = Add[r + 1];
+//  }
+//  else
+//  {
+//    f0 = Add[r - 1];
+//    f1 = Add[r];
+//    f2 = Add[r + 1];
+//  }
+//  c = FABS(c);
+//  c1 = c - r;
+//  c2 = c1 + K(1.0);
+//  c3 = c1 - K(1.0);
+//  return (f0 * c1 * c3 / K(2.0) - f1 * c2 * c3 + f2 * c2 * c1 / K(2.0));
+//}
 
 /** cubic spline interpolation in near field with even kernels */
-double _Complex kubintkern(const double x, const double _Complex *Add,
-  const int Ad, const double a)
+C kubintkern(const R x, const C *Add, const int Ad, const R a)
 {
-  double c,c1,c2,c3,c4;
+  R c, c1, c2, c3, c4;
   int r;
-  double _Complex f0,f1,f2,f3;
-  c=x*Ad/a;
-  r=c; r=abs(r);
-  if (r==0) {f0=Add[r+1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
-  else { f0=Add[r-1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
-  c=fabs(c);
-  c1=c-r;
-  c2=c1+1.0;
-  c3=c1-1.0;
-  c4=c1-2.0;
-  /* return(-f0*(c-r)*(c-r-1.0)*(c-r-2.0)/6.0+f1*(c-r+1.0)*(c-r-1.0)*(c-r-2.0)/2-
-     f2*(c-r+1.0)*(c-r)*(c-r-2.0)/2+f3*(c-r+1.0)*(c-r)*(c-r-1.0)/6.0); */
-  return(-f0*c1*c3*c4/6.0+f1*c2*c3*c4/2.0-f2*c2*c1*c4/2.0+f3*c2*c1*c3/6.0);
+  C f0, f1, f2, f3;
+  c = x * (R)(Ad) / a;
+  r = (int)(LRINT(c));
+  r = abs(r);
+  if (r == 0)
+  {
+    f0 = Add[r + 1];
+    f1 = Add[r];
+    f2 = Add[r + 1];
+    f3 = Add[r + 2];
+  }
+  else
+  {
+    f0 = Add[r - 1];
+    f1 = Add[r];
+    f2 = Add[r + 1];
+    f3 = Add[r + 2];
+  }
+  c = FABS(c);
+  c1 = c - (R)(r);
+  c2 = c1 + K(1.0);
+  c3 = c1 - K(1.0);
+  c4 = c1 - K(2.0);
+  /* return(-f0*(c-r)*(c-r-K(1.0))*(c-r-K(2.0))/K(6.0)+f1*(c-r+K(1.0))*(c-r-K(1.0))*(c-r-K(2.0))/2-
+   f2*(c-r+K(1.0))*(c-r)*(c-r-K(2.0))/2+f3*(c-r+K(1.0))*(c-r)*(c-r-K(1.0))/K(6.0)); */
+  return (-f0 * c1 * c3 * c4 / K(6.0) + f1 * c2 * c3 * c4 / K(2.0)
+      - f2 * c2 * c1 * c4 / K(2.0) + f3 * c2 * c1 * c3 / K(6.0));
 }
 
 /** cubic spline interpolation in near field with arbitrary kernels */
-double _Complex kubintkern1(const double x, const double _Complex *Add,
-  const int Ad, const double a)
+static C kubintkern1(const R x, const C *Add, const int Ad, const R a)
 {
-  double c,c1,c2,c3,c4;
+  R c, c1, c2, c3, c4;
   int r;
-  double _Complex f0,f1,f2,f3;
-  Add+=2;
-  c=(x+a)*Ad/2/a;
-  r=c; r=abs(r);
+  C f0, f1, f2, f3;
+  Add += 2;
+  c = (x + a) * (R)(Ad) / K(2.0) / a;
+  r = (int)(LRINT(c));
+  r = abs(r);
   /*if (r==0) {f0=Add[r];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
-  else */
-  { f0=Add[r-1];f1=Add[r];f2=Add[r+1];f3=Add[r+2];}
-  c=fabs(c);
-  c1=c-r;
-  c2=c1+1.0;
-  c3=c1-1.0;
-  c4=c1-2.0;
-  /* return(-f0*(c-r)*(c-r-1.0)*(c-r-2.0)/6.0+f1*(c-r+1.0)*(c-r-1.0)*(c-r-2.0)/2-
-     f2*(c-r+1.0)*(c-r)*(c-r-2.0)/2+f3*(c-r+1.0)*(c-r)*(c-r-1.0)/6.0); */
-  return(-f0*c1*c3*c4/6.0+f1*c2*c3*c4/2.0-f2*c2*c1*c4/2.0+f3*c2*c1*c3/6.0);
+   else */
+  {
+    f0 = Add[r - 1];
+    f1 = Add[r];
+    f2 = Add[r + 1];
+    f3 = Add[r + 2];
+  }
+  c = FABS(c);
+  c1 = c - (R)(r);
+  c2 = c1 + K(1.0);
+  c3 = c1 - K(1.0);
+  c4 = c1 - K(2.0);
+  /* return(-f0*(c-r)*(c-r-K(1.0))*(c-r-K(2.0))/K(6.0)+f1*(c-r+K(1.0))*(c-r-K(1.0))*(c-r-K(2.0))/2-
+   f2*(c-r+K(1.0))*(c-r)*(c-r-K(2.0))/2+f3*(c-r+K(1.0))*(c-r)*(c-r-K(1.0))/K(6.0)); */
+  return (-f0 * c1 * c3 * c4 / K(6.0) + f1 * c2 * c3 * c4 / K(2.0)
+      - f2 * c2 * c1 * c4 / K(2.0) + f3 * c2 * c1 * c3 / K(6.0));
 }
 
 /** quicksort algorithm for source knots and associated coefficients */
-void quicksort(int d, int t, double *x, double _Complex *alpha, int N)
+static void quicksort(int d, int t, R *x, C *alpha, int N)
 {
-  int lpos=0;
-  int rpos=N-1;
-  /*double pivot=x[((N-1)/2)*d+t];*/
-  double pivot=x[(N/2)*d+t];
+  int lpos = 0;
+  int rpos = N - 1;
+  /*R pivot=x[((N-1)/2)*d+t];*/
+  R pivot = x[(N / 2) * d + t];
 
   int k;
-  double temp1;
-  double _Complex temp2;
+  R temp1;
+  C temp2;
 
-  while (lpos<=rpos)
+  while (lpos <= rpos)
   {
-    while (x[lpos*d+t]<pivot)
+    while (x[lpos * d + t] < pivot)
       lpos++;
-    while (x[rpos*d+t]>pivot)
+    while (x[rpos * d + t] > pivot)
       rpos--;
-    if (lpos<=rpos)
+    if (lpos <= rpos)
     {
-      for (k=0; k<d; k++)
+      for (k = 0; k < d; k++)
       {
-        temp1=x[lpos*d+k];
-        x[lpos*d+k]=x[rpos*d+k];
-        x[rpos*d+k]=temp1;
+        temp1 = x[lpos * d + k];
+        x[lpos * d + k] = x[rpos * d + k];
+        x[rpos * d + k] = temp1;
       }
-      temp2=alpha[lpos];
-      alpha[lpos]=alpha[rpos];
-      alpha[rpos]=temp2;
+      temp2 = alpha[lpos];
+      alpha[lpos] = alpha[rpos];
+      alpha[rpos] = temp2;
 
       lpos++;
       rpos--;
     }
   }
-  if (0<rpos)
-    quicksort(d,t,x,alpha,rpos+1);
-  if (lpos<N-1)
-    quicksort(d,t,x+lpos*d,alpha+lpos,N-lpos);
+  if (0 < rpos)
+    quicksort(d, t, x, alpha, rpos + 1);
+  if (lpos < N - 1)
+    quicksort(d, t, x + lpos * d, alpha + lpos, N - lpos);
 }
 
 /** initialize box-based search data structures */
@@ -364,18 +424,18 @@ static void BuildBox(fastsum_plan *ths)
 {
   int t, l;
   int *box_index;
-  double val[ths->d];
+  R val[ths->d];
 
-  box_index = (int *) malloc(ths->box_count * sizeof(int));
-  for (t=0; t < ths->box_count; t++)
+  box_index = (int *) NFFT(malloc)((size_t)(ths->box_count) * sizeof(int));
+  for (t = 0; t < ths->box_count; t++)
     box_index[t] = 0;
 
-  for (l=0; l < ths->N_total; l++)
+  for (l = 0; l < ths->N_total; l++)
   {
     int ind = 0;
-    for (t=0; t < ths->d; t++)
+    for (t = 0; t < ths->d; t++)
     {
-      val[t] = ths->x[ths->d * l + t] + 0.25 - ths->eps_B/2.0;
+      val[t] = ths->x[ths->d * l + t] + K(0.25) - ths->eps_B / K(2.0);
       ind *= ths->box_count_per_dim;
       ind += (int) (val[t] / ths->eps_I);
     }
@@ -383,229 +443,263 @@ static void BuildBox(fastsum_plan *ths)
   }
 
   ths->box_offset[0] = 0;
-  for (t=1; t<=ths->box_count; t++)
+  for (t = 1; t <= ths->box_count; t++)
   {
-    ths->box_offset[t] = ths->box_offset[t-1] + box_index[t-1];
-    box_index[t-1] = ths->box_offset[t-1];
+    ths->box_offset[t] = ths->box_offset[t - 1] + box_index[t - 1];
+    box_index[t - 1] = ths->box_offset[t - 1];
   }
 
-  for (l=0; l < ths->N_total; l++)
+  for (l = 0; l < ths->N_total; l++)
   {
     int ind = 0;
-    for (t=0; t < ths->d; t++)
+    for (t = 0; t < ths->d; t++)
     {
-      val[t] = ths->x[ths->d * l + t] + 0.25 - ths->eps_B/2.0;
+      val[t] = ths->x[ths->d * l + t] + K(0.25) - ths->eps_B / K(2.0);
       ind *= ths->box_count_per_dim;
       ind += (int) (val[t] / ths->eps_I);
     }
 
     ths->box_alpha[box_index[ind]] = ths->alpha[l];
 
-    for (t=0; t < ths->d; t++)
+    for (t = 0; t < ths->d; t++)
     {
       ths->box_x[ths->d * box_index[ind] + t] = ths->x[ths->d * l + t];
     }
     box_index[ind]++;
   }
-  free(box_index);
+  NFFT(free)(box_index);
 }
 
 /** inner computation function for box-based near field correction */
-static inline double _Complex calc_SearchBox(int d, double *y, double *x, double _Complex *alpha, int start, int end_lt, const double _Complex *Add, const int Ad, int p, double a, const kernel k, const double *param, const unsigned flags)
+static inline C calc_SearchBox(int d, R *y, R *x, C *alpha, int start,
+    int end_lt, const C *Add, const int Ad, int p, R a, const kernel k,
+    const R *param, const unsigned flags)
 {
-  double _Complex result = 0.0;
+  C result = K(0.0);
 
   int m, l;
-  double r;
+  R r;
 
   for (m = start; m < end_lt; m++)
   {
-      if (d==1)
+    if (d == 1)
+    {
+      r = y[0] - x[m];
+    }
+    else
+    {
+      r = K(0.0);
+      for (l = 0; l < d; l++)
+        r += (y[l] - x[m * d + l]) * (y[l] - x[m * d + l]);
+      r = SQRT(r);
+    }
+    if (FABS(r) < a)
+    {
+      result += alpha[m] * k(r, 0, param); /* alpha*(kern-regkern) */
+      if (d == 1)
       {
-        r = y[0]-x[m];
+        if (flags & EXACT_NEARFIELD)
+          result -= alpha[m] * regkern1(k, r, p, param, a, K(1.0) / K(16.0)); /* exact value (in 1D)  */
+        else
+          result -= alpha[m] * kubintkern1(r, Add, Ad, a); /* spline approximation */
       }
       else
       {
-        r=0.0;
-        for (l=0; l<d; l++)
-          r+=(y[l]-x[m*d+l])*(y[l]-x[m*d+l]);
-        r=sqrt(r);
-      }
-      if (fabs(r)<a)
-      {
-        result += alpha[m]*k(r,0,param);              /* alpha*(kern-regkern) */
-	if (d==1)
-	{
-          if (flags & EXACT_NEARFIELD)
-            result -= alpha[m]*regkern1(k,r,p,param,a,1.0/16.0); /* exact value (in 1D)  */
-          else
-            result -= alpha[m]*kubintkern1(r,Add,Ad,a);               /* spline approximation */
-	}
-	else
-	{
-          if (flags & EXACT_NEARFIELD)
-            result -= alpha[m]*regkern(k,r,p,param,a,1.0/16.0);  /* exact value (in dD)  */
-          else
+        if (flags & EXACT_NEARFIELD)
+          result -= alpha[m] * regkern(k, r, p, param, a, K(1.0) / K(16.0)); /* exact value (in dD)  */
+        else
 #if defined(NF_KUB)
-            result -= alpha[m]*kubintkern(r,Add,Ad,a);                /* spline approximation */
+          result -= alpha[m] * kubintkern(r, Add, Ad, a); /* spline approximation */
 #elif defined(NF_QUADR)
-            result -= alpha[m]*quadrintkern(r,Add,Ad,a);                /* spline approximation */
+        result -= alpha[m]*quadrintkern(r,Add,Ad,a); /* spline approximation */
 #elif defined(NF_LIN)
-            result -= alpha[m]*linintkern(r,Add,Ad,a);                /* spline approximation */
+        result -= alpha[m]*linintkern(r,Add,Ad,a); /* spline approximation */
 #else
-  #error define interpolation method
+#error define interpolation method
 #endif
-        }
       }
+    }
   }
   return result;
 }
 
 /** box-based near field correction */
-static double _Complex SearchBox(double *y, fastsum_plan *ths)
+static C SearchBox(R *y, fastsum_plan *ths)
 {
-  double _Complex val = 0.0;
-  int t, l;
+  C val = K(0.0);
+  int t;
   int y_multiind[ths->d];
   int multiindex[ths->d];
   int y_ind;
 
-  for (t=0; t < ths->d; t++)
+  for (t = 0; t < ths->d; t++)
   {
-    y_multiind[t] = ((y[t] + 0.25 - ths->eps_B/2.0) / ths->eps_I);
+    y_multiind[t] = (int)(LRINT((y[t] + K(0.25) - ths->eps_B / K(2.0)) / ths->eps_I));
   }
 
-  if (ths->d==1)
+  if (ths->d == 1)
   {
-    for (y_ind = max_i(0, y_multiind[0]-1); y_ind < ths->box_count_per_dim && y_ind <= y_multiind[0]+1; y_ind++){
-      val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths->Add, ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
-      }
+    for (y_ind = max_i(0, y_multiind[0] - 1);
+        y_ind < ths->box_count_per_dim && y_ind <= y_multiind[0] + 1; y_ind++)
+    {
+      val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha,
+          ths->box_offset[y_ind], ths->box_offset[y_ind + 1], ths->Add, ths->Ad,
+          ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
+    }
   }
-  else if (ths->d==2)
+  else if (ths->d == 2)
   {
-    for (multiindex[0] = max_i(0, y_multiind[0]-1); multiindex[0] < ths->box_count_per_dim && multiindex[0] <= y_multiind[0]+1; multiindex[0]++)
-      for (multiindex[1] = max_i(0, y_multiind[1]-1); multiindex[1] < ths->box_count_per_dim && multiindex[1] <= y_multiind[1]+1; multiindex[1]++)
+    for (multiindex[0] = max_i(0, y_multiind[0] - 1);
+        multiindex[0] < ths->box_count_per_dim
+            && multiindex[0] <= y_multiind[0] + 1; multiindex[0]++)
+      for (multiindex[1] = max_i(0, y_multiind[1] - 1);
+          multiindex[1] < ths->box_count_per_dim
+              && multiindex[1] <= y_multiind[1] + 1; multiindex[1]++)
       {
         y_ind = (ths->box_count_per_dim * multiindex[0]) + multiindex[1];
-        val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths->Add, ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
+        val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha,
+            ths->box_offset[y_ind], ths->box_offset[y_ind + 1], ths->Add,
+            ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
       }
   }
-  else if(ths->d==3)
+  else if (ths->d == 3)
   {
-    for (multiindex[0] = max_i(0, y_multiind[0]-1); multiindex[0] < ths->box_count_per_dim && multiindex[0] <= y_multiind[0]+1; multiindex[0]++)
-      for (multiindex[1] = max_i(0, y_multiind[1]-1); multiindex[1] < ths->box_count_per_dim && multiindex[1] <= y_multiind[1]+1; multiindex[1]++)
-        for (multiindex[2] = max_i(0, y_multiind[2]-1); multiindex[2] < ths->box_count_per_dim && multiindex[2] <= y_multiind[2]+1; multiindex[2]++)
+    for (multiindex[0] = max_i(0, y_multiind[0] - 1);
+        multiindex[0] < ths->box_count_per_dim
+            && multiindex[0] <= y_multiind[0] + 1; multiindex[0]++)
+      for (multiindex[1] = max_i(0, y_multiind[1] - 1);
+          multiindex[1] < ths->box_count_per_dim
+              && multiindex[1] <= y_multiind[1] + 1; multiindex[1]++)
+        for (multiindex[2] = max_i(0, y_multiind[2] - 1);
+            multiindex[2] < ths->box_count_per_dim
+                && multiindex[2] <= y_multiind[2] + 1; multiindex[2]++)
         {
-          y_ind = ((ths->box_count_per_dim * multiindex[0]) + multiindex[1]) * ths->box_count_per_dim + multiindex[2];
-          val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha, ths->box_offset[y_ind], ths->box_offset[y_ind+1], ths->Add, ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param, ths->flags);
+          y_ind = ((ths->box_count_per_dim * multiindex[0]) + multiindex[1])
+              * ths->box_count_per_dim + multiindex[2];
+          val += calc_SearchBox(ths->d, y, ths->box_x, ths->box_alpha,
+              ths->box_offset[y_ind], ths->box_offset[y_ind + 1], ths->Add,
+              ths->Ad, ths->p, ths->eps_I, ths->k, ths->kernel_param,
+              ths->flags);
         }
   }
-  else {
-    exit(-1);
+  else
+  {
+    exit(EXIT_FAILURE);
   }
   return val;
 }
 
 /** recursive sort of source knots dimension by dimension to get tree structure */
-void BuildTree(int d, int t, double *x, double _Complex *alpha, int N)
+static void BuildTree(int d, int t, R *x, C *alpha, int N)
 {
-  if (N>1)
+  if (N > 1)
   {
-    int m=N/2;
+    int m = N / 2;
 
-    quicksort(d,t,x,alpha,N);
+    quicksort(d, t, x, alpha, N);
 
-    BuildTree(d, (t+1)%d, x, alpha, m);
-    BuildTree(d, (t+1)%d, x+(m+1)*d, alpha+(m+1), N-m-1);
+    BuildTree(d, (t + 1) % d, x, alpha, m);
+    BuildTree(d, (t + 1) % d, x + (m + 1) * d, alpha + (m + 1), N - m - 1);
   }
 }
 
 /** fast search in tree of source knots for near field computation*/
-double _Complex SearchTree(const int d, const int t, const double *x,
-  const double _Complex *alpha, const double *xmin, const double *xmax,
-  const int N, const kernel k, const double *param, const int Ad,
-  const double _Complex *Add, const int p, const unsigned flags)
+static C SearchTree(const int d, const int t, const R *x, const C *alpha,
+    const R *xmin, const R *xmax, const int N, const kernel k, const R *param,
+    const int Ad, const C *Add, const int p, const unsigned flags)
 {
-  int m=N/2;
-  double Min=xmin[t], Max=xmax[t], Median=x[m*d+t];
-  double a=fabs(Max-Min)/2;
-  int l;
-  int E=0;
-  double r;
-
-  if (N==0)
-    return 0.0;
-  if (Min>Median)
-    return SearchTree(d,(t+1)%d,x+(m+1)*d,alpha+(m+1),xmin,xmax,N-m-1,k,param,Ad,Add,p,flags);
-  else if (Max<Median)
-    return SearchTree(d,(t+1)%d,x,alpha,xmin,xmax,m,k,param,Ad,Add,p,flags);
+  if (N == 0)
+  {
+      return K(0.0);
+  }
   else
   {
-    double _Complex result = 0.0;
-    E=0;
-
-    for (l=0; l<d; l++)
-    {
-      if ( x[m*d+l]>xmin[l] && x[m*d+l]<xmax[l] )
-        E++;
-    }
-
-    if (E==d)
-    {
-      if (d==1)
-      {
-        r = xmin[0]+a-x[m];  /* remember: xmin+a = y */
-      }
+      int m = N / 2;
+      R Min = xmin[t];
+      R Max = xmax[t];
+      R Median = x[m * d + t];
+      R a = FABS(Max - Min) / 2;
+      int l;
+      int E = 0;
+      R r;
+
+      if (Min > Median)
+          return SearchTree(d, (t + 1) % d, x + (m + 1) * d, alpha + (m + 1), xmin,
+                  xmax, N - m - 1, k, param, Ad, Add, p, flags);
+      else if (Max < Median)
+          return SearchTree(d, (t + 1) % d, x, alpha, xmin, xmax, m, k, param, Ad,
+                  Add, p, flags);
       else
       {
-        r=0.0;
-        for (l=0; l<d; l++)
-          r+=(xmin[l]+a-x[m*d+l])*(xmin[l]+a-x[m*d+l]);  /* remember: xmin+a = y */
-        r=sqrt(r);
-      }
-      if (fabs(r)<a)
-      {
-        result += alpha[m]*k(r,0,param);                         /* alpha*(kern-regkern) */
-        if (d==1)
-        {
-          if (flags & EXACT_NEARFIELD)
-            result -= alpha[m]*regkern1(k,r,p,param,a,1.0/16.0); /* exact value (in 1D)  */
-          else
-            result -= alpha[m]*kubintkern1(r,Add,Ad,a);               /* spline approximation */
-        }
-        else
-        {
-          if (flags & EXACT_NEARFIELD)
-            result -= alpha[m]*regkern(k,r,p,param,a,1.0/16.0);  /* exact value (in dD)  */
-          else
+          C result = K(0.0);
+          E = 0;
+
+          for (l = 0; l < d; l++)
+          {
+              if (x[m * d + l] > xmin[l] && x[m * d + l] < xmax[l])
+                  E++;
+          }
+
+          if (E == d)
+          {
+              if (d == 1)
+              {
+                  r = xmin[0] + a - x[m]; /* remember: xmin+a = y */
+              }
+              else
+              {
+                  r = K(0.0);
+                  for (l = 0; l < d; l++)
+                      r += (xmin[l] + a - x[m * d + l]) * (xmin[l] + a - x[m * d + l]); /* remember: xmin+a = y */
+                  r = SQRT(r);
+              }
+              if (FABS(r) < a)
+              {
+                  result += alpha[m] * k(r, 0, param); /* alpha*(kern-regkern) */
+                  if (d == 1)
+                  {
+                      if (flags & EXACT_NEARFIELD)
+                          result -= alpha[m] * regkern1(k, r, p, param, a, K(1.0) / K(16.0)); /* exact value (in 1D)  */
+                      else
+                          result -= alpha[m] * kubintkern1(r, Add, Ad, a); /* spline approximation */
+                  }
+                  else
+                  {
+                      if (flags & EXACT_NEARFIELD)
+                          result -= alpha[m] * regkern(k, r, p, param, a, K(1.0) / K(16.0)); /* exact value (in dD)  */
+                      else
 #if defined(NF_KUB)
-            result -= alpha[m]*kubintkern(r,Add,Ad,a);                /* spline approximation */
+                          result -= alpha[m] * kubintkern(r, Add, Ad, a); /* spline approximation */
 #elif defined(NF_QUADR)
-            result -= alpha[m]*quadrintkern(r,Add,Ad,a);                /* spline approximation */
+                      result -= alpha[m]*quadrintkern(r,Add,Ad,a); /* spline approximation */
 #elif defined(NF_LIN)
-            result -= alpha[m]*linintkern(r,Add,Ad,a);                /* spline approximation */
+                      result -= alpha[m]*linintkern(r,Add,Ad,a); /* spline approximation */
 #else
-  #error define interpolation method
+#error define interpolation method
 #endif
-        }
+                  }
+              }
+          }
+          result += SearchTree(d, (t + 1) % d, x + (m + 1) * d, alpha + (m + 1), xmin,
+                  xmax, N - m - 1, k, param, Ad, Add, p, flags)
+                + SearchTree(d, (t + 1) % d, x, alpha, xmin, xmax, m, k, param, Ad, Add,
+                        p, flags);
+          return result;
       }
-    }
-    result += SearchTree(d,(t+1)%d,x+(m+1)*d,alpha+(m+1),xmin,xmax,N-m-1,k,param,Ad,Add,p,flags)
-      + SearchTree(d,(t+1)%d,x,alpha,xmin,xmax,m,k,param,Ad,Add,p,flags);
-    return result;
   }
 }
 
 /** initialization of fastsum plan */
-void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double eps_I, double eps_B)
+void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total,
+    kernel k, R *param, unsigned flags, int nn, int m, int p, R eps_I, R eps_B)
 {
   int t;
   int N[d], n[d];
   int n_total;
-  int sort_flags_trafo = 0;
-  int sort_flags_adjoint = 0;
+  unsigned sort_flags_trafo = 0U;
+  unsigned sort_flags_adjoint = 0U;
 #ifdef _OPENMP
-  int nthreads = nfft_get_omp_num_threads();
+  int nthreads = NFFT(get_num_threads)();
 #endif
 
   if (d > 1)
@@ -623,11 +717,11 @@ void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, kerne
   ths->N_total = N_total;
   ths->M_total = M_total;
 
-  ths->x = (double *)nfft_malloc(d*N_total*(sizeof(double)));
-  ths->alpha = (double _Complex *)nfft_malloc(N_total*(sizeof(double _Complex)));
+  ths->x = (R *) NFFT(malloc)((size_t)(d * N_total) * (sizeof(R)));
+  ths->alpha = (C *) NFFT(malloc)((size_t)(N_total) * (sizeof(C)));
 
-  ths->y = (double *)nfft_malloc(d*M_total*(sizeof(double)));
-  ths->f = (double _Complex *)nfft_malloc(M_total*(sizeof(double _Complex)));
+  ths->y = (R *) NFFT(malloc)((size_t)(d * M_total) * (sizeof(R)));
+  ths->f = (C *) NFFT(malloc)((size_t)(M_total) * (sizeof(C)));
 
   ths->k = k;
   ths->kernel_param = param;
@@ -635,89 +729,99 @@ void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, kerne
   ths->flags = flags;
 
   ths->p = p;
-  ths->eps_I = eps_I; /* =(double)ths->p/(double)nn; */  /** inner boundary */
-  ths->eps_B = eps_B; /* =1.0/16.0; */                   /** outer boundary */
+  ths->eps_I = eps_I; /* =(R)ths->p/(R)nn; *//** inner boundary */
+  ths->eps_B = eps_B; /* =K(1.0)/K(16.0); *//** outer boundary */
 
   /** init spline for near field computation */
   if (!(ths->flags & EXACT_NEARFIELD))
   {
-    if (ths->d==1)
+    if (ths->d == 1)
     {
-      ths->Ad = 4*(ths->p)*(ths->p);
-      ths->Add = (double _Complex *)nfft_malloc((ths->Ad+5)*(sizeof(double _Complex)));
+      ths->Ad = 4 * (ths->p) * (ths->p);
+      ths->Add = (C *) NFFT(malloc)((size_t)(ths->Ad + 5) * (sizeof(C)));
     }
     else
     {
       if (ths->k == one_over_x)
       {
-        double delta = 1e-8;
-        switch(p)
+        R delta = K(1e-8);
+        switch (p)
         {
-          case 2: delta = 1e-3;
-                  break;
-          case 3: delta = 1e-4;
-                  break;
-          case 4: delta = 1e-5;
-                  break;
-          case 5: delta = 1e-6;
-                  break;
-          case 6: delta = 1e-6;
-                  break;
-          case 7: delta = 1e-7;
-                  break;
-          default: delta = 1e-8;
+          case 2:
+            delta = K(1e-3);
+            break;
+          case 3:
+            delta = K(1e-4);
+            break;
+          case 4:
+            delta = K(1e-5);
+            break;
+          case 5:
+            delta = K(1e-6);
+            break;
+          case 6:
+            delta = K(1e-6);
+            break;
+          case 7:
+            delta = K(1e-7);
+            break;
+          default:
+            delta = K(1e-8);
         }
 
 #if defined(NF_KUB)
-        ths->Ad = max_i(10, (int) ceil(1.4/pow(delta,1.0/4.0)));
-        ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+        ths->Ad = max_i(10, (int)(LRINT(CEIL(K(1.4) / POW(delta, K(1.0) / K(4.0))))));
+        ths->Add = (C *) NFFT(malloc)((size_t)(ths->Ad + 3) * (sizeof(C)));
 #elif defined(NF_QUADR)
-        ths->Ad = (int) ceil(2.2/pow(delta,1.0/3.0));
-        ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+        ths->Ad = (int)(LRINT(CEIL(K(2.2)/POW(delta,K(1.0)/K(3.0)))));
+        ths->Add = (C *)NFFT(malloc)((size_t)(ths->Ad+3)*(sizeof(C)));
 #elif defined(NF_LIN)
-        ths->Ad = (int) ceil(1.7/pow(delta,1.0/2.0));
-        ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+        ths->Ad = (int)(LRINT(CEIL(K(1.7)/pow(delta,K(1.0)/K(2.0)))));
+        ths->Add = (C *)NFFT(malloc)((size_t)(ths->Ad+3)*(sizeof(C)));
 #else
-  #error define NF_LIN or NF_QUADR or NF_KUB
+#error define NF_LIN or NF_QUADR or NF_KUB
 #endif
       }
       else
       {
-        ths->Ad = 2*(ths->p)*(ths->p);
-        ths->Add = (double _Complex *)nfft_malloc((ths->Ad+3)*(sizeof(double _Complex)));
+        ths->Ad = 2 * (ths->p) * (ths->p);
+        ths->Add = (C *) NFFT(malloc)((size_t)(ths->Ad + 3) * (sizeof(C)));
       }
     }
   }
 
   /** init d-dimensional NFFT plan */
   ths->n = nn;
-  for (t=0; t<d; t++)
+  for (t = 0; t < d; t++)
   {
     N[t] = nn;
-    n[t] = 2*nn;
+    n[t] = 2 * nn;
   }
-  nfft_init_guru(&(ths->mv1), d, N, N_total, n, m,
-                   sort_flags_adjoint |
-                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                   FFTW_MEASURE| FFTW_DESTROY_INPUT);
-  nfft_init_guru(&(ths->mv2), d, N, M_total, n, m,
-                   sort_flags_trafo |
-                   PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                   FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&(ths->mv1), d, N, N_total, n, m,
+      sort_flags_adjoint |
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&(ths->mv2), d, N, M_total, n, m,
+      sort_flags_trafo |
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init d-dimensional FFTW plan */
   n_total = 1;
-  for (t=0; t<d; t++)
+  for (t = 0; t < d; t++)
     n_total *= nn;
 
-  ths->b = (fftw_complex *)nfft_malloc(n_total*sizeof(fftw_complex));
+  ths->b = (C*) NFFT(malloc)((size_t)(n_total) * sizeof(C));
 #ifdef _OPENMP
-#pragma omp critical (nfft_omp_critical_fftw_plan)
-{
-  fftw_plan_with_nthreads(nthreads);
+  #pragma omp critical (nfft_omp_critical_fftw_plan)
+  {
+    FFTW(plan_with_nthreads)(nthreads);
 #endif
 
-  ths->fft_plan = fftw_plan_dft(d,N,ths->b,ths->b,FFTW_FORWARD,FFTW_ESTIMATE);
+  ths->fft_plan = FFTW(plan_dft)(d, N, ths->b, ths->b, FFTW_FORWARD,
+      FFTW_ESTIMATE);
 
 #ifdef _OPENMP
 }
@@ -725,75 +829,78 @@ void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, kerne
 
   if (ths->flags & NEARFIELD_BOXES)
   {
-    ths->box_count_per_dim = floor((0.5 - ths->eps_B) / ths->eps_I) + 1;
+    ths->box_count_per_dim = (int)(LRINT(FLOOR((K(0.5) - ths->eps_B) / ths->eps_I))) + 1;
     ths->box_count = 1;
-    for (t=0; t<ths->d; t++)
+    for (t = 0; t < ths->d; t++)
       ths->box_count *= ths->box_count_per_dim;
 
-    ths->box_offset = (int *) nfft_malloc((ths->box_count+1) * sizeof(int));
+    ths->box_offset = (int *) NFFT(malloc)((size_t)(ths->box_count + 1) * sizeof(int));
 
-    ths->box_alpha = (double _Complex *)nfft_malloc(ths->N_total*(sizeof(double _Complex)));
+    ths->box_alpha = (C *) NFFT(malloc)((size_t)(ths->N_total) * (sizeof(C)));
 
-    ths->box_x = (double *) nfft_malloc(ths->d * ths->N_total *  sizeof(double));
+    ths->box_x = (R *) NFFT(malloc)((size_t)(ths->d * ths->N_total) * sizeof(R));
   }
 }
 
 /** finalization of fastsum plan */
 void fastsum_finalize(fastsum_plan *ths)
 {
-  nfft_free(ths->x);
-  nfft_free(ths->alpha);
-  nfft_free(ths->y);
-  nfft_free(ths->f);
+  NFFT(free)(ths->x);
+  NFFT(free)(ths->alpha);
+  NFFT(free)(ths->y);
+  NFFT(free)(ths->f);
 
   if (!(ths->flags & EXACT_NEARFIELD))
-    nfft_free(ths->Add);
+    NFFT(free)(ths->Add);
 
-  nfft_finalize(&(ths->mv1));
-  nfft_finalize(&(ths->mv2));
+  NFFT(finalize)(&(ths->mv1));
+  NFFT(finalize)(&(ths->mv2));
 
 #ifdef _OPENMP
-#pragma omp critical (nfft_omp_critical_fftw_plan)
-{
+  #pragma omp critical (nfft_omp_critical_fftw_plan)
+  {
 #endif
-  fftw_destroy_plan(ths->fft_plan);
+  FFTW(destroy_plan)(ths->fft_plan);
 #ifdef _OPENMP
 }
 #endif
 
-  nfft_free(ths->b);
+  NFFT(free)(ths->b);
 
   if (ths->flags & NEARFIELD_BOXES)
   {
-    nfft_free(ths->box_offset);
-    nfft_free(ths->box_alpha);
-    nfft_free(ths->box_x);
+    NFFT(free)(ths->box_offset);
+    NFFT(free)(ths->box_alpha);
+    NFFT(free)(ths->box_x);
   }
 }
 
 /** direct computation of sums */
 void fastsum_exact(fastsum_plan *ths)
 {
-  int j,k;
+  int j, k;
   int t;
-  double r;
+  R r;
 
+#ifdef _OPENMP
   #pragma omp parallel for default(shared) private(j,k,t,r)
-  for (j=0; j<ths->M_total; j++)
+#endif
+  for (j = 0; j < ths->M_total; j++)
   {
-    ths->f[j]=0.0;
-    for (k=0; k<ths->N_total; k++)
+    ths->f[j] = K(0.0);
+    for (k = 0; k < ths->N_total; k++)
     {
-      if (ths->d==1)
+      if (ths->d == 1)
         r = ths->y[j] - ths->x[k];
       else
       {
-        r=0.0;
-        for (t=0; t<ths->d; t++)
-          r += (ths->y[j*ths->d+t]-ths->x[k*ths->d+t])*(ths->y[j*ths->d+t]-ths->x[k*ths->d+t]);
-        r=sqrt(r);
+        r = K(0.0);
+        for (t = 0; t < ths->d; t++)
+          r += (ths->y[j * ths->d + t] - ths->x[k * ths->d + t])
+              * (ths->y[j * ths->d + t] - ths->x[k * ths->d + t]);
+        r = SQRT(r);
       }
-      ths->f[j] += ths->alpha[k] * ths->k(r,0,ths->kernel_param);
+      ths->f[j] += ths->alpha[k] * ths->k(r, 0, ths->kernel_param);
     }
   }
 }
@@ -801,20 +908,21 @@ void fastsum_exact(fastsum_plan *ths)
 /** precomputation for fastsum */
 void fastsum_precompute(fastsum_plan *ths)
 {
-  int j,k,t;
+  int j, k, t;
   int n_total;
+#ifdef MEASURE_TIME
   ticks t0, t1;
+#endif
 
-  ths->MEASURE_TIME_t[0] = 0.0;
-  ths->MEASURE_TIME_t[1] = 0.0;
-  ths->MEASURE_TIME_t[2] = 0.0;
-  ths->MEASURE_TIME_t[3] = 0.0;
+  ths->MEASURE_TIME_t[0] = K(0.0);
+  ths->MEASURE_TIME_t[1] = K(0.0);
+  ths->MEASURE_TIME_t[2] = K(0.0);
+  ths->MEASURE_TIME_t[3] = K(0.0);
 
 #ifdef MEASURE_TIME
   t0 = getticks();
 #endif
 
-
   if (ths->flags & NEARFIELD_BOXES)
   {
     BuildBox(ths);
@@ -822,7 +930,7 @@ void fastsum_precompute(fastsum_plan *ths)
   else
   {
     /** sort source knots */
-    BuildTree(ths->d,0,ths->x,ths->alpha,ths->N_total);
+    BuildTree(ths->d, 0, ths->x, ths->alpha, ths->N_total);
   }
 
 #ifdef MEASURE_TIME
@@ -830,106 +938,115 @@ void fastsum_precompute(fastsum_plan *ths)
   ths->MEASURE_TIME_t[3] += nfft_elapsed_seconds(t1,t0);
 #endif
 
-
 #ifdef MEASURE_TIME
   t0 = getticks();
 #endif
   /** precompute spline values for near field*/
   if (!(ths->flags & EXACT_NEARFIELD))
   {
-    if (ths->d==1)
+    if (ths->d == 1)
+#ifdef _OPENMP
       #pragma omp parallel for default(shared) private(k)
-      for (k=-ths->Ad/2-2; k <= ths->Ad/2+2; k++)
-        ths->Add[k+ths->Ad/2+2] = regkern1(ths->k, ths->eps_I*(double)k/ths->Ad*2, ths->p, ths->kernel_param, ths->eps_I, ths->eps_B);
+#endif
+      for (k = -ths->Ad / 2 - 2; k <= ths->Ad / 2 + 2; k++)
+        ths->Add[k + ths->Ad / 2 + 2] = regkern1(ths->k,
+            ths->eps_I * (R) k / (R)(ths->Ad) * K(2.0), ths->p, ths->kernel_param,
+            ths->eps_I, ths->eps_B);
     else
+#ifdef _OPENMP
       #pragma omp parallel for default(shared) private(k)
-      for (k=0; k <= ths->Ad+2; k++)
-        ths->Add[k] = regkern3(ths->k, ths->eps_I*(double)k/ths->Ad, ths->p, ths->kernel_param, ths->eps_I, ths->eps_B);
+#endif
+      for (k = 0; k <= ths->Ad + 2; k++)
+        ths->Add[k] = regkern3(ths->k, ths->eps_I * (R) k / (R)(ths->Ad), ths->p,
+            ths->kernel_param, ths->eps_I, ths->eps_B);
   }
 #ifdef MEASURE_TIME
   t1 = getticks();
-  ths->MEASURE_TIME_t[0] += nfft_elapsed_seconds(t1,t0);
+  ths->MEASURE_TIME_t[0] += NFFT(elapsed_seconds)(t1,t0);
 #endif
 
-
 #ifdef MEASURE_TIME
   t0 = getticks();
 #endif
   /** init NFFT plan for transposed transform in first step*/
-  for (k=0; k<ths->mv1.M_total; k++)
-    for (t=0; t<ths->mv1.d; t++)
-      ths->mv1.x[ths->mv1.d*k+t] = - ths->x[ths->mv1.d*k+t];  /* note the factor -1 for transposed transform instead of adjoint*/
+  for (k = 0; k < ths->mv1.M_total; k++)
+    for (t = 0; t < ths->mv1.d; t++)
+      ths->mv1.x[ths->mv1.d * k + t] = -ths->x[ths->mv1.d * k + t]; /* note the factor -1 for transposed transform instead of adjoint*/
 
   /** precompute psi, the entries of the matrix B */
-  if(ths->mv1.nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(&(ths->mv1));
+  if (ths->mv1.flags & PRE_LIN_PSI)
+    NFFT(precompute_lin_psi)(&(ths->mv1));
 
-  if(ths->mv1.nfft_flags & PRE_PSI)
-    nfft_precompute_psi(&(ths->mv1));
+  if (ths->mv1.flags & PRE_PSI)
+    NFFT(precompute_psi)(&(ths->mv1));
 
-  if(ths->mv1.nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(&(ths->mv1));
+  if (ths->mv1.flags & PRE_FULL_PSI)
+    NFFT(precompute_full_psi)(&(ths->mv1));
 #ifdef MEASURE_TIME
   t1 = getticks();
   ths->MEASURE_TIME_t[1] += nfft_elapsed_seconds(t1,t0);
 #endif
 
   /** init Fourier coefficients */
-  for(k=0; k<ths->mv1.M_total;k++)
+  for (k = 0; k < ths->mv1.M_total; k++)
     ths->mv1.f[k] = ths->alpha[k];
 
 #ifdef MEASURE_TIME
   t0 = getticks();
 #endif
   /** init NFFT plan for transform in third step*/
-  for (j=0; j<ths->mv2.M_total; j++)
-    for (t=0; t<ths->mv2.d; t++)
-      ths->mv2.x[ths->mv2.d*j+t] = - ths->y[ths->mv2.d*j+t];  /* note the factor -1 for conjugated transform instead of standard*/
+  for (j = 0; j < ths->mv2.M_total; j++)
+    for (t = 0; t < ths->mv2.d; t++)
+      ths->mv2.x[ths->mv2.d * j + t] = -ths->y[ths->mv2.d * j + t]; /* note the factor -1 for conjugated transform instead of standard*/
 
   /** precompute psi, the entries of the matrix B */
-  if(ths->mv2.nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(&(ths->mv2));
+  if (ths->mv2.flags & PRE_LIN_PSI)
+    NFFT(precompute_lin_psi)(&(ths->mv2));
 
-  if(ths->mv2.nfft_flags & PRE_PSI)
-    nfft_precompute_psi(&(ths->mv2));
+  if (ths->mv2.flags & PRE_PSI)
+    NFFT(precompute_psi)(&(ths->mv2));
 
-  if(ths->mv2.nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(&(ths->mv2));
+  if (ths->mv2.flags & PRE_FULL_PSI)
+    NFFT(precompute_full_psi)(&(ths->mv2));
 #ifdef MEASURE_TIME
   t1 = getticks();
-  ths->MEASURE_TIME_t[2] += nfft_elapsed_seconds(t1,t0);
+  ths->MEASURE_TIME_t[2] += NFFT(elapsed_seconds)(t1,t0);
 #endif
 
-
 #ifdef MEASURE_TIME
   t0 = getticks();
 #endif
   /** precompute Fourier coefficients of regularised kernel*/
   n_total = 1;
-  for (t=0; t<ths->d; t++)
+  for (t = 0; t < ths->d; t++)
     n_total *= ths->n;
 
+#ifdef _OPENMP
   #pragma omp parallel for default(shared) private(j,k,t)
-  for (j=0; j<n_total; j++)
+#endif
+  for (j = 0; j < n_total; j++)
   {
-    if (ths->d==1)
-      ths->b[j] = regkern1(ths->k, (double)j / (ths->n) - 0.5, ths->p, ths->kernel_param, ths->eps_I, ths->eps_B)/n_total;
+    if (ths->d == 1)
+      ths->b[j] = regkern1(ths->k, (R) j / (R)(ths->n) - K(0.5), ths->p,
+          ths->kernel_param, ths->eps_I, ths->eps_B) / (R)(n_total);
     else
     {
-      k=j;
-      ths->b[j]=0.0;
-      for (t=0; t<ths->d; t++)
+      k = j;
+      ths->b[j] = K(0.0);
+      for (t = 0; t < ths->d; t++)
       {
-        ths->b[j] += ((double)(k % (ths->n)) / (ths->n) - 0.5) * ((double)(k % (ths->n)) / (ths->n) - 0.5);
+        ths->b[j] += ((R) (k % (ths->n)) / (R)(ths->n) - K(0.5))
+            * ((R) (k % (ths->n)) / (R)(ths->n) - K(0.5));
         k = k / (ths->n);
       }
-      ths->b[j] = regkern3(ths->k, sqrt(ths->b[j]), ths->p, ths->kernel_param, ths->eps_I, ths->eps_B)/n_total;
+      ths->b[j] = regkern3(ths->k, SQRT(CREAL(ths->b[j])), ths->p, ths->kernel_param,
+          ths->eps_I, ths->eps_B) / (R)(n_total);
     }
   }
 
-  nfft_fftshift_complex(ths->b, ths->mv1.d, ths->mv1.N);
-  fftw_execute(ths->fft_plan);
-  nfft_fftshift_complex(ths->b, ths->mv1.d, ths->mv1.N);
+  NFFT(fftshift_complex)(ths->b, (int)(ths->mv1.d), ths->mv1.N);
+  FFTW(execute)(ths->fft_plan);
+  NFFT(fftshift_complex)(ths->b, (int)(ths->mv1.d), ths->mv1.N);
 #ifdef MEASURE_TIME
   t1 = getticks();
   ths->MEASURE_TIME_t[0] += nfft_elapsed_seconds(t1,t0);
@@ -939,70 +1056,75 @@ void fastsum_precompute(fastsum_plan *ths)
 /** fast NFFT-based summation */
 void fastsum_trafo(fastsum_plan *ths)
 {
-  int j,k,t;
+  int j, k, t;
+#ifdef MEASURE_TIME
   ticks t0, t1;
+#endif
 
-  ths->MEASURE_TIME_t[4] = 0.0; 
-  ths->MEASURE_TIME_t[5] = 0.0;
-  ths->MEASURE_TIME_t[6] = 0.0;
-  ths->MEASURE_TIME_t[7] = 0.0;
+  ths->MEASURE_TIME_t[4] = K(0.0);
+  ths->MEASURE_TIME_t[5] = K(0.0);
+  ths->MEASURE_TIME_t[6] = K(0.0);
+  ths->MEASURE_TIME_t[7] = K(0.0);
 
 #ifdef MEASURE_TIME
   t0 = getticks();
 #endif
   /** first step of algorithm */
-  nfft_adjoint(&(ths->mv1));
+  NFFT(adjoint)(&(ths->mv1));
 #ifdef MEASURE_TIME
   t1 = getticks();
-  ths->MEASURE_TIME_t[4] += nfft_elapsed_seconds(t1,t0);
+  ths->MEASURE_TIME_t[4] += NFFT(elapsed_seconds)(t1,t0);
 #endif
 
-
 #ifdef MEASURE_TIME
   t0 = getticks();
 #endif
   /** second step of algorithm */
+#ifdef _OPENMP
   #pragma omp parallel for default(shared) private(k)
-  for (k=0; k<ths->mv2.N_total; k++)
+#endif
+  for (k = 0; k < ths->mv2.N_total; k++)
     ths->mv2.f_hat[k] = ths->b[k] * ths->mv1.f_hat[k];
 #ifdef MEASURE_TIME
   t1 = getticks();
   ths->MEASURE_TIME_t[5] += nfft_elapsed_seconds(t1,t0);
 #endif
 
-
 #ifdef MEASURE_TIME
   t0 = getticks();
 #endif
   /** third step of algorithm */
-  nfft_trafo(&(ths->mv2));
+  NFFT(trafo)(&(ths->mv2));
 #ifdef MEASURE_TIME
   t1 = getticks();
   ths->MEASURE_TIME_t[6] += nfft_elapsed_seconds(t1,t0);
 #endif
 
-
 #ifdef MEASURE_TIME
   t0 = getticks();
 #endif
   /** add near field */
+#ifdef _OPENMP
   #pragma omp parallel for default(shared) private(j,k,t)
-  for (j=0; j<ths->M_total; j++)
+#endif
+  for (j = 0; j < ths->M_total; j++)
   {
-    double ymin[ths->d], ymax[ths->d]; /** limits for d-dimensional near field box */
+    R ymin[ths->d], ymax[ths->d]; /** limits for d-dimensional near field box */
 
     if (ths->flags & NEARFIELD_BOXES)
     {
-      ths->f[j] = ths->mv2.f[j] + SearchBox(ths->y + ths->d*j, ths);
+      ths->f[j] = ths->mv2.f[j] + SearchBox(ths->y + ths->d * j, ths);
     }
     else
     {
-      for (t=0; t<ths->d; t++)
+      for (t = 0; t < ths->d; t++)
       {
-        ymin[t] = ths->y[ths->d*j+t] - ths->eps_I;
-        ymax[t] = ths->y[ths->d*j+t] + ths->eps_I;
+        ymin[t] = ths->y[ths->d * j + t] - ths->eps_I;
+        ymax[t] = ths->y[ths->d * j + t] + ths->eps_I;
       }
-      ths->f[j] = ths->mv2.f[j] + SearchTree(ths->d,0, ths->x, ths->alpha, ymin, ymax, ths->N_total, ths->k, ths->kernel_param, ths->Ad, ths->Add, ths->p, ths->flags);
+      ths->f[j] = ths->mv2.f[j]
+          + SearchTree(ths->d, 0, ths->x, ths->alpha, ymin, ymax, ths->N_total,
+              ths->k, ths->kernel_param, ths->Ad, ths->Add, ths->p, ths->flags);
     }
     /* ths->f[j] = ths->mv2.f[j]; */
     /* ths->f[j] = SearchTree(ths->d,0, ths->x, ths->alpha, ymin, ymax, ths->N_total, ths->k, ths->kernel_param, ths->Ad, ths->Add, ths->p, ths->flags); */
@@ -1010,7 +1132,7 @@ void fastsum_trafo(fastsum_plan *ths)
 
 #ifdef MEASURE_TIME
   t1 = getticks();
-  ths->MEASURE_TIME_t[7] += nfft_elapsed_seconds(t1,t0);
+  ths->MEASURE_TIME_t[7] += NFFT(elapsed_seconds)(t1,t0);
 #endif
 }
 /* \} */
diff --git a/applications/fastsum/fastsum.h b/applications/fastsum/fastsum.h
index 60dbc4c..08951dc 100644
--- a/applications/fastsum/fastsum.h
+++ b/applications/fastsum/fastsum.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: fastsum.h 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /*! \file fastsum.h
  *  \brief Header file for the fast NFFT-based summation algorithm.
@@ -45,9 +45,12 @@
 #include <complex.h>
 #endif
 /** Include header for utils from NFFT3 library. */
-#include "nfft3util.h"
 /** Include header for NFFT3 library. */
 #include "nfft3.h"
+#include "infft.h"
+
+#undef X
+#define X(name) NFFT(name)
 
 #if !(defined(NF_LIN) || defined(NF_QUADR) || defined(NF_KUB))
   #define NF_KUB
@@ -58,7 +61,7 @@ extern "C"
 {
 #endif /* __cplusplus */
 
-typedef double _Complex (*kernel)(double , int , const double *);
+typedef C (*kernel)(R , int , const R *);
 
 /**
  * Constant symbols
@@ -77,47 +80,47 @@ typedef struct fastsum_plan_
   int N_total;                          /**< number of source knots          */
   int M_total;                          /**< number of target knots          */
 
-  double _Complex *alpha;                       /**< source coefficients             */
-  double _Complex *f;                           /**< target evaluations              */
+  C *alpha;                       /**< source coefficients             */
+  C *f;                           /**< target evaluations              */
 
-  double *x;                            /**< source knots in d-ball with radius 1/4-eps_b/2 */
-  double *y;                            /**< target knots in d-ball with radius 1/4-eps_b/2 */
+  R *x;                            /**< source knots in d-ball with radius 1/4-eps_b/2 */
+  R *y;                            /**< target knots in d-ball with radius 1/4-eps_b/2 */
 
   kernel k;  /**< kernel function    */
-  double *kernel_param;                 /**< parameters for kernel function  */
+  R *kernel_param;                 /**< parameters for kernel function  */
 
   unsigned flags;                       /**< flags precomp. and approx.type  */
 
   /** internal */
 
   /** DS_PRE - direct summation */
-  double _Complex *pre_K;                       /**< precomputed K(x_j-y_l)          */
+  C *pre_K;                       /**< precomputed K(x_j-y_l)          */
 
   /** FS__ - fast summation */
   int n;                                /**< expansion degree                */
-  fftw_complex *b;                      /**< expansion coefficients          */
+  C *b;                      /**< expansion coefficients          */
 
   int p;                                /**< degree of smoothness of regularization */
-  double eps_I;                         /**< inner boundary                  */  /* fixed to p/n so far  */
-  double eps_B;                         /**< outer boundary                  */  /* fixed to 1/16 so far */
+  R eps_I;                         /**< inner boundary                  */  /* fixed to p/n so far  */
+  R eps_B;                         /**< outer boundary                  */  /* fixed to 1/16 so far */
 
-  nfft_plan mv1;                        /**< source nfft plan                */
-  nfft_plan mv2;                        /**< target nfft plan                */
+  X(plan) mv1;                        /**< source nfft plan                */
+  X(plan) mv2;                        /**< target nfft plan                */
 
   /** near field */
   int Ad;                               /**< number of spline knots for nearfield computation of regularized kernel */
-  double _Complex *Add;                 /**< spline values */
+  C *Add;                 /**< spline values */
 
   /* things for computing *b - are they used only once?? */
-  fftw_plan fft_plan;
+  FFTW(plan) fft_plan;
 
   int box_count;
   int box_count_per_dim;
   int *box_offset;
-  double *box_x;
-  double _Complex *box_alpha;
+  R *box_x;
+  C *box_alpha;
 
-  double MEASURE_TIME_t[8]; /**< Measured time for each step if MEASURE_TIME is set */
+  R MEASURE_TIME_t[8]; /**< Measured time for each step if MEASURE_TIME is set */
 } fastsum_plan;
 
 /** initialize fast summation plan
@@ -136,7 +139,7 @@ typedef struct fastsum_plan_
  * \param eps_B the outer boundary.
  *
  */
-void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, kernel k, double *param, unsigned flags, int nn, int m, int p, double eps_I, double eps_B);
+void fastsum_init_guru(fastsum_plan *ths, int d, int N_total, int M_total, kernel k, R *param, unsigned flags, int nn, int m, int p, R eps_I, R eps_B);
 
 /** finalize plan
  *
@@ -163,11 +166,11 @@ void fastsum_precompute(fastsum_plan *ths);
 void fastsum_trafo(fastsum_plan *ths);
 /* \} */
 
-double _Complex regkern(kernel k, double xx, int p, const double *param, double a, double b);
+C regkern(kernel k, R xx, int p, const R *param, R a, R b);
 
 /** cubic spline interpolation in near field with even kernels */
-double _Complex kubintkern(const double x, const double _Complex *Add,
-  const int Ad, const double a);
+C kubintkern(const R x, const C *Add,
+  const int Ad, const R a);
 
 #ifdef __cplusplus
 }  /* extern "C" */
diff --git a/applications/fastsum/fastsum.m b/applications/fastsum/fastsum.m
index 19a2ff6..d1567d1 100644
--- a/applications/fastsum/fastsum.m
+++ b/applications/fastsum/fastsum.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: fastsum.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [f,f_direct]=fastsum(x,alpha,y,kernel,c,m,n,p,eps_I,eps_B)
 
 % f=fastsum(x,alpha,y,kernel,c,m,n,p)
diff --git a/applications/fastsum/fastsum_benchomp.c b/applications/fastsum/fastsum_benchomp.c
index a22d3fc..5edc31f 100644
--- a/applications/fastsum/fastsum_benchomp.c
+++ b/applications/fastsum/fastsum_benchomp.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -22,8 +22,8 @@
 
 #include "config.h"
 
-#include <nfft3.h>
-#include <nfft3util.h>
+#include "nfft3.h"
+#include "infft.h"
 
 #define NREPEAT 5
 
@@ -31,7 +31,7 @@ static FILE* file_out_tex = NULL;
 
 int get_nthreads_array(int **arr)
 {
-  int max_threads = nfft_get_omp_num_threads();
+  int max_threads = NFFT(get_num_threads)();
   int alloc_num = 2;
   int k;
   int ret_number = 0;
@@ -39,28 +39,29 @@ int get_nthreads_array(int **arr)
 
   if (max_threads <= 5)
   {
-    *arr = (int*) malloc(max_threads*sizeof(int));
+    *arr = (int*) NFFT(malloc)((size_t) (max_threads) * sizeof(int));
     for (k = 0; k < max_threads; k++)
-      *(*arr + k) = k+1;
+      *(*arr + k) = k + 1;
     return max_threads;
   }
 
-  for (k = 1; k <= max_threads; k*=2, alloc_num++);
+  for (k = 1; k <= max_threads; k *= 2, alloc_num++)
+    ;
 
-  *arr = (int*) malloc(alloc_num*sizeof(int));
+  *arr = (int*) NFFT(malloc)((size_t)(alloc_num) * sizeof(int));
 
-  for (k = 1; k <= max_threads; k*=2)
+  for (k = 1; k <= max_threads; k *= 2)
   {
-    if (k != max_threads && 2*k > max_threads && max_threads_pw2)
+    if (k != max_threads && 2 * k > max_threads && max_threads_pw2)
     {
-      *(*arr + ret_number) = max_threads/2;
+      *(*arr + ret_number) = max_threads / 2;
       ret_number++;
     }
 
     *(*arr + ret_number) = k;
     ret_number++;
 
-    if (k != max_threads && 2*k > max_threads)
+    if (k != max_threads && 2 * k > max_threads)
     {
       *(*arr + ret_number) = max_threads;
       ret_number++;
@@ -69,8 +70,7 @@ int get_nthreads_array(int **arr)
   }
 
   return ret_number;
-} 
-  
+}
 
 void check_result_value(const int val, const int ok, const char *msg)
 {
@@ -78,7 +78,7 @@ void check_result_value(const int val, const int ok, const char *msg)
   {
     fprintf(stderr, "ERROR %s: %d not %d\n", msg, val, ok);
 
-    exit(1);
+    exit(EXIT_FAILURE);
   }
 }
 
@@ -86,7 +86,9 @@ void run_test_create(int d, int L, int M)
 {
   char cmd[1025];
 
-  snprintf(cmd, 1024, "./fastsum_benchomp_createdataset %d %d %d > fastsum_benchomp_test.data", d, L, M);
+  snprintf(cmd, 1024,
+      "./fastsum_benchomp_createdataset %d %d %d > fastsum_benchomp_test.data",
+      d, L, M);
   fprintf(stderr, "%s\n", cmd);
   check_result_value(system(cmd), 0, "createdataset");
 }
@@ -94,7 +96,7 @@ void run_test_create(int d, int L, int M)
 void run_test_init_output()
 {
   FILE *f = fopen("fastsum_benchomp_test.result", "w");
-  if (f!= NULL)
+  if (f != NULL)
     fclose(f);
 }
 
@@ -107,16 +109,16 @@ typedef struct
   int m;
   int p;
   char *kernel_name;
-  double c;
-  double eps_I;
-  double eps_B;
+  R c;
+  R eps_I;
+  R eps_B;
 } s_param;
 
 typedef struct
 {
-  double avg;
-  double min;
-  double max;
+  R avg;
+  R min;
+  R max;
 } s_resval;
 
 typedef struct
@@ -132,31 +134,41 @@ typedef struct
   int nresults;
 } s_testset;
 
-void run_test(s_resval *res, int nrepeat, int n, int m, int p, char *kernel_name, double c, double eps_I, double eps_B, int nthreads)
+void run_test(s_resval *res, int nrepeat, int n, int m, int p,
+    char *kernel_name, R c, R eps_I, R eps_B, int nthreads)
 {
   char cmd[1025];
-  int r,t;
-  
+  int r, t;
+
   for (t = 0; t < 16; t++)
   {
-    res[t].avg = 0.0; res[t].min = 1.0/0.0; res[t].max = 0.0;
+    res[t].avg = K(0.0);
+    res[t].min = K(1.0) / K(0.0);
+    res[t].max = K(0.0);
   }
 
   if (nthreads < 2)
-    snprintf(cmd, 1024, "./fastsum_benchomp_detail_single %d %d %d %s %lg %lg %lg < fastsum_benchomp_test.data > fastsum_benchomp_test.out", n, m, p, kernel_name, c, eps_I, eps_B);
+    snprintf(cmd, 1024,
+        "./fastsum_benchomp_detail_single %d %d %d %s " __FR__ " " __FR__ " " __FR__ " < fastsum_benchomp_test.data > fastsum_benchomp_test.out",
+        n, m, p, kernel_name, c, eps_I, eps_B);
   else
-    snprintf(cmd, 1024, "./fastsum_benchomp_detail_threads %d %d %d %s %lg %lg %lg %d < fastsum_benchomp_test.data > fastsum_benchomp_test.out", n, m, p, kernel_name, c, eps_I, eps_B, nthreads);
+    snprintf(cmd, 1024,
+        "./fastsum_benchomp_detail_threads %d %d %d %s " __FR__ " " __FR__ " " __FR__ " %d < fastsum_benchomp_test.data > fastsum_benchomp_test.out",
+        n, m, p, kernel_name, c, eps_I, eps_B, nthreads);
   fprintf(stderr, "%s\n", cmd);
   check_result_value(system(cmd), 0, cmd);
 
   for (r = 0; r < nrepeat; r++)
   {
     int retval;
-    double v[16];
+    R v[16];
     FILE *f;
     check_result_value(system(cmd), 0, cmd);
     f = fopen("fastsum_benchomp_test.out", "r");
-    retval = fscanf(f, "%lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg", v, v+1, v+2, v+3, v+4, v+5, v+6, v+7, v+8, v+9, v+10, v+11, v+12, v+13, v+14, v+15);
+    retval = fscanf(f,
+        "" __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ " " __FR__ "", v,
+        v + 1, v + 2, v + 3, v + 4, v + 5, v + 6, v + 7, v + 8, v + 9, v + 10,
+        v + 11, v + 12, v + 13, v + 14, v + 15);
     check_result_value(retval, 16, "read fastsum_benchomp_test.out");
     fclose(f);
 
@@ -171,11 +183,11 @@ void run_test(s_resval *res, int nrepeat, int n, int m, int p, char *kernel_name
   }
 
   for (t = 0; t < 16; t++)
-    res[t].avg /= nrepeat;
+    res[t].avg /= (R)(nrepeat);
 
   fprintf(stderr, "%d %d: ", nthreads, nrepeat);
   for (t = 0; t < 16; t++)
-    fprintf(stderr, "%.3e %.3e %.3e | ", res[t].avg, res[t].min, res[t].max);
+    fprintf(stderr, "%.3" __FES__ " %.3" __FES__ " %.3" __FES__ " | ", res[t].avg, res[t].min, res[t].max);
   fprintf(stderr, "\n");
 }
 
@@ -204,7 +216,7 @@ const char *get_adjoint_omp_string(int flags)
   if (flags & NFFT_OMP_BLOCKWISE_ADJOINT)
     return "blockwise";
 
-    return "";
+  return "";
 }
 
 #define MASK_FSUM_D (1U<<0)
@@ -217,7 +229,8 @@ const char *get_adjoint_omp_string(int flags)
 #define MASK_FSUM_EPSI (1U<<7)
 #define MASK_FSUM_EPSB (1U<<8)
 
-unsigned int fastsum_determine_different_parameters(s_testset *testsets, int ntestsets)
+unsigned int fastsum_determine_different_parameters(s_testset *testsets,
+    int ntestsets)
 {
   int t;
   unsigned int mask = 0;
@@ -227,23 +240,24 @@ unsigned int fastsum_determine_different_parameters(s_testset *testsets, int nte
 
   for (t = 1; t < ntestsets; t++)
   {
-    if (testsets[t-1].param.d != testsets[t].param.d)
+    if (testsets[t - 1].param.d != testsets[t].param.d)
       mask |= MASK_FSUM_D;
-    if (testsets[t-1].param.L != testsets[t].param.L)
+    if (testsets[t - 1].param.L != testsets[t].param.L)
       mask |= MASK_FSUM_L;
-    if (testsets[t-1].param.M != testsets[t].param.M)
+    if (testsets[t - 1].param.M != testsets[t].param.M)
       mask |= MASK_FSUM_M;
-    if (testsets[t-1].param.n != testsets[t].param.n)
+    if (testsets[t - 1].param.n != testsets[t].param.n)
       mask |= MASK_FSUM_MULTIBW;
-    if (testsets[t-1].param.m != testsets[t].param.m)
+    if (testsets[t - 1].param.m != testsets[t].param.m)
       mask |= MASK_FSUM_WINM;
-    if (testsets[t-1].param.p != testsets[t].param.p)
+    if (testsets[t - 1].param.p != testsets[t].param.p)
       mask |= MASK_FSUM_P;
-    if (strcmp(testsets[t-1].param.kernel_name, testsets[t].param.kernel_name) != 0)
+    if (strcmp(testsets[t - 1].param.kernel_name, testsets[t].param.kernel_name)
+        != 0)
       mask |= MASK_FSUM_KERNEL;
-    if (testsets[t-1].param.eps_I != testsets[t].param.eps_I)
+    if (testsets[t - 1].param.eps_I != testsets[t].param.eps_I)
       mask |= MASK_FSUM_EPSI;
-    if (testsets[t-1].param.eps_B != testsets[t].param.eps_B)
+    if (testsets[t - 1].param.eps_B != testsets[t].param.eps_B)
       mask |= MASK_FSUM_EPSB;
   }
 
@@ -259,72 +273,81 @@ void strEscapeUnderscore(char *dst, char *src, int maxlen)
   while (src[i] != '\0' && len + offset < maxlen - 1)
   {
     if (src[i] == '_')
-      len = snprintf(dst+offset, maxlen-offset, "\\_{}");
+      len = snprintf(dst + offset, maxlen - offset, "\\_{}");
     else
-      len = snprintf(dst+offset, maxlen-offset, "%c", src[i]);
+      len = snprintf(dst + offset, maxlen - offset, "%c", src[i]);
     offset += len;
     i++;
   }
 }
 
-void fastsum_get_plot_title_minus_indep(char *outstr, int maxlen, char *hostname, s_param param, unsigned int diff_mask)
+void fastsum_get_plot_title_minus_indep(char *outstr, int maxlen,
+    char *hostname, s_param param, unsigned int diff_mask)
 {
   unsigned int mask = ~diff_mask;
   int offset = 0;
   int len;
 
   len = snprintf(outstr, maxlen, "%s", hostname);
-  if (len < 0 || len+offset >= maxlen-1) return;
+  if (len < 0 || len + offset >= maxlen - 1)
+    return;
   offset += len;
 
   if (mask & MASK_FSUM_D)
   {
-    len = snprintf(outstr+offset, maxlen-offset, " %dd fastsum", param.d);
-    if (len < 0 || len+offset >= maxlen-1) return;
+    len = snprintf(outstr + offset, maxlen - offset, " %dd fastsum", param.d);
+    if (len < 0 || len + offset >= maxlen - 1)
+      return;
     offset += len;
   }
 
   if ((mask & (MASK_FSUM_L | MASK_FSUM_M)) && param.L == param.M)
   {
-    len = snprintf(outstr+offset, maxlen-offset, " L=M=%d", param.L);
-    if (len < 0 || len+offset >= maxlen-1) return;
+    len = snprintf(outstr + offset, maxlen - offset, " L=M=%d", param.L);
+    if (len < 0 || len + offset >= maxlen - 1)
+      return;
     offset += len;
   }
   else
   {
     if (mask & MASK_FSUM_L)
     {
-      len = snprintf(outstr+offset, maxlen-offset, " L=%d", param.L);
-      if (len < 0 || len+offset >= maxlen-1) return;
+      len = snprintf(outstr + offset, maxlen - offset, " L=%d", param.L);
+      if (len < 0 || len + offset >= maxlen - 1)
+        return;
       offset += len;
     }
 
     if (mask & MASK_FSUM_M)
     {
-      len = snprintf(outstr+offset, maxlen-offset, " M=%d", param.M);
-      if (len < 0 || len+offset >= maxlen-1) return;
+      len = snprintf(outstr + offset, maxlen - offset, " M=%d", param.M);
+      if (len < 0 || len + offset >= maxlen - 1)
+        return;
       offset += len;
     }
   }
 
   if (mask & MASK_FSUM_MULTIBW)
   {
-    len = snprintf(outstr+offset, maxlen-offset, " n=%d", param.n);
-    if (len < 0 || len+offset >= maxlen-1) return;
+    len = snprintf(outstr + offset, maxlen - offset, " n=%d", param.n);
+    if (len < 0 || len + offset >= maxlen - 1)
+      return;
     offset += len;
   }
 
   if (mask & MASK_FSUM_WINM)
   {
-    len = snprintf(outstr+offset, maxlen-offset, " m=%d", param.m);
-    if (len < 0 || len+offset >= maxlen-1) return;
+    len = snprintf(outstr + offset, maxlen - offset, " m=%d", param.m);
+    if (len < 0 || len + offset >= maxlen - 1)
+      return;
     offset += len;
   }
 
   if (mask & MASK_FSUM_P)
   {
-    len = snprintf(outstr+offset, maxlen-offset, " p=%d", param.p);
-    if (len < 0 || len+offset >= maxlen-1) return;
+    len = snprintf(outstr + offset, maxlen - offset, " p=%d", param.p);
+    if (len < 0 || len + offset >= maxlen - 1)
+      return;
     offset += len;
   }
 
@@ -333,30 +356,38 @@ void fastsum_get_plot_title_minus_indep(char *outstr, int maxlen, char *hostname
     char tmp[maxlen];
     strEscapeUnderscore(tmp, param.kernel_name, maxlen);
 
-    len = snprintf(outstr+offset, maxlen-offset, " %s", tmp);
-    if (len < 0 || len+offset >= maxlen-1) return;
+    len = snprintf(outstr + offset, maxlen - offset, " %s", tmp);
+    if (len < 0 || len + offset >= maxlen - 1)
+      return;
     offset += len;
   }
 
   if ((mask & (MASK_FSUM_EPSI | MASK_FSUM_EPSB)) && param.eps_I == param.eps_B)
   {
-    len = snprintf(outstr+offset, maxlen-offset, " $\\varepsilon_\\mathrm{I}$=$\\varepsilon_\\mathrm{B}$=%g", param.eps_I);
-    if (len < 0 || len+offset >= maxlen-1) return;
+    len = snprintf(outstr + offset, maxlen - offset,
+        " $\\varepsilon_\\mathrm{I}$=$\\varepsilon_\\mathrm{B}$=%" __FGS__ "",
+        param.eps_I);
+    if (len < 0 || len + offset >= maxlen - 1)
+      return;
     offset += len;
   }
   else
   {
     if (mask & MASK_FSUM_EPSI)
     {
-      len = snprintf(outstr+offset, maxlen-offset, " $\\varepsilon_\\mathrm{I}$=%g", param.eps_I);
-      if (len < 0 || len+offset >= maxlen-1) return;
+      len = snprintf(outstr + offset, maxlen - offset,
+          " $\\varepsilon_\\mathrm{I}$=%" __FGS__ "", param.eps_I);
+      if (len < 0 || len + offset >= maxlen - 1)
+        return;
       offset += len;
     }
 
     if (mask & MASK_FSUM_EPSB)
     {
-      len = snprintf(outstr+offset, maxlen-offset, " $\\varepsilon_\\mathrm{B}$=%g", param.eps_B);
-      if (len < 0 || len+offset >= maxlen-1) return;
+      len = snprintf(outstr + offset, maxlen - offset,
+          " $\\varepsilon_\\mathrm{B}$=%" __FGS__ "", param.eps_B);
+      if (len < 0 || len + offset >= maxlen - 1)
+        return;
       offset += len;
     }
   }
@@ -380,34 +411,44 @@ void nfft_adjoint_print_output_histo_DFBRT(FILE *out, s_testset testset)
     else
       fprintf(out, "%d", testset.results[i].nthreads);
 
-  fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
-  fprintf(out, " title={%s %dd $\\textrm{NFFT}^\\top$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}", hostname, testset.param.d, testset.param.n, testset.param.M, testset.param.m);
+  fprintf(out,
+      "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+  fprintf(out,
+      " title={%s %dd $\\textrm{NFFT}^\\top$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}",
+      hostname, testset.param.d, testset.param.n, testset.param.M,
+      testset.param.m);
   fprintf(out, " ]\n");
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[10].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[10].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[11].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[11].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[12].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[12].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[1].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[1].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[4].avg + testset.results[i].resval[1].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[4].avg + testset.results[i].resval[1].avg);
   fprintf(out, "};\n");
-  fprintf(out, "\\legend{D,$\\textrm{F}^\\top$,$\\textrm{B}^\\top$,prepsi,total}\n");
+  fprintf(out,
+      "\\legend{D,$\\textrm{F}^\\top$,$\\textrm{B}^\\top$,prepsi,total}\n");
   fprintf(out, "\\end{axis}\n");
   fprintf(out, "\\end{tikzpicture}\n");
   fprintf(out, "\n\n");
@@ -433,32 +474,41 @@ void nfft_trafo_print_output_histo_DFBRT(FILE *out, s_testset testset)
     else
       fprintf(out, "%d", testset.results[i].nthreads);
 
-  fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
-  fprintf(out, " title={%s %dd $\\textrm{NFFT}$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}", hostname, testset.param.d, testset.param.n, testset.param.M, testset.param.m);
+  fprintf(out,
+      "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=-1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+  fprintf(out,
+      " title={%s %dd $\\textrm{NFFT}$ N=%d $\\sigma$=2 M=%d m=%d prepsi sorted}",
+      hostname, testset.param.d, testset.param.n, testset.param.M,
+      testset.param.m);
   fprintf(out, " ]\n");
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[13].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[13].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[14].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[14].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[15].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[15].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[2].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[2].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[6].avg + testset.results[i].resval[2].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[6].avg + testset.results[i].resval[2].avg);
   fprintf(out, "};\n");
   fprintf(out, "\\legend{D,F,B,prepsi,total}\n");
   fprintf(out, "\\end{axis}\n");
@@ -477,7 +527,8 @@ void fastsum_print_output_histo_PreRfNfT(FILE *out, s_testset testset)
   if (gethostname(hostname, 1024) != 0)
     strncpy(hostname, "unnamed", 1024);
 
-  fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testset.param, 0);
+  fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testset.param,
+      0);
 
   fprintf(out, "\\begin{tikzpicture}\n");
   fprintf(out, "\\begin{axis}[");
@@ -489,34 +540,42 @@ void fastsum_print_output_histo_PreRfNfT(FILE *out, s_testset testset)
     else
       fprintf(out, "%d", testset.results[i].nthreads);
 
-  fprintf(out, "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
+  fprintf(out,
+      "}, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Time in s, xtick=data, legend style={legend columns=1}, ybar, bar width=7pt, ymajorgrids=true, yminorgrids=true, minor y tick num=1, ");
   fprintf(out, " title={%s}", plottitle);
   fprintf(out, " ]\n");
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[1].avg+testset.results[i].resval[2].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[1].avg + testset.results[i].resval[2].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[3].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[3].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[4].avg + testset.results[i].resval[5].avg + testset.results[i].resval[6].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[4].avg + testset.results[i].resval[5].avg
+            + testset.results[i].resval[6].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[7].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[7].avg);
   fprintf(out, "};\n");
 
   fprintf(out, "\\addplot coordinates {");
   for (i = 0; i < size; i++)
-    fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, testset.results[i].resval[9].avg - testset.results[i].resval[0].avg);
+    fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+        testset.results[i].resval[9].avg - testset.results[i].resval[0].avg);
   fprintf(out, "};\n");
-  fprintf(out, "\\legend{prepsi (step 1b),init nearfield (step 1c),far field (steps 2a-c),nearfield (step 2d),total $-$ step 1a}\n");
+  fprintf(out,
+      "\\legend{prepsi (step 1b),init nearfield (step 1c),far field (steps 2a-c),nearfield (step 2d),total $-$ step 1a}\n");
   fprintf(out, "\\end{axis}\n");
   fprintf(out, "\\end{tikzpicture}\n");
   fprintf(out, "\n\n");
@@ -524,21 +583,25 @@ void fastsum_print_output_histo_PreRfNfT(FILE *out, s_testset testset)
   fflush(out);
 }
 
-void fastsum_print_output_speedup_total_minus_indep(FILE *out, s_testset *testsets, int ntestsets)
+void fastsum_print_output_speedup_total_minus_indep(FILE *out,
+    s_testset *testsets, int ntestsets)
 {
   int i, t;
   char hostname[1025];
   char plottitle[1025];
-  unsigned int diff_mask = fastsum_determine_different_parameters(testsets, ntestsets);
+  unsigned int diff_mask = fastsum_determine_different_parameters(testsets,
+      ntestsets);
 
   if (gethostname(hostname, 1024) != 0)
     strncpy(hostname, "unnamed", 1024);
 
-  fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname, testsets[0].param, diff_mask | MASK_FSUM_WINM);
+  fastsum_get_plot_title_minus_indep(plottitle, 1024, hostname,
+      testsets[0].param, diff_mask | MASK_FSUM_WINM);
 
   fprintf(out, "\\begin{tikzpicture}\n");
   fprintf(out, "\\begin{axis}[");
-  fprintf(out, "width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, ");
+  fprintf(out,
+      "width=0.9\\textwidth, height=0.6\\textwidth, x tick label style={ /pgf/number format/1000 sep=}, xlabel=Number of threads, ylabel=Speedup, xtick=data, legend style={ legend pos = north west, legend columns=1}, ymajorgrids=true, yminorgrids=true, minor y tick num=4, ");
   fprintf(out, " title={%s}", plottitle);
   fprintf(out, " ]\n");
 
@@ -546,19 +609,26 @@ void fastsum_print_output_speedup_total_minus_indep(FILE *out, s_testset *testse
   {
     s_testset testset = testsets[t];
 
-    double tref = 0.0;
+    R tref = K(0.0);
     for (i = 0; i < testset.nresults; i++)
       if (testset.results[i].nthreads == 1)
-        tref = testset.results[i].resval[9].avg - testset.results[i].resval[0].avg;
+        tref = testset.results[i].resval[9].avg
+            - testset.results[i].resval[0].avg;
 
     fprintf(out, "\\addplot coordinates {");
     for (i = 0; i < testset.nresults; i++)
-      fprintf(out, "(%d, %.6e) ", testset.results[i].nthreads, tref/(testset.results[i].resval[9].avg - testset.results[i].resval[0].avg));
+      fprintf(out, "(%d, %.6" __FES__ ") ", testset.results[i].nthreads,
+          tref
+              / (testset.results[i].resval[9].avg
+                  - testset.results[i].resval[0].avg));
     fprintf(out, "};\n");
 
     for (i = 0; i < testset.nresults; i++)
     {
-      fprintf(stderr, "%d:%.3f  ", testset.results[i].nthreads, tref/(testset.results[i].resval[9].avg - testset.results[i].resval[0].avg));
+      fprintf(stderr, "%d:%.3" __FIS__ "  ", testset.results[i].nthreads,
+          tref
+              / (testset.results[i].resval[9].avg
+                  - testset.results[i].resval[0].avg));
     }
     fprintf(stderr, "\n\n");
   }
@@ -569,7 +639,8 @@ void fastsum_print_output_speedup_total_minus_indep(FILE *out, s_testset *testse
     char title[256];
     if (t > 0)
       fprintf(out, "},{");
-    fastsum_get_plot_title_minus_indep(title, 255, "", testsets[t].param, ~(diff_mask | MASK_FSUM_WINM));
+    fastsum_get_plot_title_minus_indep(title, 255, "", testsets[t].param,
+        ~(diff_mask | MASK_FSUM_WINM));
     fprintf(out, "%s", title);
   }
   fprintf(out, "}}\n");
@@ -580,7 +651,9 @@ void fastsum_print_output_speedup_total_minus_indep(FILE *out, s_testset *testse
   fflush(out);
 }
 
-void run_testset(s_testset *testset, int d, int L, int M, int n, int m, int p, char *kernel_name, double c, double eps_I, double eps_B, int *nthreads_array, int n_threads_array_size)
+void run_testset(s_testset *testset, int d, int L, int M, int n, int m, int p,
+    char *kernel_name, R c, R eps_I, R eps_B,
+    int *nthreads_array, int n_threads_array_size)
 {
   int i;
   testset->param.d = d;
@@ -594,14 +667,18 @@ void run_testset(s_testset *testset, int d, int L, int M, int n, int m, int p, c
   testset->param.eps_I = eps_I;
   testset->param.eps_B = eps_B;
 
-  testset->results = (s_result*) malloc(n_threads_array_size*sizeof(s_result));
+  testset->results = (s_result*) NFFT(malloc)(
+      (size_t)(n_threads_array_size) * sizeof(s_result));
   testset->nresults = n_threads_array_size;
 
   run_test_create(testset->param.d, testset->param.L, testset->param.M);
   for (i = 0; i < n_threads_array_size; i++)
   {
     testset->results[i].nthreads = nthreads_array[i];
-    run_test(testset->results[i].resval, NREPEAT, testset->param.n, testset->param.m, testset->param.p, testset->param.kernel_name, testset->param.c, testset->param.eps_I, testset->param.eps_B, testset->results[i].nthreads);
+    run_test(testset->results[i].resval, NREPEAT, testset->param.n,
+        testset->param.m, testset->param.p, testset->param.kernel_name,
+        testset->param.c, testset->param.eps_I, testset->param.eps_B,
+        testset->results[i].nthreads);
   }
 
 }
@@ -611,7 +688,7 @@ void test1(int *nthreads_array, int n_threads_array_size)
   s_testset testsets[1];
 
 #if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
-  run_testset(&testsets[0], 3, 100000, 100000, 128, 4, 7, "one_over_x", 0.0, 0.03125, 0.03125, nthreads_array, n_threads_array_size);
+  run_testset(&testsets[0], 3, 100000, 100000, 128, 4, 7, "one_over_x", K(0.0), K(0.03125), K(0.03125), nthreads_array, n_threads_array_size);
 
   fastsum_print_output_speedup_total_minus_indep(file_out_tex, testsets, 1);
 
@@ -632,7 +709,8 @@ int main(int argc, char** argv)
 #if !(defined MEASURE_TIME && defined MEASURE_TIME_FFTW)
   fprintf(stderr, "WARNING: Detailed time measurements are not activated.\n");
   fprintf(stderr, "Please re-run the configure script with options\n");
-  fprintf(stderr, "--enable-measure-time --enable-measure-time-fftw --enable-openmp\n");
+  fprintf(stderr,
+      "--enable-measure-time --enable-measure-time-fftw --enable-openmp\n");
   fprintf(stderr, "and run \"make clean all\"\n\n");
 #endif
 
@@ -646,6 +724,6 @@ int main(int argc, char** argv)
 
   fclose(file_out_tex);
 
-  return 0;
+  return EXIT_SUCCESS;
 }
 
diff --git a/applications/fastsum/fastsum_benchomp_createdataset.c b/applications/fastsum/fastsum_benchomp_createdataset.c
index e800f52..271dc2c 100644
--- a/applications/fastsum/fastsum_benchomp_createdataset.c
+++ b/applications/fastsum/fastsum_benchomp_createdataset.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -26,7 +26,6 @@
 
 #include "config.h"
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -37,22 +36,22 @@ void fastsum_benchomp_createdataset(unsigned int d, int L, int M)
   R *y;
   C *alpha;
 
-  x = (R*) nfft_malloc(d*L*sizeof(R));
-  y = (R*) nfft_malloc(d*L*sizeof(R));
-  alpha = (C*) nfft_malloc(L*sizeof(C));
+  x = (R*) NFFT(malloc)((size_t)(d * L) * sizeof(R));
+  y = (R*) NFFT(malloc)((size_t)(d * L) * sizeof(R));
+  alpha = (C*) NFFT(malloc)((size_t)(L) * sizeof(C));
 
   /** init source knots in a d-ball with radius 1 */
   k = 0;
   while (k < L)
   {
-    double r_max = 1.0;
-    double r2 = 0.0;
+    R r_max = K(1.0);
+    R r2 = K(0.0);
 
-    for (j=0; j<d; j++)
-      x[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+    for (j = 0; j < d; j++)
+      x[k * d + j] = K(2.0) * r_max * NFFT(drand48)() - r_max;
 
-    for (j=0; j<d; j++)
-      r2 += x[k*d+j] * x[k*d+j];
+    for (j = 0; j < d; j++)
+      r2 += x[k * d + j] * x[k * d + j];
 
     if (r2 >= r_max * r_max)
       continue;
@@ -60,20 +59,20 @@ void fastsum_benchomp_createdataset(unsigned int d, int L, int M)
     k++;
   }
 
-  nfft_vrand_unit_complex(alpha,L);
+  NFFT(vrand_unit_complex)(alpha, L);
 
   /** init target knots in a d-ball with radius 1 */
   k = 0;
   while (k < M)
   {
-    double r_max = 1.0;
-    double r2 = 0.0;
+    R r_max = K(1.0);
+    R r2 = K(0.0);
 
-    for (j=0; j<d; j++)
-      y[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+    for (j = 0; j < d; j++)
+      y[k * d + j] = K(2.0) * r_max * NFFT(drand48)() - r_max;
 
-    for (j=0; j<d; j++)
-      r2 += y[k*d+j] * y[k*d+j];
+    for (j = 0; j < d; j++)
+      r2 += y[k * d + j] * y[k * d + j];
 
     if (r2 >= r_max * r_max)
       continue;
@@ -83,26 +82,26 @@ void fastsum_benchomp_createdataset(unsigned int d, int L, int M)
 
   printf("%d %d %d\n", d, L, M);
 
-  for (j=0; j < L; j++)
+  for (j = 0; j < L; j++)
   {
-    for (t=0; t < d; t++)
-      printf("%.16e ", x[d*j+t]);
+    for (t = 0; t < d; t++)
+      printf("%.16" __FES__ " ", x[d * j + t]);
     printf("\n");
   }
 
-  for (j=0; j < L; j++)
-    printf("%.16e %.16e\n", creal(alpha[j]), cimag(alpha[j]));
+  for (j = 0; j < L; j++)
+    printf("%.16" __FES__ " %.16" __FES__ "\n", CREAL(alpha[j]), CIMAG(alpha[j]));
 
-  for (j=0; j < M; j++)
+  for (j = 0; j < M; j++)
   {
-    for (t=0; t < d; t++)
-      printf("%.16e ", y[d*j+t]);
+    for (t = 0; t < d; t++)
+      printf("%.16" __FES__ " ", y[d * j + t]);
     printf("\n");
   }
 
-  nfft_free(x);
-  nfft_free(y);
-  nfft_free(alpha);
+  NFFT(free)(x);
+  NFFT(free)(y);
+  NFFT(free)(alpha);
 }
 
 int main(int argc, char **argv)
@@ -111,7 +110,8 @@ int main(int argc, char **argv)
   int L;
   int M;
 
-  if (argc < 4) {
+  if (argc < 4)
+  {
     fprintf(stderr, "usage: d L M\n");
     return -1;
   }
diff --git a/applications/fastsum/fastsum_benchomp_detail.c b/applications/fastsum/fastsum_benchomp_detail.c
index 5327028..6ef4b18 100644
--- a/applications/fastsum/fastsum_benchomp_detail.c
+++ b/applications/fastsum/fastsum_benchomp_detail.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -24,7 +24,6 @@
 #include <stdlib.h>
 #include <complex.h>
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 #include "fastsum.h"
@@ -33,55 +32,57 @@
 #include <omp.h>
 #endif
 
-int bench_openmp(FILE *infile, int n, int m, int p, double _Complex (*kernel)(double , int , const double *), double c, double eps_I, double eps_B)
+int bench_openmp(FILE *infile, int n, int m, int p,
+    C (*kernel)(R, int, const R *), R c, R eps_I, R eps_B)
 {
   fastsum_plan my_fastsum_plan;
   int d, L, M;
   int t, j;
-  double re,im;
-  double r_max = 0.25 - my_fastsum_plan.eps_B/2.0;
+  R re, im;
+  R r_max = K(0.25) - my_fastsum_plan.eps_B / K(2.0);
   ticks t0, t1;
-  double tt_total;
+  R tt_total;
 
   fscanf(infile, "%d %d %d", &d, &L, &M);
 
 #ifdef _OPENMP
-  fftw_import_wisdom_from_filename("fastsum_benchomp_detail_threads.plan");
+  FFTW(import_wisdom_from_filename)("fastsum_benchomp_detail_threads.plan");
 #else
-  fftw_import_wisdom_from_filename("fastsum_benchomp_detail_single.plan");
+  FFTW(import_wisdom_from_filename)("fastsum_benchomp_detail_single.plan");
 #endif
 
-  fastsum_init_guru(&my_fastsum_plan, d, L, M, kernel, &c, NEARFIELD_BOXES, n, m, p, eps_I, eps_B);
+  fastsum_init_guru(&my_fastsum_plan, d, L, M, kernel, &c, NEARFIELD_BOXES, n,
+      m, p, eps_I, eps_B);
 
 #ifdef _OPENMP
-  fftw_export_wisdom_to_filename("fastsum_benchomp_detail_threads.plan");
+  FFTW(export_wisdom_to_filename)("fastsum_benchomp_detail_threads.plan");
 #else
-  fftw_export_wisdom_to_filename("fastsum_benchomp_detail_single.plan");
+  FFTW(export_wisdom_to_filename)("fastsum_benchomp_detail_single.plan");
 #endif
 
-  for (j=0; j < L; j++)
+  for (j = 0; j < L; j++)
   {
-    for (t=0; t < d; t++)
+    for (t = 0; t < d; t++)
     {
-      double v;
-      fscanf(infile, "%lg", &v);
-      my_fastsum_plan.x[d*j+t] = v * r_max;
+      R v;
+      fscanf(infile, __FR__, &v);
+      my_fastsum_plan.x[d * j + t] = v * r_max;
     }
   }
 
-  for (j=0; j < L; j++)
+  for (j = 0; j < L; j++)
   {
-    fscanf(infile, "%lg %lg", &re, &im);
-    my_fastsum_plan.alpha[j] = re + _Complex_I * im;
+    fscanf(infile, __FR__ " " __FR__, &re, &im);
+    my_fastsum_plan.alpha[j] = re + II * im;
   }
 
-  for (j=0; j < M; j++)
+  for (j = 0; j < M; j++)
   {
-    for (t=0; t < d; t++)
+    for (t = 0; t < d; t++)
     {
-      double v;
-      fscanf(infile, "%lg", &v);
-      my_fastsum_plan.y[d*j+t] = v * r_max;
+      R v;
+      fscanf(infile, __FR__, &v);
+      my_fastsum_plan.y[d * j + t] = v * r_max;
     }
   }
 
@@ -92,28 +93,47 @@ int bench_openmp(FILE *infile, int n, int m, int p, double _Complex (*kernel)(do
   /** fast computation */
   fastsum_trafo(&my_fastsum_plan);
   t1 = getticks();
-  tt_total = nfft_elapsed_seconds(t1,t0);
+  tt_total = NFFT(elapsed_seconds)(t1, t0);
 
 #ifndef MEASURE_TIME
-  my_fastsum_plan.MEASURE_TIME_t[0] = 0.0;
-  my_fastsum_plan.MEASURE_TIME_t[1] = 0.0;
-  my_fastsum_plan.MEASURE_TIME_t[2] = 0.0;
-  my_fastsum_plan.MEASURE_TIME_t[3] = 0.0;
-  my_fastsum_plan.MEASURE_TIME_t[4] = 0.0;
-  my_fastsum_plan.MEASURE_TIME_t[5] = 0.0;
-  my_fastsum_plan.MEASURE_TIME_t[6] = 0.0;
-  my_fastsum_plan.MEASURE_TIME_t[7] = 0.0;
-  my_fastsum_plan.mv1.MEASURE_TIME_t[0] = 0.0;
-  my_fastsum_plan.mv1.MEASURE_TIME_t[2] = 0.0;
-  my_fastsum_plan.mv2.MEASURE_TIME_t[0] = 0.0;
-  my_fastsum_plan.mv2.MEASURE_TIME_t[2] = 0.0;
+  my_fastsum_plan.MEASURE_TIME_t[0] = K(0.0);
+  my_fastsum_plan.MEASURE_TIME_t[1] = K(0.0);
+  my_fastsum_plan.MEASURE_TIME_t[2] = K(0.0);
+  my_fastsum_plan.MEASURE_TIME_t[3] = K(0.0);
+  my_fastsum_plan.MEASURE_TIME_t[4] = K(0.0);
+  my_fastsum_plan.MEASURE_TIME_t[5] = K(0.0);
+  my_fastsum_plan.MEASURE_TIME_t[6] = K(0.0);
+  my_fastsum_plan.MEASURE_TIME_t[7] = K(0.0);
+  my_fastsum_plan.mv1.MEASURE_TIME_t[0] = K(0.0);
+  my_fastsum_plan.mv1.MEASURE_TIME_t[2] = K(0.0);
+  my_fastsum_plan.mv2.MEASURE_TIME_t[0] = K(0.0);
+  my_fastsum_plan.mv2.MEASURE_TIME_t[2] = K(0.0);
 #endif
 #ifndef MEASURE_TIME_FFTW
-  my_fastsum_plan.mv1.MEASURE_TIME_t[1] = 0.0;
-  my_fastsum_plan.mv2.MEASURE_TIME_t[1] = 0.0;
+  my_fastsum_plan.mv1.MEASURE_TIME_t[1] = K(0.0);
+  my_fastsum_plan.mv2.MEASURE_TIME_t[1] = K(0.0);
 #endif
 
-  printf("%.6e %.6e %.6e %6e %.6e %.6e %.6e %.6e %.6e %6e %.6e %.6e %6e %.6e %.6e %6e\n", my_fastsum_plan.MEASURE_TIME_t[0], my_fastsum_plan.MEASURE_TIME_t[1], my_fastsum_plan.MEASURE_TIME_t[2], my_fastsum_plan.MEASURE_TIME_t[3], my_fastsum_plan.MEASURE_TIME_t[4], my_fastsum_plan.MEASURE_TIME_t[5], my_fastsum_plan.MEASURE_TIME_t[6], my_fastsum_plan.MEASURE_TIME_t[7], tt_total-my_fastsum_plan.MEASURE_TIME_t[0]-my_fastsum_plan.MEASURE_TIME_t[1]-my_fastsum_plan.MEASURE_TIME_t[2]-my_fastsum_ [...]
+  printf(
+      "%.6" __FES__ " %.6" __FES__ " %.6" __FES__ " %6" __FES__ " %.6" __FES__ " %.6" __FES__ " %.6" __FES__ " %.6" __FES__ " %.6" __FES__ " %6" __FES__ " %.6" __FES__ " %.6" __FES__ " %6" __FES__ " %.6" __FES__ " %.6" __FES__ " %6" __FES__ "\n",
+      my_fastsum_plan.MEASURE_TIME_t[0], my_fastsum_plan.MEASURE_TIME_t[1],
+      my_fastsum_plan.MEASURE_TIME_t[2], my_fastsum_plan.MEASURE_TIME_t[3],
+      my_fastsum_plan.MEASURE_TIME_t[4], my_fastsum_plan.MEASURE_TIME_t[5],
+      my_fastsum_plan.MEASURE_TIME_t[6], my_fastsum_plan.MEASURE_TIME_t[7],
+      tt_total - my_fastsum_plan.MEASURE_TIME_t[0]
+          - my_fastsum_plan.MEASURE_TIME_t[1]
+          - my_fastsum_plan.MEASURE_TIME_t[2]
+          - my_fastsum_plan.MEASURE_TIME_t[3]
+          - my_fastsum_plan.MEASURE_TIME_t[4]
+          - my_fastsum_plan.MEASURE_TIME_t[5]
+          - my_fastsum_plan.MEASURE_TIME_t[6]
+          - my_fastsum_plan.MEASURE_TIME_t[7], tt_total,
+      my_fastsum_plan.mv1.MEASURE_TIME_t[0],
+      my_fastsum_plan.mv1.MEASURE_TIME_t[1],
+      my_fastsum_plan.mv1.MEASURE_TIME_t[2],
+      my_fastsum_plan.mv2.MEASURE_TIME_t[0],
+      my_fastsum_plan.mv2.MEASURE_TIME_t[1],
+      my_fastsum_plan.mv2.MEASURE_TIME_t[2]);
 
   fastsum_finalize(&my_fastsum_plan);
 
@@ -122,69 +142,68 @@ int bench_openmp(FILE *infile, int n, int m, int p, double _Complex (*kernel)(do
 
 int main(int argc, char **argv)
 {
-  int n;                                             /**< expansion degree        */
-  int m;                                             /**< cut-off parameter       */
-  int p;                                             /**< degree of smoothness    */
-  char *s;                                           /**< name of kernel          */
-  double _Complex (*kernel)(double , int , const double *);  /**< kernel function         */
-  double c;                                          /**< parameter for kernel    */
-  double eps_I;                                      /**< inner boundary          */
-  double eps_B;                                      /**< outer boundary          */
-
+  int n; /**< expansion degree        */
+  int m; /**< cut-off parameter       */
+  int p; /**< degree of smoothness    */
+  char *s; /**< name of kernel          */
+  C (*kernel)(R, int, const R *); /**< kernel function         */
+  R c; /**< parameter for kernel    */
+  R eps_I; /**< inner boundary          */
+  R eps_B; /**< outer boundary          */
 
 #ifdef _OPENMP
   int nthreads;
 
   if (argc != 9)
-    return 1;
+    return EXIT_FAILURE;
 
   nthreads = atoi(argv[8]);
-  fftw_init_threads();
+  FFTW(init_threads)();
   omp_set_num_threads(nthreads);
 #else
   if (argc != 8)
-    return 1;
+    return EXIT_FAILURE;
 #endif
 
-  n=atoi(argv[1]);
-  m=atoi(argv[2]);
-  p=atoi(argv[3]);
-  s=argv[4];
-  c=atof(argv[5]);
-  eps_I=atof(argv[6]);
-  eps_B=atof(argv[7]);
-  if (strcmp(s,"gaussian")==0)
+  n = atoi(argv[1]);
+  m = atoi(argv[2]);
+  p = atoi(argv[3]);
+  s = argv[4];
+  c = atof(argv[5]);
+  eps_I = (R)(atof(argv[6]));
+  eps_B = (R)(atof(argv[7]));
+  if (strcmp(s, "gaussian") == 0)
     kernel = gaussian;
-  else if (strcmp(s,"multiquadric")==0)
+  else if (strcmp(s, "multiquadric") == 0)
     kernel = multiquadric;
-  else if (strcmp(s,"inverse_multiquadric")==0)
+  else if (strcmp(s, "inverse_multiquadric") == 0)
     kernel = inverse_multiquadric;
-  else if (strcmp(s,"logarithm")==0)
+  else if (strcmp(s, "logarithm") == 0)
     kernel = logarithm;
-  else if (strcmp(s,"thinplate_spline")==0)
+  else if (strcmp(s, "thinplate_spline") == 0)
     kernel = thinplate_spline;
-  else if (strcmp(s,"one_over_square")==0)
+  else if (strcmp(s, "one_over_square") == 0)
     kernel = one_over_square;
-  else if (strcmp(s,"one_over_modulus")==0)
+  else if (strcmp(s, "one_over_modulus") == 0)
     kernel = one_over_modulus;
-  else if (strcmp(s,"one_over_x")==0)
+  else if (strcmp(s, "one_over_x") == 0)
     kernel = one_over_x;
-  else if (strcmp(s,"inverse_multiquadric3")==0)
+  else if (strcmp(s, "inverse_multiquadric3") == 0)
     kernel = inverse_multiquadric3;
-  else if (strcmp(s,"sinc_kernel")==0)
+  else if (strcmp(s, "sinc_kernel") == 0)
     kernel = sinc_kernel;
-  else if (strcmp(s,"cosc")==0)
+  else if (strcmp(s, "cosc") == 0)
     kernel = cosc;
-  else if (strcmp(s,"cot")==0)
+  else if (strcmp(s, "cot") == 0)
     kernel = kcot;
   else
   {
-    s="multiquadric";
+    s = "multiquadric";
     kernel = multiquadric;
   }
 
   bench_openmp(stdin, n, m, p, kernel, c, eps_I, eps_B);
 
-  return 0;
+  return EXIT_SUCCESS;
 }
 
diff --git a/applications/fastsum/fastsum_matlab.c b/applications/fastsum/fastsum_matlab.c
index 17b82aa..c7aba85 100644
--- a/applications/fastsum/fastsum_matlab.c
+++ b/applications/fastsum/fastsum_matlab.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: fastsum_matlab.c 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id$ */
 
 /*! \file fastsum_matlab.c
  *  \brief Simple test program for the fast NFFT-based summation algorithm, called by fastsum.m.
@@ -46,27 +46,27 @@
 
 int main(int argc, char **argv)
 {
-  int j,k,t;                                         /**< indices                 */
-  int d;                                             /**< number of dimensions    */
-  int N;                                             /**< number of source nodes  */
-  int M;                                             /**< number of target nodes  */
-  int n;                                             /**< expansion degree        */
-  int m;                                             /**< cut-off parameter       */
-  int p;                                             /**< degree of smoothness    */
-  char *s;                                           /**< name of kernel          */
-  double _Complex (*kernel)(double , int , const double *);  /**< kernel function         */
-  double c;                                          /**< parameter for kernel    */
-  fastsum_plan my_fastsum_plan;                      /**< plan for fast summation */
-  double _Complex *direct;                           /**< array for direct computation */
-  ticks t0, t1;                                      /**< for time measurement    */
-  double time;                                       /**< for time measurement    */
-  double error=0.0;                                  /**< for error computation   */
-  double eps_I;                                      /**< inner boundary          */
-  double eps_B;                                      /**< outer boundary          */
+  int j, k, t; /**< indices                 */
+  int d; /**< number of dimensions    */
+  int N; /**< number of source nodes  */
+  int M; /**< number of target nodes  */
+  int n; /**< expansion degree        */
+  int m; /**< cut-off parameter       */
+  int p; /**< degree of smoothness    */
+  const char *s; /**< name of kernel          */
+  C (*kernel)(R, int, const R *); /**< kernel function         */
+  R c; /**< parameter for kernel    */
+  fastsum_plan my_fastsum_plan; /**< plan for fast summation */
+  C *direct; /**< array for direct computation */
+  ticks t0, t1; /**< for time measurement    */
+  R time; /**< for time measurement    */
+  R error = K(0.0); /**< for error computation   */
+  R eps_I; /**< inner boundary          */
+  R eps_B; /**< outer boundary          */
   FILE *fid1, *fid2;
-  double temp;
+  R temp;
 
-  if (argc!=11)
+  if (argc != 11)
   {
     printf("\nfastsum_test d N M n m p kernel c\n\n");
     printf("  d       dimension                 \n");
@@ -83,135 +83,144 @@ int main(int argc, char **argv)
   }
   else
   {
-    d=atoi(argv[1]);
-    N=atoi(argv[2]); c=1.0/pow((double)N,1.0/(double)d);
-    M=atoi(argv[3]);
-    n=atoi(argv[4]);
-    m=atoi(argv[5]);
-    p=atoi(argv[6]);
-    s=argv[7];
-    c=atof(argv[8]);
-    eps_I=atof(argv[9]);
-    eps_B=atof(argv[10]);
-    if (strcmp(s,"gaussian")==0)
+    d = atoi(argv[1]);
+    N = atoi(argv[2]);
+    c = K(1.0) / POW((R)(N), K(1.0) / ((R)(d)));
+    M = atoi(argv[3]);
+    n = atoi(argv[4]);
+    m = atoi(argv[5]);
+    p = atoi(argv[6]);
+    s = argv[7];
+    c = (R)(atof(argv[8]));
+    eps_I = (R)(atof(argv[9]));
+    eps_B = (R)(atof(argv[10]));
+    if (strcmp(s, "gaussian") == 0)
       kernel = gaussian;
-    else if (strcmp(s,"multiquadric")==0)
+    else if (strcmp(s, "multiquadric") == 0)
       kernel = multiquadric;
-    else if (strcmp(s,"inverse_multiquadric")==0)
+    else if (strcmp(s, "inverse_multiquadric") == 0)
       kernel = inverse_multiquadric;
-    else if (strcmp(s,"logarithm")==0)
+    else if (strcmp(s, "logarithm") == 0)
       kernel = logarithm;
-    else if (strcmp(s,"thinplate_spline")==0)
+    else if (strcmp(s, "thinplate_spline") == 0)
       kernel = thinplate_spline;
-    else if (strcmp(s,"one_over_square")==0)
+    else if (strcmp(s, "one_over_square") == 0)
       kernel = one_over_square;
-    else if (strcmp(s,"one_over_modulus")==0)
+    else if (strcmp(s, "one_over_modulus") == 0)
       kernel = one_over_modulus;
-    else if (strcmp(s,"one_over_x")==0)
+    else if (strcmp(s, "one_over_x") == 0)
       kernel = one_over_x;
-    else if (strcmp(s,"inverse_multiquadric3")==0)
+    else if (strcmp(s, "inverse_multiquadric3") == 0)
       kernel = inverse_multiquadric3;
-    else if (strcmp(s,"sinc_kernel")==0)
+    else if (strcmp(s, "sinc_kernel") == 0)
       kernel = sinc_kernel;
-    else if (strcmp(s,"cosc")==0)
+    else if (strcmp(s, "cosc") == 0)
       kernel = cosc;
-    else if (strcmp(s,"cot")==0)
+    else if (strcmp(s, "cot") == 0)
       kernel = kcot;
     else
     {
-      s="multiquadric";
+      s = "multiquadric";
       kernel = multiquadric;
     }
   }
-  printf("d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n",d,N,M,n,m,p,s,c,eps_I,eps_B);
+  printf(
+      "d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%" __FGS__ ", eps_I=%" __FGS__ ", eps_B=%" __FGS__ " \n",
+      d, N, M, n, m, p, s, c, eps_I, eps_B);
 
   /** init two dimensional fastsum plan */
-  fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);
+  fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I,
+      eps_B);
   /*fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, EXACT_NEARFIELD, n, m, p);*/
 
   /** load source knots and coefficients */
-  fid1=fopen("x.dat","r");
-  fid2=fopen("alpha.dat","r");
-  for (k=0; k<N; k++)
+  fid1 = fopen("x.dat", "r");
+  fid2 = fopen("alpha.dat", "r");
+  for (k = 0; k < N; k++)
   {
-    for (t=0; t<d; t++)
+    for (t = 0; t < d; t++)
     {
-      fscanf(fid1,"%le",&my_fastsum_plan.x[k*d+t]);
+      fscanf(fid1, __FR__, &my_fastsum_plan.x[k * d + t]);
     }
-    fscanf(fid2,"%le",&temp); my_fastsum_plan.alpha[k] = temp;
-    fscanf(fid2,"%le",&temp); my_fastsum_plan.alpha[k] += temp*_Complex_I;
+    fscanf(fid2, __FR__, &temp);
+    my_fastsum_plan.alpha[k] = temp;
+    fscanf(fid2, __FR__, &temp);
+    my_fastsum_plan.alpha[k] += temp * II;
   }
   fclose(fid1);
   fclose(fid2);
 
   /** load target knots */
-  fid1=fopen("y.dat","r");
-  for (j=0; j<M; j++)
+  fid1 = fopen("y.dat", "r");
+  for (j = 0; j < M; j++)
   {
-    for (t=0; t<d; t++)
+    for (t = 0; t < d; t++)
     {
-      fscanf(fid1,"%le",&my_fastsum_plan.y[j*d+t]);
+      fscanf(fid1, __FR__, &my_fastsum_plan.y[j * d + t]);
     }
   }
   fclose(fid1);
 
   /** direct computation */
-  printf("direct computation: "); fflush(NULL);
+  printf("direct computation: ");
+  fflush(NULL);
   t0 = getticks();
   fastsum_exact(&my_fastsum_plan);
   t1 = getticks();
-  time=nfft_elapsed_seconds(t1,t0);
-  printf("%fsec\n",time);
+  time = NFFT(elapsed_seconds)(t1, t0);
+  printf(__FI__ "sec\n", time);
 
   /** copy result */
-  direct = (double _Complex *)nfft_malloc(my_fastsum_plan.M_total*(sizeof(double _Complex)));
-  for (j=0; j<my_fastsum_plan.M_total; j++)
-    direct[j]=my_fastsum_plan.f[j];
+  direct = (C *) NFFT(malloc)((size_t)(my_fastsum_plan.M_total) * (sizeof(C)));
+  for (j = 0; j < my_fastsum_plan.M_total; j++)
+    direct[j] = my_fastsum_plan.f[j];
 
   /** precomputation */
-  printf("pre-computation:    "); fflush(NULL);
+  printf("pre-computation:    ");
+  fflush(NULL);
   t0 = getticks();
   fastsum_precompute(&my_fastsum_plan);
   t1 = getticks();
-  time=nfft_elapsed_seconds(t1,t0);
-  printf("%fsec\n",time);
+  time = NFFT(elapsed_seconds)(t1, t0);
+  printf(__FI__ "sec\n", time);
 
   /** fast computation */
-  printf("fast computation:   "); fflush(NULL);
+  printf("fast computation:   ");
+  fflush(NULL);
   t0 = getticks();
   fastsum_trafo(&my_fastsum_plan);
   t1 = getticks();
-  time=nfft_elapsed_seconds(t1,t0);
-  printf("%fsec\n",time);
+  time = NFFT(elapsed_seconds)(t1, t0);
+  printf(__FI__ "sec\n", time);
 
   /** compute max error */
-  error=0.0;
-  for (j=0; j<my_fastsum_plan.M_total; j++)
+  error = K(0.0);
+  for (j = 0; j < my_fastsum_plan.M_total; j++)
   {
-   if (cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j])>error)
-      error=cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j]);
+    if (CABS(direct[j] - my_fastsum_plan.f[j]) / CABS(direct[j]) > error)
+      error = CABS(direct[j] - my_fastsum_plan.f[j]) / CABS(direct[j]);
   }
-  printf("max relative error: %e\n",error);
+  printf("max relative error: " __FE__ "\n", error);
 
   /** write result to file */
-  fid1=fopen("f.dat","w+");
-  fid2=fopen("f_direct.dat","w+");
-  if (fid1==NULL)
+  fid1 = fopen("f.dat", "w+");
+  fid2 = fopen("f_direct.dat", "w+");
+  if (fid1 == NULL)
   {
     printf("Fehler!\n");
-    exit(-1);
+    exit(EXIT_FAILURE);
   }
-  for (j=0; j<M; j++)
+  for (j = 0; j < M; j++)
   {
-    temp=creal(my_fastsum_plan.f[j]);
-    fprintf(fid1,"  % .16e",temp);
-    temp=cimag(my_fastsum_plan.f[j]);
-    fprintf(fid1,"  % .16e\n",temp);
-
-    temp=creal(direct[j]);
-    fprintf(fid2,"  % .16e",temp);
-    temp=cimag(direct[j]);
-    fprintf(fid2,"  % .16e\n",temp);
+    temp = CREAL(my_fastsum_plan.f[j]);
+    fprintf(fid1, "  % .16" __FES__ "", temp);
+    temp = CIMAG(my_fastsum_plan.f[j]);
+    fprintf(fid1, "  % .16" __FES__ "\n", temp);
+
+    temp = CREAL(direct[j]);
+    fprintf(fid2, "  % .16" __FES__ "", temp);
+    temp = CIMAG(direct[j]);
+    fprintf(fid2, "  % .16" __FES__ "\n", temp);
   }
   fclose(fid1);
   fclose(fid2);
@@ -219,6 +228,6 @@ int main(int argc, char **argv)
   /** finalise the plan */
   fastsum_finalize(&my_fastsum_plan);
 
-  return 0;
+  return EXIT_SUCCESS;
 }
 /* \} */
diff --git a/applications/fastsum/fastsum_test.c b/applications/fastsum/fastsum_test.c
index 120d3fd..a802bae 100644
--- a/applications/fastsum/fastsum_test.c
+++ b/applications/fastsum/fastsum_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: fastsum_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /*! \file fastsum_test.c
  *  \brief Simple test program for the fast NFFT-based summation algorithm.
@@ -50,25 +50,25 @@
 
 int main(int argc, char **argv)
 {
-  int j,k,t;                                         /**< indices                 */
-  int d;                                             /**< number of dimensions    */
-  int N;                                             /**< number of source nodes  */
-  int M;                                             /**< number of target nodes  */
-  int n;                                             /**< expansion degree        */
-  int m;                                             /**< cut-off parameter       */
-  int p;                                             /**< degree of smoothness    */
-  char *s;                                           /**< name of kernel          */
-  double _Complex (*kernel)(double , int , const double *);  /**< kernel function         */
-  double c;                                          /**< parameter for kernel    */
-  fastsum_plan my_fastsum_plan;                      /**< plan for fast summation */
-  double _Complex *direct;                                   /**< array for direct computation */
-  ticks t0, t1;                                      /**< for time measurement    */
-  double time;                                       /**< for time measurement    */
-  double error=0.0;                                  /**< for error computation   */
-  double eps_I;                                      /**< inner boundary          */
-  double eps_B;                                      /**< outer boundary          */
+  int j, k; /**< indices                 */
+  int d; /**< number of dimensions    */
+  int N; /**< number of source nodes  */
+  int M; /**< number of target nodes  */
+  int n; /**< expansion degree        */
+  int m; /**< cut-off parameter       */
+  int p; /**< degree of smoothness    */
+  const char *s; /**< name of kernel          */
+  C (*kernel)(R, int, const R *); /**< kernel function         */
+  R c; /**< parameter for kernel    */
+  fastsum_plan my_fastsum_plan; /**< plan for fast summation */
+  C *direct; /**< array for direct computation */
+  ticks t0, t1; /**< for time measurement    */
+  R time; /**< for time measurement    */
+  R error = K(0.0); /**< for error computation   */
+  R eps_I; /**< inner boundary          */
+  R eps_B; /**< outer boundary          */
 
-  if (argc!=11)
+  if (argc != 11)
   {
     printf("\nfastsum_test d N M n m p kernel c eps_I eps_B\n\n");
     printf("  d       dimension                 \n");
@@ -81,51 +81,54 @@ int main(int argc, char **argv)
     printf("  c       kernel parameter          \n");
     printf("  eps_I   inner boundary            \n");
     printf("  eps_B   outer boundary            \n\n");
-    exit(-1);
+    exit(EXIT_FAILURE);
   }
   else
   {
-    d=atoi(argv[1]);
-    N=atoi(argv[2]); c=1.0/pow((double)N,1.0/(double)d);
-    M=atoi(argv[3]);
-    n=atoi(argv[4]);
-    m=atoi(argv[5]);
-    p=atoi(argv[6]);
-    s=argv[7];
-    c=atof(argv[8]);
-    eps_I=atof(argv[9]);
-    eps_B=atof(argv[10]);
-    if (strcmp(s,"gaussian")==0)
+    d = atoi(argv[1]);
+    N = atoi(argv[2]);
+    c = K(1.0) / POW((R)(N), K(1.0) / ((R)(d)));
+    M = atoi(argv[3]);
+    n = atoi(argv[4]);
+    m = atoi(argv[5]);
+    p = atoi(argv[6]);
+    s = argv[7];
+    c = (R)(atof(argv[8]));
+    eps_I = (R)(atof(argv[9]));
+    eps_B = (R)(atof(argv[10]));
+    if (strcmp(s, "gaussian") == 0)
       kernel = gaussian;
-    else if (strcmp(s,"multiquadric")==0)
+    else if (strcmp(s, "multiquadric") == 0)
       kernel = multiquadric;
-    else if (strcmp(s,"inverse_multiquadric")==0)
+    else if (strcmp(s, "inverse_multiquadric") == 0)
       kernel = inverse_multiquadric;
-    else if (strcmp(s,"logarithm")==0)
+    else if (strcmp(s, "logarithm") == 0)
       kernel = logarithm;
-    else if (strcmp(s,"thinplate_spline")==0)
+    else if (strcmp(s, "thinplate_spline") == 0)
       kernel = thinplate_spline;
-    else if (strcmp(s,"one_over_square")==0)
+    else if (strcmp(s, "one_over_square") == 0)
       kernel = one_over_square;
-    else if (strcmp(s,"one_over_modulus")==0)
+    else if (strcmp(s, "one_over_modulus") == 0)
       kernel = one_over_modulus;
-    else if (strcmp(s,"one_over_x")==0)
+    else if (strcmp(s, "one_over_x") == 0)
       kernel = one_over_x;
-    else if (strcmp(s,"inverse_multiquadric3")==0)
+    else if (strcmp(s, "inverse_multiquadric3") == 0)
       kernel = inverse_multiquadric3;
-    else if (strcmp(s,"sinc_kernel")==0)
+    else if (strcmp(s, "sinc_kernel") == 0)
       kernel = sinc_kernel;
-    else if (strcmp(s,"cosc")==0)
+    else if (strcmp(s, "cosc") == 0)
       kernel = cosc;
-    else if (strcmp(s,"cot")==0)
+    else if (strcmp(s, "cot") == 0)
       kernel = kcot;
     else
     {
-      s="multiquadric";
+      s = "multiquadric";
       kernel = multiquadric;
     }
   }
-  printf("d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%g, eps_I=%g, eps_B=%g \n",d,N,M,n,m,p,s,c,eps_I,eps_B);
+  printf(
+      "d=%d, N=%d, M=%d, n=%d, m=%d, p=%d, kernel=%s, c=%" __FGS__ ", eps_I=%" __FGS__ ", eps_B=%" __FGS__ " \n",
+      d, N, M, n, m, p, s, c, eps_I, eps_B);
 #ifdef NF_KUB
   printf("nearfield correction using piecewise cubic Lagrange interpolation\n");
 #elif defined(NF_QUADR)
@@ -135,23 +138,25 @@ int main(int argc, char **argv)
 #endif
 
 #ifdef _OPENMP
-  #pragma omp parallel
+#pragma omp parallel
   {
-    #pragma omp single
+#pragma omp single
     {
       printf("nthreads=%d\n", omp_get_max_threads());
     }
   }
 
-  fftw_init_threads();
+  FFTW(init_threads)();
 #endif
 
   /** init d-dimensional fastsum plan */
-  fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I, eps_B);
+  fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, 0, n, m, p, eps_I,
+      eps_B);
   //fastsum_init_guru(&my_fastsum_plan, d, N, M, kernel, &c, NEARFIELD_BOXES, n, m, p, eps_I, eps_B);
 
   if (my_fastsum_plan.flags & NEARFIELD_BOXES)
-    printf("determination of nearfield candidates based on partitioning into boxes\n");
+    printf(
+        "determination of nearfield candidates based on partitioning into boxes\n");
   else
     printf("determination of nearfield candidates based on search tree\n");
 
@@ -159,14 +164,14 @@ int main(int argc, char **argv)
   k = 0;
   while (k < N)
   {
-    double r_max = 0.25 - my_fastsum_plan.eps_B/2.0;
-    double r2 = 0.0;
+    R r_max = K(0.25) - my_fastsum_plan.eps_B / K(2.0);
+    R r2 = K(0.0);
 
-    for (j=0; j<d; j++)
-      my_fastsum_plan.x[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+    for (j = 0; j < d; j++)
+      my_fastsum_plan.x[k * d + j] = K(2.0) * r_max * NFFT(drand48)() - r_max;
 
-    for (j=0; j<d; j++)
-      r2 += my_fastsum_plan.x[k*d+j] * my_fastsum_plan.x[k*d+j];
+    for (j = 0; j < d; j++)
+      r2 += my_fastsum_plan.x[k * d + j] * my_fastsum_plan.x[k * d + j];
 
     if (r2 >= r_max * r_max)
       continue;
@@ -174,99 +179,102 @@ int main(int argc, char **argv)
     k++;
   }
 
-  for (k=0; k<N; k++)
+  for (k = 0; k < N; k++)
   {
-/*    double r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((double)rand()/(double)RAND_MAX,1.0/d);
-    my_fastsum_plan.x[k*d+0] = r;
-    for (j=1; j<d; j++)
-    {
-      double phi=2.0*PI*(double)rand()/(double)RAND_MAX;
-      my_fastsum_plan.x[k*d+j] = r;
-      for (t=0; t<j; t++)
-      {
-        my_fastsum_plan.x[k*d+t] *= cos(phi);
-      }
-      my_fastsum_plan.x[k*d+j] *= sin(phi);
-    }
-*/
-    my_fastsum_plan.alpha[k] = (double)rand()/(double)RAND_MAX + _Complex_I*(double)rand()/(double)RAND_MAX;
+    /*    R r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((R)rand()/(R)RAND_MAX,1.0/d);
+     my_fastsum_plan.x[k*d+0] = r;
+     for (j=1; j<d; j++)
+     {
+     R phi=2.0*KPI*(R)rand()/(R)RAND_MAX;
+     my_fastsum_plan.x[k*d+j] = r;
+     for (t=0; t<j; t++)
+     {
+     my_fastsum_plan.x[k*d+t] *= cos(phi);
+     }
+     my_fastsum_plan.x[k*d+j] *= sin(phi);
+     }
+     */
+    my_fastsum_plan.alpha[k] = NFFT(drand48)() + II * NFFT(drand48)();
   }
 
   /** init target knots in a d-ball with radius 0.25-eps_b/2 */
   k = 0;
   while (k < M)
   {
-    double r_max = 0.25 - my_fastsum_plan.eps_B/2.0;
-    double r2 = 0.0;
+    R r_max = K(0.25) - my_fastsum_plan.eps_B / K(2.0);
+    R r2 = K(0.0);
 
-    for (j=0; j<d; j++)
-      my_fastsum_plan.y[k*d+j] = 2.0 * r_max * (double)rand()/(double)RAND_MAX - r_max;
+    for (j = 0; j < d; j++)
+      my_fastsum_plan.y[k * d + j] = K(2.0) * r_max * NFFT(drand48)() - r_max;
 
-    for (j=0; j<d; j++)
-      r2 += my_fastsum_plan.y[k*d+j] * my_fastsum_plan.y[k*d+j];
+    for (j = 0; j < d; j++)
+      r2 += my_fastsum_plan.y[k * d + j] * my_fastsum_plan.y[k * d + j];
 
     if (r2 >= r_max * r_max)
       continue;
 
     k++;
   }
-/*  for (k=0; k<M; k++)
-  {
-    double r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((double)rand()/(double)RAND_MAX,1.0/d);
-    my_fastsum_plan.y[k*d+0] = r;
-    for (j=1; j<d; j++)
-    {
-      double phi=2.0*PI*(double)rand()/(double)RAND_MAX;
-      my_fastsum_plan.y[k*d+j] = r;
-      for (t=0; t<j; t++)
-      {
-        my_fastsum_plan.y[k*d+t] *= cos(phi);
-      }
-      my_fastsum_plan.y[k*d+j] *= sin(phi);
-    }
-  } */
+  /*  for (k=0; k<M; k++)
+   {
+   R r=(0.25-my_fastsum_plan.eps_B/2.0)*pow((R)rand()/(R)RAND_MAX,1.0/d);
+   my_fastsum_plan.y[k*d+0] = r;
+   for (j=1; j<d; j++)
+   {
+   R phi=2.0*KPI*(R)rand()/(R)RAND_MAX;
+   my_fastsum_plan.y[k*d+j] = r;
+   for (t=0; t<j; t++)
+   {
+   my_fastsum_plan.y[k*d+t] *= cos(phi);
+   }
+   my_fastsum_plan.y[k*d+j] *= sin(phi);
+   }
+   } */
 
   /** direct computation */
-  printf("direct computation: "); fflush(NULL);
+  printf("direct computation: ");
+  fflush(NULL);
   t0 = getticks();
   fastsum_exact(&my_fastsum_plan);
   t1 = getticks();
-  time=nfft_elapsed_seconds(t1,t0);
-  printf("%fsec\n",time);
+  time = NFFT(elapsed_seconds)(t1, t0);
+  printf(__FI__ "sec\n", time);
 
   /** copy result */
-  direct = (double _Complex *)nfft_malloc(my_fastsum_plan.M_total*(sizeof(double _Complex)));
-  for (j=0; j<my_fastsum_plan.M_total; j++)
-    direct[j]=my_fastsum_plan.f[j];
+  direct = (C *) NFFT(malloc)((size_t)(my_fastsum_plan.M_total) * (sizeof(C)));
+  for (j = 0; j < my_fastsum_plan.M_total; j++)
+    direct[j] = my_fastsum_plan.f[j];
 
   /** precomputation */
-  printf("pre-computation:    "); fflush(NULL);
+  printf("pre-computation:    ");
+  fflush(NULL);
   t0 = getticks();
   fastsum_precompute(&my_fastsum_plan);
   t1 = getticks();
-  time=nfft_elapsed_seconds(t1,t0);
-  printf("%fsec\n",time);
+  time = NFFT(elapsed_seconds)(t1, t0);
+  printf(__FI__ "sec\n", time);
 
   /** fast computation */
-  printf("fast computation:   "); fflush(NULL);
+  printf("fast computation:   ");
+  fflush(NULL);
   t0 = getticks();
   fastsum_trafo(&my_fastsum_plan);
   t1 = getticks();
-  time=nfft_elapsed_seconds(t1,t0);
-  printf("%fsec\n",time);
+  time = NFFT(elapsed_seconds)(t1, t0);
+  printf(__FI__ "sec\n", time);
 
   /** compute max error */
-  error=0.0;
-  for (j=0; j<my_fastsum_plan.M_total; j++)
+  error = K(0.0);
+  for (j = 0; j < my_fastsum_plan.M_total; j++)
   {
-    if (cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j])>error)
-      error=cabs(direct[j]-my_fastsum_plan.f[j])/cabs(direct[j]);
+    if (CABS(direct[j] - my_fastsum_plan.f[j]) / CABS(direct[j]) > error)
+      error = CABS(direct[j] - my_fastsum_plan.f[j]) / CABS(direct[j]);
   }
-  printf("max relative error: %e\n",error);
+  printf("max relative error: %" __FES__ "\n", error);
 
   /** finalise the plan */
   fastsum_finalize(&my_fastsum_plan);
 
-  return 0;
+  return EXIT_SUCCESS;
 }
 /* \} */
diff --git a/applications/fastsum/fastsum_test.dSYM/Contents/Info.plist b/applications/fastsum/fastsum_test.dSYM/Contents/Info.plist
new file mode 100644
index 0000000..2691447
--- /dev/null
+++ b/applications/fastsum/fastsum_test.dSYM/Contents/Info.plist
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>CFBundleDevelopmentRegion</key>
+		<string>English</string>
+		<key>CFBundleIdentifier</key>
+		<string>com.apple.xcode.dsym.fastsum_test</string>
+		<key>CFBundleInfoDictionaryVersion</key>
+		<string>6.0</string>
+		<key>CFBundlePackageType</key>
+		<string>dSYM</string>
+		<key>CFBundleSignature</key>
+		<string>????</string>
+		<key>CFBundleShortVersionString</key>
+		<string>1.0</string>
+		<key>CFBundleVersion</key>
+		<string>1</string>
+	</dict>
+</plist>
diff --git a/applications/fastsum/fastsum_test.dSYM/Contents/Resources/DWARF/fastsum_test b/applications/fastsum/fastsum_test.dSYM/Contents/Resources/DWARF/fastsum_test
new file mode 100644
index 0000000..7432346
Binary files /dev/null and b/applications/fastsum/fastsum_test.dSYM/Contents/Resources/DWARF/fastsum_test differ
diff --git a/applications/fastsum/fastsum_test.m b/applications/fastsum/fastsum_test.m
index 83f1677..f041b39 100644
--- a/applications/fastsum/fastsum_test.m
+++ b/applications/fastsum/fastsum_test.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: fastsum_test.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 %
 % Simple test program for fast NFFT-based summation algorithm.
 % Markus Fenn, 2006.
diff --git a/applications/fastsum/kernels.c b/applications/fastsum/kernels.c
index 87d9115..566c159 100644
--- a/applications/fastsum/kernels.c
+++ b/applications/fastsum/kernels.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: kernels.c 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id$ */
 
 /*! \file kernels.c
  *  \brief File with predefined kernels for the fast summation algorithm.
@@ -37,363 +37,364 @@
  * \{
  */
 
-double _Complex gaussian(double x, int der, const double *param)    /* K(x)=exp(-x^2/c^2) */
+C gaussian(R x, int der, const R *param)    /* K(x)=EXP(-x^2/c^2) */
 {
-  double c=param[0];
-  double value=0.0;
+  R c = param[0];
+  R value = K(0.0);
 
   switch (der)
   {
-    case  0 : value=exp(-x*x/(c*c)); break;
-    case  1 : value=-2.0*x/(c*c)*exp(-x*x/(c*c)); break;
-    case  2 : value=2.0*exp(-x*x/(c*c))*(-c*c+2.0*x*x)/(c*c*c*c); break;
-    case  3 : value=-4.0*x*exp(-x*x/(c*c))*(-3.0*c*c+2.0*x*x)/(c*c*c*c*c*c); break;
-    case  4 : value=4.0*exp(-x*x/(c*c))*(3.0*c*c*c*c-12.0*c*c*x*x+4.0*x*x*x*x)/(c*c*c*c*c*c*c*c); break;
-    case  5 : value=-8.0*x*exp(-x*x/(c*c))*(15.0*c*c*c*c-20.0*c*c*x*x+4.0*x*x*x*x)/pow(c,10.0); break;
-    case  6 : value=8.0*exp(-x*x/(c*c))*(-15.0*c*c*c*c*c*c+90.0*x*x*c*c*c*c-60.0*x*x*x*x*c*c+8.0*x*x*x*x*x*x)/pow(c,12.0); break;
-    case  7 : value=-16.0*x*exp(-x*x/(c*c))*(-105.0*c*c*c*c*c*c+210.0*x*x*c*c*c*c-84.0*x*x*x*x*c*c+8.0*x*x*x*x*x*x)/pow(c,14.0); break;
-    case  8 : value=16.0*exp(-x*x/(c*c))*(105.0*c*c*c*c*c*c*c*c-840.0*x*x*c*c*c*c*c*c+840.0*x*x*x*x*c*c*c*c-224.0*x*x*x*x*x*x*c*c+16.0*x*x*x*x*x*x*x*x)/pow(c,16.0); break;
-    case  9 : value=-32.0*x*exp(-x*x/(c*c))*(945.0*c*c*c*c*c*c*c*c-2520.0*x*x*c*c*c*c*c*c+1512.0*x*x*x*x*c*c*c*c-288.0*x*x*x*x*x*x*c*c+16.0*x*x*x*x*x*x*x*x)/pow(c,18.0); break;
-    case 10 : value=32.0*exp(-x*x/(c*c))*(-945.0*pow(c,10.0)+9450.0*x*x*c*c*c*c*c*c*c*c-12600.0*x*x*x*x*c*c*c*c*c*c+5040.0*x*x*x*x*x*x*c*c*c*c-720.0*x*x*x*x*x*x*x*x*c*c+32.0*pow(x,10.0))/pow(c,20.0); break;
-    case 11 : value=-64.0*x*exp(-x*x/(c*c))*(-10395.0*pow(c,10.0)+34650.0*x*x*c*c*c*c*c*c*c*c-27720.0*x*x*x*x*c*c*c*c*c*c+7920.0*x*x*x*x*x*x*c*c*c*c-880.0*x*x*x*x*x*x*x*x*c*c+32.0*pow(x,10.0))/pow(c,22.0); break;
-    case 12 : value=64.0*exp(-x*x/(c*c))*(10395.0*pow(c,12.0)-124740.0*x*x*pow(c,10.0)+207900.0*x*x*x*x*c*c*c*c*c*c*c*c-110880.0*x*x*x*x*x*x*c*c*c*c*c*c+23760.0*x*x*x*x*x*x*x*x*c*c*c*c-2112.0*pow(x,10.0)*c*c+64.0*pow(x,12.0))/pow(c,24.0); break;
-    default : value=0.0;
+    case  0 : value = EXP(-x*x/(c*c)); break;
+    case  1 : value = -K(2.0)*x/(c*c)*EXP(-x*x/(c*c)); break;
+    case  2 : value = K(2.0)*EXP(-x*x/(c*c))*(-c*c+K(2.0)*x*x)/(c*c*c*c); break;
+    case  3 : value = -K(4.0)*x*EXP(-x*x/(c*c))*(-K(3.0)*c*c+K(2.0)*x*x)/(c*c*c*c*c*c); break;
+    case  4 : value = K(4.0)*EXP(-x*x/(c*c))*(K(3.0)*c*c*c*c-K(12.0)*c*c*x*x+K(4.0)*x*x*x*x)/(c*c*c*c*c*c*c*c); break;
+    case  5 : value = -K(8.0)*x*EXP(-x*x/(c*c))*(K(15.0)*c*c*c*c-K(20.0)*c*c*x*x+K(4.0)*x*x*x*x)/POW(c,K(10.0)); break;
+    case  6 : value = K(8.0)*EXP(-x*x/(c*c))*(-K(15.0)*c*c*c*c*c*c+K(90.0)*x*x*c*c*c*c-K(60.0)*x*x*x*x*c*c+K(8.0)*x*x*x*x*x*x)/POW(c,K(12.0)); break;
+    case  7 : value = -K(16.0)*x*EXP(-x*x/(c*c))*(-K(105.0)*c*c*c*c*c*c+K(210.0)*x*x*c*c*c*c-K(84.0)*x*x*x*x*c*c+K(8.0)*x*x*x*x*x*x)/POW(c,K(14.0)); break;
+    case  8 : value = K(16.0)*EXP(-x*x/(c*c))*(K(105.0)*c*c*c*c*c*c*c*c-K(840.0)*x*x*c*c*c*c*c*c+K(840.0)*x*x*x*x*c*c*c*c-K(224.0)*x*x*x*x*x*x*c*c+K(16.0)*x*x*x*x*x*x*x*x)/POW(c,K(16.0)); break;
+    case  9 : value = -K(32.0)*x*EXP(-x*x/(c*c))*(K(945.0)*c*c*c*c*c*c*c*c-K(2520.0)*x*x*c*c*c*c*c*c+K(1512.0)*x*x*x*x*c*c*c*c-K(288.0)*x*x*x*x*x*x*c*c+K(16.0)*x*x*x*x*x*x*x*x)/POW(c,K(18.0)); break;
+    case 10 : value = K(32.0)*EXP(-x*x/(c*c))*(-K(945.0)*POW(c,K(10.0))+K(9450.0)*x*x*c*c*c*c*c*c*c*c-K(12600.0)*x*x*x*x*c*c*c*c*c*c+K(5040.0)*x*x*x*x*x*x*c*c*c*c-K(720.0)*x*x*x*x*x*x*x*x*c*c+K(32.0)*POW(x,K(10.0)))/POW(c,K(20.0)); break;
+    case 11 : value = -K(64.0)*x*EXP(-x*x/(c*c))*(-K(10395.0)*POW(c,K(10.0))+K(34650.0)*x*x*c*c*c*c*c*c*c*c-K(27720.0)*x*x*x*x*c*c*c*c*c*c+K(7920.0)*x*x*x*x*x*x*c*c*c*c-K(880.0)*x*x*x*x*x*x*x*x*c*c+K(32.0)*POW(x,K(10.0)))/POW(c,K(22.0)); break;
+    case 12 : value = K(64.0)*EXP(-x*x/(c*c))*(K(10395.0)*POW(c,K(12.0))-K(124740.0)*x*x*POW(c,K(10.0))+K(207900.0)*x*x*x*x*c*c*c*c*c*c*c*c-K(110880.0)*x*x*x*x*x*x*c*c*c*c*c*c+K(23760.0)*x*x*x*x*x*x*x*x*c*c*c*c-K(2112.0)*POW(x,K(10.0))*c*c+K(64.0)*POW(x,K(12.0)))/POW(c,K(24.0)); break;
+    default : value = K(0.0);
   }
 
   return value;
 }
 
-double _Complex multiquadric(double x, int der, const double *param)    /* K(x)=sqrt(x^2+c^2) */
+C multiquadric(R x, int der, const R *param)    /* K(x)=SQRT(x^2+c^2) */
 {
-  double c=param[0];
-  double value=0.0;
+  R c=param[0];
+  R value=K(0.0);
 
   switch (der)
   {
-    case  0 : value=sqrt(x*x+c*c); break;
-    case  1 : value=1.0/(sqrt(x*x+c*c))*x; break;
-    case  2 : value=c*c/sqrt(pow(x*x+c*c,3.0)); break;
-    case  3 : value=-3.0*x*c*c/sqrt(pow(x*x+c*c,5.0)); break;
-    case  4 : value=3.0*c*c*(4.0*x*x-c*c)/sqrt(pow(x*x+c*c,7.0)); break;
-    case  5 : value=-15.0*x*c*c*(4.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,9.0)); break;
-    case  6 : value=45.0*c*c*(8.0*x*x*x*x-12.0*x*x*c*c+c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); break;
-    case  7 : value=-315.0*x*c*c*(8.0*x*x*x*x-20.0*x*x*c*c+5.0*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); break;
-    case  8 : value=315.0*c*c*(64.0*x*x*x*x*x*x-240.0*x*x*x*x*c*c+120.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); break;
-    case  9 : value=-2835.0*x*c*c*(64.0*x*x*x*x*x*x-336.0*x*x*x*x*c*c+280.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); break;
-    case 10 : value=14175.0*c*c*(128.0*x*x*x*x*x*x*x*x-896.0*x*x*x*x*x*x*c*c+1120.0*x*x*x*x*c*c*c*c-280.0*x*x*c*c*c*c*c*c+7.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); break;
-    case 11 : value=-155925.0*x*c*c*(128.0*x*x*x*x*x*x*x*x-1152.0*x*x*x*x*x*x*c*c+2016.0*x*x*x*x*c*c*c*c-840.0*x*x*c*c*c*c*c*c+63.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,21.0)); break;
-    case 12 : value=467775.0*c*c*(1260.0*x*x*c*c*c*c*c*c*c*c-21.0*pow(c,10.0)+512.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+13440.0*x*x*x*x*x*x*c*c*c*c-8400.0*x*x*x*x*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,23.0)); break;
-    default : value=0.0;
+    case  0 : value=SQRT(x*x+c*c); break;
+    case  1 : value=K(1.0)/(SQRT(x*x+c*c))*x; break;
+    case  2 : value=c*c/SQRT(POW(x*x+c*c,K(3.0))); break;
+    case  3 : value=-K(3.0)*x*c*c/SQRT(POW(x*x+c*c,K(5.0))); break;
+    case  4 : value=K(3.0)*c*c*(K(4.0)*x*x-c*c)/SQRT(POW(x*x+c*c,K(7.0))); break;
+    case  5 : value=-K(15.0)*x*c*c*(K(4.0)*x*x-K(3.0)*c*c)/SQRT(POW(x*x+c*c,K(9.0))); break;
+    case  6 : value=K(45.0)*c*c*(K(8.0)*x*x*x*x-K(12.0)*x*x*c*c+c*c*c*c)/SQRT(POW(x*x+c*c,K(11.0))); break;
+    case  7 : value=-K(315.0)*x*c*c*(K(8.0)*x*x*x*x-K(20.0)*x*x*c*c+K(5.0)*c*c*c*c)/SQRT(POW(x*x+c*c,K(13.0))); break;
+    case  8 : value=K(315.0)*c*c*(K(64.0)*x*x*x*x*x*x-K(240.0)*x*x*x*x*c*c+K(120.0)*x*x*c*c*c*c-K(5.0)*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(15.0))); break;
+    case  9 : value=-K(2835.0)*x*c*c*(K(64.0)*x*x*x*x*x*x-K(336.0)*x*x*x*x*c*c+K(280.0)*x*x*c*c*c*c-K(35.0)*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(17.0))); break;
+    case 10 : value=K(14175.0)*c*c*(K(128.0)*x*x*x*x*x*x*x*x-K(896.0)*x*x*x*x*x*x*c*c+K(1120.0)*x*x*x*x*c*c*c*c-K(280.0)*x*x*c*c*c*c*c*c+K(7.0)*c*c*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(19.0))); break;
+    case 11 : value=-K(155925.0)*x*c*c*(K(128.0)*x*x*x*x*x*x*x*x-K(1152.0)*x*x*x*x*x*x*c*c+K(2016.0)*x*x*x*x*c*c*c*c-K(840.0)*x*x*c*c*c*c*c*c+K(63.0)*c*c*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(21.0))); break;
+    case 12 : value=K(467775.0)*c*c*(K(1260.0)*x*x*c*c*c*c*c*c*c*c-K(21.0)*POW(c,K(10.0))+K(512.0)*POW(x,K(10.0))-K(5760.0)*x*x*x*x*x*x*x*x*c*c+K(13440.0)*x*x*x*x*x*x*c*c*c*c-K(8400.0)*x*x*x*x*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(23.0))); break;
+    default : value=K(0.0);
   }
 
   return value;
 }
 
-double _Complex inverse_multiquadric(double x, int der, const double *param)    /* K(x)=1/sqrt(x^2+c^2) */
+C inverse_multiquadric(R x, int der, const R *param)    /* K(x)=1/SQRT(x^2+c^2) */
 {
-  double c=param[0];
-  double value=0.0;
+  R c=param[0];
+  R value=K(0.0);
 
   switch (der)
   {
-    case  0 : value=1.0/sqrt(x*x+c*c); break;
-    case  1 : value=-1.0/(sqrt(pow(x*x+c*c,3.0)))*x; break;
-    case  2 : value=(2.0*x*x-c*c)/sqrt(pow(x*x+c*c,5.0)); break;
-    case  3 : value=-3.0*x*(2.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,7.0)); break;
-    case  4 : value=3.0*(8.0*x*x*x*x-24.0*x*x*c*c+3.0*c*c*c*c)/sqrt(pow(x*x+c*c,9.0)); break;
-    case  5 : value=-15.0*x*(8.0*x*x*x*x-40.0*x*x*c*c+15.0*c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); break;
-    case  6 : value=45.0*(16.0*x*x*x*x*x*x-120.0*x*x*x*x*c*c+90.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); break;
-    case  7 : value=-315.0*x*(16.0*x*x*x*x*x*x-168.0*x*x*x*x*c*c+210.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); break;
-    case  8 : value=315.0*(128.0*x*x*x*x*x*x*x*x-1792.0*x*x*x*x*x*x*c*c+3360.0*x*x*x*x*c*c*c*c-1120.0*x*x*c*c*c*c*c*c+35.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); break;
-    case  9 : value=-2835.0*x*(128.0*x*x*x*x*x*x*x*x-2304.0*x*x*x*x*x*x*c*c+6048.0*x*x*x*x*c*c*c*c-3360.0*x*x*c*c*c*c*c*c+315.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); break;
-    case 10 : value=14175.0*(256.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+20160.0*x*x*x*x*x*x*c*c*c*c-16800.0*x*x*x*x*c*c*c*c*c*c+3150.0*x*x*c*c*c*c*c*c*c*c-63.0*pow(c,10.0))/sqrt(pow(x*x+c*c,21.0)); break;
-    case 11 : value=-155925.0*x*(256.0*pow(x,10.0)-7040.0*x*x*x*x*x*x*x*x*c*c+31680.0*x*x*x*x*x*x*c*c*c*c-36960.0*x*x*x*x*c*c*c*c*c*c+11550.0*x*x*c*c*c*c*c*c*c*c-693.0*pow(c,10.0))/sqrt(pow(x*x+c*c,23.0)); break;
-    case 12 : value=467775.0*(231.0*pow(c,12.0)+190080.0*x*x*x*x*x*x*x*x*c*c*c*c-16632.0*x*x*pow(c,10.0)-295680.0*x*x*x*x*x*x*c*c*c*c*c*c+138600.0*x*x*x*x*c*c*c*c*c*c*c*c+1024.0*pow(x,12.0)-33792.0*pow(x,10.0)*c*c)/sqrt(pow(x*x+c*c,25.0)); break;
-    default : value=0.0;
+    case  0 : value=K(1.0)/SQRT(x*x+c*c); break;
+    case  1 : value=-K(1.0)/(SQRT(POW(x*x+c*c,K(3.0))))*x; break;
+    case  2 : value=(K(2.0)*x*x-c*c)/SQRT(POW(x*x+c*c,K(5.0))); break;
+    case  3 : value=-K(3.0)*x*(K(2.0)*x*x-K(3.0)*c*c)/SQRT(POW(x*x+c*c,K(7.0))); break;
+    case  4 : value=K(3.0)*(K(8.0)*x*x*x*x-K(24.0)*x*x*c*c+K(3.0)*c*c*c*c)/SQRT(POW(x*x+c*c,K(9.0))); break;
+    case  5 : value=-K(15.0)*x*(K(8.0)*x*x*x*x-K(40.0)*x*x*c*c+K(15.0)*c*c*c*c)/SQRT(POW(x*x+c*c,K(11.0))); break;
+    case  6 : value=K(45.0)*(K(16.0)*x*x*x*x*x*x-K(120.0)*x*x*x*x*c*c+K(90.0)*x*x*c*c*c*c-K(5.0)*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(13.0))); break;
+    case  7 : value=-K(315.0)*x*(K(16.0)*x*x*x*x*x*x-K(168.0)*x*x*x*x*c*c+K(210.0)*x*x*c*c*c*c-K(35.0)*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(15.0))); break;
+    case  8 : value=K(315.0)*(K(128.0)*x*x*x*x*x*x*x*x-K(1792.0)*x*x*x*x*x*x*c*c+K(3360.0)*x*x*x*x*c*c*c*c-K(1120.0)*x*x*c*c*c*c*c*c+K(35.0)*c*c*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(17.0))); break;
+    case  9 : value=-K(2835.0)*x*(K(128.0)*x*x*x*x*x*x*x*x-K(2304.0)*x*x*x*x*x*x*c*c+K(6048.0)*x*x*x*x*c*c*c*c-K(3360.0)*x*x*c*c*c*c*c*c+K(315.0)*c*c*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(19.0))); break;
+    case 10 : value=K(14175.0)*(K(256.0)*POW(x,K(10.0))-K(5760.0)*x*x*x*x*x*x*x*x*c*c+K(20160.0)*x*x*x*x*x*x*c*c*c*c-K(16800.0)*x*x*x*x*c*c*c*c*c*c+K(3150.0)*x*x*c*c*c*c*c*c*c*c-K(63.0)*POW(c,K(10.0)))/SQRT(POW(x*x+c*c,K(21.0))); break;
+    case 11 : value=-K(155925.0)*x*(K(256.0)*POW(x,K(10.0))-K(7040.0)*x*x*x*x*x*x*x*x*c*c+K(31680.0)*x*x*x*x*x*x*c*c*c*c-K(36960.0)*x*x*x*x*c*c*c*c*c*c+K(11550.0)*x*x*c*c*c*c*c*c*c*c-K(693.0)*POW(c,K(10.0)))/SQRT(POW(x*x+c*c,K(23.0))); break;
+    case 12 : value=K(467775.0)*(K(231.0)*POW(c,K(12.0))+K(190080.0)*x*x*x*x*x*x*x*x*c*c*c*c-K(16632.0)*x*x*POW(c,K(10.0))-K(295680.0)*x*x*x*x*x*x*c*c*c*c*c*c+K(138600.0)*x*x*x*x*c*c*c*c*c*c*c*c+K(1024.0)*POW(x,K(12.0))-K(33792.0)*POW(x,K(10.0))*c*c)/SQRT(POW(x*x+c*c,K(25.0))); break;
+    default : value=K(0.0);
   }
 
   return value;
 }
 
-double _Complex logarithm(double x, int der, const double *param)    /* K(x)=log |x| */
+C logarithm(R x, int der, const R *param)    /* K(x)=LOG |x| */
 {
-  double value=0.0;
+  R value=K(0.0);
 
   (void)param;
 
-  if (fabs(x)<DBL_EPSILON) value=0.0;
+  if (FABS(x)<DBL_EPSILON) value=K(0.0);
   else switch (der)
   {
-    case  0 : value=log(fabs(x)); break;
-    case  1 : value=(x<0 ? -1 : 1)/fabs(x); break;
+    case  0 : value=LOG(FABS(x)); break;
+    case  1 : value=(x<0 ? -1 : 1)/FABS(x); break;
     case  2 : value=-1/(x*x); break;
-    case  3 : value=2.0*(x<0 ? -1 : 1)/pow(fabs(x),3.0); break;
-    case  4 : value=-6.0/(x*x*x*x); break;
-    case  5 : value=24.0*(x<0 ? -1 : 1)/pow(fabs(x),5.0); break;
-    case  6 : value=-120.0/(x*x*x*x*x*x); break;
-    case  7 : value=720.0*(x<0 ? -1 : 1)/pow(fabs(x),7.0); break;
-    case  8 : value=-5040.0/(x*x*x*x*x*x*x*x); break;
-    case  9 : value=40320.0*(x<0 ? -1 : 1)/pow(fabs(x),9.0); break;
-    case 10 : value=-362880.0/pow(x,10.0); break;
-    case 11 : value=3628800.0*(x<0 ? -1 : 1)/pow(fabs(x),11.0); break;
-    case 12 : value=-39916800.0/pow(x,12.0); break;
-    case 13 : value=479001600.0/pow(x,13.0); break;
-    case 14 : value=-6227020800.0/pow(x,14.0); break;
-    case 15 : value=87178291200.0/pow(x,15.0); break;
-    case 16 : value=-1307674368000.0/pow(x,16.0); break;
-    case 17 : value=20922789888000.0/pow(x,17.0); break;
-    default : value=0.0;
+    case  3 : value=K(2.0)*(x<0 ? -1 : 1)/POW(FABS(x),K(3.0)); break;
+    case  4 : value=-K(6.0)/(x*x*x*x); break;
+    case  5 : value=K(24.0)*(x<0 ? -1 : 1)/POW(FABS(x),K(5.0)); break;
+    case  6 : value=-K(120.0)/(x*x*x*x*x*x); break;
+    case  7 : value=K(720.0)*(x<0 ? -1 : 1)/POW(FABS(x),K(7.0)); break;
+    case  8 : value=-K(5040.0)/(x*x*x*x*x*x*x*x); break;
+    case  9 : value=K(40320.0)*(x<0 ? -1 : 1)/POW(FABS(x),K(9.0)); break;
+    case 10 : value=-K(362880.0)/POW(x,K(10.0)); break;
+    case 11 : value=K(3628800.0)*(x<0 ? -1 : 1)/POW(FABS(x),K(11.0)); break;
+    case 12 : value=-K(39916800.0)/POW(x,K(12.0)); break;
+    case 13 : value=K(479001600.0)/POW(x,K(13.0)); break;
+    case 14 : value=-K(6227020800.0)/POW(x,K(14.0)); break;
+    case 15 : value=K(87178291200.0)/POW(x,K(15.0)); break;
+    case 16 : value=-K(1307674368000.0)/POW(x,K(16.0)); break;
+    case 17 : value=K(20922789888000.0)/POW(x,K(17.0)); break;
+    default : value=K(0.0);
   }
 
   return value;
 }
 
-double _Complex thinplate_spline(double x, int der, const double *param)    /* K(x) = x^2 log |x| */
+C thinplate_spline(R x, int der, const R *param)    /* K(x) = x^2 LOG |x| */
 {
-  double value=0.0;
+  R value=K(0.0);
 
   (void)param;
 
-  if (fabs(x)<DBL_EPSILON) value=0.0;
+  if (FABS(x)<DBL_EPSILON) value=K(0.0);
   else switch (der)
   {
-    case  0 : value=x*x*log(fabs(x)); break;
-    case  1 : value=2.0*x*log(fabs(x))+x; break;
-    case  2 : value=2.0*log(fabs(x))+3.0; break;
-    case  3 : value=2.0/x; break;
-    case  4 : value=-2.0/(x*x); break;
-    case  5 : value=4.0/(x*x*x); break;
-    case  6 : value=-12.0/(x*x*x*x); break;
-    case  7 : value=48.0/(x*x*x*x*x); break;
-    case  8 : value=-240.0/(x*x*x*x*x*x); break;
-    case  9 : value=1440.0/(x*x*x*x*x*x*x); break;
-    case 10 : value=-10080.0/(x*x*x*x*x*x*x*x); break;
-    case 11 : value=80640.0/(x*x*x*x*x*x*x*x*x); break;
-    case 12 : value=-725760.0/pow(x,10.0); break;
-    default : value=0.0;
+    case  0 : value=x*x*LOG(FABS(x)); break;
+    case  1 : value=K(2.0)*x*LOG(FABS(x))+x; break;
+    case  2 : value=K(2.0)*LOG(FABS(x))+K(3.0); break;
+    case  3 : value=K(2.0)/x; break;
+    case  4 : value=-K(2.0)/(x*x); break;
+    case  5 : value=K(4.0)/(x*x*x); break;
+    case  6 : value=-K(12.0)/(x*x*x*x); break;
+    case  7 : value=K(48.0)/(x*x*x*x*x); break;
+    case  8 : value=-K(240.0)/(x*x*x*x*x*x); break;
+    case  9 : value=K(1440.0)/(x*x*x*x*x*x*x); break;
+    case 10 : value=-K(10080.0)/(x*x*x*x*x*x*x*x); break;
+    case 11 : value=K(80640.0)/(x*x*x*x*x*x*x*x*x); break;
+    case 12 : value=-K(725760.0)/POW(x,K(10.0)); break;
+    default : value=K(0.0);
   }
 
   return value;
 }
 
-double _Complex one_over_square(double x, int der, const double *param)    /* K(x) = 1/x^2 */
+C one_over_square(R x, int der, const R *param)    /* K(x) = 1/x^2 */
 {
-  double value=0.0;
+  R value=K(0.0);
 
   (void)param;
 
-  if (fabs(x)<DBL_EPSILON) value=0.0;
+  if (FABS(x)<DBL_EPSILON) value=K(0.0);
   else switch (der)
   {
-    case  0 : value=1.0/(x*x); break;
-    case  1 : value=-2.0/(x*x*x); break;
-    case  2 : value=6.0/(x*x*x*x); break;
-    case  3 : value=-24.0/(x*x*x*x*x); break;
-    case  4 : value=120.0/(x*x*x*x*x*x); break;
-    case  5 : value=-720.0/(x*x*x*x*x*x*x); break;
-    case  6 : value=5040.0/(x*x*x*x*x*x*x*x); break;
-    case  7 : value=-40320.0/(x*x*x*x*x*x*x*x*x); break;
-    case  8 : value=362880.0/pow(x,10.0); break;
-    case  9 : value=-3628800.0/pow(x,11.0); break;
-    case 10 : value=39916800.0/pow(x,12.0); break;
-    case 11 : value=-479001600.0/pow(x,13.0); break;
-    case 12 : value=6227020800.0/pow(x,14.0); break;
-    default : value=0.0;
+    case  0 : value=K(1.0)/(x*x); break;
+    case  1 : value=-K(2.0)/(x*x*x); break;
+    case  2 : value=K(6.0)/(x*x*x*x); break;
+    case  3 : value=-K(24.0)/(x*x*x*x*x); break;
+    case  4 : value=K(120.0)/(x*x*x*x*x*x); break;
+    case  5 : value=-K(720.0)/(x*x*x*x*x*x*x); break;
+    case  6 : value=K(5040.0)/(x*x*x*x*x*x*x*x); break;
+    case  7 : value=-K(40320.0)/(x*x*x*x*x*x*x*x*x); break;
+    case  8 : value=K(362880.0)/POW(x,K(10.0)); break;
+    case  9 : value=-K(3628800.0)/POW(x,K(11.0)); break;
+    case 10 : value=K(39916800.0)/POW(x,K(12.0)); break;
+    case 11 : value=-K(479001600.0)/POW(x,K(13.0)); break;
+    case 12 : value=K(6227020800.0)/POW(x,K(14.0)); break;
+    default : value=K(0.0);
   }
 
   return value;
 }
 
-double _Complex one_over_modulus(double x, int der, const double *param)    /* K(x) = 1/|x| */
+C one_over_modulus(R x, int der, const R *param)    /* K(x) = 1/|x| */
 {
-  double value=0.0;
+  R value=K(0.0);
 
   (void)param;
 
-  if (fabs(x)<DBL_EPSILON) value=0.0;
+  if (FABS(x)<DBL_EPSILON) value=K(0.0);
   else switch (der)
   {
-    case  0 : value=1.0/fabs(x); break;
-    case  1 : value=-1/x/fabs(x); break;
-    case  2 : value=2.0/pow(fabs(x),3.0); break;
-    case  3 : value=-6.0/(x*x*x)/fabs(x); break;
-    case  4 : value=24.0/pow(fabs(x),5.0); break;
-    case  5 : value=-120.0/(x*x*x*x*x)/fabs(x); break;
-    case  6 : value=720.0/pow(fabs(x),7.0); break;
-    case  7 : value=-5040.0/(x*x*x*x*x*x*x)/fabs(x); break;
-    case  8 : value=40320.0/pow(fabs(x),9.0); break;
-    case  9 : value=-362880.0/(x*x*x*x*x*x*x*x*x)/fabs(x); break;
-    case 10 : value=3628800.0/pow(fabs(x),11.0); break;
-    case 11 : value=-39916800.0/pow(x,11.0)/fabs(x); break;
-    case 12 : value=479001600.0/pow(fabs(x),13.0); break;
-    default : value=0.0;
+    case  0 : value=K(1.0)/FABS(x); break;
+    case  1 : value=-1/x/FABS(x); break;
+    case  2 : value=K(2.0)/POW(FABS(x),K(3.0)); break;
+    case  3 : value=-K(6.0)/(x*x*x)/FABS(x); break;
+    case  4 : value=K(24.0)/POW(FABS(x),K(5.0)); break;
+    case  5 : value=-K(120.0)/(x*x*x*x*x)/FABS(x); break;
+    case  6 : value=K(720.0)/POW(FABS(x),K(7.0)); break;
+    case  7 : value=-K(5040.0)/(x*x*x*x*x*x*x)/FABS(x); break;
+    case  8 : value=K(40320.0)/POW(FABS(x),K(9.0)); break;
+    case  9 : value=-K(362880.0)/(x*x*x*x*x*x*x*x*x)/FABS(x); break;
+    case 10 : value=K(3628800.0)/POW(FABS(x),K(11.0)); break;
+    case 11 : value=-K(39916800.0)/POW(x,K(11.0))/FABS(x); break;
+    case 12 : value=K(479001600.0)/POW(FABS(x),K(13.0)); break;
+    default : value=K(0.0);
   }
 
   return value;
 }
 
-double _Complex one_over_x(double x, int der, const double *param)    /* K(x) = 1/x */
+C one_over_x(R x, int der, const R *param)    /* K(x) = 1/x */
 {
-  double value=0.0;
+  R value=K(0.0);
 
   (void)param;
 
-  if (fabs(x)<DBL_EPSILON) value=0.0;
+  if (FABS(x)<DBL_EPSILON) value=K(0.0);
   else switch (der)
   {
-    case  0 : value=1.0/x; break;
-    case  1 : value=-1.0/(x*x); break;
-    case  2 : value=2.0/(x*x*x); break;
-    case  3 : value=-6.0/(x*x*x*x); break;
-    case  4 : value=24.0/(x*x*x*x*x); break;
-    case  5 : value=-120.0/(x*x*x*x*x*x); break;
-    case  6 : value=720.0/(x*x*x*x*x*x*x); break;
-    case  7 : value=-5040.0/(x*x*x*x*x*x*x*x); break;
-    case  8 : value=40320.0/(x*x*x*x*x*x*x*x*x); break;
-    case  9 : value=-362880.0/pow(x,10.0); break;
-    case 10 : value=3628800.0/pow(x,11.0); break;
-    case 11 : value=-39916800.0/pow(x,12.0); break;
-    case 12 : value=479001600.0/pow(x,13.0); break;
-    default : value=0.0;
+    case  0 : value=K(1.0)/x; break;
+    case  1 : value=-K(1.0)/(x*x); break;
+    case  2 : value=K(2.0)/(x*x*x); break;
+    case  3 : value=-K(6.0)/(x*x*x*x); break;
+    case  4 : value=K(24.0)/(x*x*x*x*x); break;
+    case  5 : value=-K(120.0)/(x*x*x*x*x*x); break;
+    case  6 : value=K(720.0)/(x*x*x*x*x*x*x); break;
+    case  7 : value=-K(5040.0)/(x*x*x*x*x*x*x*x); break;
+    case  8 : value=K(40320.0)/(x*x*x*x*x*x*x*x*x); break;
+    case  9 : value=-K(362880.0)/POW(x,K(10.0)); break;
+    case 10 : value=K(3628800.0)/POW(x,K(11.0)); break;
+    case 11 : value=-K(39916800.0)/POW(x,K(12.0)); break;
+    case 12 : value=K(479001600.0)/POW(x,K(13.0)); break;
+    default : value=K(0.0);
   }
 
   return value;
 }
 
-double _Complex inverse_multiquadric3(double x, int der, const double *param)    /* K(x) = 1/sqrt(x^2+c^2)^3 */
+C inverse_multiquadric3(R x, int der, const R *param)    /* K(x) = 1/SQRT(x^2+c^2)^3 */
 {
-  double c=param[0];
-  double value=0.0;
+  R c=param[0];
+  R value=K(0.0);
 
   switch (der)
   {
-    case  0 : value=1.0/(sqrt(pow(x*x+c*c,3.0))); break;
-    case  1 : value=-3.0/sqrt(pow(x*x+c*c,5.0))*x; break;
-    case  2 : value=3.0*(4.0*x*x-c*c)/sqrt(pow(x*x+c*c,7.0)); break;
-    case  3 : value=-15.0*x*(4.0*x*x-3.0*c*c)/sqrt(pow(x*x+c*c,9.0)); break;
-    case  4 : value=45.0*(8.0*x*x*x*x-12.0*x*x*c*c+c*c*c*c)/sqrt(pow(x*x+c*c,11.0)); break;
-    case  5 : value=-315.0*x*(8.0*x*x*x*x-20.0*x*x*c*c+5.0*c*c*c*c)/sqrt(pow(x*x+c*c,13.0)); break;
-    case  6 : value=315.0*(64.0*x*x*x*x*x*x-240.0*x*x*x*x*c*c+120.0*x*x*c*c*c*c-5.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,15.0)); break;
-    case  7 : value=-2835.0*x*(64.0*x*x*x*x*x*x-336.0*x*x*x*x*c*c+280.0*x*x*c*c*c*c-35.0*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,17.0)); break;
-    case  8 : value=14175.0*(128.0*x*x*x*x*x*x*x*x-896.0*x*x*x*x*x*x*c*c+1120.0*x*x*x*x*c*c*c*c-280.0*x*x*c*c*c*c*c*c+7.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,19.0)); break;
-    case  9 : value=-155925.0*x*(128.0*x*x*x*x*x*x*x*x-1152.0*x*x*x*x*x*x*c*c+2016.0*x*x*x*x*c*c*c*c-840.0*x*x*c*c*c*c*c*c+63.0*c*c*c*c*c*c*c*c)/sqrt(pow(x*x+c*c,21.0)); break;
-    case 10 : value=467775.0*(512.0*pow(x,10.0)-5760.0*x*x*x*x*x*x*x*x*c*c+13440.0*x*x*x*x*x*x*c*c*c*c-8400.0*x*x*x*x*c*c*c*c*c*c+1260.0*x*x*c*c*c*c*c*c*c*c-21.0*pow(c,10.0))/sqrt(pow(x*x+c*c,23.0)); break;
-    case 11 : value=-6081075.0*x*(512.0*pow(x,10.0)-7040.0*x*x*x*x*x*x*x*x*c*c+21120.0*x*x*x*x*x*x*c*c*c*c-18480.0*x*x*x*x*c*c*c*c*c*c+4620.0*x*x*c*c*c*c*c*c*c*c-231.0*pow(c,10.0))/sqrt(pow(x*x+c*c,25.0)); break;
-    case 12 : value=42567525.0*(1024.0*pow(x,12.0)+27720.0*x*x*x*x*c*c*c*c*c*c*c*c+33.0*pow(c,12.0)-2772.0*x*x*pow(c,10.0)-73920.0*x*x*x*x*x*x*c*c*c*c*c*c+63360.0*x*x*x*x*x*x*x*x*c*c*c*c-16896.0*pow(x,10.0)*c*c)/sqrt(pow(x*x+c*c,27.0)); break;
-    default : value=0.0;
+    case  0 : value=K(1.0)/(SQRT(POW(x*x+c*c,K(3.0)))); break;
+    case  1 : value=-K(3.0)/SQRT(POW(x*x+c*c,K(5.0)))*x; break;
+    case  2 : value=K(3.0)*(K(4.0)*x*x-c*c)/SQRT(POW(x*x+c*c,K(7.0))); break;
+    case  3 : value=-K(15.0)*x*(K(4.0)*x*x-K(3.0)*c*c)/SQRT(POW(x*x+c*c,K(9.0))); break;
+    case  4 : value=K(45.0)*(K(8.0)*x*x*x*x-K(12.0)*x*x*c*c+c*c*c*c)/SQRT(POW(x*x+c*c,K(11.0))); break;
+    case  5 : value=-K(315.0)*x*(K(8.0)*x*x*x*x-K(20.0)*x*x*c*c+K(5.0)*c*c*c*c)/SQRT(POW(x*x+c*c,K(13.0))); break;
+    case  6 : value=K(315.0)*(K(64.0)*x*x*x*x*x*x-K(240.0)*x*x*x*x*c*c+K(120.0)*x*x*c*c*c*c-K(5.0)*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(15.0))); break;
+    case  7 : value=-K(2835.0)*x*(K(64.0)*x*x*x*x*x*x-K(336.0)*x*x*x*x*c*c+K(280.0)*x*x*c*c*c*c-K(35.0)*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(17.0))); break;
+    case  8 : value=K(14175.0)*(K(128.0)*x*x*x*x*x*x*x*x-K(896.0)*x*x*x*x*x*x*c*c+K(1120.0)*x*x*x*x*c*c*c*c-K(280.0)*x*x*c*c*c*c*c*c+K(7.0)*c*c*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(19.0))); break;
+    case  9 : value=-K(155925.0)*x*(K(128.0)*x*x*x*x*x*x*x*x-K(1152.0)*x*x*x*x*x*x*c*c+K(2016.0)*x*x*x*x*c*c*c*c-K(840.0)*x*x*c*c*c*c*c*c+K(63.0)*c*c*c*c*c*c*c*c)/SQRT(POW(x*x+c*c,K(21.0))); break;
+    case 10 : value=K(467775.0)*(K(512.0)*POW(x,K(10.0))-K(5760.0)*x*x*x*x*x*x*x*x*c*c+K(13440.0)*x*x*x*x*x*x*c*c*c*c-K(8400.0)*x*x*x*x*c*c*c*c*c*c+K(1260.0)*x*x*c*c*c*c*c*c*c*c-K(21.0)*POW(c,K(10.0)))/SQRT(POW(x*x+c*c,K(23.0))); break;
+    case 11 : value=-K(6081075.0)*x*(K(512.0)*POW(x,K(10.0))-K(7040.0)*x*x*x*x*x*x*x*x*c*c+K(21120.0)*x*x*x*x*x*x*c*c*c*c-K(18480.0)*x*x*x*x*c*c*c*c*c*c+K(4620.0)*x*x*c*c*c*c*c*c*c*c-K(231.0)*POW(c,K(10.0)))/SQRT(POW(x*x+c*c,K(25.0))); break;
+    case 12 : value=K(42567525.0)*(K(1024.0)*POW(x,K(12.0))+K(27720.0)*x*x*x*x*c*c*c*c*c*c*c*c+K(33.0)*POW(c,K(12.0))-K(2772.0)*x*x*POW(c,K(10.0))-K(73920.0)*x*x*x*x*x*x*c*c*c*c*c*c+K(63360.0)*x*x*x*x*x*x*x*x*c*c*c*c-K(16896.0)*POW(x,K(10.0))*c*c)/SQRT(POW(x*x+c*c,K(27.0))); break;
+    default : value=K(0.0);
   }
 
   return value;
 }
 
-double _Complex sinc_kernel(double x, int der, const double *param)    /* K(x) = sin(cx)/x */
+C sinc_kernel(R x, int der, const R *param)    /* K(x) = SIN(cx)/x */
 {
-  double c=param[0];
-  double value=0.0;
+  R c=param[0];
+  R value=K(0.0);
 
-  if (fabs(x)<DBL_EPSILON) value=0.0;
+  if (FABS(x)<DBL_EPSILON) value=K(0.0);
   else switch (der)
   {
-    case  0 : value=sin(c*x)/x; break;
-    case  1 : value=(cos(c*x)*c*x-sin(c*x))/(x*x); break;
-    case  2 : value=-(sin(c*x)*c*c*x*x+2.0*cos(c*x)*c*x-2.0*sin(c*x))/(x*x*x); break;
-    case  3 : value=-(cos(c*x)*c*c*c*x*x*x-3.0*sin(c*x)*c*c*x*x-6.0*cos(c*x)*c*x+6.0*sin(c*x))/(x*x*x*x); break;
-    case  4 : value=(sin(c*x)*c*c*c*c*x*x*x*x+4.0*cos(c*x)*c*c*c*x*x*x-12.0*sin(c*x)*c*c*x*x-24.0*cos(c*x)*c*x+24.0*sin(c*x))/(x*x*x*x*x); break;
-    case  5 : value=(cos(c*x)*c*c*c*c*c*x*x*x*x*x-5.0*sin(c*x)*c*c*c*c*x*x*x*x-20.0*cos(c*x)*c*c*c*x*x*x+60.0*sin(c*x)*c*c*x*x+120.0*cos(c*x)*c*x-120.0*sin(c*x))/(x*x*x*x*x*x); break;
-    case  6 : value=-(sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+6.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-30.0*sin(c*x)*c*c*c*c*x*x*x*x-120.0*cos(c*x)*c*c*c*x*x*x+360.0*sin(c*x)*c*c*x*x+720.0*cos(c*x)*c*x-720.0*sin(c*x))/(x*x*x*x*x*x*x); break;
-    case  7 : value=-(cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-7.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-42.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+210.0*sin(c*x)*c*c*c*c*x*x*x*x+840.0*cos(c*x)*c*c*c*x*x*x-2520.0*sin(c*x)*c*c*x*x-5040.0*cos(c*x)*c*x+5040.0*sin(c*x))/(x*x*x*x*x*x*x*x); break;
-    case  8 : value=(sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+8.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-56.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-336.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+1680.0*sin(c*x)*c*c*c*c*x*x*x*x+6720.0*cos(c*x)*c*c*c*x*x*x-20160.0*sin(c*x)*c*c*x*x-40320.0*cos(c*x)*c*x+40320.0*sin(c*x))/(x*x*x*x*x*x*x*x*x); break;
-    case  9 : value=(cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-9.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-72.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+504.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3024.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-15120.0*sin(c*x)*c*c*c*c*x*x*x*x-60480.0*cos(c*x)*c*c*c*x*x*x+181440.0*sin(c*x)*c*c*x*x+362880.0*cos(c*x)*c*x-362880.0*sin(c*x))/pow(x,10.0); break;
-    case 10 : value=-(sin(c*x)*pow(c,10.0)*pow(x,10.0)+10.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-90.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-720.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+5040.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+30240.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x-151200.0*sin(c*x)*c*c*c*c*x*x*x*x-604800.0*cos(c*x)*c*c*c*x*x*x+1814400.0*sin(c*x)*c*c*x*x+3628800.0*cos(c*x)*c*x-3628800.0*sin(c*x))/pow(x,11.0); break;
-    case 11 : value=-(cos(c*x)*pow(c,11.0)*pow(x,11.0)-11.0*sin(c*x)*pow(c,10.0)*pow(x,10.0)-110.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+990.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+7920.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-55440.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-332640.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+1663200.0*sin(c*x)*c*c*c*c*x*x*x*x+6652800.0*cos(c*x)*c*c*c*x*x*x-19958400.0*sin(c*x)*c*c*x*x-39916800.0*cos(c*x)*c*x+39916800.0*sin(c*x))/pow(x,12.0); break;
-    case 12 : value=(sin(c*x)*pow(c,12.0)*pow(x,12.0)+12.0*cos(c*x)*pow(c,11.0)*pow(x,11.0)-132.0*sin(c*x)*pow(c,10.0)*pow(x,10.0)-1320.0*cos(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+11880.0*sin(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+95040.0*cos(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-665280.0*sin(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-3991680.0*cos(c*x)*c*c*c*c*c*x*x*x*x*x+19958400.0*sin(c*x)*c*c*c*c*x*x*x*x+79833600.0*cos(c*x)*c*c*c*x*x*x-239500800.0*sin(c*x)*c*c*x*x-479001600.0*cos(c*x)*c*x+479001600.0* [...]
-    default : value=0.0;
+    case  0 : value=SIN(c*x)/x; break;
+    case  1 : value=(COS(c*x)*c*x-SIN(c*x))/(x*x); break;
+    case  2 : value=-(SIN(c*x)*c*c*x*x+K(2.0)*COS(c*x)*c*x-K(2.0)*SIN(c*x))/(x*x*x); break;
+    case  3 : value=-(COS(c*x)*c*c*c*x*x*x-K(3.0)*SIN(c*x)*c*c*x*x-K(6.0)*COS(c*x)*c*x+K(6.0)*SIN(c*x))/(x*x*x*x); break;
+    case  4 : value=(SIN(c*x)*c*c*c*c*x*x*x*x+K(4.0)*COS(c*x)*c*c*c*x*x*x-K(12.0)*SIN(c*x)*c*c*x*x-K(24.0)*COS(c*x)*c*x+K(24.0)*SIN(c*x))/(x*x*x*x*x); break;
+    case  5 : value=(COS(c*x)*c*c*c*c*c*x*x*x*x*x-K(5.0)*SIN(c*x)*c*c*c*c*x*x*x*x-K(20.0)*COS(c*x)*c*c*c*x*x*x+K(60.0)*SIN(c*x)*c*c*x*x+K(120.0)*COS(c*x)*c*x-K(120.0)*SIN(c*x))/(x*x*x*x*x*x); break;
+    case  6 : value=-(SIN(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+K(6.0)*COS(c*x)*c*c*c*c*c*x*x*x*x*x-K(30.0)*SIN(c*x)*c*c*c*c*x*x*x*x-K(120.0)*COS(c*x)*c*c*c*x*x*x+K(360.0)*SIN(c*x)*c*c*x*x+K(720.0)*COS(c*x)*c*x-K(720.0)*SIN(c*x))/(x*x*x*x*x*x*x); break;
+    case  7 : value=-(COS(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-K(7.0)*SIN(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-K(42.0)*COS(c*x)*c*c*c*c*c*x*x*x*x*x+K(210.0)*SIN(c*x)*c*c*c*c*x*x*x*x+K(840.0)*COS(c*x)*c*c*c*x*x*x-K(2520.0)*SIN(c*x)*c*c*x*x-K(5040.0)*COS(c*x)*c*x+K(5040.0)*SIN(c*x))/(x*x*x*x*x*x*x*x); break;
+    case  8 : value=(SIN(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+K(8.0)*COS(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-K(56.0)*SIN(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-K(336.0)*COS(c*x)*c*c*c*c*c*x*x*x*x*x+K(1680.0)*SIN(c*x)*c*c*c*c*x*x*x*x+K(6720.0)*COS(c*x)*c*c*c*x*x*x-K(20160.0)*SIN(c*x)*c*c*x*x-K(40320.0)*COS(c*x)*c*x+K(40320.0)*SIN(c*x))/(x*x*x*x*x*x*x*x*x); break;
+    case  9 : value=(COS(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-K(9.0)*SIN(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-K(72.0)*COS(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+K(504.0)*SIN(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+K(3024.0)*COS(c*x)*c*c*c*c*c*x*x*x*x*x-K(15120.0)*SIN(c*x)*c*c*c*c*x*x*x*x-K(60480.0)*COS(c*x)*c*c*c*x*x*x+K(181440.0)*SIN(c*x)*c*c*x*x+K(362880.0)*COS(c*x)*c*x-K(362880.0)*SIN(c*x))/POW(x,K(10.0)); break;
+    case 10 : value=-(SIN(c*x)*POW(c,K(10.0))*POW(x,K(10.0))+K(10.0)*COS(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-K(90.0)*SIN(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-K(720.0)*COS(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+K(5040.0)*SIN(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+K(30240.0)*COS(c*x)*c*c*c*c*c*x*x*x*x*x-K(151200.0)*SIN(c*x)*c*c*c*c*x*x*x*x-K(604800.0)*COS(c*x)*c*c*c*x*x*x+K(1814400.0)*SIN(c*x)*c*c*x*x+K(3628800.0)*COS(c*x)*c*x-K(3628800.0)*SIN(c*x))/POW(x,K(11.0)); break;
+    case 11 : value=-(COS(c*x)*POW(c,K(11.0))*POW(x,K(11.0))-K(11.0)*SIN(c*x)*POW(c,K(10.0))*POW(x,K(10.0))-K(110.0)*COS(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+K(990.0)*SIN(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+K(7920.0)*COS(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-K(55440.0)*SIN(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-K(332640.0)*COS(c*x)*c*c*c*c*c*x*x*x*x*x+K(1663200.0)*SIN(c*x)*c*c*c*c*x*x*x*x+K(6652800.0)*COS(c*x)*c*c*c*x*x*x-K(19958400.0)*SIN(c*x)*c*c*x*x-K(39916800.0)*COS(c*x)*c*x+K(39916800.0)*SIN( [...]
+    case 12 : value=(SIN(c*x)*POW(c,K(12.0))*POW(x,K(12.0))+K(12.0)*COS(c*x)*POW(c,K(11.0))*POW(x,K(11.0))-K(132.0)*SIN(c*x)*POW(c,K(10.0))*POW(x,K(10.0))-K(1320.0)*COS(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+K(11880.0)*SIN(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+K(95040.0)*COS(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-K(665280.0)*SIN(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-K(3991680.0)*COS(c*x)*c*c*c*c*c*x*x*x*x*x+K(19958400.0)*SIN(c*x)*c*c*c*c*x*x*x*x+K(79833600.0)*COS(c*x)*c*c*c*x*x*x-K(239500800.0)*SIN(c* [...]
+    default : value=K(0.0);
   }
 
   return value;
 }
 
-double _Complex cosc(double x, int der, const double *param)    /* K(x) = cos(cx)/x */
+C cosc(R x, int der, const R *param)    /* K(x) = COS(cx)/x */
 {
-  double c=param[0];
-  double value=0.0;
-  double sign;
+  R c=param[0];
+  R value=K(0.0);
+  R sign;
 
-  if (x<0) sign=-1.0; else sign=1.0;
-  x=fabs(x);
+  if (x<0) sign=-K(1.0); else sign=K(1.0);
+  x=FABS(x);
 
-  if (fabs(x)<DBL_EPSILON) value=0.0;
+  if (FABS(x)<DBL_EPSILON) value=K(0.0);
   else switch (der)
   {
-    case  0 : value=cos(c*x)/x; break;
-    case  1 : value=-(sin(c*x)*c*x+cos(c*x))/(x*x); break;
-    case  2 : value=(-cos(c*x)*c*c*x*x+2.0*sin(c*x)*c*x+2.0*cos(c*x))/(x*x*x); break;
-    case  3 : value=(sin(c*x)*c*c*c*x*x*x+3.0*cos(c*x)*c*c*x*x-6.0*sin(c*x)*c*x-6.0*cos(c*x))/(x*x*x*x); break;
-    case  4 : value=(cos(c*x)*c*c*c*c*x*x*x*x-4.0*sin(c*x)*c*c*c*x*x*x-12.0*cos(c*x)*c*c*x*x+24.0*sin(c*x)*c*x+24.0*cos(c*x))/(x*x*x*x*x); break;
-    case  5 : value=-(sin(c*x)*c*c*c*c*c*x*x*x*x*x+5.0*cos(c*x)*c*c*c*c*x*x*x*x-20.0*sin(c*x)*c*c*c*x*x*x-60.0*cos(c*x)*c*c*x*x+120.0*sin(c*x)*c*x+120.0*cos(c*x))/(x*x*x*x*x*x); break;
-    case  6 : value=-(cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-6.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-30.0*cos(c*x)*c*c*c*c*x*x*x*x+120.0*sin(c*x)*c*c*c*x*x*x+360.0*cos(c*x)*c*c*x*x-720.0*sin(c*x)*c*x-720.0*cos(c*x))/(x*x*x*x*x*x*x); break;
-    case  7 : value=(sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+7.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-42.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-210.0*cos(c*x)*c*c*c*c*x*x*x*x+840.0*sin(c*x)*c*c*c*x*x*x+2520.0*cos(c*x)*c*c*x*x-5040.0*sin(c*x)*c*x-5040.0*cos(c*x))/(x*x*x*x*x*x*x*x); break;
-    case  8 : value=(cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-8.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-56.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+336.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+1680.0*cos(c*x)*c*c*c*c*x*x*x*x-6720.0*sin(c*x)*c*c*c*x*x*x-20160.0*cos(c*x)*c*c*x*x+40320.0*sin(c*x)*c*x+40320.0*cos(c*x))/(x*x*x*x*x*x*x*x*x); break;
-    case  9 : value=-(sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+9.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-72.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-504.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3024.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+15120.0*cos(c*x)*c*c*c*c*x*x*x*x-60480.0*sin(c*x)*c*c*c*x*x*x-181440.0*cos(c*x)*c*c*x*x+362880.0*sin(c*x)*c*x+362880.0*cos(c*x))/pow(x,10.0); break;
-    case 10 : value=-(cos(c*x)*pow(c,10.0)*pow(x,10.0)-10.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-90.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+720.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+5040.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-30240.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-151200.0*cos(c*x)*c*c*c*c*x*x*x*x+604800.0*sin(c*x)*c*c*c*x*x*x+1814400.0*cos(c*x)*c*c*x*x-3628800.0*sin(c*x)*c*x-3628800.0*cos(c*x))/pow(x,11.0); break;
-    case 11 : value=(sin(c*x)*pow(c,11.0)*pow(x,11.0)+11.0*cos(c*x)*pow(c,10.0)*pow(x,10.0)-110.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-990.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+7920.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+55440.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-332640.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x-1663200.0*cos(c*x)*c*c*c*c*x*x*x*x+6652800.0*sin(c*x)*c*c*c*x*x*x+19958400.0*cos(c*x)*c*c*x*x-39916800.0*sin(c*x)*c*x-39916800.0*cos(c*x))/pow(x,12.0); break;
-    case 12 : value=(cos(c*x)*pow(c,12.0)*pow(x,12.0)-12.0*sin(c*x)*pow(c,11.0)*pow(x,11.0)-132.0*cos(c*x)*pow(c,10.0)*pow(x,10.0)+1320.0*sin(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+11880.0*cos(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-95040.0*sin(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-665280.0*cos(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+3991680.0*sin(c*x)*c*c*c*c*c*x*x*x*x*x+19958400.0*cos(c*x)*c*c*c*c*x*x*x*x-79833600.0*sin(c*x)*c*c*c*x*x*x-239500800.0*cos(c*x)*c*c*x*x+479001600.0*sin(c*x)*c*x+479001600.0* [...]
-    default : value=0.0;
+    case  0 : value=COS(c*x)/x; break;
+    case  1 : value=-(SIN(c*x)*c*x+COS(c*x))/(x*x); break;
+    case  2 : value=(-COS(c*x)*c*c*x*x+K(2.0)*SIN(c*x)*c*x+K(2.0)*COS(c*x))/(x*x*x); break;
+    case  3 : value=(SIN(c*x)*c*c*c*x*x*x+K(3.0)*COS(c*x)*c*c*x*x-K(6.0)*SIN(c*x)*c*x-K(6.0)*COS(c*x))/(x*x*x*x); break;
+    case  4 : value=(COS(c*x)*c*c*c*c*x*x*x*x-K(4.0)*SIN(c*x)*c*c*c*x*x*x-K(12.0)*COS(c*x)*c*c*x*x+K(24.0)*SIN(c*x)*c*x+K(24.0)*COS(c*x))/(x*x*x*x*x); break;
+    case  5 : value=-(SIN(c*x)*c*c*c*c*c*x*x*x*x*x+K(5.0)*COS(c*x)*c*c*c*c*x*x*x*x-K(20.0)*SIN(c*x)*c*c*c*x*x*x-K(60.0)*COS(c*x)*c*c*x*x+K(120.0)*SIN(c*x)*c*x+K(120.0)*COS(c*x))/(x*x*x*x*x*x); break;
+    case  6 : value=-(COS(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-K(6.0)*SIN(c*x)*c*c*c*c*c*x*x*x*x*x-K(30.0)*COS(c*x)*c*c*c*c*x*x*x*x+K(120.0)*SIN(c*x)*c*c*c*x*x*x+K(360.0)*COS(c*x)*c*c*x*x-K(720.0)*SIN(c*x)*c*x-K(720.0)*COS(c*x))/(x*x*x*x*x*x*x); break;
+    case  7 : value=(SIN(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+K(7.0)*COS(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-K(42.0)*SIN(c*x)*c*c*c*c*c*x*x*x*x*x-K(210.0)*COS(c*x)*c*c*c*c*x*x*x*x+K(840.0)*SIN(c*x)*c*c*c*x*x*x+K(2520.0)*COS(c*x)*c*c*x*x-K(5040.0)*SIN(c*x)*c*x-K(5040.0)*COS(c*x))/(x*x*x*x*x*x*x*x); break;
+    case  8 : value=(COS(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-K(8.0)*SIN(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-K(56.0)*COS(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+K(336.0)*SIN(c*x)*c*c*c*c*c*x*x*x*x*x+K(1680.0)*COS(c*x)*c*c*c*c*x*x*x*x-K(6720.0)*SIN(c*x)*c*c*c*x*x*x-K(20160.0)*COS(c*x)*c*c*x*x+K(40320.0)*SIN(c*x)*c*x+K(40320.0)*COS(c*x))/(x*x*x*x*x*x*x*x*x); break;
+    case  9 : value=-(SIN(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+K(9.0)*COS(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-K(72.0)*SIN(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-K(504.0)*COS(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+K(3024.0)*SIN(c*x)*c*c*c*c*c*x*x*x*x*x+K(15120.0)*COS(c*x)*c*c*c*c*x*x*x*x-K(60480.0)*SIN(c*x)*c*c*c*x*x*x-K(181440.0)*COS(c*x)*c*c*x*x+K(362880.0)*SIN(c*x)*c*x+K(362880.0)*COS(c*x))/POW(x,K(10.0)); break;
+    case 10 : value=-(COS(c*x)*POW(c,K(10.0))*POW(x,K(10.0))-K(10.0)*SIN(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-K(90.0)*COS(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+K(720.0)*SIN(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+K(5040.0)*COS(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-K(30240.0)*SIN(c*x)*c*c*c*c*c*x*x*x*x*x-K(151200.0)*COS(c*x)*c*c*c*c*x*x*x*x+K(604800.0)*SIN(c*x)*c*c*c*x*x*x+K(1814400.0)*COS(c*x)*c*c*x*x-K(3628800.0)*SIN(c*x)*c*x-K(3628800.0)*COS(c*x))/POW(x,K(11.0)); break;
+    case 11 : value=(SIN(c*x)*POW(c,K(11.0))*POW(x,K(11.0))+K(11.0)*COS(c*x)*POW(c,K(10.0))*POW(x,K(10.0))-K(110.0)*SIN(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x-K(990.0)*COS(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x+K(7920.0)*SIN(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x+K(55440.0)*COS(c*x)*c*c*c*c*c*c*x*x*x*x*x*x-K(332640.0)*SIN(c*x)*c*c*c*c*c*x*x*x*x*x-K(1663200.0)*COS(c*x)*c*c*c*c*x*x*x*x+K(6652800.0)*SIN(c*x)*c*c*c*x*x*x+K(19958400.0)*COS(c*x)*c*c*x*x-K(39916800.0)*SIN(c*x)*c*x-K(39916800.0)*COS(c [...]
+    case 12 : value=(COS(c*x)*POW(c,K(12.0))*POW(x,K(12.0))-K(12.0)*SIN(c*x)*POW(c,K(11.0))*POW(x,K(11.0))-K(132.0)*COS(c*x)*POW(c,K(10.0))*POW(x,K(10.0))+K(1320.0)*SIN(c*x)*c*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x*x+K(11880.0)*COS(c*x)*c*c*c*c*c*c*c*c*x*x*x*x*x*x*x*x-K(95040.0)*SIN(c*x)*c*c*c*c*c*c*c*x*x*x*x*x*x*x-K(665280.0)*COS(c*x)*c*c*c*c*c*c*x*x*x*x*x*x+K(3991680.0)*SIN(c*x)*c*c*c*c*c*x*x*x*x*x+K(19958400.0)*COS(c*x)*c*c*c*c*x*x*x*x-K(79833600.0)*SIN(c*x)*c*c*c*x*x*x-K(239500800.0)*COS(c* [...]
+    default : value=K(0.0);
   }
-  value*=pow(sign,der);
+  value *= POW(sign, (R)(der));
 
   return value;
 }
 
-double _Complex kcot(double x, int der, const double *param)   /* K(x) = cot(cx) */
+C kcot(R x, int der, const R *param)   /* K(x) = cot(cx) */
 {
-  double c=param[0];
-  double value=0.0;
+  R c=param[0];
+  R value=K(0.0);
 
-  if (fabs(x)<DBL_EPSILON) value=0.0;
+  if (FABS(x)<DBL_EPSILON) value=K(0.0);
   else switch (der)
   {
-    case  0 : value = 1.0/tan(c * x); break;
-    case  1 : value = -(1.0 + pow(1.0/tan(c * x), 2.0)) * c; break;
-    case  2 : value = 2.0 * 1.0/tan(c * x) * (1.0 + pow(1.0/tan(c * x), 2.0)) * c * c; break;
-    case  3 : value = -2.0 * (1.0 + pow(1.0/tan(c * x), 2.0)) * pow(c, 3.0) * (1.0 + 3.0 * pow(1.0/tan(c * x), 2.0)); break;
-    case  4 : value = 8.0 * (1.0 + pow(1.0/tan(c * x), 2.0)) * pow(c, 4.0) * 1.0/tan(c * x) * (2.0 + 3.0 * pow(1.0/tan(c * x), 2.0)); break;
-    case  5 : value = -0.8e1 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.5e1) * (0.15e2 * pow(1.0/tan(c * x), 0.2e1) + 0.15e2 * pow(1.0/tan(c * x), 0.4e1) + 0.2e1); break;
-    case  6 : value = 0.16e2 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.6e1) * 1.0/tan(c * x) * (0.60e2 * pow(1.0/tan(c * x), 0.2e1) + 0.45e2 * pow(1.0/tan(c * x), 0.4e1) + 0.17e2); break;
-    case  7 : value = -0.16e2 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.7e1) * (0.525e3 * pow(1.0/tan(c * x), 0.4e1) + 0.315e3 * pow(1.0/tan(c * x), 0.6e1) + 0.231e3 * pow(1.0/tan(c * x), 0.2e1) + 0.17e2); break;
-    case  8 : value = 0.128e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.8e1) * 1.0/tan(c * x) * (0.630e3 * pow(1.0/tan(c * x), 0.4e1) + 0.315e3 * pow(1.0/tan(c * x), 0.6e1) + 0.378e3 * pow(1.0/tan(c * x), 0.2e1) + 0.62e2); break;
-    case  9 : value = -0.128e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.9e1) * (0.6615e4 * pow(1.0/tan(c * x), 0.6e1) + 0.2835e4 * pow(1.0/tan(c * x), 0.8e1) + 0.5040e4 * pow(1.0/tan(c * x), 0.4e1) + 0.1320e4 * pow(1.0/tan(c * x), 0.2e1) + 0.62e2); break;
-    case 10 : value = 0.256e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.10e2) * 1.0/tan(c * x) * (0.37800e5 * pow(1.0/tan(c * x), 0.6e1) + 0.14175e5 * pow(1.0/tan(c * x), 0.8e1) + 0.34965e5 * pow(1.0/tan(c * x), 0.4e1) + 0.12720e5 * pow(1.0/tan(c * x), 0.2e1) + 0.1382e4); break;
-    case 11 : value = -0.256e3 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.11e2) * (0.467775e6 * pow(1.0/tan(c * x), 0.8e1) + 0.155925e6 * pow(1.0/tan(c * x), 0.10e2) + 0.509355e6 * pow(1.0/tan(c * x), 0.6e1) + 0.238425e6 * pow(1.0/tan(c * x), 0.4e1) + 0.42306e5 * pow(1.0/tan(c * x), 0.2e1) + 0.1382e4); break;
-    case 12 : value = 0.1024e4 * (0.1e1 + pow(1.0/tan(c * x), 0.2e1)) * pow(c, 0.12e2) * 1.0/tan(c * x) * (0.1559250e7 * pow(1.0/tan(c * x), 0.8e1) + 0.467775e6 * pow(1.0/tan(c * x), 0.10e2) + 0.1954260e7 * pow(1.0/tan(c * x), 0.6e1) + 0.1121670e7 * pow(1.0/tan(c * x), 0.4e1) + 0.280731e6 * pow(1.0/tan(c * x), 0.2e1) + 0.21844e5); break;
-    default : value=0.0;
+    case  0 : value = K(1.0)/TAN(c * x); break;
+    case  1 : value = -(K(1.0) + POW(K(1.0)/TAN(c * x), K(2.0))) * c; break;
+    case  2 : value = K(2.0) * K(1.0)/TAN(c * x) * (K(1.0) + POW(K(1.0)/TAN(c * x), K(2.0))) * c * c; break;
+    case  3 : value = -K(2.0) * (K(1.0) + POW(K(1.0)/TAN(c * x), K(2.0))) * POW(c, K(3.0)) * (K(1.0) + K(3.0) * POW(K(1.0)/TAN(c * x), K(2.0))); break;
+    case  4 : value = K(8.0) * (K(1.0) + POW(K(1.0)/TAN(c * x), K(2.0))) * POW(c, K(4.0)) * K(1.0)/TAN(c * x) * (K(2.0) + K(3.0) * POW(K(1.0)/TAN(c * x), K(2.0))); break;
+    case  5 : value = -K(0.8e1) * (K(0.1e1) + POW(K(1.0)/TAN(c * x), K(0.2e1))) * POW(c, K(0.5e1)) * (K(0.15e2) * POW(K(1.0)/TAN(c * x), K(0.2e1)) + K(0.15e2) * POW(K(1.0)/TAN(c * x), K(0.4e1)) + K(0.2e1)); break;
+    case  6 : value = K(0.16e2) * (K(0.1e1) + POW(K(1.0)/TAN(c * x), K(0.2e1))) * POW(c, K(0.6e1)) * K(1.0)/TAN(c * x) * (K(0.60e2) * POW(K(1.0)/TAN(c * x), K(0.2e1)) + K(0.45e2) * POW(K(1.0)/TAN(c * x), K(0.4e1)) + K(0.17e2)); break;
+    case  7 : value = -K(0.16e2) * (K(0.1e1) + POW(K(1.0)/TAN(c * x), K(0.2e1))) * POW(c, K(0.7e1)) * (K(0.525e3) * POW(K(1.0)/TAN(c * x), K(0.4e1)) + K(0.315e3) * POW(K(1.0)/TAN(c * x), K(0.6e1)) + K(0.231e3) * POW(K(1.0)/TAN(c * x), K(0.2e1)) + K(0.17e2)); break;
+    case  8 : value = K(0.128e3) * (K(0.1e1) + POW(K(1.0)/TAN(c * x), K(0.2e1))) * POW(c, K(0.8e1)) * K(1.0)/TAN(c * x) * (K(0.630e3) * POW(K(1.0)/TAN(c * x), K(0.4e1)) + K(0.315e3) * POW(K(1.0)/TAN(c * x), K(0.6e1)) + K(0.378e3) * POW(K(1.0)/TAN(c * x), K(0.2e1)) + K(0.62e2)); break;
+    case  9 : value = -K(0.128e3) * (K(0.1e1) + POW(K(1.0)/TAN(c * x), K(0.2e1))) * POW(c, K(0.9e1)) * (K(0.6615e4) * POW(K(1.0)/TAN(c * x), K(0.6e1)) + K(0.2835e4) * POW(K(1.0)/TAN(c * x), K(0.8e1)) + K(0.5040e4) * POW(K(1.0)/TAN(c * x), K(0.4e1)) + K(0.1320e4) * POW(K(1.0)/TAN(c * x), K(0.2e1)) + K(0.62e2)); break;
+    case 10 : value = K(0.256e3) * (K(0.1e1) + POW(K(1.0)/TAN(c * x), K(0.2e1))) * POW(c, K(0.10e2)) * K(1.0)/TAN(c * x) * (K(0.37800e5) * POW(K(1.0)/TAN(c * x), K(0.6e1)) + K(0.14175e5) * POW(K(1.0)/TAN(c * x), K(0.8e1)) + K(0.34965e5) * POW(K(1.0)/TAN(c * x), K(0.4e1)) + K(0.12720e5) * POW(K(1.0)/TAN(c * x), K(0.2e1)) + K(0.1382e4)); break;
+    case 11 : value = -K(0.256e3) * (K(0.1e1) + POW(K(1.0)/TAN(c * x), K(0.2e1))) * POW(c, K(0.11e2)) * (K(0.467775e6) * POW(K(1.0)/TAN(c * x), K(0.8e1)) + K(0.155925e6) * POW(K(1.0)/TAN(c * x), K(0.10e2)) + K(0.509355e6) * POW(K(1.0)/TAN(c * x), K(0.6e1)) + K(0.238425e6) * POW(K(1.0)/TAN(c * x), K(0.4e1)) + K(0.42306e5) * POW(K(1.0)/TAN(c * x), K(0.2e1)) + K(0.1382e4)); break;
+    case 12 : value = K(0.1024e4) * (K(0.1e1) + POW(K(1.0)/TAN(c * x), K(0.2e1))) * POW(c, K(0.12e2)) * K(1.0)/TAN(c * x) * (K(0.1559250e7) * POW(K(1.0)/TAN(c * x), K(0.8e1)) + K(0.467775e6) * POW(K(1.0)/TAN(c * x), K(0.10e2)) + K(0.1954260e7) * POW(K(1.0)/TAN(c * x), K(0.6e1)) + K(0.1121670e7) * POW(K(1.0)/TAN(c * x), K(0.4e1)) + K(0.280731e6) * POW(K(1.0)/TAN(c * x), K(0.2e1)) + K(0.21844e5)); break;
+    default : value=K(0.0);
   }
 
   return value;
 }
 
 
-double _Complex one_over_cube(double x, int der, const double *param)
+C one_over_cube(R x, int der, const R *param)
 {
-  double value=0.0;
+  R value=K(0.0);
+  UNUSED(param);
 
-  if (fabs(x)<DBL_EPSILON) value=0.0;
+  if (FABS(x)<DBL_EPSILON) value=K(0.0);
   else switch (der)
   {
-    case  0 : value = 1.0/(x*x*x); break;
-    case  1 : value = -3.0/(x*x*x*x); break;
-    case  2 : value = 12.0/(x*x*x*x*x); break;
-    case  3 : value = -60.0/(x*x*x*x*x*x); break;
-    case  4 : value = 360.0/(x*x*x*x*x*x*x); break;
-    case  5 : value = -2520.0/(x*x*x*x*x*x*x*x); break;
-    case  6 : value = 20160.0/pow(x, 9.0); break;
-    case  7 : value = -181440.0/pow(x, 10.0); break;
-    case  8 : value = 1814400.0/pow(x, 11.0); break;
-    case  9 : value = -19958400.0/pow(x, 12.0); break;
-    case  10 : value = 239500800.0/pow(x, 13.0); break;
-    case  11 : value = -3113510400.0/pow(x, 14.0); break;
-    case  12 : value = 43589145600.0/pow(x, 15.0); break;
-    default : value=0.0;
+    case  0 : value = K(1.0)/(x*x*x); break;
+    case  1 : value = -K(3.0)/(x*x*x*x); break;
+    case  2 : value = K(12.0)/(x*x*x*x*x); break;
+    case  3 : value = -K(60.0)/(x*x*x*x*x*x); break;
+    case  4 : value = K(360.0)/(x*x*x*x*x*x*x); break;
+    case  5 : value = -K(2520.0)/(x*x*x*x*x*x*x*x); break;
+    case  6 : value = K(20160.0)/POW(x, K(9.0)); break;
+    case  7 : value = -K(181440.0)/POW(x, K(10.0)); break;
+    case  8 : value = K(1814400.0)/POW(x, K(11.0)); break;
+    case  9 : value = -K(19958400.0)/POW(x, K(12.0)); break;
+    case  10 : value = K(239500800.0)/POW(x, K(13.0)); break;
+    case  11 : value = -K(3113510400.0)/POW(x, K(14.0)); break;
+    case  12 : value = K(43589145600.0)/POW(x, K(15.0)); break;
+    default : value=K(0.0);
   }
 
   return value;
diff --git a/applications/fastsum/kernels.h b/applications/fastsum/kernels.h
index 8532b0b..edc1753 100644
--- a/applications/fastsum/kernels.h
+++ b/applications/fastsum/kernels.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: kernels.h 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id$ */
 
 /*! \file kernels.h
  *  \brief Header file with predefined kernels for the fast summation algorithm.
@@ -30,6 +30,9 @@
 #include <complex.h>
 #endif
 
+#include "nfft3.h"
+#include "infft.h"
+
 #ifdef __cplusplus
 extern "C"
 {
@@ -40,19 +43,19 @@ extern "C"
  * \{
  */
 
-double _Complex gaussian(double x, int der, const double *param);              /* K(x)=exp(-x^2/c^2) */
-double _Complex multiquadric(double x, int der, const double *param);          /* K(x)=sqrt(x^2+c^2) */
-double _Complex inverse_multiquadric(double x, int der, const double *param);  /* K(x)=1/sqrt(x^2+c^2) */
-double _Complex logarithm(double x, int der, const double *param);             /* K(x)=log |x| */
-double _Complex thinplate_spline(double x, int der, const double *param);      /* K(x) = x^2 log |x| */
-double _Complex one_over_square(double x, int der, const double *param);       /* K(x) = 1/x^2 */
-double _Complex one_over_modulus(double x, int der, const double *param);      /* K(x) = 1/|x| */
-double _Complex one_over_x(double x, int der, const double *param);            /* K(x) = 1/x */
-double _Complex inverse_multiquadric3(double x, int der, const double *param); /* K(x) = 1/sqrt(x^2+c^2)^3 */
-double _Complex sinc_kernel(double x, int der, const double *param);           /* K(x) = sin(cx)/x */
-double _Complex cosc(double x, int der, const double *param);                  /* K(x) = cos(cx)/x */
-double _Complex kcot(double x, int der, const double *param);                   /* K(x) = cot(cx) */
-double _Complex one_over_cube(double x, int der, const double *param);                /* K(x) = 1/x^3 */
+C gaussian(R x, int der, const R *param);              /* K(x)=exp(-x^2/c^2) */
+C multiquadric(R x, int der, const R *param);          /* K(x)=sqrt(x^2+c^2) */
+C inverse_multiquadric(R x, int der, const R *param);  /* K(x)=1/sqrt(x^2+c^2) */
+C logarithm(R x, int der, const R *param);             /* K(x)=log |x| */
+C thinplate_spline(R x, int der, const R *param);      /* K(x) = x^2 log |x| */
+C one_over_square(R x, int der, const R *param);       /* K(x) = 1/x^2 */
+C one_over_modulus(R x, int der, const R *param);      /* K(x) = 1/|x| */
+C one_over_x(R x, int der, const R *param);            /* K(x) = 1/x */
+C inverse_multiquadric3(R x, int der, const R *param); /* K(x) = 1/sqrt(x^2+c^2)^3 */
+C sinc_kernel(R x, int der, const R *param);           /* K(x) = sin(cx)/x */
+C cosc(R x, int der, const R *param);                  /* K(x) = cos(cx)/x */
+C kcot(R x, int der, const R *param);                   /* K(x) = cot(cx) */
+C one_over_cube(R x, int der, const R *param);                /* K(x) = 1/x^3 */
 /* \} */
 
 #ifdef __cplusplus
diff --git a/applications/fastsumS2/Makefile.am b/applications/fastsumS2/Makefile.am
index dc9cb12..2c5c140 100644
--- a/applications/fastsumS2/Makefile.am
+++ b/applications/fastsumS2/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3783 2012-06-06 13:17:59Z mpip $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/applications/fastsumS2/Makefile.in b/applications/fastsumS2/Makefile.in
deleted file mode 100644
index 3970941..0000000
--- a/applications/fastsumS2/Makefile.in
+++ /dev/null
@@ -1,555 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3783 2012-06-06 13:17:59Z mpip $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = fastsumS2$(EXEEXT)
-subdir = applications/fastsumS2
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_fastsumS2_OBJECTS = fastsumS2.$(OBJEXT)
-fastsumS2_OBJECTS = $(am_fastsumS2_OBJECTS)
-fastsumS2_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(fastsumS2_SOURCES)
-DIST_SOURCES = $(fastsumS2_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-fastsumS2_SOURCES = fastsumS2.c doxygen.h
-fastsumS2_LDADD = $(top_builddir)/libnfft3.la
-EXTRA_DIST = fastsumS2.m writeTestcase.m readTestcase.m README example.in example.out
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/fastsumS2/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/fastsumS2/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-fastsumS2$(EXEEXT): $(fastsumS2_OBJECTS) $(fastsumS2_DEPENDENCIES) $(EXTRA_fastsumS2_DEPENDENCIES) 
-	@rm -f fastsumS2$(EXEEXT)
-	$(LINK) $(fastsumS2_OBJECTS) $(fastsumS2_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fastsumS2.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/fastsumS2/doxygen.h b/applications/fastsumS2/doxygen.h
index be3c7e2..defa648 100644
--- a/applications/fastsumS2/doxygen.h
+++ b/applications/fastsumS2/doxygen.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/applications/fastsumS2/fastsumS2.c b/applications/fastsumS2/fastsumS2.c
index c898816..6a5c639 100644
--- a/applications/fastsumS2/fastsumS2.c
+++ b/applications/fastsumS2/fastsumS2.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: fastsumS2.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /**
  * \defgroup applications_fastsumS2_test fastsumS2_matlab
@@ -38,7 +38,6 @@
 #include "nfft3.h"
 
 /* NFFT3 utilities */
-#include "nfft3util.h"
 #include "infft.h"
 
 /* Fourier-Legendre coefficients for Abel-Poisson kernel */
@@ -61,6 +60,380 @@
 /** Enumeration type for yes/no/both-type parameters */
 enum pvalue {NO = 0, YES = 1, BOTH = 2};
 
+static inline int scaled_modified_bessel_i_series(const R x, const R alpha,
+  const int nb, const int ize, R *b)
+{
+  const R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);
+  R tempa = K(1.0), empal = K(1.0) + alpha, halfx = K(0.0), tempb = K(0.0);
+  int n, ncalc = nb;
+
+  if (enmten < x)
+    halfx = x/K(2.0);
+
+  if (alpha != K(0.0))
+    tempa = POW(halfx, alpha)/TGAMMA(empal);
+
+  if (ize == 2)
+    tempa *= EXP(-x);
+
+  if (K(1.0) < x + K(1.0))
+    tempb = halfx*halfx;
+
+  b[0] = tempa + tempa*tempb/empal;
+
+  if (x != K(0.0) && b[0] == K(0.0))
+    ncalc = 0;
+
+  if (nb == 1)
+    return ncalc;
+
+  if (K(0.0) < x)
+  {
+    R tempc = halfx, tover = (enmten + enmten)/x;
+
+    if (tempb != K(0.0))
+      tover = enmten/tempb;
+
+    for (n = 1; n < nb; n++)
+    {
+      tempa /= empal;
+      empal += K(1.0);
+      tempa *= tempc;
+
+      if (tempa <= tover*empal)
+        tempa = K(0.0);
+
+      b[n] = tempa + tempa*tempb/empal;
+
+      if (b[n] == K(0.0) && n < ncalc)
+        ncalc = n;
+    }
+  }
+  else
+    for (n = 1; n < nb; n++)
+      b[n] = K(0.0);
+
+  return ncalc;
+}
+
+static inline void scaled_modified_bessel_i_normalize(const R x,
+  const R alpha, const int nb, const int ize, R *b, const R sum_)
+{
+  const R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);
+  R sum = sum_, tempa;
+  int n;
+
+  /* Normalize, i.e., divide all b[n] by sum */
+  if (alpha != K(0.0))
+    sum = sum * TGAMMA(K(1.0) + alpha) * POW(x/K(2.0), -alpha);
+
+  if (ize == 1)
+    sum *= EXP(-x);
+
+  tempa = enmten;
+
+  if (K(1.0) < sum)
+    tempa *= sum;
+
+  for (n = 1; n <= nb; n++)
+  {
+    if (b[n-1] < tempa)
+      b[n-1] = K(0.0);
+
+    b[n-1] /= sum;
+  }
+}
+
+/**
+ * Calculates the modified bessel function \f$I_{n+\alpha}(x)\f$, possibly
+ * scaled by \f$\mathrm{e}^{-x}\f$, for real non-negative \f$x,alpha\f$ with
+ * \f$0 \le \alpha < 1\f$, and \f$n=0,1,\ldots,nb-1\f$.
+ *
+ * \arg[in] \c x non-negative real number in \f$I_{n+\alpha}(x)\f$
+ * \arg[in] \c alpha non-negative real number with \f$0 \le \alpha < 1\f$ in
+ *   \f$I_{n+\alpha}(x)\f$
+ * \arg[in] \c nb number of functions to be calculated
+ * \arg[in] \c ize switch between no scaling (\c ize = 1) and exponential
+ *   scaling (\c ize = 2)
+ * \arg[out] \c b real output vector to contain \f$I_{n+\alpha}(x)\f$,
+ *   \f$n=0,1,\ldots,nb-1\f$
+ * \return error indicator. Only if this value is identical to \c nb, then all
+ *   values in \c b have been calculated to full accuracy. If not, errors are
+ *   indicated using the following scheme:
+ *   - ncalc < 0: At least one of the arguments was out of range (e.g. nb <= 0,
+ *     ize neither equals 1 nor 2, \f$|x| \ge exparg\f$). In this case, the
+ *     output vector b is not calculated and \c ncalc is set to
+ *     \f$\min(nb,0)-1\f$.
+ *   - 0 < ncalc < nb: Not all requested functions could be calculated to full
+ *     accuracy. This can occur when nb is much larger than |x|. in this case,
+ *     the values \f$I_{n+\alpha}(x)\f$ are calculated to full accuracy for
+ *     \f$n=0,1,\ldots,ncalc\f$. The rest of the values up to
+ *     \f$n=0,1,\ldots,nb-1\f$ is calculated to a lower accuracy.
+ *
+ * \acknowledgement
+ *
+ * This program is based on a program written by David J. Sookne [2] that
+ * computes values of the Bessel functions \f$J_{\nu}(x)\f$ or \f$I_{\nu}(x)\f$
+ * for real argument \f$x\f$ and integer order \f$\nu\f$. modifications include
+ * the restriction of the computation to the Bessel function \f$I_{\nu}(x)\f$
+ * for non-negative real argument, the extension of the computation to arbitrary
+ * non-negative orders \f$\nu\f$, and the elimination of most underflow.
+ *
+ * References:
+ * [1] F. W. J. Olver and D. J. Sookne, A note on backward recurrence
+ *   algorithms", Math. Comput. (26), 1972, pp 125 -- 132.
+ * [2] D. J. Sookne, "Bessel functions of real argument and int order", NBS
+ *   Jour. of Res. B. (77B), 1973, pp. 125 -- 132.
+ *
+ * Modified by W. J. Cody, Applied Mathematics Division, Argonne National
+ *   Laboratory, Argonne, IL, 60439, USA
+ *
+ * Modified by Jens Keiner, Institute of Mathematics, University of Lübeck,
+ *   23560 Lübeck, Germany
+ */
+static int smbi(const R x, const R alpha, const int nb, const int ize, R *b)
+{
+  /* machine dependent parameters */
+  /* NSIG   - DECIMAL SIGNIFICANCE DESIRED.  SHOULD BE SET TO */
+  /*          IFIX(ALOG10(2)*NBIT+1), WHERE NBIT IS THE NUMBER OF */
+  /*          BITS IN THE MANTISSA OF A WORKING PRECISION VARIABLE. */
+  /*          SETTING NSIG LOWER WILL RESULT IN DECREASED ACCURACY */
+  /*          WHILE SETTING NSIG HIGHER WILL INCREASE CPU TIME */
+  /*          WITHOUT INCREASING ACCURACY.  THE TRUNCATION ERROR */
+  /*          IS LIMITED TO A RELATIVE ERROR OF T=.5*10**(-NSIG). */
+  /* ENTEN  - 10.0 ** K, WHERE K IS THE LARGEST int SUCH THAT */
+  /*          ENTEN IS MACHINE-REPRESENTABLE IN WORKING PRECISION. */
+  /* ENSIG  - 10.0 ** NSIG. */
+  /* RTNSIG - 10.0 ** (-K) FOR THE SMALLEST int K SUCH THAT */
+  /*          K .GE. NSIG/4. */
+  /* ENMTEN - THE SMALLEST ABS(X) SUCH THAT X/4 DOES NOT UNDERFLOW. */
+  /* XLARGE - UPPER LIMIT ON THE MAGNITUDE OF X WHEN IZE=2.  BEAR */
+  /*          IN MIND THAT IF ABS(X)=N, THEN AT LEAST N ITERATIONS */
+  /*          OF THE BACKWARD RECURSION WILL BE EXECUTED. */
+  /* EXPARG - LARGEST WORKING PRECISION ARGUMENT THAT THE LIBRARY */
+  /*          EXP ROUTINE CAN HANDLE AND UPPER LIMIT ON THE */
+  /*          MAGNITUDE OF X WHEN IZE=1. */
+  const int nsig = MANT_DIG + 2;
+  const R enten = nfft_float_property(NFFT_R_MAX);
+  const R ensig = POW(K(10.0),(R)nsig);
+  const R rtnsig = POW(K(10.0),-CEIL((R)nsig/K(4.0)));
+  const R xlarge = K(1E4);
+  const R exparg = FLOOR(LOG(POW(K(R_RADIX),K(DBL_MAX_EXP-1))));
+
+  /* System generated locals */
+  int l, n, nend, magx, nbmx, ncalc, nstart;
+  R p, em, en, sum, pold, test, empal, tempa, tempb, tempc, psave, plast, tover,
+    emp2al, psavel;
+
+  magx = LRINT(FLOOR(x));
+
+  /* return if x, nb, or ize out of range */
+  if (   nb <= 0 || x < K(0.0) || alpha < K(0.0) || K(1.0) <= alpha
+      || ((ize != 1 || exparg < x) && (ize != 2 || xlarge < x)))
+    return (MIN(nb,0) - 1);
+
+  /* 2-term ascending series for small x */
+  if (x < rtnsig)
+    return scaled_modified_bessel_i_series(x,alpha,nb,ize,b);
+
+  ncalc = nb;
+  /* forward sweep, Olver's p-sequence */
+
+  nbmx = nb - magx;
+  n = magx + 1;
+
+  en = (R) (n+n) + (alpha+alpha);
+  plast = K(1.0);
+  p = en/x;
+
+  /* significance test */
+  test = ensig + ensig;
+
+  if ((5*nsig) < (magx << 1))
+    test = SQRT(test*p);
+  else
+    test /= POW(K(1.585),(R)magx);
+
+  if (3 <= nbmx)
+  {
+    /* calculate p-sequence until n = nb-1 */
+    tover = enten/ensig;
+    nstart = magx+2;
+    nend = nb - 1;
+
+    for (n = nstart; n <= nend; n++)
+    {
+      en += K(2.0);
+      pold = plast;
+      plast = p;
+      p = en*plast/x + pold;
+      if (p > tover)
+      {
+        /* divide p-sequence by tover to avoid overflow. Calculate p-sequence
+         * until 1 <= |p| */
+        tover = enten;
+        p /= tover;
+        plast /= tover;
+        psave = p;
+        psavel = plast;
+        nstart = n + 1;
+
+        do
+        {
+          n++;
+          en += K(2.0);
+          pold = plast;
+          plast = p;
+          p = en*plast/x + pold;
+        } while (p <= K(1.0));
+
+        tempb = en/x;
+
+        /* Backward test. Find ncalc as the largest n such that test is passed. */
+        test = pold*plast*(K(0.5) - K(0.5)/(tempb * tempb))/ensig;
+        p = plast*tover;
+        n--;
+        en -= K(2.0);
+        nend = MIN(nb,n);
+
+        for (ncalc = nstart; ncalc <= nend; ncalc++)
+        {
+          pold = psavel;
+          psavel = psave;
+          psave = en*psavel/x + pold;
+          if (test < psave * psavel)
+            break;
+        }
+
+        ncalc--;
+        goto L80;
+      }
+    }
+
+    n = nend;
+    en = (R) (n+n) + (alpha+alpha);
+
+    /* special significance test for 2 <= nbmx */
+    test = FMAX(test,SQRT(plast*ensig)*SQRT(p+p));
+  }
+
+  /* calculate p-sequence until significance test is passed */
+  do
+  {
+    n++;
+    en += K(2.0);
+    pold = plast;
+    plast = p;
+    p = en*plast/x + pold;
+  } while (p < test);
+
+  /* Initialize backward recursion and normalization sum. */
+L80:
+  n++;
+  en += K(2.0);
+  tempb = K(0.0);
+  tempa = K(1.0)/p;
+  em = (R)(n-1);
+  empal = em + alpha;
+  emp2al = em - K(1.0) + (alpha+alpha);
+  sum = tempa*empal*emp2al/em;
+  nend = n-nb;
+
+  if (nend < 0)
+  {
+    /* We have n <= nb. So store b[n] and set higher orders to zero */
+    b[n-1] = tempa;
+    nend = -nend;
+    for (l = 1; l <= nend; ++l)
+      b[n-1 + l] = K(0.0);
+  }
+  else
+  {
+    if (nend != 0)
+    {
+      /* recur backward via difference equation, calculating b[n] until n = nb */
+      for (l = 1; l <= nend; ++l)
+      {
+        n--;
+        en -= K(2.0);
+        tempc = tempb;
+        tempb = tempa;
+        tempa = en*tempb/x + tempc;
+        em -= K(1.0);
+        emp2al -= K(1.0);
+
+        if (n == 1)
+          break;
+
+        if (n == 2)
+          emp2al = K(1.0);
+
+        empal -= K(1.0);
+        sum = (sum + tempa*empal)*emp2al/em;
+      }
+    }
+
+    /* store b[nb] */
+    b[n-1] = tempa;
+
+    if (nb <= 1)
+    {
+      sum = sum + sum + tempa;
+      scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
+      return ncalc;
+    }
+
+    /* calculate and store b[nb-1] */
+    n--;
+    en -= 2.0;
+    b[n-1] = en*tempa/x + tempb;
+
+    if (n == 1)
+    {
+      sum = sum + sum + b[0];
+      scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
+      return ncalc;
+    }
+
+    em -= K(1.0);
+    emp2al -= K(1.0);
+
+    if (n == 2)
+      emp2al = K(1.0);
+
+    empal -= K(1.0);
+    sum = (sum + b[n-1]*empal)*emp2al/em;
+  }
+
+  nend = n - 2;
+
+  if (nend != 0)
+  {
+    /* Calculate and store b[n] until n = 2. */
+    for (l = 1; l <= nend; ++l)
+    {
+      n--;
+      en -= K(2.0);
+      b[n-1] = en*b[n]/x + b[n+1];
+      em -= K(1.0);
+      emp2al -= K(1.0);
+
+      if (n == 2)
+        emp2al = K(1.0);
+
+      empal -= K(1.0);
+      sum = (sum + b[n-1]*empal)*emp2al/em;
+    }
+  }
+
+  /* calculate b[1] */
+  b[0] = K(2.0)*empal*b[1]/x + b[2];
+  sum = sum + sum + b[0];
+
+  scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
+  return ncalc;
+}
+
 /**
  * Computes the \f$\mathbb{R}^3\f$ standard inner product between two vectors
  * on the unit sphere \f$\mathbb{S}^2\f$ given in spherical coordinates.
@@ -78,9 +451,9 @@ enum pvalue {NO = 0, YES = 1, BOTH = 2};
 static inline double innerProduct(const double phi1, const double theta1,
   const double phi2, const double theta2)
 {
-  double pi2theta1 = PI2*theta1, pi2theta2 = PI2*theta2;
+  double pi2theta1 = K2PI*theta1, pi2theta2 = K2PI*theta2;
   return (cos(pi2theta1)*cos(pi2theta2)
-    + sin(pi2theta1)*sin(pi2theta2)*cos(PI2*(phi1-phi2)));
+    + sin(pi2theta1)*sin(pi2theta2)*cos(K2PI*(phi1-phi2)));
 }
 
 /**
@@ -96,7 +469,7 @@ static inline double innerProduct(const double phi1, const double theta1,
  */
 static inline double poissonKernel(const double x, const double h)
 {
-  return (1.0/(PI4))*((1.0-h)*(1.0+h))/pow(sqrt(1.0-2.0*h*x+h*h),3.0);
+  return (1.0/(K4PI))*((1.0-h)*(1.0+h))/pow(sqrt(1.0-2.0*h*x+h*h),3.0);
 }
 
 /**
@@ -112,7 +485,7 @@ static inline double poissonKernel(const double x, const double h)
  */
 static inline double singularityKernel(const double x, const double h)
 {
-  return (1.0/(PI2))/sqrt(1.0-2.0*h*x+h*h);
+  return (1.0/(K2PI))/sqrt(1.0-2.0*h*x+h*h);
 }
 
 /**
@@ -320,7 +693,7 @@ int main (int argc, char **argv)
       /* Read cut-off degree. */
       fscanf(stdin,"%d\n",&m[im]);
       fprintf(stdout,"%d\n",m[im]);
-      m_max = NFFT_MAX(m_max,m[im]);
+      m_max = MAX(m_max,m[im]);
     }
 
     /* Read number of node specifications. */
@@ -337,12 +710,12 @@ int main (int argc, char **argv)
       /* Read number of source nodes. */
       fscanf(stdin,"L=%d ",&ld[ild][0]);
       fprintf(stdout,"%d\n",ld[ild][0]);
-      l_max = NFFT_MAX(l_max,ld[ild][0]);
+      l_max = MAX(l_max,ld[ild][0]);
 
       /* Read number of target nodes. */
       fscanf(stdin,"D=%d ",&ld[ild][1]);
       fprintf(stdout,"%d\n",ld[ild][1]);
-      d_max = NFFT_MAX(d_max,ld[ild][1]);
+      d_max = MAX(d_max,ld[ild][1]);
 
       /* Determine whether direct and fast algorithm shall be compared. */
       fscanf(stdin,"compare=%d ",&ld[ild][2]);
@@ -364,9 +737,9 @@ int main (int argc, char **argv)
         if (ld[ild][3] == YES)
         {
           /* Update ld_max_prec. */
-          ld_max_prec = NFFT_MAX(ld_max_prec,ld[ild][0]*ld[ild][1]);
+          ld_max_prec = MAX(ld_max_prec,ld[ild][0]*ld[ild][1]);
           /* Update l_max_prec. */
-          l_max_prec = NFFT_MAX(l_max_prec,ld[ild][0]);
+          l_max_prec = MAX(l_max_prec,ld[ild][0]);
           /* Turn on the precomputation for the direct algorithm. */
           precompute = YES;
         }
@@ -398,14 +771,14 @@ int main (int argc, char **argv)
     {
       b[l] = (((double)rand())/RAND_MAX) - 0.5;
       eta[2*l] = (((double)rand())/RAND_MAX) - 0.5;
-      eta[2*l+1] = acos(2.0*(((double)rand())/RAND_MAX) - 1.0)/(PI2);
+      eta[2*l+1] = acos(2.0*(((double)rand())/RAND_MAX) - 1.0)/(K2PI);
     }
 
     /* Generate random target nodes. */
     for (d = 0; d < d_max; d++)
     {
       xi[2*d] = (((double)rand())/RAND_MAX) - 0.5;
-      xi[2*d+1] = acos(2.0*(((double)rand())/RAND_MAX) - 1.0)/(PI2);
+      xi[2*d+1] = acos(2.0*(((double)rand())/RAND_MAX) - 1.0)/(K2PI);
     }
 
     /* Do precomputation. */
@@ -445,9 +818,9 @@ int main (int argc, char **argv)
         case KT_GAUSSIAN:
           /* Fourier-Legendre coefficients */
           steed = (double*) nfft_malloc((m_max+1)*sizeof(double));
-          nfft_smbi(2.0*p[ip][0],0.5,m_max+1,2,steed);
+          smbi(2.0*p[ip][0],0.5,m_max+1,2,steed);
           for (k = 0; k <= m_max; k++)
-            a[k] = PI2*(sqrt(PI/p[ip][0]))*steed[k];
+            a[k] = K2PI*(sqrt(KPI/p[ip][0]))*steed[k];
 
           nfft_free(steed);
           break;
@@ -455,7 +828,7 @@ int main (int argc, char **argv)
 
       /* Normalize Fourier-Legendre coefficients. */
       for (k = 0; k <= m_max; k++)
-        a[k] *= (2*k+1)/(PI4);
+        a[k] *= (2*k+1)/(K4PI);
 
       /* Process all node sets. */
       for (ild = 0; ild < ild_max; ild++)
@@ -534,7 +907,7 @@ int main (int argc, char **argv)
                 /* Perform final summation */
 
                 /* Calculate the multiplicative constant. */
-                constant = ((p[ip][1]+1)/(PI2*pow(1-p[ip][0],p[ip][1]+1)));
+                constant = ((p[ip][1]+1)/(K2PI*pow(1-p[ip][0],p[ip][1]+1)));
 
                 /* Process all target nodes. */
                 for (d = 0; d < ld[ild][1]; d++)
@@ -641,7 +1014,7 @@ int main (int argc, char **argv)
 
               case KT_LOC_SUPP:
                 /* Calculate the multiplicative constant. */
-                constant = ((p[ip][1]+1)/(PI2*pow(1-p[ip][0],p[ip][1]+1)));
+                constant = ((p[ip][1]+1)/(K2PI*pow(1-p[ip][0],p[ip][1]+1)));
 
                 /* Process all target nodes. */
                 for (d = 0; d < ld[ild][1]; d++)
diff --git a/applications/fastsumS2/fastsumS2.m b/applications/fastsumS2/fastsumS2.m
index 0c435f3..3785ec6 100644
--- a/applications/fastsumS2/fastsumS2.m
+++ b/applications/fastsumS2/fastsumS2.m
@@ -1,9 +1,9 @@
 function fastsumS2()
 %FASTSUMS2
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -19,7 +19,7 @@ function fastsumS2()
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: fastsumS2.m 3784 2012-06-06 20:30:39Z keiner $
+% $Id$
 
 % The input file's name for fastsumS2.c
 infilename = 'data.in';
diff --git a/applications/fastsumS2/readTestcase.m b/applications/fastsumS2/readTestcase.m
index 56927aa..6170e66 100644
--- a/applications/fastsumS2/readTestcase.m
+++ b/applications/fastsumS2/readTestcase.m
@@ -48,7 +48,7 @@ function T = readTestcase(file)
 %     - in the sixth column the error E_infty for the fast summation algorithm
 %       using the NFSFT algorithm.
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -64,7 +64,7 @@ function T = readTestcase(file)
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: readTestcase.m 3780 2012-06-04 21:50:09Z keiner $
+% $Id$
 
 % Read the number of testcases.
 tc_max = fscanf(file,'%d',1);
diff --git a/applications/fastsumS2/writeTestcase.m b/applications/fastsumS2/writeTestcase.m
index 32ab884..86cd205 100644
--- a/applications/fastsumS2/writeTestcase.m
+++ b/applications/fastsumS2/writeTestcase.m
@@ -36,7 +36,7 @@ function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,kernel,...
 %     - in the fifth column the error E_infty (undefined if direct sum
 %       evaluation has not been used).
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -52,7 +52,7 @@ function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,kernel,...
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: writeTestcase.m 3780 2012-06-04 21:50:09Z keiner $
+% $Id$
 
 % Write NFSFT usage flag.
 fprintf(file,'nfsft=%d\n',usenfsft);
diff --git a/applications/iterS2/Makefile.am b/applications/iterS2/Makefile.am
index 43fabe4..70de6e6 100644
--- a/applications/iterS2/Makefile.am
+++ b/applications/iterS2/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3792 2012-06-12 06:45:24Z keiner $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/kernel/nfsft
 
diff --git a/applications/iterS2/Makefile.in b/applications/iterS2/Makefile.in
deleted file mode 100644
index 4989571..0000000
--- a/applications/iterS2/Makefile.in
+++ /dev/null
@@ -1,556 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3792 2012-06-12 06:45:24Z keiner $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = iterS2$(EXEEXT)
-subdir = applications/iterS2
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_iterS2_OBJECTS = iterS2.$(OBJEXT)
-iterS2_OBJECTS = $(am_iterS2_OBJECTS)
-iterS2_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(iterS2_SOURCES)
-DIST_SOURCES = $(iterS2_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/kernel/nfsft
-iterS2_SOURCES = iterS2.c doxygen.h
-iterS2_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = writeTestcase.m writeImageTestcase.m README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/iterS2/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/iterS2/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-iterS2$(EXEEXT): $(iterS2_OBJECTS) $(iterS2_DEPENDENCIES) $(EXTRA_iterS2_DEPENDENCIES) 
-	@rm -f iterS2$(EXEEXT)
-	$(LINK) $(iterS2_OBJECTS) $(iterS2_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/iterS2.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-#iterS2.m readTestcase.m
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/iterS2/doxygen.h b/applications/iterS2/doxygen.h
index 3bee191..cfd60ce 100644
--- a/applications/iterS2/doxygen.h
+++ b/applications/iterS2/doxygen.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/applications/iterS2/iterS2.c b/applications/iterS2/iterS2.c
index bce0afb..981572d 100644
--- a/applications/iterS2/iterS2.c
+++ b/applications/iterS2/iterS2.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: iterS2.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /* iterS2 - Iterative reconstruction on the sphere S2 */
 
@@ -36,12 +36,137 @@
 #endif
 
 /* Include NFFT 3 utilities headers. */
-#include "nfft3util.h"
 /* Include NFFT3 library header. */
 #include "nfft3.h"
+#include "infft.h"
 
 #include "legendre.h"
 
+static void voronoi_weights_S2(R *w, R *xi, INT M)
+{
+  R *x;
+  R *y;
+  R *z;
+  int j;
+  int k;
+  int el;
+  int Mlocal = M;
+  int lnew;
+  int ier;
+  int *list;
+  int *lptr;
+  int *lend;
+  int *near;
+  int *next;
+  R  *dist;
+  int *ltri;
+  int *listc;
+  int nb;
+  R *xc;
+  R *yc;
+  R *zc;
+  R *rc;
+  R *vr;
+  int lp;
+  int lpl;
+  int kv;
+  R a;
+
+  /* Allocate memory for auxilliary arrays. */
+  x = (R*)X(malloc)(M * sizeof(R));
+  y = (R*)X(malloc)(M * sizeof(R));
+  z = (R*)X(malloc)(M * sizeof(R));
+
+  list = (int*)X(malloc)((6*M-12+1)*sizeof(int));
+  lptr = (int*)X(malloc)((6*M-12+1)*sizeof(int));
+  lend = (int*)X(malloc)((M+1)*sizeof(int));
+  near = (int*)X(malloc)((M+1)*sizeof(int));
+  next = (int*)X(malloc)((M+1)*sizeof(int));
+  dist = (R*)X(malloc)((M+1)*sizeof(R));
+  ltri = (int*)X(malloc)((6*M+1)*sizeof(int));
+  listc = (int*)X(malloc)((6*M-12+1)*sizeof(int));
+  xc = (R*)X(malloc)((2*M-4+1)*sizeof(R));
+  yc = (R*)X(malloc)((2*M-4+1)*sizeof(R));
+  zc = (R*)X(malloc)((2*M-4+1)*sizeof(R));
+  rc = (R*)X(malloc)((2*M-4+1)*sizeof(R));
+  vr = (R*)X(malloc)(3*(2*M-4+1)*sizeof(R));
+
+  /* Convert from spherical Coordinates in [0,1/2]x[-1/2,1/2) to Cartesian
+   * coordinates. */
+  for (k = 0; k < M; k++)
+  {
+    x[k] = SIN(K2PI*xi[2*k+1])*COS(K2PI*xi[2*k]);
+    y[k] = SIN(K2PI*xi[2*k+1])*SIN(K2PI*xi[2*k]);
+    z[k] = COS(K2PI*xi[2*k+1]);
+  }
+
+  /* Generate Delaunay triangulation. */
+  trmesh_(&Mlocal, x, y, z, list, lptr, lend, &lnew, near, next, dist, &ier);
+
+  /* Check error flag. */
+  if (ier == 0)
+  {
+    /* Get Voronoi vertices. */
+    crlist_(&Mlocal, &Mlocal, x, y, z, list, lend, lptr, &lnew, ltri, listc, &nb, xc,
+      yc, zc, rc, &ier);
+
+    if (ier == 0)
+    {
+      /* Calcuate sizes of Voronoi regions. */
+      for (k = 0; k < M; k++)
+      {
+        /* Get last neighbour index. */
+        lpl = lend[k];
+        lp = lpl;
+
+        j = 0;
+        vr[3*j] = x[k];
+        vr[3*j+1] = y[k];
+        vr[3*j+2] = z[k];
+
+        do
+        {
+          j++;
+          /* Get next neighbour. */
+          lp = lptr[lp-1];
+          kv = listc[lp-1];
+          vr[3*j] = xc[kv-1];
+          vr[3*j+1] = yc[kv-1];
+          vr[3*j+2] = zc[kv-1];
+          /* fprintf(stderr, "lp = %ld\t", lp); */
+        } while (lp != lpl);
+
+        a = 0;
+        for (el = 0; el < j; el++)
+        {
+          a += areas_(vr, &vr[3*(el+1)],&vr[3*(((el+1)%j)+1)]);
+        }
+
+        w[k] = a;
+      }
+    }
+  }
+
+  /* Deallocate memory. */
+  X(free)(x);
+  X(free)(y);
+  X(free)(z);
+
+  X(free)(list);
+  X(free)(lptr);
+  X(free)(lend);
+  X(free)(near);
+  X(free)(next);
+  X(free)(dist);
+  X(free)(ltri);
+  X(free)(listc);
+  X(free)(xc);
+  X(free)(yc);
+  X(free)(zc);
+  X(free)(rc);
+  X(free)(vr);
+}
+
 /** Enumeration for parameter values */
 enum boolean {NO = 0, YES = 1};
 
@@ -274,8 +399,8 @@ int main (int argc, char **argv)
     for (j = 0; j < M; j++)
     {
       fscanf(stdin,"%le %le %le %le\n",&plan.x[2*j+1],&plan.x[2*j],&re,&im);
-      plan.x[2*j+1] = plan.x[2*j+1]/(2.0*PI);
-      plan.x[2*j] = plan.x[2*j]/(2.0*PI);
+      plan.x[2*j+1] = plan.x[2*j+1]/(2.0*KPI);
+      plan.x[2*j] = plan.x[2*j]/(2.0*KPI);
       if (plan.x[2*j] >= 0.5)
       {
         plan.x[2*j] = plan.x[2*j] - 1;
@@ -302,8 +427,8 @@ int main (int argc, char **argv)
     for (j = 0; j < M2; j++)
     {
       fscanf(stdin,"%le %le\n",&plan2.x[2*j+1],&plan2.x[2*j]);
-      plan2.x[2*j+1] = plan2.x[2*j+1]/(2.0*PI);
-      plan2.x[2*j] = plan2.x[2*j]/(2.0*PI);
+      plan2.x[2*j+1] = plan2.x[2*j+1]/(2.0*KPI);
+      plan2.x[2*j] = plan2.x[2*j]/(2.0*KPI);
       if (plan2.x[2*j] >= 0.5)
       {
         plan2.x[2*j] = plan2.x[2*j] - 1;
@@ -319,7 +444,7 @@ int main (int argc, char **argv)
     if ((N+1)*(N+1) > M)
     {
       /* Compute Voronoi weights. */
-      //nfft_voronoi_weights_S2(iplan.w, plan.x, M);
+      //voronoi_weights_S2(iplan.w, plan.x, M);
 
       /* Print out Voronoi weights. */
       /*a = 0.0;
@@ -359,7 +484,7 @@ int main (int argc, char **argv)
       }
 
       /* Compute Voronoi weights. */
-      nfft_voronoi_weights_S2(iplan.w, plan.x, M);
+      voronoi_weights_S2(iplan.w, plan.x, M);
 
       /* Print out Voronoi weights. */
       a = 0.0;
@@ -394,9 +519,9 @@ int main (int argc, char **argv)
       solver_loop_one_step_complex(&iplan);
     }
 
-    /*NFFT_SWAP_complex(iplan.f_hat_iter, plan.f_hat);
+    /*CSWAP(iplan.f_hat_iter, plan.f_hat);
     nfsft_trafo(&plan);
-    NFFT_SWAP_complex(iplan.f_hat_iter, plan.f_hat);
+    CSWAP(iplan.f_hat_iter, plan.f_hat);
 
     a = 0.0;
     b = 0.0;
@@ -410,9 +535,9 @@ int main (int argc, char **argv)
 
     fprintf(stderr,"relative error in 2-norm: %le\n",a/b);*/
 
-    NFFT_SWAP_complex(iplan.f_hat_iter, plan2.f_hat);
+    CSWAP(iplan.f_hat_iter, plan2.f_hat);
     nfsft_trafo(&plan2);
-    NFFT_SWAP_complex(iplan.f_hat_iter, plan2.f_hat);
+    CSWAP(iplan.f_hat_iter, plan2.f_hat);
     for (k = 0; k < plan2.M_total; k++)
     {
       fprintf(stdout,"%le\n",cabs(plan2.f[k]));
diff --git a/applications/iterS2/writeImageTestcase.m b/applications/iterS2/writeImageTestcase.m
index e7d2dc5..ccdd055 100644
--- a/applications/iterS2/writeImageTestcase.m
+++ b/applications/iterS2/writeImageTestcase.m
@@ -4,9 +4,9 @@ function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
 %    WRITETESTCASE(FILE, USENFSFT, USENFFT, CUTOFF, USEFPT, THRESHOLD,
 %    BANDWIDTH, THETA, PHI, F)
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -22,7 +22,7 @@ function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: writeImageTestcase.m 3784 2012-06-06 20:30:39Z keiner $
+% $Id$
 
 % Write NFSFT usage flag.
 fprintf(file,'nfsft=%d\n',usenfsft);
diff --git a/applications/iterS2/writeTestcase.m b/applications/iterS2/writeTestcase.m
index 420612d..28bf177 100644
--- a/applications/iterS2/writeTestcase.m
+++ b/applications/iterS2/writeTestcase.m
@@ -4,9 +4,9 @@ function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
 %   WRITETESTCASE(FILE, USENFSFT, USENFFT, CUTOFF, USEFPT, THRESHOLD,
 %   BANDWIDTH, THETA, PHI, F)
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -22,7 +22,7 @@ function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: writeTestcase.m 3784 2012-06-06 20:30:39Z keiner $
+% $Id$
 
 % Write NFSFT usage flag.
 fprintf(file,'nfsft=%d\n',usenfsft);
diff --git a/applications/mri/Makefile.in b/applications/mri/Makefile.in
deleted file mode 100644
index 2416637..0000000
--- a/applications/mri/Makefile.in
+++ /dev/null
@@ -1,638 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = applications/mri
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = mri2d mri3d 
-EXTRA_DIST = doxygen.c
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/mri/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/mri/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
-	cscopelist-recursive ctags-recursive install-am install-strip \
-	tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	cscopelist cscopelist-recursive ctags ctags-recursive \
-	distclean distclean-generic distclean-libtool distclean-tags \
-	distdir dvi dvi-am html html-am info info-am install \
-	install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags tags-recursive uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/mri/doxygen.c b/applications/mri/doxygen.c
index 4e41802..46db4ae 100644
--- a/applications/mri/doxygen.c
+++ b/applications/mri/doxygen.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id$ */
 
 /**
  * \defgroup applications_mri Transforms in magnetic resonance imaging
diff --git a/applications/mri/mri2d/Makefile.am b/applications/mri/mri2d/Makefile.am
index ab2efb3..dbedf85 100644
--- a/applications/mri/mri2d/Makefile.am
+++ b/applications/mri/mri2d/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/applications/mri/mri2d/Makefile.in b/applications/mri/mri2d/Makefile.in
deleted file mode 100644
index a533449..0000000
--- a/applications/mri/mri2d/Makefile.in
+++ /dev/null
@@ -1,661 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = construct_data_2d$(EXEEXT) \
-	construct_data_inh_2d1d$(EXEEXT) \
-	construct_data_inh_3d$(EXEEXT) \
-	reconstruct_data_gridding$(EXEEXT) \
-	reconstruct_data_2d$(EXEEXT) reconstruct_data_inh_3d$(EXEEXT) \
-	reconstruct_data_inh_2d1d$(EXEEXT) \
-	reconstruct_data_inh_nnfft$(EXEEXT)
-subdir = applications/mri/mri2d
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_construct_data_2d_OBJECTS = construct_data_2d.$(OBJEXT)
-construct_data_2d_OBJECTS = $(am_construct_data_2d_OBJECTS)
-construct_data_2d_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_construct_data_inh_2d1d_OBJECTS =  \
-	construct_data_inh_2d1d.$(OBJEXT)
-construct_data_inh_2d1d_OBJECTS =  \
-	$(am_construct_data_inh_2d1d_OBJECTS)
-construct_data_inh_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_construct_data_inh_3d_OBJECTS = construct_data_inh_3d.$(OBJEXT)
-construct_data_inh_3d_OBJECTS = $(am_construct_data_inh_3d_OBJECTS)
-construct_data_inh_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_reconstruct_data_2d_OBJECTS = reconstruct_data_2d.$(OBJEXT)
-reconstruct_data_2d_OBJECTS = $(am_reconstruct_data_2d_OBJECTS)
-reconstruct_data_2d_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_reconstruct_data_gridding_OBJECTS =  \
-	reconstruct_data_gridding.$(OBJEXT)
-reconstruct_data_gridding_OBJECTS =  \
-	$(am_reconstruct_data_gridding_OBJECTS)
-reconstruct_data_gridding_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_reconstruct_data_inh_2d1d_OBJECTS =  \
-	reconstruct_data_inh_2d1d.$(OBJEXT)
-reconstruct_data_inh_2d1d_OBJECTS =  \
-	$(am_reconstruct_data_inh_2d1d_OBJECTS)
-reconstruct_data_inh_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_reconstruct_data_inh_3d_OBJECTS =  \
-	reconstruct_data_inh_3d.$(OBJEXT)
-reconstruct_data_inh_3d_OBJECTS =  \
-	$(am_reconstruct_data_inh_3d_OBJECTS)
-reconstruct_data_inh_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_reconstruct_data_inh_nnfft_OBJECTS =  \
-	reconstruct_data_inh_nnfft.$(OBJEXT)
-reconstruct_data_inh_nnfft_OBJECTS =  \
-	$(am_reconstruct_data_inh_nnfft_OBJECTS)
-reconstruct_data_inh_nnfft_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(construct_data_2d_SOURCES) \
-	$(construct_data_inh_2d1d_SOURCES) \
-	$(construct_data_inh_3d_SOURCES) \
-	$(reconstruct_data_2d_SOURCES) \
-	$(reconstruct_data_gridding_SOURCES) \
-	$(reconstruct_data_inh_2d1d_SOURCES) \
-	$(reconstruct_data_inh_3d_SOURCES) \
-	$(reconstruct_data_inh_nnfft_SOURCES)
-DIST_SOURCES = $(construct_data_2d_SOURCES) \
-	$(construct_data_inh_2d1d_SOURCES) \
-	$(construct_data_inh_3d_SOURCES) \
-	$(reconstruct_data_2d_SOURCES) \
-	$(reconstruct_data_gridding_SOURCES) \
-	$(reconstruct_data_inh_2d1d_SOURCES) \
-	$(reconstruct_data_inh_3d_SOURCES) \
-	$(reconstruct_data_inh_nnfft_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-construct_data_2d_SOURCES = construct_data_2d.c doxygen.h
-construct_data_2d_LDADD = $(top_builddir)/libnfft3.la
-construct_data_inh_2d1d_SOURCES = construct_data_inh_2d1d.c
-construct_data_inh_2d1d_LDADD = $(top_builddir)/libnfft3.la
-construct_data_inh_3d_SOURCES = construct_data_inh_3d.c
-construct_data_inh_3d_LDADD = $(top_builddir)/libnfft3.la
-reconstruct_data_gridding_SOURCES = reconstruct_data_gridding.c
-reconstruct_data_gridding_LDADD = $(top_builddir)/libnfft3.la
-reconstruct_data_2d_SOURCES = reconstruct_data_2d.c
-reconstruct_data_2d_LDADD = $(top_builddir)/libnfft3.la
-reconstruct_data_inh_3d_SOURCES = reconstruct_data_inh_3d.c
-reconstruct_data_inh_3d_LDADD = $(top_builddir)/libnfft3.la
-reconstruct_data_inh_2d1d_SOURCES = reconstruct_data_inh_2d1d.c
-reconstruct_data_inh_2d1d_LDADD = $(top_builddir)/libnfft3.la
-reconstruct_data_inh_nnfft_SOURCES = reconstruct_data_inh_nnfft.c
-reconstruct_data_inh_nnfft_LDADD = $(top_builddir)/libnfft3.la
-EXTRA_DIST = construct_inh.m \
-		construct_readout_time.m \
-		precompute_weights.m \
-		construct_knots_linogram.m \
-		mri_inh.m \
-		rms.m \
-		construct_knots_radial.m \
-		mri.m \
-		construct_knots_rose.m \
-		visualize_data.m \
-		construct_knots_spiral.m \
-		phantom.m \
-		README
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/mri/mri2d/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/mri/mri2d/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-construct_data_2d$(EXEEXT): $(construct_data_2d_OBJECTS) $(construct_data_2d_DEPENDENCIES) $(EXTRA_construct_data_2d_DEPENDENCIES) 
-	@rm -f construct_data_2d$(EXEEXT)
-	$(LINK) $(construct_data_2d_OBJECTS) $(construct_data_2d_LDADD) $(LIBS)
-construct_data_inh_2d1d$(EXEEXT): $(construct_data_inh_2d1d_OBJECTS) $(construct_data_inh_2d1d_DEPENDENCIES) $(EXTRA_construct_data_inh_2d1d_DEPENDENCIES) 
-	@rm -f construct_data_inh_2d1d$(EXEEXT)
-	$(LINK) $(construct_data_inh_2d1d_OBJECTS) $(construct_data_inh_2d1d_LDADD) $(LIBS)
-construct_data_inh_3d$(EXEEXT): $(construct_data_inh_3d_OBJECTS) $(construct_data_inh_3d_DEPENDENCIES) $(EXTRA_construct_data_inh_3d_DEPENDENCIES) 
-	@rm -f construct_data_inh_3d$(EXEEXT)
-	$(LINK) $(construct_data_inh_3d_OBJECTS) $(construct_data_inh_3d_LDADD) $(LIBS)
-reconstruct_data_2d$(EXEEXT): $(reconstruct_data_2d_OBJECTS) $(reconstruct_data_2d_DEPENDENCIES) $(EXTRA_reconstruct_data_2d_DEPENDENCIES) 
-	@rm -f reconstruct_data_2d$(EXEEXT)
-	$(LINK) $(reconstruct_data_2d_OBJECTS) $(reconstruct_data_2d_LDADD) $(LIBS)
-reconstruct_data_gridding$(EXEEXT): $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_DEPENDENCIES) $(EXTRA_reconstruct_data_gridding_DEPENDENCIES) 
-	@rm -f reconstruct_data_gridding$(EXEEXT)
-	$(LINK) $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_LDADD) $(LIBS)
-reconstruct_data_inh_2d1d$(EXEEXT): $(reconstruct_data_inh_2d1d_OBJECTS) $(reconstruct_data_inh_2d1d_DEPENDENCIES) $(EXTRA_reconstruct_data_inh_2d1d_DEPENDENCIES) 
-	@rm -f reconstruct_data_inh_2d1d$(EXEEXT)
-	$(LINK) $(reconstruct_data_inh_2d1d_OBJECTS) $(reconstruct_data_inh_2d1d_LDADD) $(LIBS)
-reconstruct_data_inh_3d$(EXEEXT): $(reconstruct_data_inh_3d_OBJECTS) $(reconstruct_data_inh_3d_DEPENDENCIES) $(EXTRA_reconstruct_data_inh_3d_DEPENDENCIES) 
-	@rm -f reconstruct_data_inh_3d$(EXEEXT)
-	$(LINK) $(reconstruct_data_inh_3d_OBJECTS) $(reconstruct_data_inh_3d_LDADD) $(LIBS)
-reconstruct_data_inh_nnfft$(EXEEXT): $(reconstruct_data_inh_nnfft_OBJECTS) $(reconstruct_data_inh_nnfft_DEPENDENCIES) $(EXTRA_reconstruct_data_inh_nnfft_DEPENDENCIES) 
-	@rm -f reconstruct_data_inh_nnfft$(EXEEXT)
-	$(LINK) $(reconstruct_data_inh_nnfft_OBJECTS) $(reconstruct_data_inh_nnfft_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_2d.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_inh_2d1d.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_inh_3d.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_2d.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_gridding.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_inh_2d1d.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_inh_3d.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_inh_nnfft.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/mri/mri2d/construct_data_2d.c b/applications/mri/mri2d/construct_data_2d.c
index fa36e56..0abc733 100644
--- a/applications/mri/mri2d/construct_data_2d.c
+++ b/applications/mri/mri2d/construct_data_2d.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: construct_data_2d.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 #include "config.h"
 
@@ -26,8 +26,8 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 /**
  * \defgroup applications_mri2d_construct_data_2d construct_data_2d
@@ -69,7 +69,7 @@ static void construct(char * file, int N, int M)
     }
   }
 
-  if(my_plan.nfft_flags & PRE_PSI)
+  if(my_plan.flags & PRE_PSI)
     nfft_precompute_psi(&my_plan);
 
   nfft_trafo(&my_plan);
diff --git a/applications/mri/mri2d/construct_data_inh_2d1d.c b/applications/mri/mri2d/construct_data_inh_2d1d.c
index b4e2d4f..6126818 100644
--- a/applications/mri/mri2d/construct_data_inh_2d1d.c
+++ b/applications/mri/mri2d/construct_data_inh_2d1d.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: construct_data_inh_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -27,7 +27,7 @@
 #endif
 
 #include "nfft3.h"
-#include "nfft3util.h"
+#include "infft.h"
 
 /**
  * \defgroup applications_mri2d_construct_data_inh_2d1d construct_data__inh_2d1d
@@ -86,7 +86,7 @@ static void construct(char * file, int N, int M)
   fclose(finh);
 
 
-  N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
+  N3=ceil((MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
   T=((max_time-min_time)/2.0)/(0.5-((double) m)/N3);
   W=N3/T;
 
@@ -123,10 +123,10 @@ static void construct(char * file, int N, int M)
   for(j=0;j<N*N;j++)
   {
     fscanf(fi,"%le ",&real);
-    my_plan.f_hat[j] = real*cexp(2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+    my_plan.f_hat[j] = real*cexp(2.0*_Complex_I*KPI*Ts*my_plan.w[j]*W);
   }
 
-  if(my_plan.plan.nfft_flags & PRE_PSI)
+  if(my_plan.plan.flags & PRE_PSI)
     nfft_precompute_psi(&my_plan.plan);
 
   mri_inh_2d1d_trafo(&my_plan);
diff --git a/applications/mri/mri2d/construct_data_inh_3d.c b/applications/mri/mri2d/construct_data_inh_3d.c
index 1000a7c..2025eb0 100644
--- a/applications/mri/mri2d/construct_data_inh_3d.c
+++ b/applications/mri/mri2d/construct_data_inh_3d.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: construct_data_inh_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -27,7 +27,7 @@
 #endif
 
 #include "nfft3.h"
-#include "nfft3util.h"
+#include "infft.h"
 
 /**
  * \defgroup applications_mri2d_construct_data_inh_3d construct_data_inh_3d
@@ -85,9 +85,9 @@ static void construct(char * file, int N, int M)
   }
   fclose(finh);
 
-  N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
+  N3=ceil((MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
 
-  W= NFFT_MAX(fabs(min_inh),fabs(max_inh))/(0.5-((double)m)/N3);
+  W= MAX(fabs(min_inh),fabs(max_inh))/(0.5-((double)m)/N3);
 
   my_N[0]=N; my_n[0]=ceil(N*sigma);
   my_N[1]=N; my_n[1]=ceil(N*sigma);
@@ -122,10 +122,10 @@ static void construct(char * file, int N, int M)
   for(j=0;j<N*N;j++)
   {
     fscanf(fi,"%le ",&real);
-    my_plan.f_hat[j] = real*cexp(2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+    my_plan.f_hat[j] = real*cexp(2.0*_Complex_I*KPI*Ts*my_plan.w[j]*W);
   }
 
-  if(my_plan.plan.nfft_flags & PRE_PSI)
+  if(my_plan.plan.flags & PRE_PSI)
     nfft_precompute_psi(&my_plan.plan);
 
   mri_inh_3d_trafo(&my_plan);
diff --git a/applications/mri/mri2d/construct_inh.m b/applications/mri/mri2d/construct_inh.m
index 09ae481..7e58b1f 100644
--- a/applications/mri/mri2d/construct_inh.m
+++ b/applications/mri/mri2d/construct_inh.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_inh.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [] = construct_inh( N )
 out=zeros(N*N,1);
 
diff --git a/applications/mri/mri2d/construct_knots_linogram.m b/applications/mri/mri2d/construct_knots_linogram.m
index a3d68bf..a82380f 100644
--- a/applications/mri/mri2d/construct_knots_linogram.m
+++ b/applications/mri/mri2d/construct_knots_linogram.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_knots_linogram.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [M] = construct_knots_linogram ( N )
 
 l=((-N/2):(N/2-1));
diff --git a/applications/mri/mri2d/construct_knots_radial.m b/applications/mri/mri2d/construct_knots_radial.m
index 7214a35..0a7c331 100644
--- a/applications/mri/mri2d/construct_knots_radial.m
+++ b/applications/mri/mri2d/construct_knots_radial.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_knots_radial.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [M] = construct_knots_radial( N )
 
 A=N*2;
diff --git a/applications/mri/mri2d/construct_knots_rose.m b/applications/mri/mri2d/construct_knots_rose.m
index 33263ef..5e0ce70 100644
--- a/applications/mri/mri2d/construct_knots_rose.m
+++ b/applications/mri/mri2d/construct_knots_rose.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_knots_rose.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [M] = construct_knots_rose( N )
 
 N=ceil(1.5*N);
diff --git a/applications/mri/mri2d/construct_knots_spiral.m b/applications/mri/mri2d/construct_knots_spiral.m
index a6691a3..5474d2d 100644
--- a/applications/mri/mri2d/construct_knots_spiral.m
+++ b/applications/mri/mri2d/construct_knots_spiral.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_knots_spiral.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [M] = construct_knots_spiral ( N,arms )
 M=N^2;
 file = zeros(M,2);
diff --git a/applications/mri/mri2d/construct_readout_time.m b/applications/mri/mri2d/construct_readout_time.m
index 9545cc9..e7f15d4 100644
--- a/applications/mri/mri2d/construct_readout_time.m
+++ b/applications/mri/mri2d/construct_readout_time.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_readout_time.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 % constructs a three dimensional Shepp Logan phantom
 function [M] = construct_readout_time( M, Te, arms, increment )
 
diff --git a/applications/mri/mri2d/doxygen.h b/applications/mri/mri2d/doxygen.h
index 407d638..9a535f3 100644
--- a/applications/mri/mri2d/doxygen.h
+++ b/applications/mri/mri2d/doxygen.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/applications/mri/mri2d/mri.m b/applications/mri/mri2d/mri.m
index a483e36..7a83fe6 100644
--- a/applications/mri/mri2d/mri.m
+++ b/applications/mri/mri2d/mri.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: mri.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 % This script file is an example of the usage
 
 N=128;   % points per row / column
diff --git a/applications/mri/mri2d/mri_inh.m b/applications/mri/mri2d/mri_inh.m
index 1f0ed1f..a386918 100644
--- a/applications/mri/mri2d/mri_inh.m
+++ b/applications/mri/mri2d/mri_inh.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: mri_inh.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 % This script file is an example of the usage
 
 N=128;   % points per row / column
diff --git a/applications/mri/mri2d/phantom.m b/applications/mri/mri2d/phantom.m
index 3d17d08..2e960ac 100644
--- a/applications/mri/mri2d/phantom.m
+++ b/applications/mri/mri2d/phantom.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: phantom.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function I=phantom(N)
 % phantom(N)
 %  generates the (modified) Shepp-Logan phantom of P. Toft
diff --git a/applications/mri/mri2d/precompute_weights.m b/applications/mri/mri2d/precompute_weights.m
index 7ff5e9c..f22c909 100644
--- a/applications/mri/mri2d/precompute_weights.m
+++ b/applications/mri/mri2d/precompute_weights.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: precompute_weights.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [] = precompute_weights ( file, M )
 
 input=load(file);
diff --git a/applications/mri/mri2d/reconstruct_data_2d.c b/applications/mri/mri2d/reconstruct_data_2d.c
index 52214b2..44f9557 100644
--- a/applications/mri/mri2d/reconstruct_data_2d.c
+++ b/applications/mri/mri2d/reconstruct_data_2d.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: reconstruct_data_2d.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <math.h>
@@ -25,7 +25,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -63,7 +62,7 @@ static void reconstruct(char* filename,int N,int M,int iteration, int weight)
                          FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
   /* precompute lin psi if set */
-  if(my_plan.nfft_flags & PRE_LIN_PSI)
+  if(my_plan.flags & PRE_LIN_PSI)
     nfft_precompute_lin_psi(&my_plan);
 
   /* set the flags for the infft*/
@@ -114,11 +113,11 @@ static void reconstruct(char* filename,int N,int M,int iteration, int weight)
 	fclose(fin);
 
   /* precompute psi */
-  if(my_plan.nfft_flags & PRE_PSI)
+  if(my_plan.flags & PRE_PSI)
     nfft_precompute_psi(&my_plan);
 
   /* precompute full psi */
-  if(my_plan.nfft_flags & PRE_FULL_PSI)
+  if(my_plan.flags & PRE_FULL_PSI)
       nfft_precompute_full_psi(&my_plan);
 
   /* init some guess */
diff --git a/applications/mri/mri2d/reconstruct_data_gridding.c b/applications/mri/mri2d/reconstruct_data_gridding.c
index f003e80..0f74548 100644
--- a/applications/mri/mri2d/reconstruct_data_gridding.c
+++ b/applications/mri/mri2d/reconstruct_data_gridding.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: reconstruct_data_gridding.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -25,8 +25,8 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 /**
  * \defgroup applications_mri2d_construct_data_gridding construct_data_gridding
@@ -72,11 +72,11 @@ static void reconstruct(char* filename, int N, int M, int weight)
   fclose(fweight);
 
   /* precompute psi */
-  if(my_plan.nfft_flags & PRE_PSI)
+  if(my_plan.flags & PRE_PSI)
     nfft_precompute_psi(&my_plan);
 
   /* precompute full psi */
-  if(my_plan.nfft_flags & PRE_FULL_PSI)
+  if(my_plan.flags & PRE_FULL_PSI)
     nfft_precompute_full_psi(&my_plan);
 
 
diff --git a/applications/mri/mri2d/reconstruct_data_inh_2d1d.c b/applications/mri/mri2d/reconstruct_data_inh_2d1d.c
index f8bfadd..c273667 100644
--- a/applications/mri/mri2d/reconstruct_data_inh_2d1d.c
+++ b/applications/mri/mri2d/reconstruct_data_inh_2d1d.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: reconstruct_data_inh_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -27,7 +27,6 @@
 #endif
 
 #include "nfft3.h"
-#include "nfft3util.h"
 #include "infft.h"
 
 /**
@@ -87,7 +86,7 @@ static void reconstruct(char* filename,int N,int M,int iteration , int weight)
   }
   fclose(finh);
 
-  N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+(m)/(2*sigma))*4*sigma);
+  N3=ceil((MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+(m)/(2*sigma))*4*sigma);
 	/* N3 has to be even */
 	if(N3%2!=0)
 	  N3++;
@@ -105,7 +104,7 @@ static void reconstruct(char* filename,int N,int M,int iteration , int weight)
 
 
   /* precompute lin psi if set */
-  if(my_plan.plan.nfft_flags & PRE_LIN_PSI)
+  if(my_plan.plan.flags & PRE_LIN_PSI)
     nfft_precompute_lin_psi(&my_plan.plan);
 
   if (weight)
@@ -165,10 +164,10 @@ static void reconstruct(char* filename,int N,int M,int iteration , int weight)
   fclose(finh);
 
 
-  if(my_plan.plan.nfft_flags & PRE_PSI) {
+  if(my_plan.plan.flags & PRE_PSI) {
     nfft_precompute_psi(&my_plan.plan);
   }
-  if(my_plan.plan.nfft_flags & PRE_FULL_PSI) {
+  if(my_plan.plan.flags & PRE_FULL_PSI) {
       nfft_precompute_full_psi(&my_plan.plan);
   }
 
@@ -200,7 +199,7 @@ static void reconstruct(char* filename,int N,int M,int iteration , int weight)
 
   for (j=0;j<N*N;j++) {
     /* Verschiebung wieder herausrechnen */
-    my_iplan.f_hat_iter[j]*=cexp(-2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+    my_iplan.f_hat_iter[j]*=cexp(-2.0*_Complex_I*KPI*Ts*my_plan.w[j]*W);
 
     fprintf(fout_real,"%le ",creal(my_iplan.f_hat_iter[j]));
     fprintf(fout_imag,"%le ",cimag(my_iplan.f_hat_iter[j]));
diff --git a/applications/mri/mri2d/reconstruct_data_inh_3d.c b/applications/mri/mri2d/reconstruct_data_inh_3d.c
index 130d529..decaad6 100644
--- a/applications/mri/mri2d/reconstruct_data_inh_3d.c
+++ b/applications/mri/mri2d/reconstruct_data_inh_3d.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: reconstruct_data_inh_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -27,7 +27,6 @@
 #endif
 
 #include "nfft3.h"
-#include "nfft3util.h"
 #include "infft.h"
 
 /**
@@ -87,12 +86,12 @@ static void reconstruct(char* filename,int N,int M,int iteration , int weight)
   }
   fclose(finh);
 
-  N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
+  N3=ceil((MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0+m/(2*sigma))*4*sigma);
 	/* N3 has to be even */
 	if(N3%2!=0)
 	  N3++;
 
-  W= NFFT_MAX(fabs(min_inh),fabs(max_inh))/(0.5-((double) m)/N3);
+  W= MAX(fabs(min_inh),fabs(max_inh))/(0.5-((double) m)/N3);
 
   my_N[0]=N;my_n[0]=ceil(N*sigma);
   my_N[1]=N; my_n[1]=ceil(N*sigma);
@@ -159,10 +158,10 @@ static void reconstruct(char* filename,int N,int M,int iteration , int weight)
   fclose(finh);
 
 
-  if(my_plan.plan.nfft_flags & PRE_PSI) {
+  if(my_plan.plan.flags & PRE_PSI) {
     nfft_precompute_psi(&my_plan.plan);
   }
-  if(my_plan.plan.nfft_flags & PRE_FULL_PSI) {
+  if(my_plan.plan.flags & PRE_FULL_PSI) {
       nfft_precompute_full_psi(&my_plan.plan);
   }
 
@@ -194,7 +193,7 @@ static void reconstruct(char* filename,int N,int M,int iteration , int weight)
 
   for (j=0;j<N*N;j++) {
     /* Verschiebung wieder herausrechnen */
-    my_iplan.f_hat_iter[j]*=cexp(-2.0*_Complex_I*PI*Ts*my_plan.w[j]*W);
+    my_iplan.f_hat_iter[j]*=cexp(-2.0*_Complex_I*KPI*Ts*my_plan.w[j]*W);
 
     fprintf(fout_real,"%le ",creal(my_iplan.f_hat_iter[j]));
     fprintf(fout_imag,"%le ",cimag(my_iplan.f_hat_iter[j]));
diff --git a/applications/mri/mri2d/reconstruct_data_inh_nnfft.c b/applications/mri/mri2d/reconstruct_data_inh_nnfft.c
index cf71d04..e16e5ca 100644
--- a/applications/mri/mri2d/reconstruct_data_inh_nnfft.c
+++ b/applications/mri/mri2d/reconstruct_data_inh_nnfft.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: reconstruct_data_inh_nnfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -26,7 +26,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -94,10 +93,10 @@ static void reconstruct(char* filename,int N,int M,int iteration, int weight)
   }
   fclose(finh);
 
-  N3=ceil((NFFT_MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0)*4);
+  N3=ceil((MAX(fabs(min_inh),fabs(max_inh))*(max_time-min_time)/2.0)*4);
 
 
-  W=NFFT_MAX(fabs(min_inh),fabs(max_inh))*2.0;
+  W=MAX(fabs(min_inh),fabs(max_inh))*2.0;
 
   fprintf(stderr,"3:  %i %e %e %e %e %e %e\n",N3,W,min_inh,max_inh,min_time,max_time,Ts);
 
@@ -207,7 +206,7 @@ static void reconstruct(char* filename,int N,int M,int iteration, int weight)
 
   for(k=0;k<my_plan.N_total;k++) {
 
-    my_iplan.f_hat_iter[k]*=cexp(2.0*_Complex_I*PI*Ts*w[k]);
+    my_iplan.f_hat_iter[k]*=cexp(2.0*_Complex_I*KPI*Ts*w[k]);
 
     fprintf(fout_real,"%le ", creal(my_iplan.f_hat_iter[k]));
     fprintf(fout_imag,"%le ", cimag(my_iplan.f_hat_iter[k]));
diff --git a/applications/mri/mri2d/rms.m b/applications/mri/mri2d/rms.m
index 6335d03..0147985 100644
--- a/applications/mri/mri2d/rms.m
+++ b/applications/mri/mri2d/rms.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: rms.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 % computes the root mean square
 function [] = rms ( file )
 % load original data f
diff --git a/matlab/nfft/nfft_finalize.m b/applications/mri/mri2d/verschiebung.m
similarity index 71%
copy from matlab/nfft/nfft_finalize.m
copy to applications/mri/mri2d/verschiebung.m
index c9d06bc..b67d285 100644
--- a/matlab/nfft/nfft_finalize.m
+++ b/applications/mri/mri2d/verschiebung.m
@@ -1,7 +1,4 @@
-%NFFT_FINALIZE Finalize plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
-
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +14,13 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_finalize.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_finalize(p)
+% $Id$
+in=load('output_phantom_nfft_600.dat');
+
+out = [in(:,1) in(:,2)];
+
+tmp=in(:,3)+i*in(:,4);
+tmp=tmp.*exp(2*pi*i* (-21*in(:,2) + in(:,1)));
+out = [out real(tmp) imag(tmp)];
 
-nfftmex('finalize',p)
+save output_phantom_nfft_600.dat -ascii out
diff --git a/applications/mri/mri2d/visualize_data.m b/applications/mri/mri2d/visualize_data.m
index 7cb9e7e..02ec425 100644
--- a/applications/mri/mri2d/visualize_data.m
+++ b/applications/mri/mri2d/visualize_data.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: visualize_data.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [] = visualize_data ( file, N, num_fig, caption )
 
 load output_real.dat
diff --git a/applications/mri/mri3d/Makefile.am b/applications/mri/mri3d/Makefile.am
index a01853f..cd662e7 100644
--- a/applications/mri/mri3d/Makefile.am
+++ b/applications/mri/mri3d/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/applications/mri/mri3d/Makefile.in b/applications/mri/mri3d/Makefile.in
deleted file mode 100644
index 70bce7f..0000000
--- a/applications/mri/mri3d/Makefile.in
+++ /dev/null
@@ -1,612 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = construct_data_2d1d$(EXEEXT) \
-	construct_data_3d$(EXEEXT) reconstruct_data_gridding$(EXEEXT) \
-	reconstruct_data_2d1d$(EXEEXT) reconstruct_data_3d$(EXEEXT)
-subdir = applications/mri/mri3d
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_construct_data_2d1d_OBJECTS = construct_data_2d1d.$(OBJEXT)
-construct_data_2d1d_OBJECTS = $(am_construct_data_2d1d_OBJECTS)
-construct_data_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_construct_data_3d_OBJECTS = construct_data_3d.$(OBJEXT)
-construct_data_3d_OBJECTS = $(am_construct_data_3d_OBJECTS)
-construct_data_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_reconstruct_data_2d1d_OBJECTS = reconstruct_data_2d1d.$(OBJEXT)
-reconstruct_data_2d1d_OBJECTS = $(am_reconstruct_data_2d1d_OBJECTS)
-reconstruct_data_2d1d_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_reconstruct_data_3d_OBJECTS = reconstruct_data_3d.$(OBJEXT)
-reconstruct_data_3d_OBJECTS = $(am_reconstruct_data_3d_OBJECTS)
-reconstruct_data_3d_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_reconstruct_data_gridding_OBJECTS =  \
-	reconstruct_data_gridding.$(OBJEXT)
-reconstruct_data_gridding_OBJECTS =  \
-	$(am_reconstruct_data_gridding_OBJECTS)
-reconstruct_data_gridding_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(construct_data_2d1d_SOURCES) $(construct_data_3d_SOURCES) \
-	$(reconstruct_data_2d1d_SOURCES) \
-	$(reconstruct_data_3d_SOURCES) \
-	$(reconstruct_data_gridding_SOURCES)
-DIST_SOURCES = $(construct_data_2d1d_SOURCES) \
-	$(construct_data_3d_SOURCES) $(reconstruct_data_2d1d_SOURCES) \
-	$(reconstruct_data_3d_SOURCES) \
-	$(reconstruct_data_gridding_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-construct_data_2d1d_SOURCES = construct_data_2d1d.c doxygen.h
-construct_data_2d1d_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-construct_data_3d_SOURCES = construct_data_3d.c
-construct_data_3d_LDADD = $(top_builddir)/libnfft3.la
-reconstruct_data_gridding_SOURCES = reconstruct_data_gridding.c
-reconstruct_data_gridding_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-reconstruct_data_2d1d_SOURCES = reconstruct_data_2d1d.c
-reconstruct_data_2d1d_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-reconstruct_data_3d_SOURCES = reconstruct_data_3d.c
-reconstruct_data_3d_LDADD = $(top_builddir)/libnfft3.la
-EXTRA_DIST = mri.m \
-			construct_knots_linogram.m \
-			construct_knots_radial_3d.m \
-			construct_knots_radial.m \
-			construct_knots_rose.m \
-			construct_knots_spiral.m \
-			construct_phantom.m \
-			precompute_weights_2d.m \
-			rms.m \
-			visualize_data.m \
-			README
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/mri/mri3d/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/mri/mri3d/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-construct_data_2d1d$(EXEEXT): $(construct_data_2d1d_OBJECTS) $(construct_data_2d1d_DEPENDENCIES) $(EXTRA_construct_data_2d1d_DEPENDENCIES) 
-	@rm -f construct_data_2d1d$(EXEEXT)
-	$(LINK) $(construct_data_2d1d_OBJECTS) $(construct_data_2d1d_LDADD) $(LIBS)
-construct_data_3d$(EXEEXT): $(construct_data_3d_OBJECTS) $(construct_data_3d_DEPENDENCIES) $(EXTRA_construct_data_3d_DEPENDENCIES) 
-	@rm -f construct_data_3d$(EXEEXT)
-	$(LINK) $(construct_data_3d_OBJECTS) $(construct_data_3d_LDADD) $(LIBS)
-reconstruct_data_2d1d$(EXEEXT): $(reconstruct_data_2d1d_OBJECTS) $(reconstruct_data_2d1d_DEPENDENCIES) $(EXTRA_reconstruct_data_2d1d_DEPENDENCIES) 
-	@rm -f reconstruct_data_2d1d$(EXEEXT)
-	$(LINK) $(reconstruct_data_2d1d_OBJECTS) $(reconstruct_data_2d1d_LDADD) $(LIBS)
-reconstruct_data_3d$(EXEEXT): $(reconstruct_data_3d_OBJECTS) $(reconstruct_data_3d_DEPENDENCIES) $(EXTRA_reconstruct_data_3d_DEPENDENCIES) 
-	@rm -f reconstruct_data_3d$(EXEEXT)
-	$(LINK) $(reconstruct_data_3d_OBJECTS) $(reconstruct_data_3d_LDADD) $(LIBS)
-reconstruct_data_gridding$(EXEEXT): $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_DEPENDENCIES) $(EXTRA_reconstruct_data_gridding_DEPENDENCIES) 
-	@rm -f reconstruct_data_gridding$(EXEEXT)
-	$(LINK) $(reconstruct_data_gridding_OBJECTS) $(reconstruct_data_gridding_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_2d1d.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/construct_data_3d.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_2d1d.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_3d.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reconstruct_data_gridding.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/mri/mri3d/construct_data_2d1d.c b/applications/mri/mri3d/construct_data_2d1d.c
index 588605e..95562ff 100644
--- a/applications/mri/mri3d/construct_data_2d1d.c
+++ b/applications/mri/mri3d/construct_data_2d1d.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: construct_data_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -25,8 +25,8 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 /**
  * \defgroup applications_mri3d_construct_data_1d2d construct_data_1d2d
@@ -63,7 +63,7 @@ static void construct(char * file, int N, int M, int Z, fftw_complex *mem)
     for(j=0;j<N*N;j++)
       my_plan.f_hat[j] = mem[(z*N*N+N*N*Z/2+j)%(N*N*Z)];
 
-    if(my_plan.nfft_flags & PRE_PSI)
+    if(my_plan.flags & PRE_PSI)
       nfft_precompute_psi(&my_plan);
 
     nfft_trafo(&my_plan);
diff --git a/applications/mri/mri3d/construct_data_3d.c b/applications/mri/mri3d/construct_data_3d.c
index a6d4a81..69d4624 100644
--- a/applications/mri/mri3d/construct_data_3d.c
+++ b/applications/mri/mri3d/construct_data_3d.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: construct_data_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -25,8 +25,8 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 /**
  * \defgroup applications_mri3d_construct_data_3d construct_data_3d
@@ -76,7 +76,7 @@ static void construct(char * file, int N, int M, int Z)
     }
   }
 
-    if(my_plan.nfft_flags & PRE_PSI)
+    if(my_plan.flags & PRE_PSI)
       nfft_precompute_psi(&my_plan);
 
     nfft_trafo(&my_plan);
diff --git a/applications/mri/mri3d/construct_knots_linogram.m b/applications/mri/mri3d/construct_knots_linogram.m
index f396714..ce90ba9 100644
--- a/applications/mri/mri3d/construct_knots_linogram.m
+++ b/applications/mri/mri3d/construct_knots_linogram.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_knots_linogram.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [M] = construct_knots_linogram ( N,Z )
 
 l=((-N/2):(N/2-1));
diff --git a/applications/mri/mri3d/construct_knots_radial.m b/applications/mri/mri3d/construct_knots_radial.m
index 6b42445..4824edc 100644
--- a/applications/mri/mri3d/construct_knots_radial.m
+++ b/applications/mri/mri3d/construct_knots_radial.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_knots_radial.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [M] = construct_knots_radial( N,Z )
 
 A=N*2;
diff --git a/applications/mri/mri3d/construct_knots_radial_3d.m b/applications/mri/mri3d/construct_knots_radial_3d.m
index 58e4419..4618f81 100644
--- a/applications/mri/mri3d/construct_knots_radial_3d.m
+++ b/applications/mri/mri3d/construct_knots_radial_3d.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_knots_radial_3d.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [M] = construct_knots_radial_3d( N,P )
 xk=zeros(N*P^2,4);
 counter=1;
diff --git a/applications/mri/mri3d/construct_knots_rose.m b/applications/mri/mri3d/construct_knots_rose.m
index aa16eb7..e69acc6 100644
--- a/applications/mri/mri3d/construct_knots_rose.m
+++ b/applications/mri/mri3d/construct_knots_rose.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_knots_rose.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [M] = construct_knots_rose( N,Z )
 
 N=ceil(1.5*N);
diff --git a/applications/mri/mri3d/construct_knots_spiral.m b/applications/mri/mri3d/construct_knots_spiral.m
index 30983af..13ea027 100644
--- a/applications/mri/mri3d/construct_knots_spiral.m
+++ b/applications/mri/mri3d/construct_knots_spiral.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_knots_spiral.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [M] = construct_knots_spiral ( N,Z )
 B=1;
 M=N^2*Z;
diff --git a/applications/mri/mri3d/construct_phantom.m b/applications/mri/mri3d/construct_phantom.m
index 98804ff..45d7d88 100644
--- a/applications/mri/mri3d/construct_phantom.m
+++ b/applications/mri/mri3d/construct_phantom.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: construct_phantom.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [] = construct_phantom( N, Z )
 % constructs a three dimensional Shepp Logan phantom
 
diff --git a/applications/mri/mri3d/doxygen.h b/applications/mri/mri3d/doxygen.h
index 3d9ccae..7fe53f2 100644
--- a/applications/mri/mri3d/doxygen.h
+++ b/applications/mri/mri3d/doxygen.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/applications/mri/mri3d/mri.m b/applications/mri/mri3d/mri.m
index 2b91510..2443c99 100644
--- a/applications/mri/mri3d/mri.m
+++ b/applications/mri/mri3d/mri.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: mri.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 % This script file is an example of the usage
 
 N=48;   % points per row / column
diff --git a/applications/mri/mri3d/precompute_weights_2d.m b/applications/mri/mri3d/precompute_weights_2d.m
index 2b98e07..6858450 100644
--- a/applications/mri/mri3d/precompute_weights_2d.m
+++ b/applications/mri/mri3d/precompute_weights_2d.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: precompute_weights_2d.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [] = precompute_weights_2d ( file,M,Z )
 
 input=load(file);
diff --git a/applications/mri/mri3d/reconstruct_data_2d1d.c b/applications/mri/mri3d/reconstruct_data_2d1d.c
index f118c43..2b77f8f 100644
--- a/applications/mri/mri3d/reconstruct_data_2d1d.c
+++ b/applications/mri/mri3d/reconstruct_data_2d1d.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: reconstruct_data_2d1d.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -25,8 +25,8 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 /**
  * \defgroup applications_mri3d_reconstruct_data_1d2d reconstruct_data_1d2d
@@ -59,7 +59,7 @@ static void reconstruct(char* filename,int N,int M,int Z,int iteration, int weig
                         FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
   /* precompute lin psi if set */
-  if(my_plan.nfft_flags & PRE_LIN_PSI)
+  if(my_plan.flags & PRE_LIN_PSI)
     nfft_precompute_lin_psi(&my_plan);
 
   /* set the flags for the infft*/
@@ -111,11 +111,11 @@ static void reconstruct(char* filename,int N,int M,int Z,int iteration, int weig
     }
 
     /* precompute psi if set just one time because the knots equal each plane */
-    if(z==0 && my_plan.nfft_flags & PRE_PSI)
+    if(z==0 && my_plan.flags & PRE_PSI)
       nfft_precompute_psi(&my_plan);
 
     /* precompute full psi if set just one time because the knots equal each plane */
-    if(z==0 && my_plan.nfft_flags & PRE_FULL_PSI)
+    if(z==0 && my_plan.flags & PRE_FULL_PSI)
       nfft_precompute_full_psi(&my_plan);
 
     /* init some guess */
diff --git a/applications/mri/mri3d/reconstruct_data_3d.c b/applications/mri/mri3d/reconstruct_data_3d.c
index 1cb8799..0904498 100644
--- a/applications/mri/mri3d/reconstruct_data_3d.c
+++ b/applications/mri/mri3d/reconstruct_data_3d.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: reconstruct_data_3d.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <math.h>
@@ -25,8 +25,8 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 /**
  * \defgroup applications_mri3d_reconstruct_data_3d reconstruct_data_3d
@@ -63,7 +63,7 @@ static void reconstruct(char* filename,int N,int M,int Z,int iteration, int weig
                       FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
   /* precompute lin psi */
-  if(my_plan.nfft_flags & PRE_LIN_PSI)
+  if(my_plan.flags & PRE_LIN_PSI)
     nfft_precompute_lin_psi(&my_plan);
 
   if (weight)
@@ -118,11 +118,11 @@ static void reconstruct(char* filename,int N,int M,int Z,int iteration, int weig
   }
 
   /* precompute psi */
-  if(my_plan.nfft_flags & PRE_PSI)
+  if(my_plan.flags & PRE_PSI)
     nfft_precompute_psi(&my_plan);
 
   /* precompute full psi */
-  if(my_plan.nfft_flags & PRE_FULL_PSI)
+  if(my_plan.flags & PRE_FULL_PSI)
     nfft_precompute_full_psi(&my_plan);
 
   /* init some guess */
diff --git a/applications/mri/mri3d/reconstruct_data_gridding.c b/applications/mri/mri3d/reconstruct_data_gridding.c
index 69136e8..d6c5e8a 100644
--- a/applications/mri/mri3d/reconstruct_data_gridding.c
+++ b/applications/mri/mri3d/reconstruct_data_gridding.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: reconstruct_data_gridding.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -25,8 +25,8 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 /**
  * \defgroup applications_mri3d_reconstruct_data_gridding reconstruct_data_gridding
@@ -57,7 +57,7 @@ static void reconstruct(char* filename,int N,int M,int Z, int weight ,fftw_compl
                         FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
   /* precompute lin psi if set */
-  if(my_plan.nfft_flags & PRE_LIN_PSI)
+  if(my_plan.flags & PRE_LIN_PSI)
     nfft_precompute_lin_psi(&my_plan);
 
   fin=fopen(filename,"r");
@@ -76,11 +76,11 @@ static void reconstruct(char* filename,int N,int M,int Z, int weight ,fftw_compl
     fclose(fweight);
 
     /* precompute psi if set just one time because the knots equal each slice */
-    if(z==0 && my_plan.nfft_flags & PRE_PSI)
+    if(z==0 && my_plan.flags & PRE_PSI)
       nfft_precompute_psi(&my_plan);
 
     /* precompute full psi if set just one time because the knots equal each slice */
-    if(z==0 && my_plan.nfft_flags & PRE_FULL_PSI)
+    if(z==0 && my_plan.flags & PRE_FULL_PSI)
       nfft_precompute_full_psi(&my_plan);
 
     /* compute the adjoint nfft */
diff --git a/applications/mri/mri3d/rms.m b/applications/mri/mri3d/rms.m
index 6335d03..0147985 100644
--- a/applications/mri/mri3d/rms.m
+++ b/applications/mri/mri3d/rms.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: rms.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 % computes the root mean square
 function [] = rms ( file )
 % load original data f
diff --git a/applications/mri/mri3d/visualize_data.m b/applications/mri/mri3d/visualize_data.m
index 4bd458e..6d0c623 100644
--- a/applications/mri/mri3d/visualize_data.m
+++ b/applications/mri/mri3d/visualize_data.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: visualize_data.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 % Visualizes the three dimensional phantom. Makes a pic of
 % every plane and one plot of the N/2 row of the 10th plane.
 function [] = visualize_data ( file, N, Z, num_fig, caption )
diff --git a/applications/polarFFT/Makefile.am b/applications/polarFFT/Makefile.am
index 3fac460..f15c0e1 100644
--- a/applications/polarFFT/Makefile.am
+++ b/applications/polarFFT/Makefile.am
@@ -1,16 +1,16 @@
-# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
 noinst_PROGRAMS = polar_fft_test mpolar_fft_test linogram_fft_test
 
 polar_fft_test_SOURCES = polar_fft_test.c doxygen.h
-polar_fft_test_LDADD = $(top_builddir)/libnfft3.la
+polar_fft_test_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la -lm
 
 mpolar_fft_test_SOURCES = mpolar_fft_test.c
-mpolar_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+mpolar_fft_test_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 linogram_fft_test_SOURCES = linogram_fft_test.c
-linogram_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+linogram_fft_test_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 EXTRA_DIST = phantom.m fft_test.m README
diff --git a/applications/polarFFT/Makefile.in b/applications/polarFFT/Makefile.in
deleted file mode 100644
index 749f26a..0000000
--- a/applications/polarFFT/Makefile.in
+++ /dev/null
@@ -1,576 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3639 2011-10-05 20:20:30Z keiner $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = polar_fft_test$(EXEEXT) mpolar_fft_test$(EXEEXT) \
-	linogram_fft_test$(EXEEXT)
-subdir = applications/polarFFT
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_linogram_fft_test_OBJECTS = linogram_fft_test.$(OBJEXT)
-linogram_fft_test_OBJECTS = $(am_linogram_fft_test_OBJECTS)
-linogram_fft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_mpolar_fft_test_OBJECTS = mpolar_fft_test.$(OBJEXT)
-mpolar_fft_test_OBJECTS = $(am_mpolar_fft_test_OBJECTS)
-mpolar_fft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_polar_fft_test_OBJECTS = polar_fft_test.$(OBJEXT)
-polar_fft_test_OBJECTS = $(am_polar_fft_test_OBJECTS)
-polar_fft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(linogram_fft_test_SOURCES) $(mpolar_fft_test_SOURCES) \
-	$(polar_fft_test_SOURCES)
-DIST_SOURCES = $(linogram_fft_test_SOURCES) $(mpolar_fft_test_SOURCES) \
-	$(polar_fft_test_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-polar_fft_test_SOURCES = polar_fft_test.c doxygen.h
-polar_fft_test_LDADD = $(top_builddir)/libnfft3.la
-mpolar_fft_test_SOURCES = mpolar_fft_test.c
-mpolar_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-linogram_fft_test_SOURCES = linogram_fft_test.c
-linogram_fft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = phantom.m fft_test.m README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/polarFFT/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/polarFFT/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-linogram_fft_test$(EXEEXT): $(linogram_fft_test_OBJECTS) $(linogram_fft_test_DEPENDENCIES) $(EXTRA_linogram_fft_test_DEPENDENCIES) 
-	@rm -f linogram_fft_test$(EXEEXT)
-	$(LINK) $(linogram_fft_test_OBJECTS) $(linogram_fft_test_LDADD) $(LIBS)
-mpolar_fft_test$(EXEEXT): $(mpolar_fft_test_OBJECTS) $(mpolar_fft_test_DEPENDENCIES) $(EXTRA_mpolar_fft_test_DEPENDENCIES) 
-	@rm -f mpolar_fft_test$(EXEEXT)
-	$(LINK) $(mpolar_fft_test_OBJECTS) $(mpolar_fft_test_LDADD) $(LIBS)
-polar_fft_test$(EXEEXT): $(polar_fft_test_OBJECTS) $(polar_fft_test_DEPENDENCIES) $(EXTRA_polar_fft_test_DEPENDENCIES) 
-	@rm -f polar_fft_test$(EXEEXT)
-	$(LINK) $(polar_fft_test_OBJECTS) $(polar_fft_test_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/linogram_fft_test.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mpolar_fft_test.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/polar_fft_test.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/polarFFT/doxygen.h b/applications/polarFFT/doxygen.h
index 7868ac3..ff6251c 100644
--- a/applications/polarFFT/doxygen.h
+++ b/applications/polarFFT/doxygen.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/applications/polarFFT/fft_test.m b/applications/polarFFT/fft_test.m
index 6be6257..3257ea1 100644
--- a/applications/polarFFT/fft_test.m
+++ b/applications/polarFFT/fft_test.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: fft_test.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 N=64;
 T=3*N; %T=5*N/2;
 R=3*N/2;
diff --git a/applications/polarFFT/linogram_fft_test.c b/applications/polarFFT/linogram_fft_test.c
index 73529fa..309189e 100644
--- a/applications/polarFFT/linogram_fft_test.c
+++ b/applications/polarFFT/linogram_fft_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: linogram_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /**
  * \file polarFFT/linogram_fft_test.c
@@ -34,7 +34,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -44,349 +43,365 @@
  * \{
  */
 
-double GLOBAL_elapsed_time;
+R GLOBAL_elapsed_time;
 
 /** Generates the points x with weights w
  *  for the linogram grid with T slopes and R offsets.
  */
-static int linogram_grid(int T, int R, double *x, double *w)
+static int linogram_grid(int T, int rr, R *x, R *w)
 {
   int t, r;
-  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+  R W = (R) T * (((R) rr / K(2.0)) * ((R) rr / K(2.0)) + K(1.0) / K(4.0));
 
-  for(t=-T/2; t<T/2; t++)
+  for (t = -T / 2; t < T / 2; t++)
   {
-    for(r=-R/2; r<R/2; r++)
+    for (r = -rr / 2; r < rr / 2; r++)
     {
-      if(t<0)
+      if (t < 0)
       {
-        x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R;
-        x[2*((t+T/2)*R+(r+R/2))+1] = (double)4*(t+T/4)/T*r/R;
+        x[2 * ((t + T / 2) * rr + (r + rr / 2)) + 0] = (R) (r) / (R)(rr);
+        x[2 * ((t + T / 2) * rr + (r + rr / 2)) + 1] = K(4.0) * ((R)(t) + (R)(T) / K(4.0)) / (R)(T)
+            * (R)(r) / (R)(rr);
       }
       else
       {
-        x[2*((t+T/2)*R+(r+R/2))+0] = -(double)4*(t-T/4)/T*r/R;
-        x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R;
+        x[2 * ((t + T / 2) * rr + (r + rr / 2)) + 0] = -K(4.0) * ((R)(t) - (R)(T) / K(4.0)) / (R)(T)
+            * (R)(r) / (R)(rr);
+        x[2 * ((t + T / 2) * rr + (r + rr / 2)) + 1] = (R) r / (R)(rr);
       }
-      if (r==0)
-        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      if (r == 0)
+        w[(t + T / 2) * rr + (r + rr / 2)] = K(1.0) / K(4.0) / W;
       else
-        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+        w[(t + T / 2) * rr + (r + rr / 2)] = FABS((R) r) / W;
     }
   }
 
-  return T*R;                           /** return the number of knots        */
+  return T * rr; /** return the number of knots        */
 }
 
 /** discrete pseudo-polar FFT */
-static int linogram_dft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+static int linogram_dft(C *f_hat, int NN, C *f, int T, int rr, int m)
 {
   ticks t0, t1;
-  int j,k;                              /**< index for nodes and freqencies   */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  int j, k; /**< index for nodes and freqencies   */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
 
-  double *x, *w;                        /**< knots and associated weights     */
+  R *x, *w; /**< knots and associated weights     */
 
-  int N[2],n[2];
-  int M=T*R;                            /**< number of knots                  */
+  int N[2], n[2];
+  int M = T * rr; /**< number of knots                  */
 
-  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
-  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+  N[0] = NN;
+  n[0] = 2 * N[0]; /**< oversampling factor sigma=2      */
+  N[1] = NN;
+  n[1] = 2 * N[1]; /**< oversampling factor sigma=2      */
 
-  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(2 * T * rr) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(T*R*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(T * rr) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
-                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, m,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init nodes from linogram grid*/
-  linogram_grid(T,R,x,w);
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  linogram_grid(T, rr, x, w);
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
   }
 
-
   /** init Fourier coefficients from given image */
-  for(k=0;k<my_nfft_plan.N_total;k++)
+  for (k = 0; k < my_nfft_plan.N_total; k++)
     my_nfft_plan.f_hat[k] = f_hat[k];
 
   /** NFFT-2D */
   t0 = getticks();
-  nfft_trafo_direct(&my_nfft_plan);
+  NFFT(trafo_direct)(&my_nfft_plan);
   t1 = getticks();
-  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+  GLOBAL_elapsed_time = NFFT(elapsed_seconds)(t1, t0);
 
   /** copy result */
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  for (j = 0; j < my_nfft_plan.M_total; j++)
     f[j] = my_nfft_plan.f[j];
 
   /** finalise the plans and free the variables */
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
 
   return EXIT_SUCCESS;
 }
 
 /** NFFT-based pseudo-polar FFT */
-static int linogram_fft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+static int linogram_fft(C *f_hat, int NN, C *f, int T, int rr, int m)
 {
   ticks t0, t1;
-  int j,k;                              /**< index for nodes and freqencies   */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  int j, k; /**< index for nodes and freqencies   */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
 
-  double *x, *w;                        /**< knots and associated weights     */
+  R *x, *w; /**< knots and associated weights     */
 
-  int N[2],n[2];
-  int M=T*R;                            /**< number of knots                  */
+  int N[2], n[2];
+  int M = T * rr; /**< number of knots                  */
 
-  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
-  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+  N[0] = NN;
+  n[0] = 2 * N[0]; /**< oversampling factor sigma=2      */
+  N[1] = NN;
+  n[1] = 2 * N[1]; /**< oversampling factor sigma=2      */
 
-  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(2 * T * rr) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(T*R*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(T * rr) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
-                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, m,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init nodes from linogram grid*/
-  linogram_grid(T,R,x,w);
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  linogram_grid(T, rr, x, w);
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
   }
 
   /** precompute psi, the entries of the matrix B */
-  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_LIN_PSI)
+    NFFT(precompute_lin_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_PSI)
-    nfft_precompute_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_PSI)
+    NFFT(precompute_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_FULL_PSI)
+    NFFT(precompute_full_psi)(&my_nfft_plan);
 
   /** init Fourier coefficients from given image */
-  for(k=0;k<my_nfft_plan.N_total;k++)
+  for (k = 0; k < my_nfft_plan.N_total; k++)
     my_nfft_plan.f_hat[k] = f_hat[k];
 
   /** NFFT-2D */
   t0 = getticks();
-  nfft_trafo(&my_nfft_plan);
+  NFFT(trafo)(&my_nfft_plan);
   t1 = getticks();
-  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+  GLOBAL_elapsed_time = NFFT(elapsed_seconds)(t1, t0);
 
   /** copy result */
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  for (j = 0; j < my_nfft_plan.M_total; j++)
     f[j] = my_nfft_plan.f[j];
 
   /** finalise the plans and free the variables */
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
 
   return EXIT_SUCCESS;
 }
 
 /** NFFT-based inverse pseudo-polar FFT */
-static int inverse_linogram_fft(fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int max_i, int m)
+static int inverse_linogram_fft(C *f, int T, int rr, C *f_hat, int NN,
+    int max_i, int m)
 {
   ticks t0, t1;
-  int j,k;                              /**< index for nodes and freqencies   */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
-  solver_plan_complex my_infft_plan;             /**< plan for the inverse nfft        */
+  int j, k; /**< index for nodes and freqencies   */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
+  SOLVER(plan_complex) my_infft_plan; /**< plan for the inverse nfft        */
 
-  double *x, *w;                        /**< knots and associated weights     */
-  int l;                                /**< index for iterations             */
+  R *x, *w; /**< knots and associated weights     */
+  int l; /**< index for iterations             */
 
-  int N[2],n[2];
-  int M=T*R;                            /**< number of knots                  */
+  int N[2], n[2];
+  int M = T * rr; /**< number of knots                  */
 
-  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
-  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+  N[0] = NN;
+  n[0] = 2 * N[0]; /**< oversampling factor sigma=2      */
+  N[1] = NN;
+  n[1] = 2 * N[1]; /**< oversampling factor sigma=2      */
 
-  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(2 * T * rr) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(T*R*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(T * rr) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
-                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, m,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init two dimensional infft plan */
-  solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );
+  SOLVER(init_advanced_complex)(&my_infft_plan,
+      (NFFT(mv_plan_complex)*) (&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT);
 
   /** init nodes, given samples and weights */
-  linogram_grid(T,R,x,w);
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  linogram_grid(T, rr, x, w);
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
-    my_infft_plan.y[j]    = f[j];
-    my_infft_plan.w[j]    = w[j];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
+    my_infft_plan.y[j] = f[j];
+    my_infft_plan.w[j] = w[j];
   }
 
   /** precompute psi, the entries of the matrix B */
-  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_LIN_PSI)
+    NFFT(precompute_lin_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_PSI)
-    nfft_precompute_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_PSI)
+    NFFT(precompute_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_FULL_PSI)
+    NFFT(precompute_full_psi)(&my_nfft_plan);
 
   /** initialise damping factors */
-  if(my_infft_plan.flags & PRECOMPUTE_DAMP)
-    for(j=0;j<my_nfft_plan.N[0];j++)
-      for(k=0;k<my_nfft_plan.N[1];k++)
-  {
-    my_infft_plan.w_hat[j*my_nfft_plan.N[1]+k]=
-        (sqrt(pow(j-my_nfft_plan.N[0]/2,2)+pow(k-my_nfft_plan.N[1]/2,2))>(my_nfft_plan.N[0]/2)?0:1);
-  }
+  if (my_infft_plan.flags & PRECOMPUTE_DAMP)
+    for (j = 0; j < my_nfft_plan.N[0]; j++)
+      for (k = 0; k < my_nfft_plan.N[1]; k++)
+      {
+        my_infft_plan.w_hat[j * my_nfft_plan.N[1] + k] = (
+            SQRT(
+                POW((R)(j - my_nfft_plan.N[0] / 2), K(2.0))
+                    + POW((R)(k - my_nfft_plan.N[1] / 2), K(2.0)))
+                > (R)(my_nfft_plan.N[0] / 2) ? 0 : 1);
+      }
 
   /** initialise some guess f_hat_0 */
-  for(k=0;k<my_nfft_plan.N_total;k++)
-    my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+  for (k = 0; k < my_nfft_plan.N_total; k++)
+    my_infft_plan.f_hat_iter[k] = K(0.0) + II * K(0.0);
 
   t0 = getticks();
   /** solve the system */
-  solver_before_loop_complex(&my_infft_plan);
+  SOLVER(before_loop_complex)(&my_infft_plan);
 
-  if (max_i<1)
+  if (max_i < 1)
   {
-    l=1;
-    for(k=0;k<my_nfft_plan.N_total;k++)
+    l = 1;
+    for (k = 0; k < my_nfft_plan.N_total; k++)
       my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
   }
   else
   {
-    for(l=1;l<=max_i;l++)
+    for (l = 1; l <= max_i; l++)
     {
-      solver_loop_one_step_complex(&my_infft_plan);
+      SOLVER(loop_one_step_complex)(&my_infft_plan);
     }
   }
 
   t1 = getticks();
-  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+  GLOBAL_elapsed_time = NFFT(elapsed_seconds)(t1, t0);
 
   /** copy result */
-  for(k=0;k<my_nfft_plan.N_total;k++)
+  for (k = 0; k < my_nfft_plan.N_total; k++)
     f_hat[k] = my_infft_plan.f_hat_iter[k];
 
   /** finalise the plans and free the variables */
-  solver_finalize_complex(&my_infft_plan);
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  SOLVER(finalize_complex)(&my_infft_plan);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
 
   return EXIT_SUCCESS;
 }
 
 /** Comparison of the FFTW, linogram FFT, and inverse linogram FFT */
-int comparison_fft(FILE *fp, int N, int T, int R)
+static int comparison_fft(FILE *fp, int N, int T, int rr)
 {
   ticks t0, t1;
-  fftw_plan my_fftw_plan;
-  fftw_complex *f_hat,*f;
-  int m,k;
-  double t_fft, t_dft_linogram;
+  FFTW(plan) my_fftw_plan;
+  C *f_hat, *f;
+  int m, k;
+  R t_fft, t_dft_linogram;
 
-  f_hat = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
-  f     = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*(T*R/4)*5);
+  f_hat = (C *) NFFT(malloc)(sizeof(C) * (size_t)(N * N));
+  f = (C *) NFFT(malloc)(sizeof(C) * (size_t)((T * rr / 4) * 5));
 
-  my_fftw_plan = fftw_plan_dft_2d(N,N,f_hat,f,FFTW_BACKWARD,FFTW_MEASURE);
+  my_fftw_plan = FFTW(plan_dft_2d)(N, N, f_hat, f, FFTW_BACKWARD, FFTW_MEASURE);
 
-  for(k=0; k<N*N; k++)
-    f_hat[k] = (((double)rand())/RAND_MAX) + _Complex_I* (((double)rand())/RAND_MAX);
+  for (k = 0; k < N * N; k++)
+    f_hat[k] = NFFT(drand48)() + II * NFFT(drand48)();
 
   t0 = getticks();
-  for(m=0;m<65536/N;m++)
-    {
-      fftw_execute(my_fftw_plan);
-      /* touch */
-      f_hat[2]=2*f_hat[0];
-    }
+  for (m = 0; m < 65536 / N; m++)
+  {
+    FFTW(execute)(my_fftw_plan);
+    /* touch */
+    f_hat[2] = K(2.0) * f_hat[0];
+  }
   t1 = getticks();
-  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
-  t_fft=N*GLOBAL_elapsed_time/65536;
+  GLOBAL_elapsed_time = NFFT(elapsed_seconds)(t1, t0);
+  t_fft = (R)(N) * GLOBAL_elapsed_time / K(65536.0);
 
-  if(N<256)
-    {
-      linogram_dft(f_hat,N,f,T,R,m);
-      t_dft_linogram=GLOBAL_elapsed_time;
-    }
+  if (N < 256)
+  {
+    linogram_dft(f_hat, N, f, T, rr, m);
+    t_dft_linogram = GLOBAL_elapsed_time;
+  }
 
-  for (m=3; m<=9; m+=3)
-    {
-      if((m==3)&&(N<256))
-        fprintf(fp,"%d\t&\t&\t%1.1e&\t%1.1e&\t%d\t",N,t_fft,t_dft_linogram,m);
-      else
-        if(m==3)
-	  fprintf(fp,"%d\t&\t&\t%1.1e&\t       &\t%d\t",N,t_fft,m);
-	else
-	  fprintf(fp,"  \t&\t&\t       &\t       &\t%d\t",m);
-
-      printf("N=%d\tt_fft=%1.1e\tt_dft_linogram=%1.1e\tm=%d\t",N,t_fft,t_dft_linogram,m);
-
-      linogram_fft(f_hat,N,f,T,R,m);
-      fprintf(fp,"%1.1e&\t",GLOBAL_elapsed_time);
-      printf("t_linogram=%1.1e\t",GLOBAL_elapsed_time);
-      inverse_linogram_fft(f,T,R,f_hat,N,m+3,m);
-      if(m==9)
-	fprintf(fp,"%1.1e\\\\\\hline\n",GLOBAL_elapsed_time);
-      else
-	fprintf(fp,"%1.1e\\\\\n",GLOBAL_elapsed_time);
-      printf("t_ilinogram=%1.1e\n",GLOBAL_elapsed_time);
-    }
+  for (m = 3; m <= 9; m += 3)
+  {
+    if ((m == 3) && (N < 256))
+      fprintf(fp, "%d\t&\t&\t%1.1" __FES__ "&\t%1.1" __FES__ "&\t%d\t", N, t_fft, t_dft_linogram,
+          m);
+    else if (m == 3)
+      fprintf(fp, "%d\t&\t&\t%1.1" __FES__ "&\t       &\t%d\t", N, t_fft, m);
+    else
+      fprintf(fp, "  \t&\t&\t       &\t       &\t%d\t", m);
+
+    printf("N=%d\tt_fft=%1.1" __FES__ "\tt_dft_linogram=%1.1" __FES__ "\tm=%d\t", N, t_fft,
+        t_dft_linogram, m);
+
+    linogram_fft(f_hat, N, f, T, rr, m);
+    fprintf(fp, "%1.1" __FES__ "&\t", GLOBAL_elapsed_time);
+    printf("t_linogram=%1.1" __FES__ "\t", GLOBAL_elapsed_time);
+    inverse_linogram_fft(f, T, rr, f_hat, N, m + 3, m);
+    if (m == 9)
+      fprintf(fp, "%1.1" __FES__ "\\\\\\hline\n", GLOBAL_elapsed_time);
+    else
+      fprintf(fp, "%1.1" __FES__ "\\\\\n", GLOBAL_elapsed_time);
+    printf("t_ilinogram=%1.1" __FES__ "\n", GLOBAL_elapsed_time);
+  }
 
   fflush(fp);
 
-  nfft_free(f);
-  nfft_free(f_hat);
+  NFFT(free)(f);
+  NFFT(free)(f_hat);
 
   return EXIT_SUCCESS;
 }
 
 /** test program for various parameters */
-int main(int argc,char **argv)
+int main(int argc, char **argv)
 {
-  int N;                                /**< linogram FFT size NxN              */
-  int T, R;                             /**< number of directions/offsets     */
-  int M;                                /**< number of knots of linogram grid   */
-  double *x, *w;                        /**< knots and associated weights     */
-  fftw_complex *f_hat, *f, *f_direct, *f_tilde;
+  int N; /**< linogram FFT size NxN              */
+  int T, rr; /**< number of directions/offsets     */
+  int M; /**< number of knots of linogram grid   */
+  R *x, *w; /**< knots and associated weights     */
+  C *f_hat, *f, *f_direct, *f_tilde;
   int k;
-  int max_i;                            /**< number of iterations             */
+  int max_i; /**< number of iterations             */
   int m;
-  double temp1, temp2, E_max=0.0;
+  R temp1, temp2, E_max = K(0.0);
   FILE *fp1, *fp2;
   char filename[30];
   int logN;
 
-  if( argc!=4 )
+  if (argc != 4)
   {
     printf("linogram_fft_test N T R \n");
     printf("\n");
@@ -396,94 +411,96 @@ int main(int argc,char **argv)
 
     /** Hence, comparison of the FFTW, linogram FFT, and inverse linogram FFT */
     printf("\nHence, comparison FFTW, linogram FFT and inverse linogram FFT\n");
-    fp1=fopen("linogram_comparison_fft.dat","w");
-    if (fp1==NULL)
-	return(-1);
-    for (logN=4; logN<=8; logN++)
-	comparison_fft(fp1,(1U<< logN), 3*(1U<< logN), 3*(1U<< (logN-1)));
+    fp1 = fopen("linogram_comparison_fft.dat", "w");
+    if (fp1 == NULL)
+      return (-1);
+    for (logN = 4; logN <= 8; logN++)
+      comparison_fft(fp1, (int)(1U << logN), 3 * (int)(1U << logN),
+          3 * (int)(1U << (logN - 1)));
     fclose(fp1);
 
-    exit(-1);
+    return EXIT_FAILURE;
   }
 
   N = atoi(argv[1]);
   T = atoi(argv[2]);
-  R = atoi(argv[3]);
-  printf("N=%d, linogram grid with T=%d, R=%d => ",N,T,R);
+  rr = atoi(argv[3]);
+  printf("N=%d, linogram grid with T=%d, R=%d => ", N, T, rr);
 
-  x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
-  w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
+  x = (R *) NFFT(malloc)((size_t)(5 * T * rr / 2) * (sizeof(R)));
+  w = (R *) NFFT(malloc)((size_t)(5 * T * rr / 4) * (sizeof(R)));
 
-  f_hat    = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
-  f        = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*5*T*R/4);  /* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */
-  f_direct = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*5*T*R/4);
-  f_tilde  = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+  f_hat = (C *) NFFT(malloc)(sizeof(C) * (size_t)(N * N));
+  f = (C *) NFFT(malloc)(sizeof(C) * (size_t)(5 * T * rr / 4)); /* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */
+  f_direct = (C *) NFFT(malloc)(sizeof(C) * (size_t)(5 * T * rr / 4));
+  f_tilde = (C *) NFFT(malloc)(sizeof(C) * (size_t)(N * N));
 
   /** generate knots of linogram grid */
-  M=linogram_grid(T,R,x,w); printf("M=%d.\n",M);
+  M = linogram_grid(T, rr, x, w);
+  printf("M=%d.\n", M);
 
   /** load data */
-  fp1=fopen("input_data_r.dat","r");
-  fp2=fopen("input_data_i.dat","r");
-  if ((fp1==NULL) || (fp2==NULL))
-    return(-1);
-  for(k=0;k<N*N;k++)
+  fp1 = fopen("input_data_r.dat", "r");
+  fp2 = fopen("input_data_i.dat", "r");
+  if ((fp1 == NULL) || (fp2 == NULL))
+    return EXIT_FAILURE;
+  for (k = 0; k < N * N; k++)
   {
-    fscanf(fp1,"%le ",&temp1);
-    fscanf(fp2,"%le ",&temp2);
-    f_hat[k]=temp1+_Complex_I*temp2;
+    fscanf(fp1, __FR__ " ", &temp1);
+    fscanf(fp2, __FR__ " ", &temp2);
+    f_hat[k] = temp1 + II * temp2;
   }
   fclose(fp1);
   fclose(fp2);
 
   /** direct linogram FFT */
-      linogram_dft(f_hat,N,f_direct,T,R,1);
+  linogram_dft(f_hat, N, f_direct, T, rr, 1);
   //  linogram_fft(f_hat,N,f_direct,T,R,12);
 
   /** Test of the linogram FFT with different m */
   printf("\nTest of the linogram FFT: \n");
-  fp1=fopen("linogram_fft_error.dat","w+");
-  for (m=1; m<=12; m++)
+  fp1 = fopen("linogram_fft_error.dat", "w+");
+  for (m = 1; m <= 12; m++)
   {
     /** fast linogram FFT */
-    linogram_fft(f_hat,N,f,T,R,m);
+    linogram_fft(f_hat, N, f, T, rr, m);
 
     /** error of fast linogram FFT */
-    E_max=X(error_l_infty_complex)(f_direct,f,M);
-    //E_max=X(error_l_2_complex)(f_direct,f,M);
+    E_max = NFFT(error_l_infty_complex)(f_direct, f, M);
+    //E_max=NFFT(error_l_2_complex)(f_direct,f,M);
 
-    printf("m=%2d: E_max = %e\n",m,E_max);
-    fprintf(fp1,"%e\n",E_max);
+    printf("m=%2d: E_max = %" __FES__ "\n", m, E_max);
+    fprintf(fp1, "%" __FES__ "\n", E_max);
   }
   fclose(fp1);
 
   /** Test of the inverse linogram FFT for different m in dependece of the iteration number*/
-  for (m=3; m<=9; m+=3)
+  for (m = 3; m <= 9; m += 3)
   {
-    printf("\nTest of the inverse linogram FFT for m=%d: \n",m);
-    sprintf(filename,"linogram_ifft_error%d.dat",m);
-    fp1=fopen(filename,"w+");
-    for (max_i=0; max_i<=20; max_i+=2)
+    printf("\nTest of the inverse linogram FFT for m=%d: \n", m);
+    sprintf(filename, "linogram_ifft_error%d.dat", m);
+    fp1 = fopen(filename, "w+");
+    for (max_i = 0; max_i <= 20; max_i += 2)
     {
       /** inverse linogram FFT */
-      inverse_linogram_fft(f_direct,T,R,f_tilde,N,max_i,m);
+      inverse_linogram_fft(f_direct, T, rr, f_tilde, N, max_i, m);
 
       /** compute maximum error */
-      E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);
-      printf("%3d iterations: E_max = %e\n",max_i,E_max);
-      fprintf(fp1,"%e\n",E_max);
+      E_max = NFFT(error_l_infty_complex)(f_hat, f_tilde, N * N);
+      printf("%3d iterations: E_max = %" __FES__ "\n", max_i, E_max);
+      fprintf(fp1, "%" __FES__ "\n", E_max);
     }
     fclose(fp1);
   }
 
   /** free the variables */
-  nfft_free(x);
-  nfft_free(w);
-  nfft_free(f_hat);
-  nfft_free(f);
-  nfft_free(f_direct);
-  nfft_free(f_tilde);
-
-  return 0;
+  NFFT(free)(x);
+  NFFT(free)(w);
+  NFFT(free)(f_hat);
+  NFFT(free)(f);
+  NFFT(free)(f_direct);
+  NFFT(free)(f_tilde);
+
+  return EXIT_SUCCESS;
 }
 /* \} */
diff --git a/applications/polarFFT/mpolar_fft_test.c b/applications/polarFFT/mpolar_fft_test.c
index 0bb4e01..1fba37a 100644
--- a/applications/polarFFT/mpolar_fft_test.c
+++ b/applications/polarFFT/mpolar_fft_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: mpolar_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /**
  * \file polarFFT/mpolar_fft_test.c
@@ -35,7 +35,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -45,7 +44,7 @@
  * \{
  */
 
-double GLOBAL_elapsed_time;
+R GLOBAL_elapsed_time;
 
 /** Generates the points \f$x_{t,j}\f$ with weights \f$w_{t,j}\f$
  *  for the modified polar grid with \f$T\f$ angles and \f$R\f$ offsets.
@@ -60,363 +59,377 @@ double GLOBAL_elapsed_time;
  *  The number of nodes for the modified polar grid can be estimated as
  *  \f$M \approx \frac{4}{\pi}\log(1+\sqrt{2}) T R\f$.
  */
-static int mpolar_grid(int T, int R, double *x, double *w)
+static int mpolar_grid(int T, int S, R *x, R *w)
 {
   int t, r;
-  double W;
-  int R2=2*ceil(sqrt(2.0)*R/2);
-  double xx, yy;
-  int M=0;
+  R W;
+  int R2 = 2 * (int)(LRINT(CEIL(SQRT(K(2.0)) * (R)(S) / K(2.0))));
+  R xx, yy;
+  int M = 0;
 
-  for(t=-T/2; t<T/2; t++)
+  for (t = -T / 2; t < T / 2; t++)
   {
-    for(r=-R2/2; r<R2/2; r++)
+    for (r = -R2 / 2; r < R2 / 2; r++)
     {
-      xx = (double)r/R*cos(PI*t/T);
-      yy = (double)r/R*sin(PI*t/T);
+      xx = (R) (r) / (R)(S) * COS(KPI * (R)(t) / (R)(T));
+      yy = (R) (r) / (R)(S) * SIN(KPI * (R)(t) / (R)(T));
 
-      if ( ((-0.5-1.0/(double)R)<=xx) & (xx<=(0.5+1.0/(double)R)) &
-        ((-0.5-1.0/(double)R)<=yy) & (yy<=(0.5+1.0/(double)R)) )
+      if (((-K(0.5) - K(1.0) / (R) S) <= xx) & (xx <= (K(0.5) + K(1.0) / (R) S))
+          & ((-K(0.5) - K(1.0) / (R) S) <= yy)
+          & (yy <= (K(0.5) + K(1.0) / (R) S)))
       {
-        x[2*M+0] = xx;
-        x[2*M+1] = yy;
+        x[2 * M + 0] = xx;
+        x[2 * M + 1] = yy;
 
-        if (r==0)
-          w[M] = 1.0/4.0;
+        if (r == 0)
+          w[M] = K(1.0) / K(4.0);
         else
-          w[M] = fabs((double)r);
+          w[M] = FABS((R) r);
 
         M++; /** count the knots */
       }
     }
   }
 
-   /** normalize the weights */
-   W=0.0;
-   for (t=0; t<M; t++)
-      W+=w[t];
+  /** normalize the weights */
+  W = K(0.0);
+  for (t = 0; t < M; t++)
+    W += w[t];
 
-   for (t=0; t<M; t++)
-    w[t]/=W;
+  for (t = 0; t < M; t++)
+    w[t] /= W;
 
-  return M;                             /** return the number of knots        */
+  return M; /** return the number of knots        */
 }
 
 /** discrete mpolar FFT */
-static int mpolar_dft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+static int mpolar_dft(C *f_hat, int NN, C *f, int T, int S, int m)
 {
   ticks t0, t1;
-  int j,k;                              /**< index for nodes and freqencies   */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  int j, k; /**< index for nodes and freqencies   */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
 
-  double *x, *w;                        /**< knots and associated weights     */
+  R *x, *w; /**< knots and associated weights     */
 
-  int N[2],n[2];
-  int M;                                /**< number of knots                  */
+  int N[2], n[2];
+  int M; /**< number of knots                  */
 
-  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
-  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+  N[0] = NN;
+  n[0] = 2 * N[0]; /**< oversampling factor sigma=2      */
+  N[1] = NN;
+  n[1] = 2 * N[1]; /**< oversampling factor sigma=2      */
 
-  x = (double *)nfft_malloc(5*(T/2)*R*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(5 * (T / 2) * S) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(5*(T*R)/4*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(5 * (T * S) / 4) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  M=mpolar_grid(T,R,x,w);
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
-                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  M = mpolar_grid(T, S, x, w);
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, m,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init nodes from mpolar grid*/
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
   }
 
   /** init Fourier coefficients from given image */
-  for(k=0;k<my_nfft_plan.N_total;k++)
+  for (k = 0; k < my_nfft_plan.N_total; k++)
     my_nfft_plan.f_hat[k] = f_hat[k];
 
   t0 = getticks();
 
   /** NDFT-2D */
-  nfft_trafo_direct(&my_nfft_plan);
+  NFFT(trafo_direct)(&my_nfft_plan);
 
   t1 = getticks();
-  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+  GLOBAL_elapsed_time = NFFT(elapsed_seconds)(t1, t0);
 
   /** copy result */
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  for (j = 0; j < my_nfft_plan.M_total; j++)
     f[j] = my_nfft_plan.f[j];
 
   /** finalise the plans and free the variables */
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
 
   return EXIT_SUCCESS;
 }
 
 /** NFFT-based mpolar FFT */
-static int mpolar_fft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+static int mpolar_fft(C *f_hat, int NN, C *f, int T, int S, int m)
 {
   ticks t0, t1;
-  int j,k;                              /**< index for nodes and freqencies   */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  int j, k; /**< index for nodes and freqencies   */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
 
-  double *x, *w;                        /**< knots and associated weights     */
+  R *x, *w; /**< knots and associated weights     */
 
-  int N[2],n[2];
-  int M;                                /**< number of knots                  */
+  int N[2], n[2];
+  int M; /**< number of knots                  */
 
-  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
-  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+  N[0] = NN;
+  n[0] = 2 * N[0]; /**< oversampling factor sigma=2      */
+  N[1] = NN;
+  n[1] = 2 * N[1]; /**< oversampling factor sigma=2      */
 
-  x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(5 * T * S / 2) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(5 * T * S / 4) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  M=mpolar_grid(T,R,x,w);
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
-                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  M = mpolar_grid(T, S, x, w);
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, m,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init nodes from mpolar grid*/
 
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
   }
 
   /** precompute psi, the entries of the matrix B */
-  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_LIN_PSI)
+    NFFT(precompute_lin_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_PSI)
-    nfft_precompute_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_PSI)
+    NFFT(precompute_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_FULL_PSI)
+    NFFT(precompute_full_psi)(&my_nfft_plan);
 
   /** init Fourier coefficients from given image */
-  for(k=0;k<my_nfft_plan.N_total;k++)
+  for (k = 0; k < my_nfft_plan.N_total; k++)
     my_nfft_plan.f_hat[k] = f_hat[k];
 
   t0 = getticks();
 
   /** NFFT-2D */
-  nfft_trafo(&my_nfft_plan);
+  NFFT(trafo)(&my_nfft_plan);
 
   t1 = getticks();
-  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+  GLOBAL_elapsed_time = NFFT(elapsed_seconds)(t1, t0);
 
   /** copy result */
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  for (j = 0; j < my_nfft_plan.M_total; j++)
     f[j] = my_nfft_plan.f[j];
 
   /** finalise the plans and free the variables */
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
 
   return EXIT_SUCCESS;
 }
 
 /** inverse NFFT-based mpolar FFT */
-static int inverse_mpolar_fft(fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int max_i, int m)
+static int inverse_mpolar_fft(C *f, int T, int S, C *f_hat, int NN, int max_i,
+    int m)
 {
   ticks t0, t1;
-  int j,k;                              /**< index for nodes and freqencies   */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
-  solver_plan_complex my_infft_plan;             /**< plan for the inverse nfft        */
+  int j, k; /**< index for nodes and freqencies   */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
+  SOLVER(plan_complex) my_infft_plan; /**< plan for the inverse nfft        */
 
-  double *x, *w;                        /**< knots and associated weights     */
-  int l;                                /**< index for iterations             */
+  R *x, *w; /**< knots and associated weights     */
+  int l; /**< index for iterations             */
 
-  int N[2],n[2];
-  int M;                                /**< number of knots                  */
+  int N[2], n[2];
+  int M; /**< number of knots                  */
 
-  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
-  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+  N[0] = NN;
+  n[0] = 2 * N[0]; /**< oversampling factor sigma=2      */
+  N[1] = NN;
+  n[1] = 2 * N[1]; /**< oversampling factor sigma=2      */
 
-  x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(5 * T * S / 2) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(5 * T * S / 4) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  M=mpolar_grid(T,R,x,w);
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
-                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  M = mpolar_grid(T, S, x, w);
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, m,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init two dimensional infft plan */
-    solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );
+  SOLVER(init_advanced_complex)(&my_infft_plan,
+      (NFFT(mv_plan_complex)*) (&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT);
 
   /** init nodes, given samples and weights */
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
-    my_infft_plan.y[j]    = f[j];
-    my_infft_plan.w[j]    = w[j];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
+    my_infft_plan.y[j] = f[j];
+    my_infft_plan.w[j] = w[j];
   }
 
   /** precompute psi, the entries of the matrix B */
-  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_LIN_PSI)
+    NFFT(precompute_lin_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_PSI)
-    nfft_precompute_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_PSI)
+    NFFT(precompute_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_FULL_PSI)
+    NFFT(precompute_full_psi)(&my_nfft_plan);
 
-
- /** initialise damping factors */
- if(my_infft_plan.flags & PRECOMPUTE_DAMP)
-   for(j=0;j<my_nfft_plan.N[0];j++)
-     for(k=0;k<my_nfft_plan.N[1];k++)
-     {
-        my_infft_plan.w_hat[j*my_nfft_plan.N[1]+k]=
-          (sqrt(pow(j-my_nfft_plan.N[0]/2,2)+pow(k-my_nfft_plan.N[1]/2,2))>(my_nfft_plan.N[0]/2)?0:1);
-     }
+  /** initialise damping factors */
+  if (my_infft_plan.flags & PRECOMPUTE_DAMP)
+    for (j = 0; j < my_nfft_plan.N[0]; j++)
+      for (k = 0; k < my_nfft_plan.N[1]; k++)
+      {
+        my_infft_plan.w_hat[j * my_nfft_plan.N[1] + k] = (
+            SQRT(
+                POW((R)(j - my_nfft_plan.N[0] / 2), K(2.0))
+                    + POW((R)(k - my_nfft_plan.N[1] / 2), K(2.0)))
+                > (R)(my_nfft_plan.N[0] / 2) ? K(0.0) : K(1.0));
+      }
 
   /** initialise some guess f_hat_0 */
-  for(k=0;k<my_nfft_plan.N_total;k++)
-      my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+  for (k = 0; k < my_nfft_plan.N_total; k++)
+    my_infft_plan.f_hat_iter[k] = K(0.0) + II * K(0.0);
 
   t0 = getticks();
 
   /** solve the system */
-  solver_before_loop_complex(&my_infft_plan);
+  SOLVER(before_loop_complex)(&my_infft_plan);
 
-  if (max_i<1)
+  if (max_i < 1)
   {
-    l=1;
-    for(k=0;k<my_nfft_plan.N_total;k++)
+    l = 1;
+    for (k = 0; k < my_nfft_plan.N_total; k++)
       my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
   }
   else
   {
-    for(l=1;l<=max_i;l++)
+    for (l = 1; l <= max_i; l++)
     {
-      solver_loop_one_step_complex(&my_infft_plan);
+      SOLVER(loop_one_step_complex)(&my_infft_plan);
     }
   }
 
   t1 = getticks();
-  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
+  GLOBAL_elapsed_time = NFFT(elapsed_seconds)(t1, t0);
 
   /** copy result */
-  for(k=0;k<my_nfft_plan.N_total;k++)
+  for (k = 0; k < my_nfft_plan.N_total; k++)
     f_hat[k] = my_infft_plan.f_hat_iter[k];
 
   /** finalise the plans and free the variables */
-  solver_finalize_complex(&my_infft_plan);
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  SOLVER(finalize_complex)(&my_infft_plan);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
 
   return EXIT_SUCCESS;
 }
 
 /** Comparison of the FFTW, mpolar FFT, and inverse mpolar FFT */
-static int comparison_fft(FILE *fp, int N, int T, int R)
+static int comparison_fft(FILE *fp, int N, int T, int S)
 {
   ticks t0, t1;
-  fftw_plan my_fftw_plan;
-  fftw_complex *f_hat,*f;
-  int m,k;
-  double t_fft, t_dft_mpolar;
+  FFTW(plan) my_fftw_plan;
+  C *f_hat, *f;
+  int m, k;
+  R t_fft, t_dft_mpolar;
 
-  f_hat = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
-  f     = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*(T*R/4)*5);
+  f_hat = (C *) NFFT(malloc)(sizeof(C) * (size_t)(N * N));
+  f = (C *) NFFT(malloc)(sizeof(C) * (size_t)((T * S / 4) * 5));
 
-  my_fftw_plan = fftw_plan_dft_2d(N,N,f_hat,f,FFTW_BACKWARD,FFTW_MEASURE);
+  my_fftw_plan = FFTW(plan_dft_2d)(N, N, f_hat, f, FFTW_BACKWARD, FFTW_MEASURE);
 
-  for(k=0; k<N*N; k++)
-    f_hat[k] = (((double)rand())/RAND_MAX) + _Complex_I* (((double)rand())/RAND_MAX);
+  for (k = 0; k < N * N; k++)
+    f_hat[k] = NFFT(drand48)() + II * NFFT(drand48)();
 
   t0 = getticks();
-  for(m=0;m<65536/N;m++)
-    {
-      fftw_execute(my_fftw_plan);
-      /* touch */
-      f_hat[2]=2*f_hat[0];
-    }
+  for (m = 0; m < 65536 / N; m++)
+  {
+    FFTW(execute)(my_fftw_plan);
+    /* touch */
+    f_hat[2] = K(2.0) * f_hat[0];
+  }
   t1 = getticks();
-  GLOBAL_elapsed_time = nfft_elapsed_seconds(t1,t0);
-  t_fft=N*GLOBAL_elapsed_time/65536;
+  GLOBAL_elapsed_time = NFFT(elapsed_seconds)(t1, t0);
+  t_fft = (R)(N) * GLOBAL_elapsed_time / K(65536.0);
 
-  if(N<256)
-    {
-      mpolar_dft(f_hat,N,f,T,R,1);
-      t_dft_mpolar=GLOBAL_elapsed_time;
-    }
+  if (N < 256)
+  {
+    mpolar_dft(f_hat, N, f, T, S, 1);
+    t_dft_mpolar = GLOBAL_elapsed_time;
+  }
 
-  for (m=3; m<=9; m+=3)
-    {
-      if((m==3)&&(N<256))
-        fprintf(fp,"%d\t&\t&\t%1.1e&\t%1.1e&\t%d\t",N,t_fft,t_dft_mpolar,m);
-      else
-        if(m==3)
-	  fprintf(fp,"%d\t&\t&\t%1.1e&\t       &\t%d\t",N,t_fft,m);
-	else
-	  fprintf(fp,"  \t&\t&\t       &\t       &\t%d\t",m);
-
-      printf("N=%d\tt_fft=%1.1e\tt_dft_mpolar=%1.1e\tm=%d\t",N,t_fft,t_dft_mpolar,m);
-
-      mpolar_fft(f_hat,N,f,T,R,m);
-      fprintf(fp,"%1.1e&\t",GLOBAL_elapsed_time);
-      printf("t_mpolar=%1.1e\t",GLOBAL_elapsed_time);
-      inverse_mpolar_fft(f,T,R,f_hat,N,2*m,m);
-      if(m==9)
-	fprintf(fp,"%1.1e\\\\\\hline\n",GLOBAL_elapsed_time);
-      else
-	fprintf(fp,"%1.1e\\\\\n",GLOBAL_elapsed_time);
-      printf("t_impolar=%1.1e\n",GLOBAL_elapsed_time);
-    }
+  for (m = 3; m <= 9; m += 3)
+  {
+    if ((m == 3) && (N < 256))
+      fprintf(fp, "%d\t&\t&\t%1.1" __FES__ "&\t%1.1" __FES__ "&\t%d\t", N, t_fft, t_dft_mpolar, m);
+    else if (m == 3)
+      fprintf(fp, "%d\t&\t&\t%1.1" __FES__ "&\t       &\t%d\t", N, t_fft, m);
+    else
+      fprintf(fp, "  \t&\t&\t       &\t       &\t%d\t", m);
+
+    printf("N=%d\tt_fft=%1.1" __FES__ "\tt_dft_mpolar=%1.1" __FES__ "\tm=%d\t", N, t_fft,
+        t_dft_mpolar, m);
+
+    mpolar_fft(f_hat, N, f, T, S, m);
+    fprintf(fp, "%1.1" __FES__ "&\t", GLOBAL_elapsed_time);
+    printf("t_mpolar=%1.1" __FES__ "\t", GLOBAL_elapsed_time);
+    inverse_mpolar_fft(f, T, S, f_hat, N, 2 * m, m);
+    if (m == 9)
+      fprintf(fp, "%1.1" __FES__ "\\\\\\hline\n", GLOBAL_elapsed_time);
+    else
+      fprintf(fp, "%1.1" __FES__ "\\\\\n", GLOBAL_elapsed_time);
+    printf("t_impolar=%1.1" __FES__ "\n", GLOBAL_elapsed_time);
+  }
 
   fflush(fp);
 
-  nfft_free(f);
-  nfft_free(f_hat);
+  NFFT(free)(f);
+  NFFT(free)(f_hat);
 
   return EXIT_SUCCESS;
 }
 
 /** test program for various parameters */
-int main(int argc,char **argv)
+int main(int argc, char **argv)
 {
-  int N;                                /**< mpolar FFT size NxN              */
-  int T, R;                             /**< number of directions/offsets     */
-  int M;                                /**< number of knots of mpolar grid   */
-  double *x, *w;                        /**< knots and associated weights     */
-  fftw_complex *f_hat, *f, *f_direct, *f_tilde;
+  int N; /**< mpolar FFT size NxN              */
+  int T, S; /**< number of directions/offsets     */
+  int M; /**< number of knots of mpolar grid   */
+  R *x, *w; /**< knots and associated weights     */
+  C *f_hat, *f, *f_direct, *f_tilde;
   int k;
-  int max_i;                            /**< number of iterations             */
+  int max_i; /**< number of iterations             */
   int m;
-  double temp1, temp2, E_max=0.0;
+  R temp1, temp2, E_max = K(0.0);
   FILE *fp1, *fp2;
   char filename[30];
   int logN;
 
-  if( argc!=4 )
+  if (argc != 4)
   {
     printf("mpolar_fft_test N T R \n");
     printf("\n");
@@ -426,92 +439,94 @@ int main(int argc,char **argv)
 
     /** Hence, comparison of the FFTW, mpolar FFT, and inverse mpolar FFT */
     printf("\nHence, comparison FFTW, mpolar FFT and inverse mpolar FFT\n");
-    fp1=fopen("mpolar_comparison_fft.dat","w");
-    if (fp1==NULL)
-	return(-1);
-    for (logN=4; logN<=8; logN++)
-	comparison_fft(fp1,(1U<< logN), 3*(1U<< logN), 3*(1U<< (logN-1)));
+    fp1 = fopen("mpolar_comparison_fft.dat", "w");
+    if (fp1 == NULL)
+      return (-1);
+    for (logN = 4; logN <= 8; logN++)
+      comparison_fft(fp1, (int)(1U << logN), 3 * (int)(1U << logN),
+          3 * (int)(1U << (logN - 1)));
     fclose(fp1);
 
-    exit(-1);
+    exit(EXIT_FAILURE);
   }
 
   N = atoi(argv[1]);
   T = atoi(argv[2]);
-  R = atoi(argv[3]);
-  printf("N=%d, modified polar grid with T=%d, R=%d => ",N,T,R);
+  S = atoi(argv[3]);
+  printf("N=%d, modified polar grid with T=%d, R=%d => ", N, T, S);
 
-  x = (double *)nfft_malloc(5*T*R/2*(sizeof(double)));
-  w = (double *)nfft_malloc(5*T*R/4*(sizeof(double)));
+  x = (R *) NFFT(malloc)((size_t)(5 * T * S / 2) * (sizeof(R)));
+  w = (R *) NFFT(malloc)((size_t)(5 * T * S / 4) * (sizeof(R)));
 
-  f_hat    = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
-  f        = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*1.25*T*R);  /* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */
-  f_direct = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*1.25*T*R);
-  f_tilde  = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+  f_hat = (C *) NFFT(malloc)(sizeof(C) * (size_t)(N * N));
+  f = (C *) NFFT(malloc)(sizeof(C) * (size_t)(1.25 * T * S)); /* 4/pi*log(1+sqrt(2)) = 1.122... < 1.25 */
+  f_direct = (C *) NFFT(malloc)(sizeof(C) * (size_t)(1.25 * T * S));
+  f_tilde = (C *) NFFT(malloc)(sizeof(C) * (size_t)(N * N));
 
   /** generate knots of mpolar grid */
-  M=mpolar_grid(T,R,x,w); printf("M=%d.\n",M);
+  M = mpolar_grid(T, S, x, w);
+  printf("M=%d.\n", M);
 
   /** load data */
-  fp1=fopen("input_data_r.dat","r");
-  fp2=fopen("input_data_i.dat","r");
-  if ((fp1==NULL) || (fp2==NULL))
-    return(-1);
-  for(k=0;k<N*N;k++)
+  fp1 = fopen("input_data_r.dat", "r");
+  fp2 = fopen("input_data_i.dat", "r");
+  if ((fp1 == NULL) || (fp2 == NULL))
+    return (-1);
+  for (k = 0; k < N * N; k++)
   {
-    fscanf(fp1,"%le ",&temp1);
-    fscanf(fp2,"%le ",&temp2);
-    f_hat[k]=temp1+ _Complex_I*temp2;
+    fscanf(fp1, __FR__ " ", &temp1);
+    fscanf(fp2, __FR__ " ", &temp2);
+    f_hat[k] = temp1 + II * temp2;
   }
   fclose(fp1);
   fclose(fp2);
 
   /** direct mpolar FFT */
-      mpolar_dft(f_hat,N,f_direct,T,R,1);
+  mpolar_dft(f_hat, N, f_direct, T, S, 1);
   //  mpolar_fft(f_hat,N,f_direct,T,R,12);
 
   /** Test of the mpolar FFT with different m */
   printf("\nTest of the mpolar FFT: \n");
-  fp1=fopen("mpolar_fft_error.dat","w+");
-  for (m=1; m<=12; m++)
+  fp1 = fopen("mpolar_fft_error.dat", "w+");
+  for (m = 1; m <= 12; m++)
   {
     /** fast mpolar FFT */
-    mpolar_fft(f_hat,N,f,T,R,m);
+    mpolar_fft(f_hat, N, f, T, S, m);
 
     /** compute error of fast mpolar FFT */
-    E_max=X(error_l_infty_complex)(f_direct,f,M);
-    printf("m=%2d: E_max = %e\n",m,E_max);
-    fprintf(fp1,"%e\n",E_max);
+    E_max = NFFT(error_l_infty_complex)(f_direct, f, M);
+    printf("m=%2d: E_max = %" __FES__ "\n", m, E_max);
+    fprintf(fp1, "%" __FES__ "\n", E_max);
   }
   fclose(fp1);
 
   /** Test of the inverse mpolar FFT for different m in dependece of the iteration number*/
-  for (m=3; m<=9; m+=3)
+  for (m = 3; m <= 9; m += 3)
   {
-    printf("\nTest of the inverse mpolar FFT for m=%d: \n",m);
-    sprintf(filename,"mpolar_ifft_error%d.dat",m);
-    fp1=fopen(filename,"w+");
-    for (max_i=0; max_i<=20; max_i+=2)
+    printf("\nTest of the inverse mpolar FFT for m=%d: \n", m);
+    sprintf(filename, "mpolar_ifft_error%d.dat", m);
+    fp1 = fopen(filename, "w+");
+    for (max_i = 0; max_i <= 20; max_i += 2)
     {
       /** inverse mpolar FFT */
-      inverse_mpolar_fft(f_direct,T,R,f_tilde,N,max_i,m);
+      inverse_mpolar_fft(f_direct, T, S, f_tilde, N, max_i, m);
 
       /** compute maximum relativ error */
-      E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);
-      printf("%3d iterations: E_max = %e\n",max_i,E_max);
-      fprintf(fp1,"%e\n",E_max);
+      E_max = NFFT(error_l_infty_complex)(f_hat, f_tilde, N * N);
+      printf("%3d iterations: E_max = %" __FES__ "\n", max_i, E_max);
+      fprintf(fp1, "%" __FES__ "\n", E_max);
     }
     fclose(fp1);
   }
 
   /** free the variables */
-  nfft_free(x);
-  nfft_free(w);
-  nfft_free(f_hat);
-  nfft_free(f);
-  nfft_free(f_direct);
-  nfft_free(f_tilde);
-
-  return 0;
+  NFFT(free)(x);
+  NFFT(free)(w);
+  NFFT(free)(f_hat);
+  NFFT(free)(f);
+  NFFT(free)(f_direct);
+  NFFT(free)(f_tilde);
+
+  return EXIT_SUCCESS;
 }
 /* \} */
diff --git a/applications/polarFFT/phantom.m b/applications/polarFFT/phantom.m
index 3d17d08..2e960ac 100644
--- a/applications/polarFFT/phantom.m
+++ b/applications/polarFFT/phantom.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: phantom.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function I=phantom(N)
 % phantom(N)
 %  generates the (modified) Shepp-Logan phantom of P. Toft
diff --git a/applications/polarFFT/polar_fft_test.c b/applications/polarFFT/polar_fft_test.c
index cce3bff..6ed51dc 100644
--- a/applications/polarFFT/polar_fft_test.c
+++ b/applications/polarFFT/polar_fft_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: polar_fft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /**
  * \file polarFFT/polar_fft_test.c
@@ -34,7 +34,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -75,349 +74,365 @@
  *  Thus, the sum of all weights is \f$\frac{\pi}{4}(1+\frac{1}{R^2})\f$ and
  *  we divide by this value for normalization.
  */
-static int polar_grid(int T, int R, double *x, double *w)
+static int polar_grid(int T, int S, R *x, R *w)
 {
   int t, r;
-  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+  R W = (R) T * (((R) S / K(2.0)) * ((R) S / K(2.0)) + K(1.0) / K(4.0));
 
-  for(t=-T/2; t<T/2; t++)
+  for (t = -T / 2; t < T / 2; t++)
   {
-    for(r=-R/2; r<R/2; r++)
+    for (r = -S / 2; r < S / 2; r++)
     {
-      x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R*cos(PI*t/T);
-      x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R*sin(PI*t/T);
-      if (r==0)
-        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      x[2 * ((t + T / 2) * S + (r + S / 2)) + 0] = (R) (r) / (R)(S) * COS(KPI * (R)(t) / (R)(T));
+      x[2 * ((t + T / 2) * S + (r + S / 2)) + 1] = (R) (r) / (R)(S) * SIN(KPI * (R)(t) / (R)(T));
+      if (r == 0)
+        w[(t + T / 2) * S + (r + S / 2)] = K(1.0) / K(4.0) / W;
       else
-        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+        w[(t + T / 2) * S + (r + S / 2)] = FABS((R) r) / W;
     }
   }
 
-  return T*R;                           /** return the number of knots        */
+  return T * S; /** return the number of knots        */
 }
 
 /** discrete polar FFT */
-static int polar_dft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+static int polar_dft(C *f_hat, int NN, C *f, int T, int S,
+    int m)
 {
-  int j,k;                              /**< index for nodes and frequencies  */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  int j, k; /**< index for nodes and frequencies  */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
 
-  double *x, *w;                        /**< knots and associated weights     */
+  R *x, *w; /**< knots and associated weights     */
 
-  int N[2],n[2];
-  int M=T*R;                            /**< number of knots                  */
+  int N[2], n[2];
+  int M = T * S; /**< number of knots                  */
 
-  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
-  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+  N[0] = NN;
+  n[0] = 2 * N[0]; /**< oversampling factor sigma=2      */
+  N[1] = NN;
+  n[1] = 2 * N[1]; /**< oversampling factor sigma=2      */
 
-  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(2 * T * S) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(T*R*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(T * S) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
-                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, m,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init nodes from polar grid*/
-  polar_grid(T,R,x,w);
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  polar_grid(T, S, x, w);
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
   }
 
   /** init Fourier coefficients from given image */
-  for(k=0;k<my_nfft_plan.N_total;k++)
+  for (k = 0; k < my_nfft_plan.N_total; k++)
     my_nfft_plan.f_hat[k] = f_hat[k];
 
   /** NDFT-2D */
-  nfft_trafo_direct(&my_nfft_plan);
+  NFFT(trafo_direct)(&my_nfft_plan);
 
   /** copy result */
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  for (j = 0; j < my_nfft_plan.M_total; j++)
     f[j] = my_nfft_plan.f[j];
 
   /** finalise the plans and free the variables */
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
 
   return EXIT_SUCCESS;
 }
 
 /** NFFT-based polar FFT */
-static int polar_fft(fftw_complex *f_hat, int NN, fftw_complex *f, int T, int R, int m)
+static int polar_fft(C *f_hat, int NN, C *f, int T, int S,
+    int m)
 {
-  int j,k;                              /**< index for nodes and freqencies   */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  int j, k; /**< index for nodes and freqencies   */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
 
-  double *x, *w;                        /**< knots and associated weights     */
+  R *x, *w; /**< knots and associated weights     */
 
-  int N[2],n[2];
-  int M=T*R;                            /**< number of knots                  */
+  int N[2], n[2];
+  int M = T * S; /**< number of knots                  */
 
-  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
-  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+  N[0] = NN;
+  n[0] = 2 * N[0]; /**< oversampling factor sigma=2      */
+  N[1] = NN;
+  n[1] = 2 * N[1]; /**< oversampling factor sigma=2      */
 
-  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(2 * T * S) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(T*R*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(T * S) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
-                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, m,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init nodes from polar grid*/
-  polar_grid(T,R,x,w);
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  polar_grid(T, S, x, w);
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
   }
 
   /** precompute psi, the entries of the matrix B */
-  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_LIN_PSI)
+    NFFT(precompute_lin_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_PSI)
-    nfft_precompute_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_PSI)
+    NFFT(precompute_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_FULL_PSI)
+    NFFT(precompute_full_psi)(&my_nfft_plan);
 
   /** init Fourier coefficients from given image */
-  for(k=0;k<my_nfft_plan.N_total;k++)
+  for (k = 0; k < my_nfft_plan.N_total; k++)
     my_nfft_plan.f_hat[k] = f_hat[k];
 
   /** NFFT-2D */
-  nfft_trafo(&my_nfft_plan);
+  NFFT(trafo)(&my_nfft_plan);
 
   /** copy result */
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  for (j = 0; j < my_nfft_plan.M_total; j++)
     f[j] = my_nfft_plan.f[j];
 
   /** finalise the plans and free the variables */
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
 
   return EXIT_SUCCESS;
 }
 
 /** inverse NFFT-based polar FFT */
-static int inverse_polar_fft(fftw_complex *f, int T, int R, fftw_complex *f_hat, int NN, int max_i, int m)
+static int inverse_polar_fft(C *f, int T, int S, C *f_hat,
+    int NN, int max_i, int m)
 {
-  int j,k;                              /**< index for nodes and freqencies   */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
-  solver_plan_complex my_infft_plan;             /**< plan for the inverse nfft        */
+  int j, k; /**< index for nodes and freqencies   */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
+  SOLVER(plan_complex) my_infft_plan; /**< plan for the inverse nfft        */
 
-  double *x, *w;                        /**< knots and associated weights     */
-  int l;                                /**< index for iterations             */
+  R *x, *w; /**< knots and associated weights     */
+  int l; /**< index for iterations             */
 
-  int N[2],n[2];
-  int M=T*R;                            /**< number of knots                  */
+  int N[2], n[2];
+  int M = T * S; /**< number of knots                  */
 
-  N[0]=NN; n[0]=2*N[0];                 /**< oversampling factor sigma=2      */
-  N[1]=NN; n[1]=2*N[1];                 /**< oversampling factor sigma=2      */
+  N[0] = NN;
+  n[0] = 2 * N[0]; /**< oversampling factor sigma=2      */
+  N[1] = NN;
+  n[1] = 2 * N[1]; /**< oversampling factor sigma=2      */
 
-  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(2 * T * S) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(T*R*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(T * S) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, m,
-                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, m,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init two dimensional infft plan */
-  solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT );
+  SOLVER(init_advanced_complex)(&my_infft_plan,
+      (NFFT(mv_plan_complex)*) (&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT);
 
   /** init nodes, given samples and weights */
-  polar_grid(T,R,x,w);
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  polar_grid(T, S, x, w);
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
-    my_infft_plan.y[j]    = f[j];
-    my_infft_plan.w[j]    = w[j];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
+    my_infft_plan.y[j] = f[j];
+    my_infft_plan.w[j] = w[j];
   }
 
   /** precompute psi, the entries of the matrix B */
-  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_LIN_PSI)
+    NFFT(precompute_lin_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_PSI)
-    nfft_precompute_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_PSI)
+    NFFT(precompute_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_FULL_PSI)
+    NFFT(precompute_full_psi)(&my_nfft_plan);
 
   /** initialise damping factors */
-  if(my_infft_plan.flags & PRECOMPUTE_DAMP)
-    for(j=0;j<my_nfft_plan.N[0];j++)
-      for(k=0;k<my_nfft_plan.N[1];k++)
-  {
-    my_infft_plan.w_hat[j*my_nfft_plan.N[1]+k]=
-        (sqrt(pow((double)(j-my_nfft_plan.N[0]/2),2.0)+pow((double)(k-my_nfft_plan.N[1]/2),2.0))
-            >((double)(my_nfft_plan.N[0]/2))?0:1);
-  }
+  if (my_infft_plan.flags & PRECOMPUTE_DAMP)
+    for (j = 0; j < my_nfft_plan.N[0]; j++)
+      for (k = 0; k < my_nfft_plan.N[1]; k++)
+      {
+        my_infft_plan.w_hat[j * my_nfft_plan.N[1] + k] = (
+            SQRT(
+                POW((R) (j - my_nfft_plan.N[0] / 2), K(2.0))
+                    + POW((R) (k - my_nfft_plan.N[1] / 2), K(2.0)))
+                > ((R) (my_nfft_plan.N[0] / 2)) ? 0 : 1);
+      }
 
   /** initialise some guess f_hat_0 */
-  for(k=0;k<my_nfft_plan.N_total;k++)
-    my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+  for (k = 0; k < my_nfft_plan.N_total; k++)
+    my_infft_plan.f_hat_iter[k] = K(0.0) + II * K(0.0);
 
   /** solve the system */
-  solver_before_loop_complex(&my_infft_plan);
+  SOLVER(before_loop_complex)(&my_infft_plan);
 
-  if (max_i<1)
+  if (max_i < 1)
   {
-    l=1;
-    for(k=0;k<my_nfft_plan.N_total;k++)
+    l = 1;
+    for (k = 0; k < my_nfft_plan.N_total; k++)
       my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
   }
   else
   {
-    for(l=1;l<=max_i;l++)
+    for (l = 1; l <= max_i; l++)
     {
-      solver_loop_one_step_complex(&my_infft_plan);
+      SOLVER(loop_one_step_complex)(&my_infft_plan);
     }
   }
 
   /** copy result */
-  for(k=0;k<my_nfft_plan.N_total;k++)
+  for (k = 0; k < my_nfft_plan.N_total; k++)
     f_hat[k] = my_infft_plan.f_hat_iter[k];
 
   /** finalise the plans and free the variables */
-  solver_finalize_complex(&my_infft_plan);
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  SOLVER(finalize_complex)(&my_infft_plan);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
 
   return EXIT_SUCCESS;
 }
 
 /** test program for various parameters */
-int main(int argc,char **argv)
+int main(int argc, char **argv)
 {
-  int N;                                /**< mpolar FFT size NxN              */
-  int T, R;                             /**< number of directions/offsets     */
-  int M;                                /**< number of knots of mpolar grid   */
-  double *x, *w;                        /**< knots and associated weights     */
-  fftw_complex *f_hat, *f, *f_direct, *f_tilde;
+  int N; /**< mpolar FFT size NxN              */
+  int T, S; /**< number of directions/offsets     */
+  int M; /**< number of knots of mpolar grid   */
+  R *x, *w; /**< knots and associated weights     */
+  C *f_hat, *f, *f_direct, *f_tilde;
   int k;
-  int max_i;                            /**< number of iterations             */
+  int max_i; /**< number of iterations             */
   int m = 1;
-  double temp1, temp2, E_max=0.0;
+  R temp1, temp2, E_max = K(0.0);
   FILE *fp1, *fp2;
   char filename[30];
 
-  if( argc!=4 )
+  if (argc != 4)
   {
     printf("polar_fft_test N T R \n");
     printf("\n");
     printf("N          polar FFT of size NxN     \n");
     printf("T          number of slopes          \n");
     printf("R          number of offsets         \n");
-    exit(-1);
+    exit(EXIT_FAILURE);
   }
 
   N = atoi(argv[1]);
   T = atoi(argv[2]);
-  R = atoi(argv[3]);
-  printf("N=%d, polar grid with T=%d, R=%d => ",N,T,R);
+  S = atoi(argv[3]);
+  printf("N=%d, polar grid with T=%d, R=%d => ", N, T, S);
 
-  x = (double *)nfft_malloc(2*5*(T/2)*(R/2)*(sizeof(double)));
-  w = (double *)nfft_malloc(5*(T/2)*(R/2)*(sizeof(double)));
+  x = (R *) NFFT(malloc)((size_t)(2 * 5 * (T / 2) * (S / 2)) * (sizeof(R)));
+  w = (R *) NFFT(malloc)((size_t)(5 * (T / 2) * (S / 2)) * (sizeof(R)));
 
-  f_hat    = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
-  f        = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*T*R);
-  f_direct = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*T*R);
-  f_tilde  = (fftw_complex *)nfft_malloc(sizeof(fftw_complex)*N*N);
+  f_hat = (C *) NFFT(malloc)(sizeof(C) * (size_t)(N * N));
+  f = (C *) NFFT(malloc)(sizeof(C) * (size_t)(T * S));
+  f_direct = (C *) NFFT(malloc)(sizeof(C) * (size_t)(T * S));
+  f_tilde = (C *) NFFT(malloc)(sizeof(C) * (size_t)(N * N));
 
   /** generate knots of mpolar grid */
-  M=polar_grid(T,R,x,w); printf("M=%d.\n",M);
+  M = polar_grid(T, S, x, w);
+  printf("M=%d.\n", M);
 
   /** load data */
-  fp1=fopen("input_data_r.dat","r");
-  fp2=fopen("input_data_i.dat","r");
-  if (fp1==NULL)
-    return(-1);
-  for(k=0;k<N*N;k++)
+  fp1 = fopen("input_data_r.dat", "r");
+  fp2 = fopen("input_data_i.dat", "r");
+  if (fp1 == NULL)
+    return (-1);
+  for (k = 0; k < N * N; k++)
   {
-    fscanf(fp1,"%le ",&temp1);
-    fscanf(fp2,"%le ",&temp2);
-    f_hat[k]=temp1+ _Complex_I*temp2;
+    fscanf(fp1, __FR__ " ", &temp1);
+    fscanf(fp2, __FR__ " ", &temp2);
+    f_hat[k] = temp1 + II * temp2;
   }
   fclose(fp1);
   fclose(fp2);
 
   /** direct polar FFT */
-    polar_dft(f_hat,N,f_direct,T,R,m);
+  polar_dft(f_hat, N, f_direct, T, S, m);
   //  polar_fft(f_hat,N,f_direct,T,R,12);
 
   /** Test of the polar FFT with different m */
   printf("\nTest of the polar FFT: \n");
-  fp1=fopen("polar_fft_error.dat","w+");
-  for (m=1; m<=12; m++)
+  fp1 = fopen("polar_fft_error.dat", "w+");
+  for (m = 1; m <= 12; m++)
   {
     /** fast polar FFT */
-    polar_fft(f_hat,N,f,T,R,m);
+    polar_fft(f_hat, N, f, T, S, m);
 
     /** compute error of fast polar FFT */
-    E_max=X(error_l_infty_complex)(f_direct,f,M);
-    printf("m=%2d: E_max = %e\n",m,E_max);
-    fprintf(fp1,"%e\n",E_max);
+    E_max = NFFT(error_l_infty_complex)(f_direct, f, M);
+    printf("m=%2d: E_max = %" __FES__ "\n", m, E_max);
+    fprintf(fp1, "%" __FES__ "\n", E_max);
   }
   fclose(fp1);
 
   /** Test of the inverse polar FFT for different m in dependece of the iteration number*/
-  for (m=3; m<=9; m+=3)
+  for (m = 3; m <= 9; m += 3)
   {
-    printf("\nTest of the inverse polar FFT for m=%d: \n",m);
-    sprintf(filename,"polar_ifft_error%d.dat",m);
-    fp1=fopen(filename,"w+");
-    for (max_i=0; max_i<=100; max_i+=10)
+    printf("\nTest of the inverse polar FFT for m=%d: \n", m);
+    sprintf(filename, "polar_ifft_error%d.dat", m);
+    fp1 = fopen(filename, "w+");
+    for (max_i = 0; max_i <= 100; max_i += 10)
     {
       /** inverse polar FFT */
-      inverse_polar_fft(f_direct,T,R,f_tilde,N,max_i,m);
+      inverse_polar_fft(f_direct, T, S, f_tilde, N, max_i, m);
 
       /** compute maximum relative error */
       /* E_max=0.0;
-      for(k=0;k<N*N;k++)
-      {
-        temp = cabs((f_hat[k]-f_tilde[k])/f_hat[k]);
-        if (temp>E_max) E_max=temp;
-      }
-      */
-       E_max=X(error_l_infty_complex)(f_hat,f_tilde,N*N);
-      printf("%3d iterations: E_max = %e\n",max_i,E_max);
-      fprintf(fp1,"%e\n",E_max);
+       for(k=0;k<N*N;k++)
+       {
+       temp = cabs((f_hat[k]-f_tilde[k])/f_hat[k]);
+       if (temp>E_max) E_max=temp;
+       }
+       */
+      E_max = NFFT(error_l_infty_complex)(f_hat, f_tilde, N * N);
+      printf("%3d iterations: E_max = %" __FES__ "\n", max_i, E_max);
+      fprintf(fp1, "%" __FES__ "\n", E_max);
     }
     fclose(fp1);
   }
 
   /** free the variables */
-  nfft_free(x);
-  nfft_free(w);
-  nfft_free(f_hat);
-  nfft_free(f);
-  nfft_free(f_direct);
-  nfft_free(f_tilde);
-
-  return 0;
+  NFFT(free)(x);
+  NFFT(free)(w);
+  NFFT(free)(f_hat);
+  NFFT(free)(f);
+  NFFT(free)(f_direct);
+  NFFT(free)(f_tilde);
+
+  return EXIT_SUCCESS;
 }
 /* \} */
diff --git a/applications/quadratureS2/Makefile.am b/applications/quadratureS2/Makefile.am
index 884f613..06f3907 100644
--- a/applications/quadratureS2/Makefile.am
+++ b/applications/quadratureS2/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3786 2012-06-07 14:51:35Z keiner $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/applications/quadratureS2/Makefile.in b/applications/quadratureS2/Makefile.in
deleted file mode 100644
index 4f05dd8..0000000
--- a/applications/quadratureS2/Makefile.in
+++ /dev/null
@@ -1,555 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3786 2012-06-07 14:51:35Z keiner $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = quadratureS2$(EXEEXT)
-subdir = applications/quadratureS2
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_quadratureS2_OBJECTS = quadratureS2.$(OBJEXT)
-quadratureS2_OBJECTS = $(am_quadratureS2_OBJECTS)
-quadratureS2_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(quadratureS2_SOURCES)
-DIST_SOURCES = $(quadratureS2_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-quadratureS2_SOURCES = quadratureS2.c doxygen.h
-quadratureS2_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = quadratureS2.m writeTestcase.m writeWeights.m readTestcase.m lgwt.m plotGrid.m example.in example.out
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/quadratureS2/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/quadratureS2/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-quadratureS2$(EXEEXT): $(quadratureS2_OBJECTS) $(quadratureS2_DEPENDENCIES) $(EXTRA_quadratureS2_DEPENDENCIES) 
-	@rm -f quadratureS2$(EXEEXT)
-	$(LINK) $(quadratureS2_OBJECTS) $(quadratureS2_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/quadratureS2.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/quadratureS2/doxygen.h b/applications/quadratureS2/doxygen.h
index 5f100cf..a3b5e57 100644
--- a/applications/quadratureS2/doxygen.h
+++ b/applications/quadratureS2/doxygen.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/applications/quadratureS2/lgwt.m b/applications/quadratureS2/lgwt.m
index 6840891..45348c1 100644
--- a/applications/quadratureS2/lgwt.m
+++ b/applications/quadratureS2/lgwt.m
@@ -12,7 +12,7 @@ function [x,w]=lgwt(N,a,b)
 %
 %   Written by Greg von Winckel - 02/25/2004
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -28,7 +28,7 @@ function [x,w]=lgwt(N,a,b)
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: lgwt.m 3784 2012-06-06 20:30:39Z keiner $
+% $Id$
 
 N=N-1;
 N1=N+1; N2=N+2;
diff --git a/applications/quadratureS2/plotGrid.m b/applications/quadratureS2/plotGrid.m
index f0f9026..200c8e3 100644
--- a/applications/quadratureS2/plotGrid.m
+++ b/applications/quadratureS2/plotGrid.m
@@ -8,9 +8,9 @@ function plotGrid(gridType,p)
 %   2: HEALPix point set,
 %   3: Equidistribution point set.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -26,7 +26,7 @@ function plotGrid(gridType,p)
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: plotGrid.m 3784 2012-06-06 20:30:39Z keiner $
+% $Id$
 
 if (gridType == 0)
   [theta,w] = lgwt(p(1)+1,-1,1);
diff --git a/applications/quadratureS2/quadratureS2.c b/applications/quadratureS2/quadratureS2.c
index 2863e19..81139a9 100644
--- a/applications/quadratureS2/quadratureS2.c
+++ b/applications/quadratureS2/quadratureS2.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: quadratureS2.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /**
  * \defgroup applications_quadratureS2_test quadratureS2_test
@@ -36,7 +36,6 @@
 #endif
 
 /* Include NFFT 3 utilities headers. */
-#include "nfft3util.h"
 
 /* Include NFFT 3 library header. */
 #include "nfft3.h"
@@ -246,7 +245,7 @@ int main (int argc, char **argv)
           if (temp <= 1)
           {
             x_compare[2*d+1] = acos(x3);
-            if (x_compare[2*d+1] == 0 || x_compare[2*d+1] == PI)
+            if (x_compare[2*d+1] == 0 || x_compare[2*d+1] == KPI)
             {
               x_compare[2*d] = 0.0;
             }
@@ -254,8 +253,8 @@ int main (int argc, char **argv)
             {
               x_compare[2*d] = atan2(x2/sin(x_compare[2*d+1]),x1/sin(x_compare[2*d+1]));
             }
-            x_compare[2*d] *= 1.0/(2.0*PI);
-            x_compare[2*d+1] *= 1.0/(2.0*PI);
+            x_compare[2*d] *= 1.0/(2.0*KPI);
+            x_compare[2*d+1] *= 1.0/(2.0*KPI);
             d++;
           }
         }
@@ -288,16 +287,16 @@ int main (int argc, char **argv)
         /* Read cut-off degree and grid size parameter. */
         fscanf(stdin,"%d %d %d\n",&NQ[iNQ],&SQ[iNQ],&RQ[iNQ]);
         fprintf(stdout,"%d %d %d\n",NQ[iNQ],SQ[iNQ],RQ[iNQ]);
-        NQ_max = NFFT_MAX(NQ_max,NQ[iNQ]);
-        SQ_max = NFFT_MAX(SQ_max,SQ[iNQ]);
+        NQ_max = MAX(NQ_max,NQ[iNQ]);
+        SQ_max = MAX(SQ_max,SQ[iNQ]);
       }
       else
       {
         /* Read cut-off degree and grid size parameter. */
         fscanf(stdin,"%d %d\n",&NQ[iNQ],&SQ[iNQ]);
         fprintf(stdout,"%d %d\n",NQ[iNQ],SQ[iNQ]);
-        NQ_max = NFFT_MAX(NQ_max,NQ[iNQ]);
-        SQ_max = NFFT_MAX(SQ_max,SQ[iNQ]);
+        NQ_max = MAX(NQ_max,NQ[iNQ]);
+        SQ_max = MAX(SQ_max,SQ[iNQ]);
       }
     }
 
@@ -397,9 +396,9 @@ int main (int argc, char **argv)
             //fprintf(stderr,"ed: m_theta = %d\n",m_theta);
             for (k = 1; k < SQ[iNQ]; k++)
             {
-              m_theta += (int)floor((2*PI)/acos((cos(PI/(double)SQ[iNQ])-
-                cos(k*PI/(double)SQ[iNQ])*cos(k*PI/(double)SQ[iNQ]))/
-                (sin(k*PI/(double)SQ[iNQ])*sin(k*PI/(double)SQ[iNQ]))));
+              m_theta += (int)floor((2*KPI)/acos((cos(KPI/(double)SQ[iNQ])-
+                cos(k*KPI/(double)SQ[iNQ])*cos(k*KPI/(double)SQ[iNQ]))/
+                (sin(k*KPI/(double)SQ[iNQ])*sin(k*KPI/(double)SQ[iNQ]))));
               //fprintf(stderr,"ed: m_theta = %d\n",m_theta);
             }
             //fprintf(stderr,"ed: m_theta final = %d\n",m_theta);
@@ -424,7 +423,7 @@ int main (int argc, char **argv)
             for (k = 0; k < m_theta; k++)
             {
               fscanf(stdin,"%le\n",&w[k]);
-              w[k] *= (2.0*PI)/((double)m_phi);
+              w[k] *= (2.0*KPI)/((double)m_phi);
             }
 
             //fprintf(stderr,"Allocating theta and phi\n");
@@ -506,7 +505,7 @@ int main (int argc, char **argv)
 
             for (k = 0; k < SQ[iNQ]+1; k++)
             {
-              w[k] *= (2.0*PI)/((double)(m_theta-1)*m_phi);
+              w[k] *= (2.0*KPI)/((double)(m_theta-1)*m_phi);
               w[m_theta-1-k] = w[k];
             }
             fftw_destroy_plan(fplan);
@@ -569,10 +568,10 @@ int main (int argc, char **argv)
 
             for (d = 0; d < m_total; d++)
             {
-              x_grid[2*d+1] = acos(x_grid[2*d+1])/(2.0*PI);
+              x_grid[2*d+1] = acos(x_grid[2*d+1])/(2.0*KPI);
             }
 
-            w[0] = (4.0*PI)/(m_total);
+            w[0] = (4.0*KPI)/(m_total);
             break;
 
           case GRID_EQUIDISTRIBUTION:
@@ -592,7 +591,7 @@ int main (int argc, char **argv)
 
               for (k = 0; k < SQ[iNQ]/2+1; k++)
               {
-                w_temp[k] *= (2.0*PI)/((double)(SQ[iNQ]));
+                w_temp[k] *= (2.0*KPI)/((double)(SQ[iNQ]));
                 w_temp[SQ[iNQ]-k] = w_temp[k];
               }
               fftw_destroy_plan(fplan);
@@ -607,7 +606,7 @@ int main (int argc, char **argv)
             }
             else
             {
-              w[d] = (4.0*PI)/(m_total);
+              w[d] = (4.0*KPI)/(m_total);
             }
             d = 1;
             x_grid[2*d] = -0.5;
@@ -618,28 +617,28 @@ int main (int argc, char **argv)
             }
             else
             {
-              w[d] = (4.0*PI)/(m_total);
+              w[d] = (4.0*KPI)/(m_total);
             }
             d = 2;
 
             for (k = 1; k < SQ[iNQ]; k++)
             {
-              theta_s = (double)k*PI/(double)SQ[iNQ];
-              M = (int)floor((2.0*PI)/acos((cos(PI/(double)SQ[iNQ])-
+              theta_s = (double)k*KPI/(double)SQ[iNQ];
+              M = (int)floor((2.0*KPI)/acos((cos(KPI/(double)SQ[iNQ])-
                 cos(theta_s)*cos(theta_s))/(sin(theta_s)*sin(theta_s))));
 
               for (n = 0; n < M; n++)
               {
                 x_grid[2*d] = (n + 0.5)/M;
                 x_grid[2*d] -= (x_grid[2*d]>=0.5)?(1.0):(0.0);
-                x_grid[2*d+1] = theta_s/(2.0*PI);
+                x_grid[2*d+1] = theta_s/(2.0*KPI);
                 if (gridtype == GRID_EQUIDISTRIBUTION)
                 {
                   w[d] = w_temp[k]/((double)(M));
                 }
                 else
                 {
-                  w[d] = (4.0*PI)/(m_total);
+                  w[d] = (4.0*KPI)/(m_total);
                 }
                 d++;
               }
@@ -757,18 +756,18 @@ int main (int argc, char **argv)
           case FUNCTION_F1:
             for (d = 0; d < m_total; d++)
             {
-              x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
-              x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
-              x3 = cos(x_grid[2*d+1]*2.0*PI);
+              x1 = sin(x_grid[2*d+1]*2.0*KPI)*cos(x_grid[2*d]*2.0*KPI);
+              x2 = sin(x_grid[2*d+1]*2.0*KPI)*sin(x_grid[2*d]*2.0*KPI);
+              x3 = cos(x_grid[2*d+1]*2.0*KPI);
               f_grid[d] = x1*x2*x3;
             }
             if (mode == RANDOM)
             {
               for (d = 0; d < m_compare; d++)
               {
-                x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
-                x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
-                x3 = cos(x_compare[2*d+1]*2.0*PI);
+                x1 = sin(x_compare[2*d+1]*2.0*KPI)*cos(x_compare[2*d]*2.0*KPI);
+                x2 = sin(x_compare[2*d+1]*2.0*KPI)*sin(x_compare[2*d]*2.0*KPI);
+                x3 = cos(x_compare[2*d+1]*2.0*KPI);
                 f_compare[d] = x1*x2*x3;
               }
             }
@@ -780,18 +779,18 @@ int main (int argc, char **argv)
           case FUNCTION_F2:
             for (d = 0; d < m_total; d++)
             {
-              x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
-              x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
-              x3 = cos(x_grid[2*d+1]*2.0*PI);
+              x1 = sin(x_grid[2*d+1]*2.0*KPI)*cos(x_grid[2*d]*2.0*KPI);
+              x2 = sin(x_grid[2*d+1]*2.0*KPI)*sin(x_grid[2*d]*2.0*KPI);
+              x3 = cos(x_grid[2*d+1]*2.0*KPI);
               f_grid[d] = 0.1*exp(x1+x2+x3);
             }
             if (mode == RANDOM)
             {
               for (d = 0; d < m_compare; d++)
               {
-                x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
-                x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
-                x3 = cos(x_compare[2*d+1]*2.0*PI);
+                x1 = sin(x_compare[2*d+1]*2.0*KPI)*cos(x_compare[2*d]*2.0*KPI);
+                x2 = sin(x_compare[2*d+1]*2.0*KPI)*sin(x_compare[2*d]*2.0*KPI);
+                x3 = cos(x_compare[2*d+1]*2.0*KPI);
                 f_compare[d] = 0.1*exp(x1+x2+x3);
               }
             }
@@ -803,9 +802,9 @@ int main (int argc, char **argv)
           case FUNCTION_F3:
             for (d = 0; d < m_total; d++)
             {
-              x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
-              x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
-              x3 = cos(x_grid[2*d+1]*2.0*PI);
+              x1 = sin(x_grid[2*d+1]*2.0*KPI)*cos(x_grid[2*d]*2.0*KPI);
+              x2 = sin(x_grid[2*d+1]*2.0*KPI)*sin(x_grid[2*d]*2.0*KPI);
+              x3 = cos(x_grid[2*d+1]*2.0*KPI);
               temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
               f_grid[d] = 0.1*temp;
             }
@@ -813,9 +812,9 @@ int main (int argc, char **argv)
             {
               for (d = 0; d < m_compare; d++)
               {
-                x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
-                x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
-                x3 = cos(x_compare[2*d+1]*2.0*PI);
+                x1 = sin(x_compare[2*d+1]*2.0*KPI)*cos(x_compare[2*d]*2.0*KPI);
+                x2 = sin(x_compare[2*d+1]*2.0*KPI)*sin(x_compare[2*d]*2.0*KPI);
+                x3 = cos(x_compare[2*d+1]*2.0*KPI);
                 temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
                 f_compare[d] = 0.1*temp;
               }
@@ -828,9 +827,9 @@ int main (int argc, char **argv)
           case FUNCTION_F4:
             for (d = 0; d < m_total; d++)
             {
-              x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
-              x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
-              x3 = cos(x_grid[2*d+1]*2.0*PI);
+              x1 = sin(x_grid[2*d+1]*2.0*KPI)*cos(x_grid[2*d]*2.0*KPI);
+              x2 = sin(x_grid[2*d+1]*2.0*KPI)*sin(x_grid[2*d]*2.0*KPI);
+              x3 = cos(x_grid[2*d+1]*2.0*KPI);
               temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
               f_grid[d] = 1.0/(temp);
             }
@@ -838,9 +837,9 @@ int main (int argc, char **argv)
             {
               for (d = 0; d < m_compare; d++)
               {
-                x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
-                x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
-                x3 = cos(x_compare[2*d+1]*2.0*PI);
+                x1 = sin(x_compare[2*d+1]*2.0*KPI)*cos(x_compare[2*d]*2.0*KPI);
+                x2 = sin(x_compare[2*d+1]*2.0*KPI)*sin(x_compare[2*d]*2.0*KPI);
+                x3 = cos(x_compare[2*d+1]*2.0*KPI);
                 temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
                 f_compare[d] = 1.0/(temp);
               }
@@ -853,9 +852,9 @@ int main (int argc, char **argv)
           case FUNCTION_F5:
             for (d = 0; d < m_total; d++)
             {
-              x1 = sin(x_grid[2*d+1]*2.0*PI)*cos(x_grid[2*d]*2.0*PI);
-              x2 = sin(x_grid[2*d+1]*2.0*PI)*sin(x_grid[2*d]*2.0*PI);
-              x3 = cos(x_grid[2*d+1]*2.0*PI);
+              x1 = sin(x_grid[2*d+1]*2.0*KPI)*cos(x_grid[2*d]*2.0*KPI);
+              x2 = sin(x_grid[2*d+1]*2.0*KPI)*sin(x_grid[2*d]*2.0*KPI);
+              x3 = cos(x_grid[2*d+1]*2.0*KPI);
               temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
               f_grid[d] = 0.1*sin(1+temp)*sin(1+temp);
             }
@@ -863,9 +862,9 @@ int main (int argc, char **argv)
             {
               for (d = 0; d < m_compare; d++)
               {
-                x1 = sin(x_compare[2*d+1]*2.0*PI)*cos(x_compare[2*d]*2.0*PI);
-                x2 = sin(x_compare[2*d+1]*2.0*PI)*sin(x_compare[2*d]*2.0*PI);
-                x3 = cos(x_compare[2*d+1]*2.0*PI);
+                x1 = sin(x_compare[2*d+1]*2.0*KPI)*cos(x_compare[2*d]*2.0*KPI);
+                x2 = sin(x_compare[2*d+1]*2.0*KPI)*sin(x_compare[2*d]*2.0*KPI);
+                x3 = cos(x_compare[2*d+1]*2.0*KPI);
                 temp = sqrt(x1*x1)+sqrt(x2*x2)+sqrt(x3*x3);
                 f_compare[d] = 0.1*sin(1+temp)*sin(1+temp);
               }
@@ -884,7 +883,7 @@ int main (int argc, char **argv)
               }
               else
               {
-                f_grid[d] = 1.0/(sqrt(1+3*cos(2.0*PI*x_grid[2*d+1])*cos(2.0*PI*x_grid[2*d+1])));
+                f_grid[d] = 1.0/(sqrt(1+3*cos(2.0*KPI*x_grid[2*d+1])*cos(2.0*KPI*x_grid[2*d+1])));
               }
             }
             if (mode == RANDOM)
@@ -897,7 +896,7 @@ int main (int argc, char **argv)
                 }
                 else
                 {
-                  f_compare[d] = 1.0/(sqrt(1+3*cos(2.0*PI*x_compare[2*d+1])*cos(2.0*PI*x_compare[2*d+1])));
+                  f_compare[d] = 1.0/(sqrt(1+3*cos(2.0*KPI*x_compare[2*d+1])*cos(2.0*KPI*x_compare[2*d+1])));
                 }
               }
             }
diff --git a/applications/quadratureS2/quadratureS2.m b/applications/quadratureS2/quadratureS2.m
index 799e380..01f25af 100644
--- a/applications/quadratureS2/quadratureS2.m
+++ b/applications/quadratureS2/quadratureS2.m
@@ -1,9 +1,9 @@
 function quadratureS2()
 %QUADRATURES2
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -19,7 +19,7 @@ function quadratureS2()
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: quadratureS2.m 3784 2012-06-06 20:30:39Z keiner $
+% $Id$
 
 % The name of the input file
 infilename = 'data.in';
diff --git a/applications/quadratureS2/readTestcase.m b/applications/quadratureS2/readTestcase.m
index d54b212..308036a 100644
--- a/applications/quadratureS2/readTestcase.m
+++ b/applications/quadratureS2/readTestcase.m
@@ -1,9 +1,9 @@
 function T = readTestcase(file)
 %READTESTCASE - Read quadratureS2.c testcase results from file
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -19,7 +19,7 @@ function T = readTestcase(file)
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: readTestcase.m 3784 2012-06-06 20:30:39Z keiner $
+% $Id$
 
 % Read the number of testcases.
 tc_max = fscanf(file,'%d',1);
diff --git a/applications/quadratureS2/writeTestcase.m b/applications/quadratureS2/writeTestcase.m
index f2de4f0..d711fc8 100644
--- a/applications/quadratureS2/writeTestcase.m
+++ b/applications/quadratureS2/writeTestcase.m
@@ -2,9 +2,9 @@ function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
   testmode,gridtype,testfunction,repetitions,mode,bandwidths)
 %WRITETESTCASE - Write qudratureS2 testcases
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -20,7 +20,7 @@ function writeTestcase(file,usenfsft,usenfft,cutoff,usefpt,threshold,...
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: writeTestcase.m 3785 2012-06-06 20:38:33Z keiner $
+% $Id$
 
 % Write usenfsft
 fprintf(file,'nfsft=%d\n',usenfsft);
diff --git a/applications/quadratureS2/writeWeights.m b/applications/quadratureS2/writeWeights.m
index f70c775..80b5608 100644
--- a/applications/quadratureS2/writeWeights.m
+++ b/applications/quadratureS2/writeWeights.m
@@ -1,9 +1,9 @@
 function writeWeights(file,m)
 %WRITEWEIGHTS
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -19,7 +19,7 @@ function writeWeights(file,m)
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: writeWeights.m 3784 2012-06-06 20:30:39Z keiner $
+% $Id$
 
 for k = m
   % Generate Gauss-Legendre nodes in co-latitudinal direction.
diff --git a/applications/radon/Makefile.am b/applications/radon/Makefile.am
index 3023ba9..8ad0f75 100644
--- a/applications/radon/Makefile.am
+++ b/applications/radon/Makefile.am
@@ -1,13 +1,13 @@
-# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
 noinst_PROGRAMS = radon inverse_radon
 
 radon_SOURCES = radon.c
-radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+radon_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 inverse_radon_SOURCES = inverse_radon.c
-inverse_radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+inverse_radon_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 EXTRA_DIST = phantom.m radon.m ridgelet.m README
diff --git a/applications/radon/Makefile.in b/applications/radon/Makefile.in
deleted file mode 100644
index 63d5c08..0000000
--- a/applications/radon/Makefile.in
+++ /dev/null
@@ -1,564 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3452 2010-03-15 22:43:05Z keiner $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = radon$(EXEEXT) inverse_radon$(EXEEXT)
-subdir = applications/radon
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_inverse_radon_OBJECTS = inverse_radon.$(OBJEXT)
-inverse_radon_OBJECTS = $(am_inverse_radon_OBJECTS)
-inverse_radon_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_radon_OBJECTS = radon.$(OBJEXT)
-radon_OBJECTS = $(am_radon_OBJECTS)
-radon_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(inverse_radon_SOURCES) $(radon_SOURCES)
-DIST_SOURCES = $(inverse_radon_SOURCES) $(radon_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-radon_SOURCES = radon.c
-radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-inverse_radon_SOURCES = inverse_radon.c
-inverse_radon_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = phantom.m radon.m ridgelet.m README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applications/radon/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu applications/radon/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-inverse_radon$(EXEEXT): $(inverse_radon_OBJECTS) $(inverse_radon_DEPENDENCIES) $(EXTRA_inverse_radon_DEPENDENCIES) 
-	@rm -f inverse_radon$(EXEEXT)
-	$(LINK) $(inverse_radon_OBJECTS) $(inverse_radon_LDADD) $(LIBS)
-radon$(EXEEXT): $(radon_OBJECTS) $(radon_DEPENDENCIES) $(EXTRA_radon_DEPENDENCIES) 
-	@rm -f radon$(EXEEXT)
-	$(LINK) $(radon_OBJECTS) $(radon_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/inverse_radon.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/radon.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/applications/radon/inverse_radon.c b/applications/radon/inverse_radon.c
index 7e22c7d..b0ec803 100644
--- a/applications/radon/inverse_radon.c
+++ b/applications/radon/inverse_radon.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: inverse_radon.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /**
  * \file inverse_radon.c
@@ -46,31 +46,31 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 /** define weights of kernel function for discrete Radon transform */
 /*#define KERNEL(r) 1.0 */
-#define KERNEL(r) (1.0-fabs((double)(r))/((double)R/2))
+#define KERNEL(r) (K(1.0)-FABS((R)(r))/((R)S/2))
 
 /** generates the points x with weights w
  *  for the polar grid with T angles and R offsets
  */
-static int polar_grid(int T, int R, double *x, double *w)
+static int polar_grid(int T, int S, R *x, R *w)
 {
   int t, r;
-  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+  R W = (R) T * (((R) S / K(2.0)) * ((R) S / K(2.0)) + K(1.0) / K(4.0));
 
-  for(t=-T/2; t<T/2; t++)
+  for (t = -T / 2; t < T / 2; t++)
   {
-    for(r=-R/2; r<R/2; r++)
+    for (r = -S / 2; r < S / 2; r++)
     {
-      x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R*cos(PI*t/T);
-      x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R*sin(PI*t/T);
-      if (r==0)
-        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      x[2 * ((t + T / 2) * S + (r + S / 2)) + 0] = (R) r / (R)(S) * COS(KPI * (R)(t) / (R)(T));
+      x[2 * ((t + T / 2) * S + (r + S / 2)) + 1] = (R) r / (R)(S) * SIN(KPI * (R)(t) / (R)(T));
+      if (r == 0)
+        w[(t + T / 2) * S + (r + S / 2)] = K(1.0) / K(4.0) / W;
       else
-        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+        w[(t + T / 2) * S + (r + S / 2)] = FABS((R) r) / W;
     }
   }
 
@@ -80,29 +80,31 @@ static int polar_grid(int T, int R, double *x, double *w)
 /** generates the points x with weights w
  *  for the linogram grid with T slopes and R offsets
  */
-static int linogram_grid(int T, int R, double *x, double *w)
+static int linogram_grid(int T, int S, R *x, R *w)
 {
   int t, r;
-  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+  R W = (R) T * (((R) S / K(2.0)) * ((R) S / K(2.0)) + K(1.0) / K(4.0));
 
-  for(t=-T/2; t<T/2; t++)
+  for (t = -T / 2; t < T / 2; t++)
   {
-    for(r=-R/2; r<R/2; r++)
+    for (r = -S / 2; r < S / 2; r++)
     {
-      if(t<0)
+      if (t < 0)
       {
-        x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R;
-        x[2*((t+T/2)*R+(r+R/2))+1] = (double)4*(t+T/4)/T*r/R;
+        x[2 * ((t + T / 2) * S + (r + S / 2)) + 0] = (R) r / (R)(S);
+        x[2 * ((t + T / 2) * S + (r + S / 2)) + 1] = K(4.0) * ((R)(t) + (R)(T) / K(4.0)) / (R)(T) * (R)(r)
+            / (R)(S);
       }
       else
       {
-        x[2*((t+T/2)*R+(r+R/2))+0] = -(double)4*(t-T/4)/T*r/R;
-        x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R;
+        x[2 * ((t + T / 2) * S + (r + S / 2)) + 0] = -K(4.0) * ((R)(t) - (R)(T) / K(4.0)) / (R)(T)
+            * (R)(r) / (R)(S);
+        x[2 * ((t + T / 2) * S + (r + S / 2)) + 1] = (R) r / (R)(S);
       }
-      if (r==0)
-        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      if (r == 0)
+        w[(t + T / 2) * S + (r + S / 2)] = K(1.0) / K(4.0) / W;
       else
-        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+        w[(t + T / 2) * S + (r + S / 2)] = FABS((R) r) / W;
     }
   }
 
@@ -113,136 +115,141 @@ static int linogram_grid(int T, int R, double *x, double *w)
  *  on the grid given by gridfcn() with T angles and R offsets
  *  by a NFFT-based CG-type algorithm
  */
-int Inverse_Radon_trafo(int (*gridfcn)(), int T, int R, double *Rf, int NN, double *f, int max_i)
+static int inverse_radon_trafo(int (*gridfcn)(), int T, int S, R *Rf, int NN, R *f,
+    int max_i)
 {
-  int j,k;                              /**< index for nodes and freqencies   */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
-  solver_plan_complex my_infft_plan;             /**< plan for the inverse nfft        */
+  int j, k; /**< index for nodes and freqencies   */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
+  SOLVER(plan_complex) my_infft_plan; /**< plan for the inverse nfft        */
 
-  fftw_complex *fft;                    /**< variable for the fftw-1Ds        */
-  fftw_plan my_fftw_plan;               /**< plan for the fftw-1Ds            */
+  C *fft; /**< variable for the fftw-1Ds        */
+  FFTW(plan) my_fftw_plan; /**< plan for the fftw-1Ds            */
 
-  int t,r;                              /**< index for directions and offsets */
-  double *x, *w;                        /**< knots and associated weights     */
-  int l;                                /**< index for iterations             */
+  int t, r; /**< index for directions and offsets */
+  R *x, *w; /**< knots and associated weights     */
+  int l; /**< index for iterations             */
 
-  int N[2],n[2];
-  int M=T*R;
+  int N[2], n[2];
+  int M = T * S;
 
-  N[0]=NN; n[0]=2*N[0];
-  N[1]=NN; n[1]=2*N[1];
+  N[0] = NN;
+  n[0] = 2 * N[0];
+  N[1] = NN;
+  n[1] = 2 * N[1];
 
-  fft = (fftw_complex *)nfft_malloc(R*sizeof(fftw_complex));
-  my_fftw_plan = fftw_plan_dft_1d(R,fft,fft,FFTW_FORWARD,FFTW_MEASURE);
+  fft = (C *) NFFT(malloc)((size_t)(S) * sizeof(C));
+  my_fftw_plan = FFTW(plan_dft_1d)(S, fft, fft, FFTW_FORWARD, FFTW_MEASURE);
 
-  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(2 * T * S) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(T*R*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(T * S) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, 4,
-                  PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                  FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, 4,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init two dimensional infft plan */
-  solver_init_advanced_complex(&my_infft_plan,(nfft_mv_plan_complex*)(&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT);
+  SOLVER(init_advanced_complex)(&my_infft_plan,
+      (NFFT(mv_plan_complex)*) (&my_nfft_plan), CGNR | PRECOMPUTE_WEIGHT);
 
   /** init nodes and weights of grid*/
-  gridfcn(T,R,x,w);
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  gridfcn(T, S, x, w);
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
-    if (j%R)
-      my_infft_plan.w[j]    = w[j];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
+    if (j % S)
+      my_infft_plan.w[j] = w[j];
     else
-      my_infft_plan.w[j]    = 0.0;
+      my_infft_plan.w[j] = K(0.0);
   }
 
   /** precompute psi, the entries of the matrix B */
-  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_LIN_PSI)
+    NFFT(precompute_lin_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_PSI)
-    nfft_precompute_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_PSI)
+    NFFT(precompute_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_FULL_PSI)
+    NFFT(precompute_full_psi)(&my_nfft_plan);
 
   /** compute 1D-ffts and init given samples and weights */
-  for(t=0; t<T; t++)
+  for (t = 0; t < T; t++)
   {
-/*    for(r=0; r<R/2; r++)
-       fft[r] = cexp(I*PI*r)*Rf[t*R+(r+R/2)];
-      for(r=0; r<R/2; r++)
-       fft[r+R/2] = cexp(I*PI*r)*Rf[t*R+r];
- */
-
-    for(r=0; r<R; r++)
-      fft[r] = Rf[t*R+r] + _Complex_I*0.0;
-
-    nfft_fftshift_complex(fft, 1, &R);
-    fftw_execute(my_fftw_plan);
-    nfft_fftshift_complex(fft, 1, &R);
-
-    my_infft_plan.y[t*R] = 0.0;
-    for(r=-R/2+1; r<R/2; r++)
-      my_infft_plan.y[t*R+(r+R/2)] = fft[r+R/2]/KERNEL(r);
+    /*    for(r=0; r<R/2; r++)
+     fft[r] = cexp(I*KPI*r)*Rf[t*R+(r+R/2)];
+     for(r=0; r<R/2; r++)
+     fft[r+R/2] = cexp(I*KPI*r)*Rf[t*R+r];
+     */
+
+    for (r = 0; r < S; r++)
+      fft[r] = Rf[t * S + r] + II * K(0.0);
+
+    NFFT(fftshift_complex_int)(fft, 1, &S);
+    FFTW(execute)(my_fftw_plan);
+    NFFT(fftshift_complex_int)(fft, 1, &S);
+
+    my_infft_plan.y[t * S] = K(0.0);
+    for (r = -S / 2 + 1; r < S / 2; r++)
+      my_infft_plan.y[t * S + (r + S / 2)] = fft[r + S / 2] / KERNEL(r);
   }
 
   /** initialise some guess f_hat_0 */
-  for(k=0;k<my_nfft_plan.N_total;k++)
-    my_infft_plan.f_hat_iter[k] = 0.0 + _Complex_I*0.0;
+  for (k = 0; k < my_nfft_plan.N_total; k++)
+    my_infft_plan.f_hat_iter[k] = K(0.0) + II * K(0.0);
 
   /** solve the system */
-  solver_before_loop_complex(&my_infft_plan);
+  SOLVER(before_loop_complex)(&my_infft_plan);
 
-  if (max_i<1)
+  if (max_i < 1)
   {
-    l=1;
-    for(k=0;k<my_nfft_plan.N_total;k++)
+    l = 1;
+    for (k = 0; k < my_nfft_plan.N_total; k++)
       my_infft_plan.f_hat_iter[k] = my_infft_plan.p_hat_iter[k];
   }
   else
   {
-    for(l=1;l<=max_i;l++)
+    for (l = 1; l <= max_i; l++)
     {
-      solver_loop_one_step_complex(&my_infft_plan);
+      SOLVER(loop_one_step_complex)(&my_infft_plan);
       /*if (sqrt(my_infft_plan.dot_r_iter)<=1e-12) break;*/
     }
   }
   /*printf("after %d iteration(s): weighted 2-norm of original residual vector = %g\n",l-1,sqrt(my_infft_plan.dot_r_iter));*/
 
   /** copy result */
-  for(k=0;k<my_nfft_plan.N_total;k++)
-    f[k] = creal(my_infft_plan.f_hat_iter[k]);
+  for (k = 0; k < my_nfft_plan.N_total; k++)
+    f[k] = CREAL(my_infft_plan.f_hat_iter[k]);
 
   /** finalise the plans and free the variables */
-  fftw_destroy_plan(my_fftw_plan);
-  nfft_free(fft);
-  solver_finalize_complex(&my_infft_plan);
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  FFTW(destroy_plan)(my_fftw_plan);
+  NFFT(free)(fft);
+  SOLVER(finalize_complex)(&my_infft_plan);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
   return 0;
 }
 
 /** simple test program for the inverse discrete Radon transform
  */
-int main(int argc,char **argv)
+int main(int argc, char **argv)
 {
-  int (*gridfcn)();                     /**< grid generating function        */
-  int T, R;                             /**< number of directions/offsets    */
+  int (*gridfcn)(); /**< grid generating function        */
+  int T, S; /**< number of directions/offsets    */
   FILE *fp;
-  int N;                                /**< image size                      */
-  double *Rf, *iRf;
-  int max_i;                            /**< number of iterations            */
+  int N; /**< image size                      */
+  R *Rf, *iRf;
+  int max_i; /**< number of iterations            */
 
-  if( argc!=6 )
+  if (argc != 6)
   {
     printf("inverse_radon gridfcn N T R max_i\n");
     printf("\n");
@@ -251,43 +258,43 @@ int main(int argc,char **argv)
     printf("T          number of slopes          \n");
     printf("R          number of offsets         \n");
     printf("max_i      number of iterations      \n");
-    exit(-1);
+    exit(EXIT_FAILURE);
   }
 
-  if (strcmp(argv[1],"polar") == 0)
+  if (strcmp(argv[1], "polar") == 0)
     gridfcn = polar_grid;
   else
     gridfcn = linogram_grid;
 
   N = atoi(argv[2]);
   T = atoi(argv[3]);
-  R = atoi(argv[4]);
+  S = atoi(argv[4]);
   /*printf("N=%d, %s grid with T=%d, R=%d. \n",N,argv[1],T,R);*/
   max_i = atoi(argv[5]);
 
-  Rf  = (double *)nfft_malloc(T*R*(sizeof(double)));
-  iRf = (double *)nfft_malloc(N*N*(sizeof(double)));
+  Rf = (R *) NFFT(malloc)((size_t)(T * S) * (sizeof(R)));
+  iRf = (R *) NFFT(malloc)((size_t)(N * N) * (sizeof(R)));
 
   /** load data */
-  fp=fopen("sinogram_data.bin","rb");
-  if (fp==NULL)
-    return(-1);
-  fread(Rf,sizeof(double),T*R,fp);
+  fp = fopen("sinogram_data.bin", "rb");
+  if (fp == NULL)
+    return EXIT_FAILURE;
+  fread(Rf, sizeof(R), (size_t)(T * S), fp);
   fclose(fp);
 
   /** inverse Radon transform */
-  Inverse_Radon_trafo(gridfcn,T,R,Rf,N,iRf,max_i);
+  inverse_radon_trafo(gridfcn, T, S, Rf, N, iRf, max_i);
 
   /** write result */
-  fp=fopen("output_data.bin","wb+");
-  if (fp==NULL)
-    return(-1);
-  fwrite(iRf,sizeof(double),N*N,fp);
+  fp = fopen("output_data.bin", "wb+");
+  if (fp == NULL)
+    return EXIT_FAILURE;
+  fwrite(iRf, sizeof(R), (size_t)(N * N), fp);
   fclose(fp);
 
   /** free the variables */
-  nfft_free(Rf);
-  nfft_free(iRf);
+  NFFT(free)(Rf);
+  NFFT(free)(iRf);
 
   return EXIT_SUCCESS;
 }
diff --git a/applications/radon/phantom.m b/applications/radon/phantom.m
index 3d17d08..2e960ac 100644
--- a/applications/radon/phantom.m
+++ b/applications/radon/phantom.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: phantom.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function I=phantom(N)
 % phantom(N)
 %  generates the (modified) Shepp-Logan phantom of P. Toft
diff --git a/applications/radon/radon.c b/applications/radon/radon.c
index 9255104..30a8640 100644
--- a/applications/radon/radon.c
+++ b/applications/radon/radon.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: radon.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /**
  * \file radon.c
@@ -47,31 +47,31 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 /** define weights of kernel function for discrete Radon transform */
 /*#define KERNEL(r) 1.0 */
-#define KERNEL(r) (1.0-fabs((double)(r))/((double)R/2))
+#define KERNEL(r) (K(1.0)-FABS((R)(r))/((R)S/2))
 
 /** generates the points x with weights w
  *  for the polar grid with T angles and R offsets
  */
-static int polar_grid(int T, int R, double *x, double *w)
+static int polar_grid(int T, int S, R *x, R *w)
 {
   int t, r;
-  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+  R W = (R) T * (((R) S / K(2.0)) * ((R) S / K(2.0)) + K(1.0) / K(4.0));
 
-  for(t=-T/2; t<T/2; t++)
+  for (t = -T / 2; t < T / 2; t++)
   {
-    for(r=-R/2; r<R/2; r++)
+    for (r = -S / 2; r < S / 2; r++)
     {
-      x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R*cos(PI*t/T);
-      x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R*sin(PI*t/T);
-      if (r==0)
-        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      x[2 * ((t + T / 2) * S + (r + S / 2)) + 0] = (R) r / (R)(S) * COS(KPI * (R)(t) / (R)(T));
+      x[2 * ((t + T / 2) * S + (r + S / 2)) + 1] = (R) r / (R)(S) * SIN(KPI * (R)(t) / (R)(T));
+      if (r == 0)
+        w[(t + T / 2) * S + (r + S / 2)] = K(1.0) / K(4.0) / W;
       else
-        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+        w[(t + T / 2) * S + (r + S / 2)] = FABS((R) r) / W;
     }
   }
 
@@ -81,29 +81,31 @@ static int polar_grid(int T, int R, double *x, double *w)
 /** generates the points x with weights w
  *  for the linogram grid with T slopes and R offsets
  */
-static int linogram_grid(int T, int R, double *x, double *w)
+static int linogram_grid(int T, int S, R *x, R *w)
 {
   int t, r;
-  double W=(double)T*(((double)R/2.0)*((double)R/2.0)+1.0/4.0);
+  R W = (R) T * (((R) S / K(2.0)) * ((R) S / K(2.0)) + K(1.0) / K(4.0));
 
-  for(t=-T/2; t<T/2; t++)
+  for (t = -T / 2; t < T / 2; t++)
   {
-    for(r=-R/2; r<R/2; r++)
+    for (r = -S / 2; r < S / 2; r++)
     {
-      if(t<0)
+      if (t < 0)
       {
-        x[2*((t+T/2)*R+(r+R/2))+0] = (double)r/R;
-        x[2*((t+T/2)*R+(r+R/2))+1] = (double)4*(t+T/4)/T*r/R;
+        x[2 * ((t + T / 2) * S + (r + S / 2)) + 0] = (R) r / (R)(S);
+        x[2 * ((t + T / 2) * S + (r + S / 2)) + 1] = K(4.0) * ((R)(t) + (R)(T) / K(4.0)) / (R)(T) * (R)(r)
+            / (R)(S);
       }
       else
       {
-        x[2*((t+T/2)*R+(r+R/2))+0] = -(double)4*(t-T/4)/T*r/R;
-        x[2*((t+T/2)*R+(r+R/2))+1] = (double)r/R;
+        x[2 * ((t + T / 2) * S + (r + S / 2)) + 0] = -K(4.0) * ((R)(t) - (R)(T) / K(4.0)) / (R)(T)
+            * (R)(r) / (R)(S);
+        x[2 * ((t + T / 2) * S + (r + S / 2)) + 1] = (R) r / (R)(S);
       }
-      if (r==0)
-        w[(t+T/2)*R+(r+R/2)] = 1.0/4.0/W;
+      if (r == 0)
+        w[(t + T / 2) * S + (r + S / 2)] = K(1.0) / K(4.0) / W;
       else
-        w[(t+T/2)*R+(r+R/2)] = fabs((double)r)/W;
+        w[(t + T / 2) * S + (r + S / 2)] = FABS((R) r) / W;
     }
   }
 
@@ -113,106 +115,108 @@ static int linogram_grid(int T, int R, double *x, double *w)
 /** computes the NFFT-based discrete Radon transform of f
  *  on the grid given by gridfcn() with T angles and R offsets
  */
-int Radon_trafo(int (*gridfcn)(), int T, int R, double *f, int NN, double *Rf)
+static int Radon_trafo(int (*gridfcn)(), int T, int S, R *f, int NN, R *Rf)
 {
-  int j,k;                              /**< index for nodes and freqencies   */
-  nfft_plan my_nfft_plan;               /**< plan for the nfft-2D             */
+  int j, k; /**< index for nodes and freqencies   */
+  NFFT(plan) my_nfft_plan; /**< plan for the nfft-2D             */
 
-  fftw_complex *fft;                    /**< variable for the fftw-1Ds        */
-  fftw_plan my_fftw_plan;               /**< plan for the fftw-1Ds            */
+  C *fft; /**< variable for the fftw-1Ds        */
+  FFTW(plan) my_fftw_plan; /**< plan for the fftw-1Ds            */
 
-  int t,r;                              /**< index for directions and offsets */
-  double *x, *w;                        /**< knots and associated weights     */
+  int t, r; /**< index for directions and offsets */
+  R *x, *w; /**< knots and associated weights     */
 
-  int N[2],n[2];
-  int M=T*R;
+  int N[2], n[2];
+  int M = T * S;
 
-  N[0]=NN; n[0]=2*N[0];
-  N[1]=NN; n[1]=2*N[1];
+  N[0] = NN;
+  n[0] = 2 * N[0];
+  N[1] = NN;
+  n[1] = 2 * N[1];
 
-  fft = (fftw_complex *)nfft_malloc(R*sizeof(fftw_complex));
-  my_fftw_plan = fftw_plan_dft_1d(R,fft,fft,FFTW_BACKWARD,FFTW_MEASURE);
+  fft = (C *) NFFT(malloc)((size_t)(S) * sizeof(C));
+  my_fftw_plan = FFTW(plan_dft_1d)(S, fft, fft, FFTW_BACKWARD, FFTW_MEASURE);
 
-  x = (double *)nfft_malloc(2*T*R*(sizeof(double)));
-  if (x==NULL)
-    return -1;
+  x = (R *) NFFT(malloc)((size_t)(2 * T * S) * (sizeof(R)));
+  if (x == NULL)
+    return EXIT_FAILURE;
 
-  w = (double *)nfft_malloc(T*R*(sizeof(double)));
-  if (w==NULL)
-    return -1;
+  w = (R *) NFFT(malloc)((size_t)(T * S) * (sizeof(R)));
+  if (w == NULL)
+    return EXIT_FAILURE;
 
   /** init two dimensional NFFT plan */
-  nfft_init_guru(&my_nfft_plan, 2, N, M, n, 4,
-                 PRE_PHI_HUT| PRE_PSI| MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
-                 FFTW_MEASURE| FFTW_DESTROY_INPUT);
-
+  NFFT(init_guru)(&my_nfft_plan, 2, N, M, n, 4,
+      PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+          | FFT_OUT_OF_PLACE,
+      FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init nodes from grid*/
-  gridfcn(T,R,x,w);
-  for(j=0;j<my_nfft_plan.M_total;j++)
+  gridfcn(T, S, x, w);
+  for (j = 0; j < my_nfft_plan.M_total; j++)
   {
-    my_nfft_plan.x[2*j+0] = x[2*j+0];
-    my_nfft_plan.x[2*j+1] = x[2*j+1];
+    my_nfft_plan.x[2 * j + 0] = x[2 * j + 0];
+    my_nfft_plan.x[2 * j + 1] = x[2 * j + 1];
   }
 
   /** precompute psi, the entries of the matrix B */
-  if(my_nfft_plan.nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_LIN_PSI)
+    NFFT(precompute_lin_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_PSI)
-    nfft_precompute_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_PSI)
+    NFFT(precompute_psi)(&my_nfft_plan);
 
-  if(my_nfft_plan.nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(&my_nfft_plan);
+  if (my_nfft_plan.flags & PRE_FULL_PSI)
+    NFFT(precompute_full_psi)(&my_nfft_plan);
 
   /** init Fourier coefficients from given image */
-  for(k=0;k<my_nfft_plan.N_total;k++)
-    my_nfft_plan.f_hat[k] = f[k] + _Complex_I*0.0;
+  for (k = 0; k < my_nfft_plan.N_total; k++)
+    my_nfft_plan.f_hat[k] = f[k] + II * K(0.0);
 
   /** NFFT-2D */
-  nfft_trafo(&my_nfft_plan);
+  NFFT(trafo)(&my_nfft_plan);
 
   /** FFTW-1Ds */
-  for(t=0; t<T; t++)
+  for (t = 0; t < T; t++)
   {
-    fft[0]=0.0;
-    for(r=-R/2+1; r<R/2; r++)
-      fft[r+R/2] = KERNEL(r)*my_nfft_plan.f[t*R+(r+R/2)];
-
-    nfft_fftshift_complex(fft, 1, &R);
-    fftw_execute(my_fftw_plan);
-    nfft_fftshift_complex(fft, 1, &R);
-
-    for(r=0; r<R; r++)
-      Rf[t*R+r] = creal(fft[r])/R;
-
-/*    for(r=0; r<R/2; r++)
-      Rf[t*R+(r+R/2)] = creal(cexp(-I*PI*r)*fft[r]);
-    for(r=0; r<R/2; r++)
-      Rf[t*R+r] = creal(cexp(-I*PI*r)*fft[r+R/2]);
- */
+    fft[0] = K(0.0);
+    for (r = -S / 2 + 1; r < S / 2; r++)
+      fft[r + S / 2] = KERNEL(r) * my_nfft_plan.f[t * S + (r + S / 2)];
+
+    NFFT(fftshift_complex_int)(fft, 1, &S);
+    FFTW(execute)(my_fftw_plan);
+    NFFT(fftshift_complex_int)(fft, 1, &S);
+
+    for (r = 0; r < S; r++)
+      Rf[t * S + r] = CREAL(fft[r]) / (R)(S);
+
+    /*    for(r=0; r<R/2; r++)
+     Rf[t*R+(r+R/2)] = creal(cexp(-I*KPI*r)*fft[r]);
+     for(r=0; r<R/2; r++)
+     Rf[t*R+r] = creal(cexp(-I*KPI*r)*fft[r+R/2]);
+     */
   }
 
   /** finalise the plans and free the variables */
-  fftw_destroy_plan(my_fftw_plan);
-  nfft_free(fft);
-  nfft_finalize(&my_nfft_plan);
-  nfft_free(x);
-  nfft_free(w);
+  FFTW(destroy_plan)(my_fftw_plan);
+  NFFT(free)(fft);
+  NFFT(finalize)(&my_nfft_plan);
+  NFFT(free)(x);
+  NFFT(free)(w);
   return 0;
 }
 
 /** simple test program for the discrete Radon transform
  */
-int main(int argc,char **argv)
+int main(int argc, char **argv)
 {
-  int (*gridfcn)();                     /**< grid generating function        */
-  int T, R;                             /**< number of directions/offsets    */
+  int (*gridfcn)(); /**< grid generating function        */
+  int T, S; /**< number of directions/offsets    */
   FILE *fp;
-  int N;                                /**< image size                      */
-  double *f, *Rf;
+  int N; /**< image size                      */
+  R *f, *Rf;
 
-  if( argc!=5 )
+  if (argc != 5)
   {
     printf("radon gridfcn N T R\n");
     printf("\n");
@@ -220,42 +224,42 @@ int main(int argc,char **argv)
     printf("N          image size NxN            \n");
     printf("T          number of slopes          \n");
     printf("R          number of offsets         \n");
-    exit(-1);
+    exit(EXIT_FAILURE);
   }
 
-  if (strcmp(argv[1],"polar") == 0)
+  if (strcmp(argv[1], "polar") == 0)
     gridfcn = polar_grid;
   else
     gridfcn = linogram_grid;
 
   N = atoi(argv[2]);
   T = atoi(argv[3]);
-  R = atoi(argv[4]);
+  S = atoi(argv[4]);
   /*printf("N=%d, %s grid with T=%d, R=%d. \n",N,argv[1],T,R);*/
 
-  f   = (double *)nfft_malloc(N*N*(sizeof(double)));
-  Rf  = (double *)nfft_malloc(T*R*(sizeof(double)));
+  f = (R *) NFFT(malloc)((size_t)(N * N) * (sizeof(R)));
+  Rf = (R *) NFFT(malloc)((size_t)(T * S) * (sizeof(R)));
 
   /** load data */
-  fp=fopen("input_data.bin","rb");
-  if (fp==NULL)
-    return(-1);
-  fread(f,sizeof(double),N*N,fp);
+  fp = fopen("input_data.bin", "rb");
+  if (fp == NULL)
+    return EXIT_FAILURE;
+  fread(f, sizeof(R), (size_t)(N * N), fp);
   fclose(fp);
 
   /** Radon transform */
-  Radon_trafo(gridfcn,T,R,f,N,Rf);
+  Radon_trafo(gridfcn, T, S, f, N, Rf);
 
   /** write result */
-  fp=fopen("sinogram_data.bin","wb+");
-  if (fp==NULL)
-    return(-1);
-  fwrite(Rf,sizeof(double),T*R,fp);
+  fp = fopen("sinogram_data.bin", "wb+");
+  if (fp == NULL)
+    return EXIT_FAILURE;
+  fwrite(Rf, sizeof(R), (size_t)(T * S), fp);
   fclose(fp);
 
   /** free the variables */
-  nfft_free(f);
-  nfft_free(Rf);
+  NFFT(free)(f);
+  NFFT(free)(Rf);
 
   return EXIT_SUCCESS;
 }
diff --git a/applications/radon/radon.m b/applications/radon/radon.m
index 8c758f3..39c3c35 100644
--- a/applications/radon/radon.m
+++ b/applications/radon/radon.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: radon.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 %file: radon.m
 %
 %  Simple test program for NFFT-based discrete
diff --git a/applications/radon/ridgelet.m b/applications/radon/ridgelet.m
index fb615d0..9682da2 100644
--- a/applications/radon/ridgelet.m
+++ b/applications/radon/ridgelet.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: ridgelet.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 %file: ridgelet.m
 %
 %  Simple test program for denoising an image
diff --git a/bootstrap.sh b/bootstrap.sh
old mode 100644
new mode 100755
diff --git a/config/compile b/config/compile
deleted file mode 100644
index 7b4a9a7..0000000
--- a/config/compile
+++ /dev/null
@@ -1,342 +0,0 @@
-#! /bin/sh
-# Wrapper for compilers which do not understand '-c -o'.
-
-scriptversion=2012-03-05.13; # UTC
-
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
-# Written by Tom Tromey <tromey at cygnus.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake at gnu.org> or send patches to
-# <automake-patches at gnu.org>.
-
-nl='
-'
-
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent tools from complaining about whitespace usage.
-IFS=" ""	$nl"
-
-file_conv=
-
-# func_file_conv build_file lazy
-# Convert a $build file to $host form and store it in $file
-# Currently only supports Windows hosts. If the determined conversion
-# type is listed in (the comma separated) LAZY, no conversion will
-# take place.
-func_file_conv ()
-{
-  file=$1
-  case $file in
-    / | /[!/]*) # absolute file, and not a UNC file
-      if test -z "$file_conv"; then
-	# lazily determine how to convert abs files
-	case `uname -s` in
-	  MINGW*)
-	    file_conv=mingw
-	    ;;
-	  CYGWIN*)
-	    file_conv=cygwin
-	    ;;
-	  *)
-	    file_conv=wine
-	    ;;
-	esac
-      fi
-      case $file_conv/,$2, in
-	*,$file_conv,*)
-	  ;;
-	mingw/*)
-	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
-	  ;;
-	cygwin/*)
-	  file=`cygpath -m "$file" || echo "$file"`
-	  ;;
-	wine/*)
-	  file=`winepath -w "$file" || echo "$file"`
-	  ;;
-      esac
-      ;;
-  esac
-}
-
-# func_cl_dashL linkdir
-# Make cl look for libraries in LINKDIR
-func_cl_dashL ()
-{
-  func_file_conv "$1"
-  if test -z "$lib_path"; then
-    lib_path=$file
-  else
-    lib_path="$lib_path;$file"
-  fi
-  linker_opts="$linker_opts -LIBPATH:$file"
-}
-
-# func_cl_dashl library
-# Do a library search-path lookup for cl
-func_cl_dashl ()
-{
-  lib=$1
-  found=no
-  save_IFS=$IFS
-  IFS=';'
-  for dir in $lib_path $LIB
-  do
-    IFS=$save_IFS
-    if $shared && test -f "$dir/$lib.dll.lib"; then
-      found=yes
-      lib=$dir/$lib.dll.lib
-      break
-    fi
-    if test -f "$dir/$lib.lib"; then
-      found=yes
-      lib=$dir/$lib.lib
-      break
-    fi
-  done
-  IFS=$save_IFS
-
-  if test "$found" != yes; then
-    lib=$lib.lib
-  fi
-}
-
-# func_cl_wrapper cl arg...
-# Adjust compile command to suit cl
-func_cl_wrapper ()
-{
-  # Assume a capable shell
-  lib_path=
-  shared=:
-  linker_opts=
-  for arg
-  do
-    if test -n "$eat"; then
-      eat=
-    else
-      case $1 in
-	-o)
-	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
-	  eat=1
-	  case $2 in
-	    *.o | *.[oO][bB][jJ])
-	      func_file_conv "$2"
-	      set x "$@" -Fo"$file"
-	      shift
-	      ;;
-	    *)
-	      func_file_conv "$2"
-	      set x "$@" -Fe"$file"
-	      shift
-	      ;;
-	  esac
-	  ;;
-	-I)
-	  eat=1
-	  func_file_conv "$2" mingw
-	  set x "$@" -I"$file"
-	  shift
-	  ;;
-	-I*)
-	  func_file_conv "${1#-I}" mingw
-	  set x "$@" -I"$file"
-	  shift
-	  ;;
-	-l)
-	  eat=1
-	  func_cl_dashl "$2"
-	  set x "$@" "$lib"
-	  shift
-	  ;;
-	-l*)
-	  func_cl_dashl "${1#-l}"
-	  set x "$@" "$lib"
-	  shift
-	  ;;
-	-L)
-	  eat=1
-	  func_cl_dashL "$2"
-	  ;;
-	-L*)
-	  func_cl_dashL "${1#-L}"
-	  ;;
-	-static)
-	  shared=false
-	  ;;
-	-Wl,*)
-	  arg=${1#-Wl,}
-	  save_ifs="$IFS"; IFS=','
-	  for flag in $arg; do
-	    IFS="$save_ifs"
-	    linker_opts="$linker_opts $flag"
-	  done
-	  IFS="$save_ifs"
-	  ;;
-	-Xlinker)
-	  eat=1
-	  linker_opts="$linker_opts $2"
-	  ;;
-	-*)
-	  set x "$@" "$1"
-	  shift
-	  ;;
-	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
-	  func_file_conv "$1"
-	  set x "$@" -Tp"$file"
-	  shift
-	  ;;
-	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
-	  func_file_conv "$1" mingw
-	  set x "$@" "$file"
-	  shift
-	  ;;
-	*)
-	  set x "$@" "$1"
-	  shift
-	  ;;
-      esac
-    fi
-    shift
-  done
-  if test -n "$linker_opts"; then
-    linker_opts="-link$linker_opts"
-  fi
-  exec "$@" $linker_opts
-  exit 1
-}
-
-eat=
-
-case $1 in
-  '')
-     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: compile [--help] [--version] PROGRAM [ARGS]
-
-Wrapper for compilers which do not understand '-c -o'.
-Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
-arguments, and rename the output as expected.
-
-If you are trying to build a whole package this is not the
-right script to run: please start by reading the file 'INSTALL'.
-
-Report bugs to <bug-automake at gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "compile $scriptversion"
-    exit $?
-    ;;
-  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
-    func_cl_wrapper "$@"      # Doesn't return...
-    ;;
-esac
-
-ofile=
-cfile=
-
-for arg
-do
-  if test -n "$eat"; then
-    eat=
-  else
-    case $1 in
-      -o)
-	# configure might choose to run compile as 'compile cc -o foo foo.c'.
-	# So we strip '-o arg' only if arg is an object.
-	eat=1
-	case $2 in
-	  *.o | *.obj)
-	    ofile=$2
-	    ;;
-	  *)
-	    set x "$@" -o "$2"
-	    shift
-	    ;;
-	esac
-	;;
-      *.c)
-	cfile=$1
-	set x "$@" "$1"
-	shift
-	;;
-      *)
-	set x "$@" "$1"
-	shift
-	;;
-    esac
-  fi
-  shift
-done
-
-if test -z "$ofile" || test -z "$cfile"; then
-  # If no '-o' option was seen then we might have been invoked from a
-  # pattern rule where we don't need one.  That is ok -- this is a
-  # normal compilation that the losing compiler can handle.  If no
-  # '.c' file was seen then we are probably linking.  That is also
-  # ok.
-  exec "$@"
-fi
-
-# Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
-
-# Create the lock directory.
-# Note: use '[/\\:.-]' here to ensure that we don't use the same name
-# that we are using for the .o file.  Also, base the name on the expected
-# object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
-while true; do
-  if mkdir "$lockdir" >/dev/null 2>&1; then
-    break
-  fi
-  sleep 1
-done
-# FIXME: race condition here if user kills between mkdir and trap.
-trap "rmdir '$lockdir'; exit 1" 1 2 15
-
-# Run the compile.
-"$@"
-ret=$?
-
-if test -f "$cofile"; then
-  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
-elif test -f "${cofile}bj"; then
-  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
-fi
-
-rmdir "$lockdir"
-exit $ret
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/config/config.guess b/config/config.guess
deleted file mode 100644
index de8e6dd..0000000
--- a/config/config.guess
+++ /dev/null
@@ -1,1540 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011, 2012 Free Software Foundation, Inc.
-
-timestamp='2012-02-10'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner.  Please send patches (context
-# diff format) to <config-patches at gnu.org> and include a ChangeLog
-# entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches at gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-	for c in cc gcc c89 c99 ; do
-	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-	     CC_FOR_BUILD="$c"; break ;
-	  fi ;
-	done ;
-	if test x"$CC_FOR_BUILD" = x ; then
-	  CC_FOR_BUILD=no_compiler_found ;
-	fi
-	;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi at noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-	PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-case "${UNAME_MACHINE}" in
-  i?86)
-     test -z "$VENDOR" && VENDOR=pc
-     ;;
-  *)
-     test -z "$VENDOR" && VENDOR=unknown
-     ;;
-esac
-test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
-	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-	# switched to ELF, *-*-netbsd* would select the old
-	# object file format.  This provides both forward
-	# compatibility and a consistent mechanism for selecting the
-	# object file format.
-	#
-	# Note: NetBSD doesn't particularly care about the vendor
-	# portion of the name.  We always set it to "unknown".
-	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-	case "${UNAME_MACHINE_ARCH}" in
-	    armeb) machine=armeb-unknown ;;
-	    arm*) machine=arm-unknown ;;
-	    sh3el) machine=shl-unknown ;;
-	    sh3eb) machine=sh-unknown ;;
-	    sh5el) machine=sh5le-unknown ;;
-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-	esac
-	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
-	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval $set_cc_for_build
-		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep -q __ELF__
-		then
-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-		    # Return netbsd for either.  FIX?
-		    os=netbsd
-		else
-		    os=netbsdelf
-		fi
-		;;
-	    *)
-		os=netbsd
-		;;
-	esac
-	# The OS release
-	# Debian GNU/NetBSD machines have a different userland, and
-	# thus, need a distinct triplet. However, they do not need
-	# kernel version information, so it can be replaced with a
-	# suitable tag, in the style of linux-gnu.
-	case "${UNAME_VERSION}" in
-	    Debian*)
-		release='-gnu'
-		;;
-	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-		;;
-	esac
-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-	# contains redundant information, the shorter form:
-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
-	exit ;;
-    *:OpenBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-	echo ${UNAME_MACHINE_ARCH}-${VENDOR}-openbsd${UNAME_RELEASE}
-	exit ;;
-    *:ekkoBSD:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE}
-	exit ;;
-    *:SolidBSD:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE}
-	exit ;;
-    macppc:MirBSD:*:*)
-	echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE}
-	exit ;;
-    *:MirBSD:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-mirbsd${UNAME_RELEASE}
-	exit ;;
-    alpha:OSF1:*:*)
-	case $UNAME_RELEASE in
-	*4.0)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-		;;
-	*5.*)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-		;;
-	esac
-	# According to Compaq, /usr/sbin/psrinfo has been available on
-	# OSF/1 and Tru64 systems produced since 1995.  I hope that
-	# covers most systems running today.  This code pipes the CPU
-	# types through head -n 1, so we only detect the type of CPU 0.
-	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-	case "$ALPHA_CPU_TYPE" in
-	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
-	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
-	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
-	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
-	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
-	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
-	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
-	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
-	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
-	esac
-	# A Pn.n version is a patched version.
-	# A Vn.n version is a released version.
-	# A Tn.n version is a released field test version.
-	# A Xn.n version is an unreleased experimental baselevel.
-	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-	exitcode=$?
-	trap '' 0
-	exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# Should we change UNAME_MACHINE based on the output of uname instead
-	# of the specific Alpha model?
-	echo alpha-pc-interix
-	exit ;;
-    21064:Windows_NT:50:3)
-	echo alpha-dec-winnt3.5
-	exit ;;
-    Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-${VENDOR}-sysv4
-	exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-amigaos
-	exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-morphos
-	exit ;;
-    *:OS/390:*:*)
-	echo i370-ibm-openedition
-	exit ;;
-    *:z/VM:*:*)
-	echo s390-ibm-zvmoe
-	exit ;;
-    *:OS400:*:*)
-	echo powerpc-ibm-os400
-	exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
-	echo arm-${VENDOR}-riscos
-	exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-	echo hppa1.1-hitachi-hiuxmpp
-	exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
-		echo pyramid-pyramid-sysv3
-	else
-		echo pyramid-pyramid-bsd
-	fi
-	exit ;;
-    NILE*:*:*:dcosx)
-	echo pyramid-pyramid-svr4
-	exit ;;
-    DRS?6000:unix:4.0:6*)
-	echo sparc-icl-nx6
-	exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7; exit ;;
-	esac ;;
-    s390x:SunOS:*:*)
-	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-	echo i386-pc-auroraux${UNAME_RELEASE}
-	exit ;;
-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-	eval $set_cc_for_build
-	SUN_ARCH="i386"
-	# If there is a compiler, see if it is configured for 64-bit objects.
-	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		grep IS_64BIT_ARCH >/dev/null
-	    then
-		SUN_ARCH="x86_64"
-	    fi
-	fi
-	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:6*:*)
-	# According to config.sub, this is the proper way to canonicalize
-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
-	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
-		;;
-	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit ;;
-    sun3*:SunOS:*:*)
-	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit ;;
-    sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-	case "`/bin/arch`" in
-	    sun3)
-		echo m68k-sun-sunos${UNAME_RELEASE}
-		;;
-	    sun4)
-		echo sparc-sun-sunos${UNAME_RELEASE}
-		;;
-	esac
-	exit ;;
-    aushp:SunOS:*:*)
-	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-	echo m68k-milan-mint${UNAME_RELEASE}
-	exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-	echo m68k-hades-mint${UNAME_RELEASE}
-	exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-	echo m68k-${VENDOR}-mint${UNAME_RELEASE}
-	exit ;;
-    m68k:machten:*:*)
-	echo m68k-apple-machten${UNAME_RELEASE}
-	exit ;;
-    powerpc:machten:*:*)
-	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit ;;
-    RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit ;;
-    RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-	#if defined (host_mips) && defined (MIPSEB)
-	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-	#endif
-	#endif
-	  exit (-1);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c &&
-	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`$dummy $dummyarg` &&
-	    { echo "$SYSTEM_NAME"; exit; }
-	echo mips-mips-riscos${UNAME_RELEASE}
-	exit ;;
-    Motorola:PowerMAX_OS:*:*)
-	echo powerpc-motorola-powermax
-	exit ;;
-    Motorola:*:4.3:PL8-*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-	echo powerpc-harris-powerunix
-	exit ;;
-    m88k:CX/UX:7*:*)
-	echo m88k-harris-cxux7
-	exit ;;
-    m88k:*:4*:R4*)
-	echo m88k-motorola-sysv4
-	exit ;;
-    m88k:*:3*:R3*)
-	echo m88k-motorola-sysv3
-	exit ;;
-    AViiON:dgux:*:*)
-	# DG/UX returns AViiON for all architectures
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-	then
-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-	       [ ${TARGET_BINARY_INTERFACE}x = x ]
-	    then
-		echo m88k-dg-dgux${UNAME_RELEASE}
-	    else
-		echo m88k-dg-dguxbcs${UNAME_RELEASE}
-	    fi
-	else
-	    echo i586-dg-dgux${UNAME_RELEASE}
-	fi
-	exit ;;
-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
-	echo m88k-dolphin-sysv3
-	exit ;;
-    M88*:*:R3*:*)
-	# Delta 88k system running SVR3
-	echo m88k-motorola-sysv3
-	exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-	echo m88k-tektronix-sysv3
-	exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-	echo m68k-tektronix-bsd
-	exit ;;
-    *:IRIX*:*:*)
-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-	echo i386-ibm-aix
-	exit ;;
-    ia64:AIX:*:*)
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:2:3)
-	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		eval $set_cc_for_build
-		sed 's/^		//' << EOF >$dummy.c
-		#include <sys/systemcfg.h>
-
-		main()
-			{
-			if (!__power_pc())
-				exit(1);
-			puts("powerpc-ibm-aix3.2.5");
-			exit(0);
-			}
-EOF
-		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-		then
-			echo "$SYSTEM_NAME"
-		else
-			echo rs6000-ibm-aix3.2.5
-		fi
-	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-		echo rs6000-ibm-aix3.2.4
-	else
-		echo rs6000-ibm-aix3.2
-	fi
-	exit ;;
-    *:AIX:*:[4567])
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-		IBM_ARCH=rs6000
-	else
-		IBM_ARCH=powerpc
-	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-	echo romp-ibm-bsd4.4
-	exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit ;;
-    DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit ;;
-    9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	case "${UNAME_MACHINE}" in
-	    9000/31? )            HP_ARCH=m68000 ;;
-	    9000/[34]?? )         HP_ARCH=m68k ;;
-	    9000/[678][0-9][0-9])
-		if [ -x /usr/bin/getconf ]; then
-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-		    case "${sc_cpu_version}" in
-		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-		      532)                      # CPU_PA_RISC2_0
-			case "${sc_kernel_bits}" in
-			  32) HP_ARCH="hppa2.0n" ;;
-			  64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-			esac ;;
-		    esac
-		fi
-		if [ "${HP_ARCH}" = "" ]; then
-		    eval $set_cc_for_build
-		    sed 's/^		//' << EOF >$dummy.c
-
-		#define _HPUX_SOURCE
-		#include <stdlib.h>
-		#include <unistd.h>
-
-		int main ()
-		{
-		#if defined(_SC_KERNEL_BITS)
-		    long bits = sysconf(_SC_KERNEL_BITS);
-		#endif
-		    long cpu  = sysconf (_SC_CPU_VERSION);
-
-		    switch (cpu)
-			{
-			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-			case CPU_PA_RISC2_0:
-		#if defined(_SC_KERNEL_BITS)
-			    switch (bits)
-				{
-				case 64: puts ("hppa2.0w"); break;
-				case 32: puts ("hppa2.0n"); break;
-				default: puts ("hppa2.0"); break;
-				} break;
-		#else  /* !defined(_SC_KERNEL_BITS) */
-			    puts ("hppa2.0"); break;
-		#endif
-			default: puts ("hppa1.0"); break;
-			}
-		    exit (0);
-		}
-EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-		    test -z "$HP_ARCH" && HP_ARCH=hppa
-		fi ;;
-	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
-	then
-	    eval $set_cc_for_build
-
-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-	    # generating 64-bit code.  GNU and HP use different nomenclature:
-	    #
-	    # $ CC_FOR_BUILD=cc ./config.guess
-	    # => hppa2.0w-hp-hpux11.23
-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-	    # => hppa64-hp-hpux11.23
-
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep -q __LP64__
-	    then
-		HP_ARCH="hppa2.0w"
-	    else
-		HP_ARCH="hppa64"
-	    fi
-	fi
-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit ;;
-    ia64:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux${HPUX_REV}
-	exit ;;
-    3050*:HI-UX:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <unistd.h>
-	int
-	main ()
-	{
-	  long cpu = sysconf (_SC_CPU_VERSION);
-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-	     results, however.  */
-	  if (CPU_IS_PA_RISC (cpu))
-	    {
-	      switch (cpu)
-		{
-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-		  default: puts ("hppa-hitachi-hiuxwe2"); break;
-		}
-	    }
-	  else if (CPU_IS_HP_MC68K (cpu))
-	    puts ("m68k-hitachi-hiuxwe2");
-	  else puts ("unknown-hitachi-hiuxwe2");
-	  exit (0);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-		{ echo "$SYSTEM_NAME"; exit; }
-	echo unknown-hitachi-hiuxwe2
-	exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-	echo hppa1.1-hp-bsd
-	exit ;;
-    9000/8??:4.3bsd:*:*)
-	echo hppa1.0-hp-bsd
-	exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-	echo hppa1.0-hp-mpeix
-	exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-	echo hppa1.1-hp-osf
-	exit ;;
-    hp8??:OSF1:*:*)
-	echo hppa1.0-hp-osf
-	exit ;;
-    i*86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
-	    echo ${UNAME_MACHINE}-${VENDOR}-osf1mk
-	else
-	    echo ${UNAME_MACHINE}-${VENDOR}-osf1
-	fi
-	exit ;;
-    parisc*:Lites*:*:*)
-	echo hppa1.1-hp-lites
-	exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-	echo c1-convex-bsd
-	exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-	echo c34-convex-bsd
-	exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-	echo c38-convex-bsd
-	exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-	echo c4-convex-bsd
-	exit ;;
-    CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*[A-Z]90:*:*:*)
-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-	      -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit ;;
-    sparc*:BSD/OS:*:*)
-	echo sparc-${VENDOR}-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:BSD/OS:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:FreeBSD:*:*)
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	case ${UNAME_PROCESSOR} in
-	    amd64)
-		echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	    *)
-		echo ${UNAME_PROCESSOR}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	esac
-	exit ;;
-    i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin
-	exit ;;
-    *:MINGW*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
-	exit ;;
-    i*:MSYS*:*)
-	echo ${UNAME_MACHINE}-pc-msys
-	exit ;;
-    i*:windows32*:*)
-	# uname -m includes "-pc" on this system.
-	echo ${UNAME_MACHINE}-mingw32
-	exit ;;
-    i*:PW*:*)
-	echo ${UNAME_MACHINE}-pc-pw32
-	exit ;;
-    *:Interix*:*)
-	case ${UNAME_MACHINE} in
-	    x86)
-		echo i586-pc-interix${UNAME_RELEASE}
-		exit ;;
-	    authenticamd | genuineintel | EM64T)
-		echo x86_64-${VENDOR}-interix${UNAME_RELEASE}
-		exit ;;
-	    IA64)
-		echo ia64-${VENDOR}-interix${UNAME_RELEASE}
-		exit ;;
-	esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-	echo i${UNAME_MACHINE}-pc-mks
-	exit ;;
-    8664:Windows_NT:*)
-	echo x86_64-pc-mks
-	exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i586-pc-interix
-	exit ;;
-    i*:UWIN*:*)
-	echo ${UNAME_MACHINE}-pc-uwin
-	exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-	echo x86_64-${VENDOR}-cygwin
-	exit ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-${VENDOR}-cygwin
-	exit ;;
-    prep*:SunOS:5.*:*)
-	echo powerpcle-${VENDOR}-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    *:GNU:*:*)
-	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-${VENDOR}-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit ;;
-    *:GNU/*:*:*)
-	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-${VENDOR}-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-	exit ;;
-    i*86:Minix:*:*)
-	echo ${UNAME_MACHINE}-pc-minix
-	exit ;;
-    aarch64:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    aarch64_be:Linux:*:*)
-	UNAME_MACHINE=aarch64_be
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-	esac
-	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC}
-	exit ;;
-    arm*:Linux:*:*)
-	eval $set_cc_for_build
-	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-	    | grep -q __ARM_EABI__
-	then
-	    echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	else
-	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-		| grep -q __ARM_PCS_VFP
-	    then
-		echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabi
-	    else
-		echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabihf
-	    fi
-	fi
-	exit ;;
-    avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    cris:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-gnu
-	exit ;;
-    crisv32:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-gnu
-	exit ;;
-    frv:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    hexagon:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    i*86:Linux:*:*)
-	LIBC=gnu
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
-	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-	exit ;;
-    ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef ${UNAME_MACHINE}
-	#undef ${UNAME_MACHINE}el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=${UNAME_MACHINE}el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=${UNAME_MACHINE}
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-	test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; }
-	;;
-    or32:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    padre:Linux:*:*)
-	echo sparc-${VENDOR}-linux-gnu
-	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-${VENDOR}-linux-gnu
-	exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-	# Look for CPU level
-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;;
-	  PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;;
-	  *)    echo hppa-${VENDOR}-linux-gnu ;;
-	esac
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-${VENDOR}-linux-gnu
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-${VENDOR}-linux-gnu
-	exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
-	exit ;;
-    sh64*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    tile*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-gnu
-	exit ;;
-    x86_64:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    xtensa*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
-	exit ;;
-    i*86:DYNIX/ptx:4*:*)
-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-	# earlier versions are messed up and put the nodename in both
-	# sysname and nodename.
-	echo i386-sequent-sysv4
-	exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-	# Unixware is an offshoot of SVR4, but it has its own version
-	# number series starting with 2...
-	# I am not positive that other SVR4 systems won't match this,
-	# I just have to hope.  -- rms.
-	# Use sysv4.2uw... so that sysv4* matches it.
-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit ;;
-    i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
-	# is probably installed.
-	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit ;;
-    i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-${VENDOR}-stop
-	exit ;;
-    i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-atheos
-	exit ;;
-    i*86:syllable:*:*)
-	echo ${UNAME_MACHINE}-pc-syllable
-	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-	echo i386-${VENODR}-lynxos${UNAME_RELEASE}
-	exit ;;
-    i*86:*DOS:*:*)
-	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-	fi
-	exit ;;
-    i*86:*:5:[678]*)
-	# UnixWare 7.x, OpenUNIX and OpenServer 6.
-	case `/bin/uname -X | grep "^Machine"` in
-	    *486*)	     UNAME_MACHINE=i486 ;;
-	    *Pentium)	     UNAME_MACHINE=i586 ;;
-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-	esac
-	echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit ;;
-    i*86:*:3.2:*)
-	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-			&& UNAME_MACHINE=i586
-		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-	else
-		echo ${UNAME_MACHINE}-pc-sysv32
-	fi
-	exit ;;
-    pc:*:*:*)
-	# Left here for compatibility:
-	# uname -m prints for DJGPP always 'pc', but it prints nothing about
-	# the processor, so we play safe by assuming i586.
-	# Note: whatever this is, it MUST be the same as what config.sub
-	# prints for the "djgpp" host, or else GDB configury will decide that
-	# this is a cross-build.
-	echo i586-pc-msdosdjgpp
-	exit ;;
-    Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit ;;
-    paragon:*:*:*)
-	echo i860-intel-osf1
-	exit ;;
-    i860:*:4.*:*) # i860-SVR4
-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-${VENODR}-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-	fi
-	exit ;;
-    mini*:CTIX:SYS*5:*)
-	# "miniframe"
-	echo m68010-convergent-sysv
-	exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-	echo m68k-convergent-sysv
-	exit ;;
-    M680?0:D-NIX:5.3:*)
-	echo m68k-diab-dnix
-	exit ;;
-    M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-	OS_REL=''
-	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-	OS_REL='.3'
-	test -r /etc/.relid \
-	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-${VENDOR}-lynxos${UNAME_RELEASE}
-	exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-	echo sparc-${VENDOR}-lynxos${UNAME_RELEASE}
-	exit ;;
-    rs6000:LynxOS:2.*:*)
-	echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE}
-	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-	echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE}
-	exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv${UNAME_RELEASE}
-	exit ;;
-    RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    *:SINIX-*:*:*)
-	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo ${UNAME_MACHINE}-sni-sysv4
-	else
-		echo ns32k-sni-sysv
-	fi
-	exit ;;
-    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-			# says <Richard.M.Bartel at ccMail.Census.GOV>
-	echo i586-unisys-sysv4
-	exit ;;
-    *:UNIX_System_V:4*:FTX*)
-	# From Gerald Hewes <hewes at openmarket.com>.
-	# How about differentiating between stratus architectures? -djm
-	echo hppa1.1-stratus-sysv4
-	exit ;;
-    *:*:*:FTX*)
-	# From seanf at swdc.stratus.com.
-	echo i860-stratus-sysv4
-	exit ;;
-    i*86:VOS:*:*)
-	# From Paul.Green at stratus.com.
-	echo ${UNAME_MACHINE}-stratus-vos
-	exit ;;
-    *:VOS:*:*)
-	# From Paul.Green at stratus.com.
-	echo hppa1.1-stratus-vos
-	exit ;;
-    mc68*:A/UX:*:*)
-	echo m68k-apple-aux${UNAME_RELEASE}
-	exit ;;
-    news*:NEWS-OS:6*:*)
-	echo mips-sony-newsos6
-	exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
-		echo mips-nec-sysv${UNAME_RELEASE}
-	else
-		echo mips-${VENDOR}-sysv${UNAME_RELEASE}
-	fi
-	exit ;;
-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
-	echo powerpc-be-beos
-	exit ;;
-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
-	echo powerpc-apple-beos
-	exit ;;
-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
-	echo i586-pc-beos
-	exit ;;
-    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
-	echo i586-pc-haiku
-	exit ;;
-    SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-7:SUPER-UX:*:*)
-	echo sx7-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-8:SUPER-UX:*:*)
-	echo sx8-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-8R:SUPER-UX:*:*)
-	echo sx8r-nec-superux${UNAME_RELEASE}
-	exit ;;
-    Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Rhapsody:*:*)
-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Darwin:*:*)
-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	case $UNAME_PROCESSOR in
-	    i386)
-		eval $set_cc_for_build
-		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		      grep IS_64BIT_ARCH >/dev/null
-		  then
-		      UNAME_PROCESSOR="x86_64"
-		  fi
-		fi ;;
-	    unknown) UNAME_PROCESSOR=powerpc ;;
-	esac
-	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
-		UNAME_PROCESSOR=i386
-		UNAME_MACHINE=pc
-	fi
-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit ;;
-    *:QNX:*:4*)
-	echo i386-pc-qnx
-	exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
-	echo neo-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    *:NonStop-UX:*:*)
-	echo mips-compaq-nonstopux
-	exit ;;
-    BS2000:POSIX*:*:*)
-	echo bs2000-siemens-sysv
-	exit ;;
-    DS/*:UNIX_System_V:*:*)
-	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit ;;
-    *:Plan9:*:*)
-	# "uname -m" is not consistent, so use $cputype instead. 386
-	# is converted to i386 for consistency with other x86
-	# operating systems.
-	if test "$cputype" = "386"; then
-	    UNAME_MACHINE=i386
-	else
-	    UNAME_MACHINE="$cputype"
-	fi
-	echo ${UNAME_MACHINE}-${VENDOR}-plan9
-	exit ;;
-    *:TOPS-10:*:*)
-	echo pdp10-${VENDOR}-tops10
-	exit ;;
-    *:TENEX:*:*)
-	echo pdp10-${VENDOR}-tenex
-	exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-	echo pdp10-dec-tops20
-	exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-	echo pdp10-xkl-tops20
-	exit ;;
-    *:TOPS-20:*:*)
-	echo pdp10-${VENDOR}-tops20
-	exit ;;
-    *:ITS:*:*)
-	echo pdp10-${VENDOR}-its
-	exit ;;
-    SEI:*:*:SEIUX)
-	echo mips-sei-seiux${UNAME_RELEASE}
-	exit ;;
-    *:DragonFly:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
-    *:*VMS:*:*)
-	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "${UNAME_MACHINE}" in
-	    A*) echo alpha-dec-vms ; exit ;;
-	    I*) echo ia64-dec-vms ; exit ;;
-	    V*) echo vax-dec-vms ; exit ;;
-	esac ;;
-    *:XENIX:*:SysV)
-	echo i386-pc-xenix
-	exit ;;
-    i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-	exit ;;
-    i*86:rdos:*:*)
-	echo ${UNAME_MACHINE}-pc-rdos
-	exit ;;
-    i*86:AROS:*:*)
-	echo ${UNAME_MACHINE}-pc-aros
-	exit ;;
-    x86_64:VMkernel:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-esx
-	exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-	"4"
-#else
-	""
-#endif
-	); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-	printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-	printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-	{ echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-	echo c1-convex-bsd
-	exit ;;
-    c2*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    c34*)
-	echo c34-convex-bsd
-	exit ;;
-    c38*)
-	echo c38-convex-bsd
-	exit ;;
-    c4*)
-	echo c4-convex-bsd
-	exit ;;
-    esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches at gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/config/config.sub b/config/config.sub
deleted file mode 100644
index 59bb593..0000000
--- a/config/config.sub
+++ /dev/null
@@ -1,1779 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011, 2012 Free Software Foundation, Inc.
-
-timestamp='2012-04-18'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches at gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit ;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
-  kopensolaris*-gnu* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
-		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray | -microblaze)
-		os=
-		basic_machine=$1
-		;;
-	-bluegene*)
-		os=-cnk
-		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
-		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-chorusos*)
-		os=-chorusos
-		basic_machine=$1
-		;;
-	-chorusrdb)
-		os=-chorusrdb
-		basic_machine=$1
-		;;
-	-hiux*)
-		os=-hiuxwe2
-		;;
-	-sco6)
-		os=-sco5v6
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5)
-		os=-sco3.2v5
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco4)
-		os=-sco3.2v4
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2v[4-9]*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5v6*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco*)
-		os=-sco3.2v2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-udk*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-isc)
-		os=-isc2.2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-clix*)
-		basic_machine=clipper-intergraph
-		;;
-	-isc*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-lynx*178)
-		os=-lynxos178
-		;;
-	-lynx*5)
-		os=-lynxos5
-		;;
-	-lynx*)
-		os=-lynxos
-		;;
-	-ptx*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
-		;;
-	-psos*)
-		os=-psos
-		;;
-	-mint | -mint[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-	# Recognize the basic CPU types without company name.
-	# Some are omitted here because they have special meanings below.
-	1750a | 580 \
-	| a29k \
-	| aarch64 | aarch64_be \
-	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
-        | be32 | be64 \
-	| bfin \
-	| c4x | clipper \
-	| d10v | d30v | dlx | dsp16xx \
-	| epiphany \
-	| fido | fr30 | frv \
-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| hexagon \
-	| i370 | i860 | i960 | ia64 \
-	| ip2k | iq2000 \
-	| le32 | le64 \
-	| lm32 \
-	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | mcore | mep | metag \
-	| mips | mipsbe | mipseb | mipsel | mipsle \
-	| mips16 \
-	| mips64 | mips64el \
-	| mips64octeon | mips64octeonel \
-	| mips64orion | mips64orionel \
-	| mips64r5900 | mips64r5900el \
-	| mips64vr | mips64vrel \
-	| mips64vr4100 | mips64vr4100el \
-	| mips64vr4300 | mips64vr4300el \
-	| mips64vr5000 | mips64vr5000el \
-	| mips64vr5900 | mips64vr5900el \
-	| mipsisa32 | mipsisa32el \
-	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa64 | mipsisa64el \
-	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64sb1 | mipsisa64sb1el \
-	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipstx39 | mipstx39el \
-	| mn10200 | mn10300 \
-	| moxie \
-	| mt \
-	| msp430 \
-	| nds32 | nds32le | nds32be \
-	| nios | nios2 \
-	| ns16k | ns32k \
-	| open8 \
-	| or32 \
-	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle \
-	| pyramid \
-	| rl78 | rx \
-	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu \
-	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-	| ubicom32 \
-	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-	| we32k \
-	| x86 | xc16x | xstormy16 | xtensa \
-	| z8k | z80)
-		basic_machine=$basic_machine-unknown
-		;;
-	c54x)
-		basic_machine=tic54x-unknown
-		;;
-	c55x)
-		basic_machine=tic55x-unknown
-		;;
-	c6x)
-		basic_machine=tic6x-unknown
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-		;;
-	ms1)
-		basic_machine=mt-unknown
-		;;
-
-	strongarm | thumb | xscale)
-		basic_machine=arm-unknown
-		;;
-	xgate)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	xscaleeb)
-		basic_machine=armeb-unknown
-		;;
-
-	xscaleel)
-		basic_machine=armel-unknown
-		;;
-
-	# We use `pc' rather than `unknown'
-	# because (1) that's what they normally are, and
-	# (2) the word "unknown" tends to confuse beginning users.
-	i*86 | x86_64)
-	  basic_machine=$basic_machine-pc
-	  ;;
-	# Object if more than one company name word.
-	*-*-*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-	# Recognize the basic CPU types with company name.
-	580-* \
-	| a29k-* \
-	| aarch64-* | aarch64_be-* \
-	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* | avr32-* \
-	| be32-* | be64-* \
-	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| clipper-* | craynv-* | cydra-* \
-	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
-	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-	| h8300-* | h8500-* \
-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
-	| ip2k-* | iq2000-* \
-	| le32-* | le64-* \
-	| lm32-* \
-	| m32c-* | m32r-* | m32rle-* \
-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-	| mips16-* \
-	| mips64-* | mips64el-* \
-	| mips64octeon-* | mips64octeonel-* \
-	| mips64orion-* | mips64orionel-* \
-	| mips64r5900-* | mips64r5900el-* \
-	| mips64vr-* | mips64vrel-* \
-	| mips64vr4100-* | mips64vr4100el-* \
-	| mips64vr4300-* | mips64vr4300el-* \
-	| mips64vr5000-* | mips64vr5000el-* \
-	| mips64vr5900-* | mips64vr5900el-* \
-	| mipsisa32-* | mipsisa32el-* \
-	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa64-* | mipsisa64el-* \
-	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64sb1-* | mipsisa64sb1el-* \
-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipstx39-* | mipstx39el-* \
-	| mmix-* \
-	| mt-* \
-	| msp430-* \
-	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* \
-	| none-* | np1-* | ns16k-* | ns32k-* \
-	| open8-* \
-	| orion-* \
-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-	| pyramid-* \
-	| rl78-* | romp-* | rs6000-* | rx-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
-	| tahoe-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tile*-* \
-	| tron-* \
-	| ubicom32-* \
-	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-	| vax-* \
-	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* \
-	| xstormy16-* | xtensa*-* \
-	| ymp-* \
-	| z8k-* | z80-*)
-		;;
-	# Recognize the basic CPU types without company name, with glob match.
-	xtensa*)
-		basic_machine=$basic_machine-unknown
-		;;
-	# Recognize the various machine names and aliases which stand
-	# for a CPU type and a company and sometimes even an OS.
-	386bsd)
-		basic_machine=i386-unknown
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	abacus)
-		basic_machine=abacus-unknown
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amd64)
-		basic_machine=x86_64-pc
-		;;
-	amd64-*)
-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-unknown
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-unknown
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-unknown
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aros)
-		basic_machine=i386-pc
-		os=-aros
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		basic_machine=ns32k-sequent
-		os=-dynix
-		;;
-	blackfin)
-		basic_machine=bfin-unknown
-		os=-linux
-		;;
-	blackfin-*)
-		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	bluegene*)
-		basic_machine=powerpc-ibm
-		os=-cnk
-		;;
-	c54x-*)
-		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c55x-*)
-		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c6x-*)
-		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c90)
-		basic_machine=c90-cray
-		os=-unicos
-		;;
-	cegcc)
-		basic_machine=arm-unknown
-		os=-cegcc
-		;;
-	convex-c1)
-		basic_machine=c1-convex
-		os=-bsd
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | j90)
-		basic_machine=j90-cray
-		os=-unicos
-		;;
-	craynv)
-		basic_machine=craynv-cray
-		os=-unicosmp
-		;;
-	cr16 | cr16-*)
-		basic_machine=cr16-unknown
-		os=-elf
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	crisv32 | crisv32-* | etraxfs*)
-		basic_machine=crisv32-axis
-		;;
-	cris | cris-* | etrax*)
-		basic_machine=cris-axis
-		;;
-	crx)
-		basic_machine=crx-unknown
-		os=-elf
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	decsystem10* | dec10*)
-		basic_machine=pdp10-dec
-		os=-tops10
-		;;
-	decsystem20* | dec20*)
-		basic_machine=pdp10-dec
-		os=-tops20
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	dicos)
-		basic_machine=i686-pc
-		os=-dicos
-		;;
-	djgpp)
-		basic_machine=i586-pc
-		os=-msdosdjgpp
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2* | dpx2*-bull)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	go32)
-		basic_machine=i386-pc
-		os=-go32
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppa-next)
-		os=-nextstep3
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-	i*86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i*86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i*86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i*86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	i386-vsta | vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		basic_machine=m68k-isi
-		os=-sysv
-		;;
-	m68knommu)
-		basic_machine=m68k-unknown
-		os=-linux
-		;;
-	m68knommu-*)
-		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	m88k-omron*)
-		basic_machine=m88k-omron
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		basic_machine=ns32k-utek
-		os=-sysv
-		;;
-	microblaze)
-		basic_machine=microblaze-xilinx
-		;;
-	mingw32)
-		basic_machine=i386-pc
-		os=-mingw32
-		;;
-	mingw32ce)
-		basic_machine=arm-unknown
-		os=-mingw32ce
-		;;
-	miniframe)
-		basic_machine=m68000-convergent
-		;;
-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-	mips3*-*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-		;;
-	mips3*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-		;;
-	monitor)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	morphos)
-		basic_machine=powerpc-unknown
-		os=-morphos
-		;;
-	msdos)
-		basic_machine=i386-pc
-		os=-msdos
-		;;
-	ms1-*)
-		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-		;;
-	msys)
-		basic_machine=i386-pc
-		os=-msys
-		;;
-	mvs)
-		basic_machine=i370-ibm
-		os=-mvs
-		;;
-	nacl)
-		basic_machine=le32-unknown
-		os=-nacl
-		;;
-	ncr3000)
-		basic_machine=i486-ncr
-		os=-sysv4
-		;;
-	netbsd386)
-		basic_machine=i386-unknown
-		os=-netbsd
-		;;
-	netwinder)
-		basic_machine=armv4l-rebel
-		os=-linux
-		;;
-	news | news700 | news800 | news900)
-		basic_machine=m68k-sony
-		os=-newsos
-		;;
-	news1000)
-		basic_machine=m68030-sony
-		os=-newsos
-		;;
-	news-3600 | risc-news)
-		basic_machine=mips-sony
-		os=-newsos
-		;;
-	necv70)
-		basic_machine=v70-nec
-		os=-sysv
-		;;
-	next | m*-next )
-		basic_machine=m68k-next
-		case $os in
-		    -nextstep* )
-			;;
-		    -ns2*)
-		      os=-nextstep2
-			;;
-		    *)
-		      os=-nextstep3
-			;;
-		esac
-		;;
-	nh3000)
-		basic_machine=m68k-harris
-		os=-cxux
-		;;
-	nh[45]000)
-		basic_machine=m88k-harris
-		os=-cxux
-		;;
-	nindy960)
-		basic_machine=i960-intel
-		os=-nindy
-		;;
-	mon960)
-		basic_machine=i960-intel
-		os=-mon960
-		;;
-	nonstopux)
-		basic_machine=mips-compaq
-		os=-nonstopux
-		;;
-	np1)
-		basic_machine=np1-gould
-		;;
-	neo-tandem)
-		basic_machine=neo-tandem
-		;;
-	nse-tandem)
-		basic_machine=nse-tandem
-		;;
-	nsr-tandem)
-		basic_machine=nsr-tandem
-		;;
-	op50n-* | op60c-*)
-		basic_machine=hppa1.1-oki
-		os=-proelf
-		;;
-	openrisc | openrisc-*)
-		basic_machine=or32-unknown
-		;;
-	os400)
-		basic_machine=powerpc-ibm
-		os=-os400
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		basic_machine=i860-intel
-		os=-osf
-		;;
-	parisc)
-		basic_machine=hppa-unknown
-		os=-linux
-		;;
-	parisc-*)
-		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	pbd)
-		basic_machine=sparc-tti
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-	pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
-	pc98)
-		basic_machine=i386-pc
-		;;
-	pc98-*)
-		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium | p5 | k5 | k6 | nexgen | viac3)
-		basic_machine=i586-pc
-		;;
-	pentiumpro | p6 | 6x86 | athlon | athlon_*)
-		basic_machine=i686-pc
-		;;
-	pentiumii | pentium2 | pentiumiii | pentium3)
-		basic_machine=i686-pc
-		;;
-	pentium4)
-		basic_machine=i786-pc
-		;;
-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium4-*)
-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pn)
-		basic_machine=pn-gould
-		;;
-	power)	basic_machine=power-ibm
-		;;
-	ppc | ppcbe)	basic_machine=powerpc-unknown
-		;;
-	ppc-* | ppcbe-*)
-		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
-		basic_machine=powerpcle-unknown
-		;;
-	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64)	basic_machine=powerpc64-unknown
-		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-		basic_machine=powerpc64le-unknown
-		;;
-	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ps2)
-		basic_machine=i386-ibm
-		;;
-	pw32)
-		basic_machine=i586-unknown
-		os=-pw32
-		;;
-	rdos)
-		basic_machine=i386-pc
-		os=-rdos
-		;;
-	rom68k)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	rm[46]00)
-		basic_machine=mips-siemens
-		;;
-	rtpc | rtpc-*)
-		basic_machine=romp-ibm
-		;;
-	s390 | s390-*)
-		basic_machine=s390-ibm
-		;;
-	s390x | s390x-*)
-		basic_machine=s390x-ibm
-		;;
-	sa29200)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	sb1)
-		basic_machine=mipsisa64sb1-unknown
-		;;
-	sb1el)
-		basic_machine=mipsisa64sb1el-unknown
-		;;
-	sde)
-		basic_machine=mipsisa32-sde
-		os=-elf
-		;;
-	sei)
-		basic_machine=mips-sei
-		os=-seiux
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
-	sh5el)
-		basic_machine=sh5le-unknown
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparclite-wrs | simso-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	strongarm-* | thumb-*)
-		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	sv1)
-		basic_machine=sv1-cray
-		os=-unicos
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3e)
-		basic_machine=alphaev5-cray
-		os=-unicos
-		;;
-	t90)
-		basic_machine=t90-cray
-		os=-unicos
-		;;
-	tile*)
-		basic_machine=$basic_machine-unknown
-		os=-linux-gnu
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	toad1)
-		basic_machine=pdp10-xkl
-		os=-tops20
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	tpf)
-		basic_machine=s390x-ibm
-		os=-tpf
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	xbox)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	xps | xps100)
-		basic_machine=xps100-honeywell
-		;;
-	xscale-* | xscalee[bl]-*)
-		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
-		;;
-	ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	z80-*-coff)
-		basic_machine=z80-unknown
-		os=-sim
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
-		;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
-		;;
-	op50n)
-		basic_machine=hppa1.1-oki
-		;;
-	op60c)
-		basic_machine=hppa1.1-oki
-		;;
-	romp)
-		basic_machine=romp-ibm
-		;;
-	mmix)
-		basic_machine=mmix-knuth
-		;;
-	rs6000)
-		basic_machine=rs6000-ibm
-		;;
-	vax)
-		basic_machine=vax-dec
-		;;
-	pdp10)
-		# there are many clones, so DEC is not a safe bet
-		basic_machine=pdp10-unknown
-		;;
-	pdp11)
-		basic_machine=pdp11-dec
-		;;
-	we32k)
-		basic_machine=we32k-att
-		;;
-	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-		basic_machine=sh-unknown
-		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-		basic_machine=sparc-sun
-		;;
-	cydra)
-		basic_machine=cydra-cydrome
-		;;
-	orion)
-		basic_machine=orion-highlevel
-		;;
-	orion105)
-		basic_machine=clipper-highlevel
-		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
-		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
-		;;
-	*-unknown)
-		# Make sure to match an already-canonicalized machine name.
-		;;
-	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-		;;
-	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-		;;
-	*)
-		;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-	# First match some system type aliases
-	# that might get confused with valid system types.
-	# -solaris* is a basic system type, with this one exception.
-	-auroraux)
-		os=-auroraux
-		;;
-	-solaris1 | -solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
-		;;
-	-solaris)
-		os=-solaris2
-		;;
-	-svr4*)
-		os=-sysv4
-		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
-	# First accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
-	# -sysv* is not here because it comes later, after sysvr4.
-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -openbsd* | -solidbsd* \
-	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* \
-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
-	# Remember, each alternative MUST END IN *, to match a version number.
-		;;
-	-qnx*)
-		case $basic_machine in
-		    x86-* | i*86-*)
-			;;
-		    *)
-			os=-nto$os
-			;;
-		esac
-		;;
-	-nto-qnx*)
-		;;
-	-nto*)
-		os=`echo $os | sed -e 's|nto|nto-qnx|'`
-		;;
-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-		;;
-	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
-		;;
-	-linux-dietlibc)
-		os=-linux-dietlibc
-		;;
-	-linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
-	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
-		;;
-	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
-		;;
-	-opened*)
-		os=-openedition
-		;;
-	-os400*)
-		os=-os400
-		;;
-	-wince*)
-		os=-wince
-		;;
-	-osfrose*)
-		os=-osfrose
-		;;
-	-osf*)
-		os=-osf
-		;;
-	-utek*)
-		os=-bsd
-		;;
-	-dynix*)
-		os=-bsd
-		;;
-	-acis*)
-		os=-aos
-		;;
-	-atheos*)
-		os=-atheos
-		;;
-	-syllable*)
-		os=-syllable
-		;;
-	-386bsd)
-		os=-bsd
-		;;
-	-ctix* | -uts*)
-		os=-sysv
-		;;
-	-nova*)
-		os=-rtmk-nova
-		;;
-	-ns2 )
-		os=-nextstep2
-		;;
-	-nsk*)
-		os=-nsk
-		;;
-	# Preserve the version number of sinix5.
-	-sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
-		;;
-	-sinix*)
-		os=-sysv4
-		;;
-	-tpf*)
-		os=-tpf
-		;;
-	-triton*)
-		os=-sysv3
-		;;
-	-oss*)
-		os=-sysv3
-		;;
-	-svr4)
-		os=-sysv4
-		;;
-	-svr3)
-		os=-sysv3
-		;;
-	-sysvr4)
-		os=-sysv4
-		;;
-	# This must come after -sysvr4.
-	-sysv*)
-		;;
-	-ose*)
-		os=-ose
-		;;
-	-es1800*)
-		os=-ose
-		;;
-	-xenix)
-		os=-xenix
-		;;
-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-		os=-mint
-		;;
-	-aros*)
-		os=-aros
-		;;
-	-kaos*)
-		os=-kaos
-		;;
-	-zvmoe)
-		os=-zvmoe
-		;;
-	-dicos*)
-		os=-dicos
-		;;
-	-nacl*)
-		;;
-	-none)
-		;;
-	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-		exit 1
-		;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-	score-*)
-		os=-elf
-		;;
-	spu-*)
-		os=-elf
-		;;
-	*-acorn)
-		os=-riscix1.2
-		;;
-	arm*-rebel)
-		os=-linux
-		;;
-	arm*-semi)
-		os=-aout
-		;;
-	c4x-* | tic4x-*)
-		os=-coff
-		;;
-	tic54x-*)
-		os=-coff
-		;;
-	tic55x-*)
-		os=-coff
-		;;
-	tic6x-*)
-		os=-coff
-		;;
-	# This must come before the *-dec entry.
-	pdp10-*)
-		os=-tops20
-		;;
-	pdp11-*)
-		os=-none
-		;;
-	*-dec | vax-*)
-		os=-ultrix4.2
-		;;
-	m68*-apollo)
-		os=-domain
-		;;
-	i386-sun)
-		os=-sunos4.0.2
-		;;
-	m68000-sun)
-		os=-sunos3
-		;;
-	m68*-cisco)
-		os=-aout
-		;;
-	mep-*)
-		os=-elf
-		;;
-	mips*-cisco)
-		os=-elf
-		;;
-	mips*-*)
-		os=-elf
-		;;
-	or32-*)
-		os=-coff
-		;;
-	*-tti)	# must be before sparc entry or we get the wrong os.
-		os=-sysv3
-		;;
-	sparc-* | *-sun)
-		os=-sunos4.1.1
-		;;
-	*-be)
-		os=-beos
-		;;
-	*-haiku)
-		os=-haiku
-		;;
-	*-ibm)
-		os=-aix
-		;;
-	*-knuth)
-		os=-mmixware
-		;;
-	*-wec)
-		os=-proelf
-		;;
-	*-winbond)
-		os=-proelf
-		;;
-	*-oki)
-		os=-proelf
-		;;
-	*-hp)
-		os=-hpux
-		;;
-	*-hitachi)
-		os=-hiux
-		;;
-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
-		;;
-	*-cbm)
-		os=-amigaos
-		;;
-	*-dg)
-		os=-dgux
-		;;
-	*-dolphin)
-		os=-sysv3
-		;;
-	m68k-ccur)
-		os=-rtu
-		;;
-	m88k-omron*)
-		os=-luna
-		;;
-	*-next )
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
-		;;
-	*-next)
-		os=-nextstep3
-		;;
-	*-gould)
-		os=-sysv
-		;;
-	*-highlevel)
-		os=-bsd
-		;;
-	*-encore)
-		os=-bsd
-		;;
-	*-sgi)
-		os=-irix
-		;;
-	*-siemens)
-		os=-sysv4
-		;;
-	*-masscomp)
-		os=-rtu
-		;;
-	f30[01]-fujitsu | f700-fujitsu)
-		os=-uxpv
-		;;
-	*-rom68k)
-		os=-coff
-		;;
-	*-*bug)
-		os=-coff
-		;;
-	*-apple)
-		os=-macos
-		;;
-	*-atari*)
-		os=-mint
-		;;
-	*)
-		os=-none
-		;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
-		case $os in
-			-riscix*)
-				vendor=acorn
-				;;
-			-sunos*)
-				vendor=sun
-				;;
-			-cnk*|-aix*)
-				vendor=ibm
-				;;
-			-beos*)
-				vendor=be
-				;;
-			-hpux*)
-				vendor=hp
-				;;
-			-mpeix*)
-				vendor=hp
-				;;
-			-hiux*)
-				vendor=hitachi
-				;;
-			-unos*)
-				vendor=crds
-				;;
-			-dgux*)
-				vendor=dg
-				;;
-			-luna*)
-				vendor=omron
-				;;
-			-genix*)
-				vendor=ns
-				;;
-			-mvs* | -opened*)
-				vendor=ibm
-				;;
-			-os400*)
-				vendor=ibm
-				;;
-			-ptx*)
-				vendor=sequent
-				;;
-			-tpf*)
-				vendor=ibm
-				;;
-			-vxsim* | -vxworks* | -windiss*)
-				vendor=wrs
-				;;
-			-aux*)
-				vendor=apple
-				;;
-			-hms*)
-				vendor=hitachi
-				;;
-			-mpw* | -macos*)
-				vendor=apple
-				;;
-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-				vendor=atari
-				;;
-			-vos*)
-				vendor=stratus
-				;;
-		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-		;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/config/depcomp b/config/depcomp
deleted file mode 100644
index debb6ff..0000000
--- a/config/depcomp
+++ /dev/null
@@ -1,707 +0,0 @@
-#! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2012-03-27.16; # UTC
-
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
-
-case $1 in
-  '')
-     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-
-Run PROGRAMS ARGS to compile a file, generating dependencies
-as side-effects.
-
-Environment variables:
-  depmode     Dependency tracking mode.
-  source      Source file read by 'PROGRAMS ARGS'.
-  object      Object file output by 'PROGRAMS ARGS'.
-  DEPDIR      directory where to store dependencies.
-  depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputting dependencies.
-  libtool     Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake at gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "depcomp $scriptversion"
-    exit $?
-    ;;
-esac
-
-# A tabulation character.
-tab='	'
-# A newline character.
-nl='
-'
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
-  echo "depcomp: Variables source, object and depmode must be set" 1>&2
-  exit 1
-fi
-
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
-  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Some modes work just like other modes, but use different flags.  We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write.  Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
-  # HP compiler uses -M and no extra arg.
-  gccflag=-M
-  depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
-fi
-
-cygpath_u="cygpath -u -f -"
-if test "$depmode" = msvcmsys; then
-   # This is just like msvisualcpp but w/o cygpath translation.
-   # Just convert the backslash-escaped backslashes to single forward
-   # slashes to satisfy depend.m4
-   cygpath_u='sed s,\\\\,/,g'
-   depmode=msvisualcpp
-fi
-
-if test "$depmode" = msvc7msys; then
-   # This is just like msvc7 but w/o cygpath translation.
-   # Just convert the backslash-escaped backslashes to single forward
-   # slashes to satisfy depend.m4
-   cygpath_u='sed s,\\\\,/,g'
-   depmode=msvc7
-fi
-
-if test "$depmode" = xlc; then
-   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
-   gccflag=-qmakedep=gcc,-MF
-   depmode=gcc
-fi
-
-case "$depmode" in
-gcc3)
-## gcc 3 implements dependency tracking that does exactly what
-## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
-## it if -MD -MP comes after the -MF stuff.  Hmm.
-## Unfortunately, FreeBSD c89 acceptance of flags depends upon
-## the command line argument order; so add the flags where they
-## appear in depend2.am.  Note that the slowdown incurred here
-## affects only configure: in makefiles, %FASTDEP% shortcuts this.
-  for arg
-  do
-    case $arg in
-    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
-    *)  set fnord "$@" "$arg" ;;
-    esac
-    shift # fnord
-    shift # $arg
-  done
-  "$@"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  mv "$tmpdepfile" "$depfile"
-  ;;
-
-gcc)
-## There are various ways to get dependency output from gcc.  Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-##   up in a subdir.  Having to rename by hand is ugly.
-##   (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).
-## - Using -M directly means running the compiler twice (even worse
-##   than renaming).
-  if test -z "$gccflag"; then
-    gccflag=-MD,
-  fi
-  "$@" -Wp,"$gccflag$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
-  sed -e 's/^[^:]*: / /' \
-      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the "deleted header file" problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header).  We avoid this by adding
-## dummy dependencies for each header file.  Too bad gcc doesn't do
-## this for us directly.
-  tr ' ' "$nl" < "$tmpdepfile" |
-## Some versions of gcc put a space before the ':'.  On the theory
-## that the space means something, we add a space to the output as
-## well.  hp depmode also adds that space, but also prefixes the VPATH
-## to the object.  Take care to not repeat it in the output.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
-      | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-sgi)
-  if test "$libtool" = yes; then
-    "$@" "-Wp,-MDupdate,$tmpdepfile"
-  else
-    "$@" -MDupdate "$tmpdepfile"
-  fi
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-
-  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
-    echo "$object : \\" > "$depfile"
-
-    # Clip off the initial element (the dependent).  Don't try to be
-    # clever and replace this with sed code, as IRIX sed won't handle
-    # lines with more than a fixed number of characters (4096 in
-    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like '#:fec' to the end of the
-    # dependency line.
-    tr ' ' "$nl" < "$tmpdepfile" \
-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr "$nl" ' ' >> "$depfile"
-    echo >> "$depfile"
-
-    # The second pass generates a dummy entry for each header file.
-    tr ' ' "$nl" < "$tmpdepfile" \
-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
-  fi
-  rm -f "$tmpdepfile"
-  ;;
-
-xlc)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-aix)
-  # The C for AIX Compiler uses -M and outputs the dependencies
-  # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts '$object:' at the
-  # start of each line; $object doesn't have directory information.
-  # Version 6 uses the directory in both cases.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-  if test "$libtool" = yes; then
-    tmpdepfile1=$dir$base.u
-    tmpdepfile2=$base.u
-    tmpdepfile3=$dir.libs/$base.u
-    "$@" -Wc,-M
-  else
-    tmpdepfile1=$dir$base.u
-    tmpdepfile2=$dir$base.u
-    tmpdepfile3=$dir$base.u
-    "$@" -M
-  fi
-  stat=$?
-
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-    exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  if test -f "$tmpdepfile"; then
-    # Each line is of the form 'foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # '$object: dependent.h' and one to simply 'dependent.h:'.
-    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
-  fi
-  rm -f "$tmpdepfile"
-  ;;
-
-icc)
-  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
-  # However on
-  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
-  #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using '\':
-  #    foo.o: sub/foo.c ... \
-  #     sub/foo.h ... \
-  #     ...
-  # tcc 0.9.26 (FIXME still under development at the moment of writing)
-  # will emit a similar output, but also prepend the continuation lines
-  # with horizontal tabulation characters.
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  # Each line is of the form 'foo.o: dependent.h',
-  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
-  # Do two passes, one to just change these to
-  # '$object: dependent.h' and one to simply 'dependent.h:'.
-  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
-    < "$tmpdepfile" > "$depfile"
-  sed '
-    s/[ '"$tab"'][ '"$tab"']*/ /g
-    s/^ *//
-    s/ *\\*$//
-    s/^[^:]*: *//
-    /^$/d
-    /:$/d
-    s/$/ :/
-  ' < "$tmpdepfile" >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp2)
-  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
-  # compilers, which have integrated preprocessors.  The correct option
-  # to use with these is +Maked; it writes dependencies to a file named
-  # 'foo.d', which lands next to the object file, wherever that
-  # happens to be.
-  # Much of this is similar to the tru64 case; see comments there.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-  if test "$libtool" = yes; then
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir.libs/$base.d
-    "$@" -Wc,+Maked
-  else
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir$base.d
-    "$@" +Maked
-  fi
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-     rm -f "$tmpdepfile1" "$tmpdepfile2"
-     exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  if test -f "$tmpdepfile"; then
-    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add 'dependent.h:' lines.
-    sed -ne '2,${
-	       s/^ *//
-	       s/ \\*$//
-	       s/$/:/
-	       p
-	     }' "$tmpdepfile" >> "$depfile"
-  else
-    echo "#dummy" > "$depfile"
-  fi
-  rm -f "$tmpdepfile" "$tmpdepfile2"
-  ;;
-
-tru64)
-   # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in 'foo.d' instead, so we check for that too.
-   # Subdirectories are respected.
-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-   test "x$dir" = "x$object" && dir=
-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
-   if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mechanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in $dir.libs/$base.o.d and
-      # in $dir$base.o.d.  We have to check for both files, because
-      # one of the two compilations can be disabled.  We should prefer
-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-      # automatically cleaned when .libs/ is deleted, while ignoring
-      # the former would cause a distcleancheck panic.
-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
-      "$@" -Wc,-MD
-   else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
-      "$@" -MD
-   fi
-
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-      exit $stat
-   fi
-
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
-
-msvc7)
-  if test "$libtool" = yes; then
-    showIncludes=-Wc,-showIncludes
-  else
-    showIncludes=-showIncludes
-  fi
-  "$@" $showIncludes > "$tmpdepfile"
-  stat=$?
-  grep -v '^Note: including file: ' "$tmpdepfile"
-  if test "$stat" = 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  # The first sed program below extracts the file names and escapes
-  # backslashes for cygpath.  The second sed program outputs the file
-  # name when reading, but also accumulates all include files in the
-  # hold buffer in order to output them again at the end.  This only
-  # works with sed implementations that can handle large buffers.
-  sed < "$tmpdepfile" -n '
-/^Note: including file:  *\(.*\)/ {
-  s//\1/
-  s/\\/\\\\/g
-  p
-}' | $cygpath_u | sort -u | sed -n '
-s/ /\\ /g
-s/\(.*\)/'"$tab"'\1 \\/p
-s/.\(.*\) \\/\1:/
-H
-$ {
-  s/.*/'"$tab"'/
-  G
-  p
-}' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvc7msys)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-#nosideeffect)
-  # This comment above is used by automake to tell side-effect
-  # dependency tracking mechanisms from slower ones.
-
-dashmstdout)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  # Remove '-o $object'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for ':'
-  # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
-  "$@" $dashmflag |
-    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  tr ' ' "$nl" < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-dashXmstdout)
-  # This case only exists to satisfy depend.m4.  It is never actually
-  # run, as this mode is specially recognized in the preamble.
-  exit 1
-  ;;
-
-makedepend)
-  "$@" || exit $?
-  # Remove any Libtool call
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-  # X makedepend
-  shift
-  cleared=no eat=no
-  for arg
-  do
-    case $cleared in
-    no)
-      set ""; shift
-      cleared=yes ;;
-    esac
-    if test $eat = yes; then
-      eat=no
-      continue
-    fi
-    case "$arg" in
-    -D*|-I*)
-      set fnord "$@" "$arg"; shift ;;
-    # Strip any option that makedepend may not understand.  Remove
-    # the object too, otherwise makedepend will parse it as a source file.
-    -arch)
-      eat=yes ;;
-    -*|$object)
-      ;;
-    *)
-      set fnord "$@" "$arg"; shift ;;
-    esac
-  done
-  obj_suffix=`echo "$object" | sed 's/^.*\././'`
-  touch "$tmpdepfile"
-  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
-  rm -f "$depfile"
-  # makedepend may prepend the VPATH from the source file name to the object.
-  # No need to regex-escape $object, excess matching of '.' is harmless.
-  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile" "$tmpdepfile".bak
-  ;;
-
-cpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  # Remove '-o $object'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  "$@" -E |
-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
-    sed '$ s: \\$::' > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  cat < "$tmpdepfile" >> "$depfile"
-  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvisualcpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  IFS=" "
-  for arg
-  do
-    case "$arg" in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-	set fnord "$@"
-	shift
-	shift
-	;;
-    *)
-	set fnord "$@" "$arg"
-	shift
-	shift
-	;;
-    esac
-  done
-  "$@" -E 2>/dev/null |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
-  echo "$tab" >> "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvcmsys)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-none)
-  exec "$@"
-  ;;
-
-*)
-  echo "Unknown depmode $depmode" 1>&2
-  exit 1
-  ;;
-esac
-
-exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/config/install-sh b/config/install-sh
deleted file mode 100644
index 377bb86..0000000
--- a/config/install-sh
+++ /dev/null
@@ -1,527 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2011-11-20.07; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-nl='
-'
-IFS=" ""	$nl"
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit=${DOITPROG-}
-if test -z "$doit"; then
-  doit_exec=exec
-else
-  doit_exec=$doit
-fi
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_glob='?'
-initialize_posix_glob='
-  test "$posix_glob" != "?" || {
-    if (set -f) 2>/dev/null; then
-      posix_glob=
-    else
-      posix_glob=:
-    fi
-  }
-'
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-no_target_directory=
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-   or: $0 [OPTION]... SRCFILES... DIRECTORY
-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-   or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
-     --help     display this help and exit.
-     --version  display version info and exit.
-
-  -c            (ignored)
-  -C            install only if different (preserve the last data modification time)
-  -d            create directories instead of installing files.
-  -g GROUP      $chgrpprog installed files to GROUP.
-  -m MODE       $chmodprog installed files to MODE.
-  -o USER       $chownprog installed files to USER.
-  -s            $stripprog installed files.
-  -t DIRECTORY  install into DIRECTORY.
-  -T            report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
-  RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
-  case $1 in
-    -c) ;;
-
-    -C) copy_on_change=true;;
-
-    -d) dir_arg=true;;
-
-    -g) chgrpcmd="$chgrpprog $2"
-	shift;;
-
-    --help) echo "$usage"; exit $?;;
-
-    -m) mode=$2
-	case $mode in
-	  *' '* | *'	'* | *'
-'*	  | *'*'* | *'?'* | *'['*)
-	    echo "$0: invalid mode: $mode" >&2
-	    exit 1;;
-	esac
-	shift;;
-
-    -o) chowncmd="$chownprog $2"
-	shift;;
-
-    -s) stripcmd=$stripprog;;
-
-    -t) dst_arg=$2
-	# Protect names problematic for 'test' and other utilities.
-	case $dst_arg in
-	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
-	esac
-	shift;;
-
-    -T) no_target_directory=true;;
-
-    --version) echo "$0 $scriptversion"; exit $?;;
-
-    --)	shift
-	break;;
-
-    -*)	echo "$0: invalid option: $1" >&2
-	exit 1;;
-
-    *)  break;;
-  esac
-  shift
-done
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
-  # When -d is used, all remaining arguments are directories to create.
-  # When -t is used, the destination is already specified.
-  # Otherwise, the last argument is the destination.  Remove it from $@.
-  for arg
-  do
-    if test -n "$dst_arg"; then
-      # $@ is not empty: it contains at least $arg.
-      set fnord "$@" "$dst_arg"
-      shift # fnord
-    fi
-    shift # arg
-    dst_arg=$arg
-    # Protect names problematic for 'test' and other utilities.
-    case $dst_arg in
-      -* | [=\(\)!]) dst_arg=./$dst_arg;;
-    esac
-  done
-fi
-
-if test $# -eq 0; then
-  if test -z "$dir_arg"; then
-    echo "$0: no input file specified." >&2
-    exit 1
-  fi
-  # It's OK to call 'install-sh -d' without argument.
-  # This can happen when creating conditional directories.
-  exit 0
-fi
-
-if test -z "$dir_arg"; then
-  do_exit='(exit $ret); exit $ret'
-  trap "ret=129; $do_exit" 1
-  trap "ret=130; $do_exit" 2
-  trap "ret=141; $do_exit" 13
-  trap "ret=143; $do_exit" 15
-
-  # Set umask so as not to create temps with too-generous modes.
-  # However, 'strip' requires both read and write access to temps.
-  case $mode in
-    # Optimize common cases.
-    *644) cp_umask=133;;
-    *755) cp_umask=22;;
-
-    *[0-7])
-      if test -z "$stripcmd"; then
-	u_plus_rw=
-      else
-	u_plus_rw='% 200'
-      fi
-      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
-    *)
-      if test -z "$stripcmd"; then
-	u_plus_rw=
-      else
-	u_plus_rw=,u+rw
-      fi
-      cp_umask=$mode$u_plus_rw;;
-  esac
-fi
-
-for src
-do
-  # Protect names problematic for 'test' and other utilities.
-  case $src in
-    -* | [=\(\)!]) src=./$src;;
-  esac
-
-  if test -n "$dir_arg"; then
-    dst=$src
-    dstdir=$dst
-    test -d "$dstdir"
-    dstdir_status=$?
-  else
-
-    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
-    # might cause directories to be created, which would be especially bad
-    # if $src (and thus $dsttmp) contains '*'.
-    if test ! -f "$src" && test ! -d "$src"; then
-      echo "$0: $src does not exist." >&2
-      exit 1
-    fi
-
-    if test -z "$dst_arg"; then
-      echo "$0: no destination specified." >&2
-      exit 1
-    fi
-    dst=$dst_arg
-
-    # If destination is a directory, append the input filename; won't work
-    # if double slashes aren't ignored.
-    if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-	echo "$0: $dst_arg: Is a directory" >&2
-	exit 1
-      fi
-      dstdir=$dst
-      dst=$dstdir/`basename "$src"`
-      dstdir_status=0
-    else
-      # Prefer dirname, but fall back on a substitute if dirname fails.
-      dstdir=`
-	(dirname "$dst") 2>/dev/null ||
-	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	     X"$dst" : 'X\(//\)[^/]' \| \
-	     X"$dst" : 'X\(//\)$' \| \
-	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
-	echo X"$dst" |
-	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\/\)[^/].*/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\/\)$/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\).*/{
-		   s//\1/
-		   q
-		 }
-		 s/.*/./; q'
-      `
-
-      test -d "$dstdir"
-      dstdir_status=$?
-    fi
-  fi
-
-  obsolete_mkdir_used=false
-
-  if test $dstdir_status != 0; then
-    case $posix_mkdir in
-      '')
-	# Create intermediate dirs using mode 755 as modified by the umask.
-	# This is like FreeBSD 'install' as of 1997-10-28.
-	umask=`umask`
-	case $stripcmd.$umask in
-	  # Optimize common cases.
-	  *[2367][2367]) mkdir_umask=$umask;;
-	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-	  *[0-7])
-	    mkdir_umask=`expr $umask + 22 \
-	      - $umask % 100 % 40 + $umask % 20 \
-	      - $umask % 10 % 4 + $umask % 2
-	    `;;
-	  *) mkdir_umask=$umask,go-w;;
-	esac
-
-	# With -d, create the new directory with the user-specified mode.
-	# Otherwise, rely on $mkdir_umask.
-	if test -n "$dir_arg"; then
-	  mkdir_mode=-m$mode
-	else
-	  mkdir_mode=
-	fi
-
-	posix_mkdir=false
-	case $umask in
-	  *[123567][0-7][0-7])
-	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
-	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-	    ;;
-	  *)
-	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-	    if (umask $mkdir_umask &&
-		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-	    then
-	      if test -z "$dir_arg" || {
-		   # Check for POSIX incompatibilities with -m.
-		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-		   # other-writable bit of parent directory when it shouldn't.
-		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
-		   case $ls_ld_tmpdir in
-		     d????-?r-*) different_mode=700;;
-		     d????-?--*) different_mode=755;;
-		     *) false;;
-		   esac &&
-		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-		   }
-		 }
-	      then posix_mkdir=:
-	      fi
-	      rmdir "$tmpdir/d" "$tmpdir"
-	    else
-	      # Remove any dirs left behind by ancient mkdir implementations.
-	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-	    fi
-	    trap '' 0;;
-	esac;;
-    esac
-
-    if
-      $posix_mkdir && (
-	umask $mkdir_umask &&
-	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
-      )
-    then :
-    else
-
-      # The umask is ridiculous, or mkdir does not conform to POSIX,
-      # or it failed possibly due to a race condition.  Create the
-      # directory the slow way, step by step, checking for races as we go.
-
-      case $dstdir in
-	/*) prefix='/';;
-	[-=\(\)!]*) prefix='./';;
-	*)  prefix='';;
-      esac
-
-      eval "$initialize_posix_glob"
-
-      oIFS=$IFS
-      IFS=/
-      $posix_glob set -f
-      set fnord $dstdir
-      shift
-      $posix_glob set +f
-      IFS=$oIFS
-
-      prefixes=
-
-      for d
-      do
-	test X"$d" = X && continue
-
-	prefix=$prefix$d
-	if test -d "$prefix"; then
-	  prefixes=
-	else
-	  if $posix_mkdir; then
-	    (umask=$mkdir_umask &&
-	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-	    # Don't fail if two instances are running concurrently.
-	    test -d "$prefix" || exit 1
-	  else
-	    case $prefix in
-	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-	      *) qprefix=$prefix;;
-	    esac
-	    prefixes="$prefixes '$qprefix'"
-	  fi
-	fi
-	prefix=$prefix/
-      done
-
-      if test -n "$prefixes"; then
-	# Don't fail if two instances are running concurrently.
-	(umask $mkdir_umask &&
-	 eval "\$doit_exec \$mkdirprog $prefixes") ||
-	  test -d "$dstdir" || exit 1
-	obsolete_mkdir_used=true
-      fi
-    fi
-  fi
-
-  if test -n "$dir_arg"; then
-    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
-    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
-      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
-  else
-
-    # Make a couple of temp file names in the proper directory.
-    dsttmp=$dstdir/_inst.$$_
-    rmtmp=$dstdir/_rm.$$_
-
-    # Trap to clean up those temp files at exit.
-    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
-    # Copy the file name to the temp name.
-    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
-    # and set any options; do chmod last to preserve setuid bits.
-    #
-    # If any of these fail, we abort the whole thing.  If we want to
-    # ignore errors from any of these, just make sure not to ignore
-    # errors from the above "$doit $cpprog $src $dsttmp" command.
-    #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
-    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
-    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
-    # If -C, don't bother to copy if it wouldn't change the file.
-    if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
-
-       eval "$initialize_posix_glob" &&
-       $posix_glob set -f &&
-       set X $old && old=:$2:$4:$5:$6 &&
-       set X $new && new=:$2:$4:$5:$6 &&
-       $posix_glob set +f &&
-
-       test "$old" = "$new" &&
-       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
-    then
-      rm -f "$dsttmp"
-    else
-      # Rename the file to the real destination.
-      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
-      # The rename failed, perhaps because mv can't rename something else
-      # to itself, or perhaps because mv is so ancient that it does not
-      # support -f.
-      {
-	# Now remove or move aside any old file at destination location.
-	# We try this two ways since rm can't unlink itself on some
-	# systems and the destination file might be busy for other
-	# reasons.  In this case, the final cleanup might fail but the new
-	# file should still install successfully.
-	{
-	  test ! -f "$dst" ||
-	  $doit $rmcmd -f "$dst" 2>/dev/null ||
-	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-	  } ||
-	  { echo "$0: cannot unlink or rename $dst" >&2
-	    (exit 1); exit 1
-	  }
-	} &&
-
-	# Now rename the file to the real destination.
-	$doit $mvcmd "$dsttmp" "$dst"
-      }
-    fi || exit 1
-
-    trap '' 0
-  fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/config/ltmain.sh b/config/ltmain.sh
deleted file mode 100644
index 63ae69d..0000000
--- a/config/ltmain.sh
+++ /dev/null
@@ -1,9655 +0,0 @@
-
-# libtool (GNU libtool) 2.4.2
-# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-# This is free software; see the source for copying conditions.  There is NO
-# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-# GNU Libtool is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html,
-# or obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# Usage: $progname [OPTION]... [MODE-ARG]...
-#
-# Provide generalized library-building support services.
-#
-#       --config             show all configuration variables
-#       --debug              enable verbose shell tracing
-#   -n, --dry-run            display commands without modifying any files
-#       --features           display basic configuration information and exit
-#       --mode=MODE          use operation mode MODE
-#       --preserve-dup-deps  don't remove duplicate dependency libraries
-#       --quiet, --silent    don't print informational messages
-#       --no-quiet, --no-silent
-#                            print informational messages (default)
-#       --no-warn            don't display warning messages
-#       --tag=TAG            use configuration variables from tag TAG
-#   -v, --verbose            print more informational messages than default
-#       --no-verbose         don't print the extra informational messages
-#       --version            print version information
-#   -h, --help, --help-all   print short, long, or detailed help message
-#
-# MODE must be one of the following:
-#
-#         clean              remove files from the build directory
-#         compile            compile a source file into a libtool object
-#         execute            automatically set library path, then run a program
-#         finish             complete the installation of libtool libraries
-#         install            install libraries or executables
-#         link               create a library or an executable
-#         uninstall          remove libraries from an installed directory
-#
-# MODE-ARGS vary depending on the MODE.  When passed as first option,
-# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
-# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
-#
-# When reporting a bug, please describe a test case to reproduce it and
-# include the following information:
-#
-#         host-triplet:	$host
-#         shell:		$SHELL
-#         compiler:		$LTCC
-#         compiler flags:		$LTCFLAGS
-#         linker:		$LD (gnu? $with_gnu_ld)
-#         $progname:	(GNU libtool) 2.4.2
-#         automake:	$automake_version
-#         autoconf:	$autoconf_version
-#
-# Report bugs to <bug-libtool at gnu.org>.
-# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
-# General help using GNU software: <http://www.gnu.org/gethelp/>.
-
-PROGRAM=libtool
-PACKAGE=libtool
-VERSION=2.4.2
-TIMESTAMP=""
-package_revision=1.3337
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
-  eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
-}
-
-# NLS nuisances: We save the old values to restore during execute mode.
-lt_user_locale=
-lt_safe_locale=
-for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
-do
-  eval "if test \"\${$lt_var+set}\" = set; then
-          save_$lt_var=\$$lt_var
-          $lt_var=C
-	  export $lt_var
-	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
-	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
-	fi"
-done
-LC_ALL=C
-LANGUAGE=C
-export LANGUAGE LC_ALL
-
-$lt_unset CDPATH
-
-
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
-
-
-
-: ${CP="cp -f"}
-test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
-: ${MAKE="make"}
-: ${MKDIR="mkdir"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
-: ${Xsed="$SED -e 1s/^X//"}
-
-# Global variables:
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
-EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
-
-exit_status=$EXIT_SUCCESS
-
-# Make sure IFS has a sensible default
-lt_nl='
-'
-IFS=" 	$lt_nl"
-
-dirname="s,/[^/]*$,,"
-basename="s,^.*/,,"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-    if test "X$func_dirname_result" = "X${1}"; then
-      func_dirname_result="${3}"
-    else
-      func_dirname_result="$func_dirname_result${2}"
-    fi
-} # func_dirname may be replaced by extended shell implementation
-
-
-# func_basename file
-func_basename ()
-{
-    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
-} # func_basename may be replaced by extended shell implementation
-
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-    # Extract subdirectory from the argument.
-    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
-    if test "X$func_dirname_result" = "X${1}"; then
-      func_dirname_result="${3}"
-    else
-      func_dirname_result="$func_dirname_result${2}"
-    fi
-    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
-} # func_dirname_and_basename may be replaced by extended shell implementation
-
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-    case ${2} in
-      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-    esac
-} # func_stripname may be replaced by extended shell implementation
-
-
-# These SED scripts presuppose an absolute path with a trailing slash.
-pathcar='s,^/\([^/]*\).*$,\1,'
-pathcdr='s,^/[^/]*,,'
-removedotparts=':dotsl
-		s@/\./@/@g
-		t dotsl
-		s,/\.$,/,'
-collapseslashes='s@/\{1,\}@/@g'
-finalslash='s,/*$,/,'
-
-# func_normal_abspath PATH
-# Remove doubled-up and trailing slashes, "." path components,
-# and cancel out any ".." path components in PATH after making
-# it an absolute path.
-#             value returned in "$func_normal_abspath_result"
-func_normal_abspath ()
-{
-  # Start from root dir and reassemble the path.
-  func_normal_abspath_result=
-  func_normal_abspath_tpath=$1
-  func_normal_abspath_altnamespace=
-  case $func_normal_abspath_tpath in
-    "")
-      # Empty path, that just means $cwd.
-      func_stripname '' '/' "`pwd`"
-      func_normal_abspath_result=$func_stripname_result
-      return
-    ;;
-    # The next three entries are used to spot a run of precisely
-    # two leading slashes without using negated character classes;
-    # we take advantage of case's first-match behaviour.
-    ///*)
-      # Unusual form of absolute path, do nothing.
-    ;;
-    //*)
-      # Not necessarily an ordinary path; POSIX reserves leading '//'
-      # and for example Cygwin uses it to access remote file shares
-      # over CIFS/SMB, so we conserve a leading double slash if found.
-      func_normal_abspath_altnamespace=/
-    ;;
-    /*)
-      # Absolute path, do nothing.
-    ;;
-    *)
-      # Relative path, prepend $cwd.
-      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
-    ;;
-  esac
-  # Cancel out all the simple stuff to save iterations.  We also want
-  # the path to end with a slash for ease of parsing, so make sure
-  # there is one (and only one) here.
-  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
-  while :; do
-    # Processed it all yet?
-    if test "$func_normal_abspath_tpath" = / ; then
-      # If we ascended to the root using ".." the result may be empty now.
-      if test -z "$func_normal_abspath_result" ; then
-        func_normal_abspath_result=/
-      fi
-      break
-    fi
-    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$pathcar"`
-    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$pathcdr"`
-    # Figure out what to do with it
-    case $func_normal_abspath_tcomponent in
-      "")
-        # Trailing empty path component, ignore it.
-      ;;
-      ..)
-        # Parent dir; strip last assembled component from result.
-        func_dirname "$func_normal_abspath_result"
-        func_normal_abspath_result=$func_dirname_result
-      ;;
-      *)
-        # Actual path component, append it.
-        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
-      ;;
-    esac
-  done
-  # Restore leading double-slash if one was found on entry.
-  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
-}
-
-# func_relative_path SRCDIR DSTDIR
-# generates a relative path from SRCDIR to DSTDIR, with a trailing
-# slash if non-empty, suitable for immediately appending a filename
-# without needing to append a separator.
-#             value returned in "$func_relative_path_result"
-func_relative_path ()
-{
-  func_relative_path_result=
-  func_normal_abspath "$1"
-  func_relative_path_tlibdir=$func_normal_abspath_result
-  func_normal_abspath "$2"
-  func_relative_path_tbindir=$func_normal_abspath_result
-
-  # Ascend the tree starting from libdir
-  while :; do
-    # check if we have found a prefix of bindir
-    case $func_relative_path_tbindir in
-      $func_relative_path_tlibdir)
-        # found an exact match
-        func_relative_path_tcancelled=
-        break
-        ;;
-      $func_relative_path_tlibdir*)
-        # found a matching prefix
-        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
-        func_relative_path_tcancelled=$func_stripname_result
-        if test -z "$func_relative_path_result"; then
-          func_relative_path_result=.
-        fi
-        break
-        ;;
-      *)
-        func_dirname $func_relative_path_tlibdir
-        func_relative_path_tlibdir=${func_dirname_result}
-        if test "x$func_relative_path_tlibdir" = x ; then
-          # Have to descend all the way to the root!
-          func_relative_path_result=../$func_relative_path_result
-          func_relative_path_tcancelled=$func_relative_path_tbindir
-          break
-        fi
-        func_relative_path_result=../$func_relative_path_result
-        ;;
-    esac
-  done
-
-  # Now calculate path; take care to avoid doubling-up slashes.
-  func_stripname '' '/' "$func_relative_path_result"
-  func_relative_path_result=$func_stripname_result
-  func_stripname '/' '/' "$func_relative_path_tcancelled"
-  if test "x$func_stripname_result" != x ; then
-    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
-  fi
-
-  # Normalisation. If bindir is libdir, return empty string,
-  # else relative path ending with a slash; either way, target
-  # file name can be directly appended.
-  if test ! -z "$func_relative_path_result"; then
-    func_stripname './' '' "$func_relative_path_result/"
-    func_relative_path_result=$func_stripname_result
-  fi
-}
-
-# The name of this program:
-func_dirname_and_basename "$progpath"
-progname=$func_basename_result
-
-# Make sure we have an absolute path for reexecution:
-case $progpath in
-  [\\/]*|[A-Za-z]:\\*) ;;
-  *[\\/]*)
-     progdir=$func_dirname_result
-     progdir=`cd "$progdir" && pwd`
-     progpath="$progdir/$progname"
-     ;;
-  *)
-     save_IFS="$IFS"
-     IFS=${PATH_SEPARATOR-:}
-     for progdir in $PATH; do
-       IFS="$save_IFS"
-       test -x "$progdir/$progname" && break
-     done
-     IFS="$save_IFS"
-     test -n "$progdir" || progdir=`pwd`
-     progpath="$progdir/$progname"
-     ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution that turns a string into a regex matching for the
-# string literally.
-sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
-
-# Sed substitution that converts a w32 file name or path
-# which contains forward slashes, into one that contains
-# (escaped) backslashes.  A very naive implementation.
-lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-
-# Re-`\' parameter expansions in output of double_quote_subst that were
-# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
-# in input to double_quote_subst, that '$' was protected from expansion.
-# Since each input `\' is now two `\'s, look for any number of runs of
-# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
-bs='\\'
-bs2='\\\\'
-bs4='\\\\\\\\'
-dollar='\$'
-sed_double_backslash="\
-  s/$bs4/&\\
-/g
-  s/^$bs2$dollar/$bs&/
-  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
-  s/\n//g"
-
-# Standard options:
-opt_dry_run=false
-opt_help=false
-opt_quiet=false
-opt_verbose=false
-opt_warning=:
-
-# func_echo arg...
-# Echo program name prefixed message, along with the current mode
-# name if it has been set yet.
-func_echo ()
-{
-    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
-}
-
-# func_verbose arg...
-# Echo program name prefixed message in verbose mode only.
-func_verbose ()
-{
-    $opt_verbose && func_echo ${1+"$@"}
-
-    # A bug in bash halts the script if the last line of a function
-    # fails when set -e is in force, so we need another command to
-    # work around that:
-    :
-}
-
-# func_echo_all arg...
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
-    $ECHO "$*"
-}
-
-# func_error arg...
-# Echo program name prefixed message to standard error.
-func_error ()
-{
-    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
-}
-
-# func_warning arg...
-# Echo program name prefixed warning message to standard error.
-func_warning ()
-{
-    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
-
-    # bash bug again:
-    :
-}
-
-# func_fatal_error arg...
-# Echo program name prefixed message to standard error, and exit.
-func_fatal_error ()
-{
-    func_error ${1+"$@"}
-    exit $EXIT_FAILURE
-}
-
-# func_fatal_help arg...
-# Echo program name prefixed message to standard error, followed by
-# a help hint, and exit.
-func_fatal_help ()
-{
-    func_error ${1+"$@"}
-    func_fatal_error "$help"
-}
-help="Try \`$progname --help' for more information."  ## default
-
-
-# func_grep expression filename
-# Check whether EXPRESSION matches any line of FILENAME, without output.
-func_grep ()
-{
-    $GREP "$1" "$2" >/dev/null 2>&1
-}
-
-
-# func_mkdir_p directory-path
-# Make sure the entire path to DIRECTORY-PATH is available.
-func_mkdir_p ()
-{
-    my_directory_path="$1"
-    my_dir_list=
-
-    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
-
-      # Protect directory names starting with `-'
-      case $my_directory_path in
-        -*) my_directory_path="./$my_directory_path" ;;
-      esac
-
-      # While some portion of DIR does not yet exist...
-      while test ! -d "$my_directory_path"; do
-        # ...make a list in topmost first order.  Use a colon delimited
-	# list incase some portion of path contains whitespace.
-        my_dir_list="$my_directory_path:$my_dir_list"
-
-        # If the last portion added has no slash in it, the list is done
-        case $my_directory_path in */*) ;; *) break ;; esac
-
-        # ...otherwise throw away the child directory and loop
-        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
-      done
-      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
-
-      save_mkdir_p_IFS="$IFS"; IFS=':'
-      for my_dir in $my_dir_list; do
-	IFS="$save_mkdir_p_IFS"
-        # mkdir can fail with a `File exist' error if two processes
-        # try to create one of the directories concurrently.  Don't
-        # stop in that case!
-        $MKDIR "$my_dir" 2>/dev/null || :
-      done
-      IFS="$save_mkdir_p_IFS"
-
-      # Bail out if we (or some other process) failed to create a directory.
-      test -d "$my_directory_path" || \
-        func_fatal_error "Failed to create \`$1'"
-    fi
-}
-
-
-# func_mktempdir [string]
-# Make a temporary directory that won't clash with other running
-# libtool processes, and avoids race conditions if possible.  If
-# given, STRING is the basename for that directory.
-func_mktempdir ()
-{
-    my_template="${TMPDIR-/tmp}/${1-$progname}"
-
-    if test "$opt_dry_run" = ":"; then
-      # Return a directory name, but don't create it in dry-run mode
-      my_tmpdir="${my_template}-$$"
-    else
-
-      # If mktemp works, use that first and foremost
-      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
-
-      if test ! -d "$my_tmpdir"; then
-        # Failing that, at least try and use $RANDOM to avoid a race
-        my_tmpdir="${my_template}-${RANDOM-0}$$"
-
-        save_mktempdir_umask=`umask`
-        umask 0077
-        $MKDIR "$my_tmpdir"
-        umask $save_mktempdir_umask
-      fi
-
-      # If we're not in dry-run mode, bomb out on failure
-      test -d "$my_tmpdir" || \
-        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
-    fi
-
-    $ECHO "$my_tmpdir"
-}
-
-
-# func_quote_for_eval arg
-# Aesthetically quote ARG to be evaled later.
-# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
-# is double-quoted, suitable for a subsequent eval, whereas
-# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
-# which are still active within double quotes backslashified.
-func_quote_for_eval ()
-{
-    case $1 in
-      *[\\\`\"\$]*)
-	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
-      *)
-        func_quote_for_eval_unquoted_result="$1" ;;
-    esac
-
-    case $func_quote_for_eval_unquoted_result in
-      # Double-quote args containing shell metacharacters to delay
-      # word splitting, command substitution and and variable
-      # expansion for a subsequent eval.
-      # Many Bourne shells cannot handle close brackets correctly
-      # in scan sets, so we specify it separately.
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
-        ;;
-      *)
-        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
-    esac
-}
-
-
-# func_quote_for_expand arg
-# Aesthetically quote ARG to be evaled later; same as above,
-# but do not quote variable references.
-func_quote_for_expand ()
-{
-    case $1 in
-      *[\\\`\"]*)
-	my_arg=`$ECHO "$1" | $SED \
-	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
-      *)
-        my_arg="$1" ;;
-    esac
-
-    case $my_arg in
-      # Double-quote args containing shell metacharacters to delay
-      # word splitting and command substitution for a subsequent eval.
-      # Many Bourne shells cannot handle close brackets correctly
-      # in scan sets, so we specify it separately.
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-        my_arg="\"$my_arg\""
-        ;;
-    esac
-
-    func_quote_for_expand_result="$my_arg"
-}
-
-
-# func_show_eval cmd [fail_exp]
-# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
-# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
-# is given, then evaluate it.
-func_show_eval ()
-{
-    my_cmd="$1"
-    my_fail_exp="${2-:}"
-
-    ${opt_silent-false} || {
-      func_quote_for_expand "$my_cmd"
-      eval "func_echo $func_quote_for_expand_result"
-    }
-
-    if ${opt_dry_run-false}; then :; else
-      eval "$my_cmd"
-      my_status=$?
-      if test "$my_status" -eq 0; then :; else
-	eval "(exit $my_status); $my_fail_exp"
-      fi
-    fi
-}
-
-
-# func_show_eval_locale cmd [fail_exp]
-# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
-# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
-# is given, then evaluate it.  Use the saved locale for evaluation.
-func_show_eval_locale ()
-{
-    my_cmd="$1"
-    my_fail_exp="${2-:}"
-
-    ${opt_silent-false} || {
-      func_quote_for_expand "$my_cmd"
-      eval "func_echo $func_quote_for_expand_result"
-    }
-
-    if ${opt_dry_run-false}; then :; else
-      eval "$lt_user_locale
-	    $my_cmd"
-      my_status=$?
-      eval "$lt_safe_locale"
-      if test "$my_status" -eq 0; then :; else
-	eval "(exit $my_status); $my_fail_exp"
-      fi
-    fi
-}
-
-# func_tr_sh
-# Turn $1 into a string suitable for a shell variable name.
-# Result is stored in $func_tr_sh_result.  All characters
-# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
-# if $1 begins with a digit, a '_' is prepended as well.
-func_tr_sh ()
-{
-  case $1 in
-  [0-9]* | *[!a-zA-Z0-9_]*)
-    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
-    ;;
-  * )
-    func_tr_sh_result=$1
-    ;;
-  esac
-}
-
-
-# func_version
-# Echo version message to standard output and exit.
-func_version ()
-{
-    $opt_debug
-
-    $SED -n '/(C)/!b go
-	:more
-	/\./!{
-	  N
-	  s/\n# / /
-	  b more
-	}
-	:go
-	/^# '$PROGRAM' (GNU /,/# warranty; / {
-        s/^# //
-	s/^# *$//
-        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
-        p
-     }' < "$progpath"
-     exit $?
-}
-
-# func_usage
-# Echo short help message to standard output and exit.
-func_usage ()
-{
-    $opt_debug
-
-    $SED -n '/^# Usage:/,/^#  *.*--help/ {
-        s/^# //
-	s/^# *$//
-	s/\$progname/'$progname'/
-	p
-    }' < "$progpath"
-    echo
-    $ECHO "run \`$progname --help | more' for full usage"
-    exit $?
-}
-
-# func_help [NOEXIT]
-# Echo long help message to standard output and exit,
-# unless 'noexit' is passed as argument.
-func_help ()
-{
-    $opt_debug
-
-    $SED -n '/^# Usage:/,/# Report bugs to/ {
-	:print
-        s/^# //
-	s/^# *$//
-	s*\$progname*'$progname'*
-	s*\$host*'"$host"'*
-	s*\$SHELL*'"$SHELL"'*
-	s*\$LTCC*'"$LTCC"'*
-	s*\$LTCFLAGS*'"$LTCFLAGS"'*
-	s*\$LD*'"$LD"'*
-	s/\$with_gnu_ld/'"$with_gnu_ld"'/
-	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
-	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
-	p
-	d
-     }
-     /^# .* home page:/b print
-     /^# General help using/b print
-     ' < "$progpath"
-    ret=$?
-    if test -z "$1"; then
-      exit $ret
-    fi
-}
-
-# func_missing_arg argname
-# Echo program name prefixed message to standard error and set global
-# exit_cmd.
-func_missing_arg ()
-{
-    $opt_debug
-
-    func_error "missing argument for $1."
-    exit_cmd=exit
-}
-
-
-# func_split_short_opt shortopt
-# Set func_split_short_opt_name and func_split_short_opt_arg shell
-# variables after splitting SHORTOPT after the 2nd character.
-func_split_short_opt ()
-{
-    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
-    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
-
-    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
-    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
-} # func_split_short_opt may be replaced by extended shell implementation
-
-
-# func_split_long_opt longopt
-# Set func_split_long_opt_name and func_split_long_opt_arg shell
-# variables after splitting LONGOPT at the `=' sign.
-func_split_long_opt ()
-{
-    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
-    my_sed_long_arg='1s/^--[^=]*=//'
-
-    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
-    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
-} # func_split_long_opt may be replaced by extended shell implementation
-
-exit_cmd=:
-
-
-
-
-
-magic="%%%MAGIC variable%%%"
-magic_exe="%%%MAGIC EXE variable%%%"
-
-# Global variables.
-nonopt=
-preserve_args=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-extracted_archives=
-extracted_serial=0
-
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end.  This prevents here-documents from being
-# left over by shells.
-exec_cmd=
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-    eval "${1}=\$${1}\${2}"
-} # func_append may be replaced by extended shell implementation
-
-# func_append_quoted var value
-# Quote VALUE and append to the end of shell variable VAR, separated
-# by a space.
-func_append_quoted ()
-{
-    func_quote_for_eval "${2}"
-    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
-} # func_append_quoted may be replaced by extended shell implementation
-
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-    func_arith_result=`expr "${@}"`
-} # func_arith may be replaced by extended shell implementation
-
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
-} # func_len may be replaced by extended shell implementation
-
-
-# func_lo2o object
-func_lo2o ()
-{
-    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
-} # func_lo2o may be replaced by extended shell implementation
-
-
-# func_xform libobj-or-source
-func_xform ()
-{
-    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
-} # func_xform may be replaced by extended shell implementation
-
-
-# func_fatal_configuration arg...
-# Echo program name prefixed message to standard error, followed by
-# a configuration failure hint, and exit.
-func_fatal_configuration ()
-{
-    func_error ${1+"$@"}
-    func_error "See the $PACKAGE documentation for more information."
-    func_fatal_error "Fatal configuration error."
-}
-
-
-# func_config
-# Display the configuration for all the tags in this script.
-func_config ()
-{
-    re_begincf='^# ### BEGIN LIBTOOL'
-    re_endcf='^# ### END LIBTOOL'
-
-    # Default configuration.
-    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
-
-    # Now print the configurations for the tags.
-    for tagname in $taglist; do
-      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
-    done
-
-    exit $?
-}
-
-# func_features
-# Display the features supported by this script.
-func_features ()
-{
-    echo "host: $host"
-    if test "$build_libtool_libs" = yes; then
-      echo "enable shared libraries"
-    else
-      echo "disable shared libraries"
-    fi
-    if test "$build_old_libs" = yes; then
-      echo "enable static libraries"
-    else
-      echo "disable static libraries"
-    fi
-
-    exit $?
-}
-
-# func_enable_tag tagname
-# Verify that TAGNAME is valid, and either flag an error and exit, or
-# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
-# variable here.
-func_enable_tag ()
-{
-  # Global variable:
-  tagname="$1"
-
-  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
-  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
-  sed_extractcf="/$re_begincf/,/$re_endcf/p"
-
-  # Validate tagname.
-  case $tagname in
-    *[!-_A-Za-z0-9,/]*)
-      func_fatal_error "invalid tag name: $tagname"
-      ;;
-  esac
-
-  # Don't test for the "default" C tag, as we know it's
-  # there but not specially marked.
-  case $tagname in
-    CC) ;;
-    *)
-      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
-	taglist="$taglist $tagname"
-
-	# Evaluate the configuration.  Be careful to quote the path
-	# and the sed script, to avoid splitting on whitespace, but
-	# also don't use non-portable quotes within backquotes within
-	# quotes we have to do it in 2 steps:
-	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
-	eval "$extractedcf"
-      else
-	func_error "ignoring unknown tag $tagname"
-      fi
-      ;;
-  esac
-}
-
-# func_check_version_match
-# Ensure that we are using m4 macros, and libtool script from the same
-# release of libtool.
-func_check_version_match ()
-{
-  if test "$package_revision" != "$macro_revision"; then
-    if test "$VERSION" != "$macro_version"; then
-      if test -z "$macro_version"; then
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from an older release.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      else
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      fi
-    else
-      cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
-$progname: but the definition of this LT_INIT comes from revision $macro_revision.
-$progname: You should recreate aclocal.m4 with macros from revision $package_revision
-$progname: of $PACKAGE $VERSION and run autoconf again.
-_LT_EOF
-    fi
-
-    exit $EXIT_MISMATCH
-  fi
-}
-
-
-# Shorthand for --mode=foo, only valid as the first argument
-case $1 in
-clean|clea|cle|cl)
-  shift; set dummy --mode clean ${1+"$@"}; shift
-  ;;
-compile|compil|compi|comp|com|co|c)
-  shift; set dummy --mode compile ${1+"$@"}; shift
-  ;;
-execute|execut|execu|exec|exe|ex|e)
-  shift; set dummy --mode execute ${1+"$@"}; shift
-  ;;
-finish|finis|fini|fin|fi|f)
-  shift; set dummy --mode finish ${1+"$@"}; shift
-  ;;
-install|instal|insta|inst|ins|in|i)
-  shift; set dummy --mode install ${1+"$@"}; shift
-  ;;
-link|lin|li|l)
-  shift; set dummy --mode link ${1+"$@"}; shift
-  ;;
-uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-  shift; set dummy --mode uninstall ${1+"$@"}; shift
-  ;;
-esac
-
-
-
-# Option defaults:
-opt_debug=:
-opt_dry_run=false
-opt_config=false
-opt_preserve_dup_deps=false
-opt_features=false
-opt_finish=false
-opt_help=false
-opt_help_all=false
-opt_silent=:
-opt_warning=:
-opt_verbose=:
-opt_silent=false
-opt_verbose=false
-
-
-# Parse options once, thoroughly.  This comes as soon as possible in the
-# script to make things like `--version' happen as quickly as we can.
-{
-  # this just eases exit handling
-  while test $# -gt 0; do
-    opt="$1"
-    shift
-    case $opt in
-      --debug|-x)	opt_debug='set -x'
-			func_echo "enabling shell trace mode"
-			$opt_debug
-			;;
-      --dry-run|--dryrun|-n)
-			opt_dry_run=:
-			;;
-      --config)
-			opt_config=:
-func_config
-			;;
-      --dlopen|-dlopen)
-			optarg="$1"
-			opt_dlopen="${opt_dlopen+$opt_dlopen
-}$optarg"
-			shift
-			;;
-      --preserve-dup-deps)
-			opt_preserve_dup_deps=:
-			;;
-      --features)
-			opt_features=:
-func_features
-			;;
-      --finish)
-			opt_finish=:
-set dummy --mode finish ${1+"$@"}; shift
-			;;
-      --help)
-			opt_help=:
-			;;
-      --help-all)
-			opt_help_all=:
-opt_help=': help-all'
-			;;
-      --mode)
-			test $# = 0 && func_missing_arg $opt && break
-			optarg="$1"
-			opt_mode="$optarg"
-case $optarg in
-  # Valid mode arguments:
-  clean|compile|execute|finish|install|link|relink|uninstall) ;;
-
-  # Catch anything else as an error
-  *) func_error "invalid argument for $opt"
-     exit_cmd=exit
-     break
-     ;;
-esac
-			shift
-			;;
-      --no-silent|--no-quiet)
-			opt_silent=false
-func_append preserve_args " $opt"
-			;;
-      --no-warning|--no-warn)
-			opt_warning=false
-func_append preserve_args " $opt"
-			;;
-      --no-verbose)
-			opt_verbose=false
-func_append preserve_args " $opt"
-			;;
-      --silent|--quiet)
-			opt_silent=:
-func_append preserve_args " $opt"
-        opt_verbose=false
-			;;
-      --verbose|-v)
-			opt_verbose=:
-func_append preserve_args " $opt"
-opt_silent=false
-			;;
-      --tag)
-			test $# = 0 && func_missing_arg $opt && break
-			optarg="$1"
-			opt_tag="$optarg"
-func_append preserve_args " $opt $optarg"
-func_enable_tag "$optarg"
-			shift
-			;;
-
-      -\?|-h)		func_usage				;;
-      --help)		func_help				;;
-      --version)	func_version				;;
-
-      # Separate optargs to long options:
-      --*=*)
-			func_split_long_opt "$opt"
-			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
-			shift
-			;;
-
-      # Separate non-argument short options:
-      -\?*|-h*|-n*|-v*)
-			func_split_short_opt "$opt"
-			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
-			shift
-			;;
-
-      --)		break					;;
-      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
-      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
-    esac
-  done
-
-  # Validate options:
-
-  # save first non-option argument
-  if test "$#" -gt 0; then
-    nonopt="$opt"
-    shift
-  fi
-
-  # preserve --debug
-  test "$opt_debug" = : || func_append preserve_args " --debug"
-
-  case $host in
-    *cygwin* | *mingw* | *pw32* | *cegcc*)
-      # don't eliminate duplications in $postdeps and $predeps
-      opt_duplicate_compiler_generated_deps=:
-      ;;
-    *)
-      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
-      ;;
-  esac
-
-  $opt_help || {
-    # Sanity checks first:
-    func_check_version_match
-
-    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-      func_fatal_configuration "not configured to build any kind of library"
-    fi
-
-    # Darwin sucks
-    eval std_shrext=\"$shrext_cmds\"
-
-    # Only execute mode is allowed to have -dlopen flags.
-    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
-      func_error "unrecognized option \`-dlopen'"
-      $ECHO "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    # Change the help message to a mode-specific one.
-    generic_help="$help"
-    help="Try \`$progname --help --mode=$opt_mode' for more information."
-  }
-
-
-  # Bail if the options were screwed
-  $exit_cmd $EXIT_FAILURE
-}
-
-
-
-
-## ----------- ##
-##    Main.    ##
-## ----------- ##
-
-# func_lalib_p file
-# True iff FILE is a libtool `.la' library or `.lo' object file.
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_lalib_p ()
-{
-    test -f "$1" &&
-      $SED -e 4q "$1" 2>/dev/null \
-        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
-}
-
-# func_lalib_unsafe_p file
-# True iff FILE is a libtool `.la' library or `.lo' object file.
-# This function implements the same check as func_lalib_p without
-# resorting to external programs.  To this end, it redirects stdin and
-# closes it afterwards, without saving the original file descriptor.
-# As a safety measure, use it only where a negative result would be
-# fatal anyway.  Works if `file' does not exist.
-func_lalib_unsafe_p ()
-{
-    lalib_p=no
-    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
-	for lalib_p_l in 1 2 3 4
-	do
-	    read lalib_p_line
-	    case "$lalib_p_line" in
-		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
-	    esac
-	done
-	exec 0<&5 5<&-
-    fi
-    test "$lalib_p" = yes
-}
-
-# func_ltwrapper_script_p file
-# True iff FILE is a libtool wrapper script
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_ltwrapper_script_p ()
-{
-    func_lalib_p "$1"
-}
-
-# func_ltwrapper_executable_p file
-# True iff FILE is a libtool wrapper executable
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_ltwrapper_executable_p ()
-{
-    func_ltwrapper_exec_suffix=
-    case $1 in
-    *.exe) ;;
-    *) func_ltwrapper_exec_suffix=.exe ;;
-    esac
-    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
-}
-
-# func_ltwrapper_scriptname file
-# Assumes file is an ltwrapper_executable
-# uses $file to determine the appropriate filename for a
-# temporary ltwrapper_script.
-func_ltwrapper_scriptname ()
-{
-    func_dirname_and_basename "$1" "" "."
-    func_stripname '' '.exe' "$func_basename_result"
-    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
-}
-
-# func_ltwrapper_p file
-# True iff FILE is a libtool wrapper script or wrapper executable
-# This function is only a basic sanity check; it will hardly flush out
-# determined imposters.
-func_ltwrapper_p ()
-{
-    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
-}
-
-
-# func_execute_cmds commands fail_cmd
-# Execute tilde-delimited COMMANDS.
-# If FAIL_CMD is given, eval that upon failure.
-# FAIL_CMD may read-access the current command in variable CMD!
-func_execute_cmds ()
-{
-    $opt_debug
-    save_ifs=$IFS; IFS='~'
-    for cmd in $1; do
-      IFS=$save_ifs
-      eval cmd=\"$cmd\"
-      func_show_eval "$cmd" "${2-:}"
-    done
-    IFS=$save_ifs
-}
-
-
-# func_source file
-# Source FILE, adding directory component if necessary.
-# Note that it is not necessary on cygwin/mingw to append a dot to
-# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
-# behavior happens only for exec(3), not for open(2)!  Also, sourcing
-# `FILE.' does not work on cygwin managed mounts.
-func_source ()
-{
-    $opt_debug
-    case $1 in
-    */* | *\\*)	. "$1" ;;
-    *)		. "./$1" ;;
-    esac
-}
-
-
-# func_resolve_sysroot PATH
-# Replace a leading = in PATH with a sysroot.  Store the result into
-# func_resolve_sysroot_result
-func_resolve_sysroot ()
-{
-  func_resolve_sysroot_result=$1
-  case $func_resolve_sysroot_result in
-  =*)
-    func_stripname '=' '' "$func_resolve_sysroot_result"
-    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
-    ;;
-  esac
-}
-
-# func_replace_sysroot PATH
-# If PATH begins with the sysroot, replace it with = and
-# store the result into func_replace_sysroot_result.
-func_replace_sysroot ()
-{
-  case "$lt_sysroot:$1" in
-  ?*:"$lt_sysroot"*)
-    func_stripname "$lt_sysroot" '' "$1"
-    func_replace_sysroot_result="=$func_stripname_result"
-    ;;
-  *)
-    # Including no sysroot.
-    func_replace_sysroot_result=$1
-    ;;
-  esac
-}
-
-# func_infer_tag arg
-# Infer tagged configuration to use if any are available and
-# if one wasn't chosen via the "--tag" command line option.
-# Only attempt this if the compiler in the base compile
-# command doesn't match the default compiler.
-# arg is usually of the form 'gcc ...'
-func_infer_tag ()
-{
-    $opt_debug
-    if test -n "$available_tags" && test -z "$tagname"; then
-      CC_quoted=
-      for arg in $CC; do
-	func_append_quoted CC_quoted "$arg"
-      done
-      CC_expanded=`func_echo_all $CC`
-      CC_quoted_expanded=`func_echo_all $CC_quoted`
-      case $@ in
-      # Blanks in the command may have been stripped by the calling shell,
-      # but not from the CC environment variable when configure was run.
-      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
-      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
-      # Blanks at the start of $base_compile will cause this to fail
-      # if we don't check for them as well.
-      *)
-	for z in $available_tags; do
-	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
-	    # Evaluate the configuration.
-	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
-	    CC_quoted=
-	    for arg in $CC; do
-	      # Double-quote args containing other shell metacharacters.
-	      func_append_quoted CC_quoted "$arg"
-	    done
-	    CC_expanded=`func_echo_all $CC`
-	    CC_quoted_expanded=`func_echo_all $CC_quoted`
-	    case "$@ " in
-	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
-	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
-	      # The compiler in the base compile command matches
-	      # the one in the tagged configuration.
-	      # Assume this is the tagged configuration we want.
-	      tagname=$z
-	      break
-	      ;;
-	    esac
-	  fi
-	done
-	# If $tagname still isn't set, then no tagged configuration
-	# was found and let the user know that the "--tag" command
-	# line option must be used.
-	if test -z "$tagname"; then
-	  func_echo "unable to infer tagged configuration"
-	  func_fatal_error "specify a tag with \`--tag'"
-#	else
-#	  func_verbose "using $tagname tagged configuration"
-	fi
-	;;
-      esac
-    fi
-}
-
-
-
-# func_write_libtool_object output_name pic_name nonpic_name
-# Create a libtool object file (analogous to a ".la" file),
-# but don't create it if we're doing a dry run.
-func_write_libtool_object ()
-{
-    write_libobj=${1}
-    if test "$build_libtool_libs" = yes; then
-      write_lobj=\'${2}\'
-    else
-      write_lobj=none
-    fi
-
-    if test "$build_old_libs" = yes; then
-      write_oldobj=\'${3}\'
-    else
-      write_oldobj=none
-    fi
-
-    $opt_dry_run || {
-      cat >${write_libobj}T <<EOF
-# $write_libobj - a libtool object file
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object=$write_lobj
-
-# Name of the non-PIC object
-non_pic_object=$write_oldobj
-
-EOF
-      $MV "${write_libobj}T" "${write_libobj}"
-    }
-}
-
-
-##################################################
-# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
-##################################################
-
-# func_convert_core_file_wine_to_w32 ARG
-# Helper function used by file name conversion functions when $build is *nix,
-# and $host is mingw, cygwin, or some other w32 environment. Relies on a
-# correctly configured wine environment available, with the winepath program
-# in $build's $PATH.
-#
-# ARG is the $build file name to be converted to w32 format.
-# Result is available in $func_convert_core_file_wine_to_w32_result, and will
-# be empty on error (or when ARG is empty)
-func_convert_core_file_wine_to_w32 ()
-{
-  $opt_debug
-  func_convert_core_file_wine_to_w32_result="$1"
-  if test -n "$1"; then
-    # Unfortunately, winepath does not exit with a non-zero error code, so we
-    # are forced to check the contents of stdout. On the other hand, if the
-    # command is not found, the shell will set an exit code of 127 and print
-    # *an error message* to stdout. So we must check for both error code of
-    # zero AND non-empty stdout, which explains the odd construction:
-    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
-    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
-      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
-        $SED -e "$lt_sed_naive_backslashify"`
-    else
-      func_convert_core_file_wine_to_w32_result=
-    fi
-  fi
-}
-# end: func_convert_core_file_wine_to_w32
-
-
-# func_convert_core_path_wine_to_w32 ARG
-# Helper function used by path conversion functions when $build is *nix, and
-# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
-# configured wine environment available, with the winepath program in $build's
-# $PATH. Assumes ARG has no leading or trailing path separator characters.
-#
-# ARG is path to be converted from $build format to win32.
-# Result is available in $func_convert_core_path_wine_to_w32_result.
-# Unconvertible file (directory) names in ARG are skipped; if no directory names
-# are convertible, then the result may be empty.
-func_convert_core_path_wine_to_w32 ()
-{
-  $opt_debug
-  # unfortunately, winepath doesn't convert paths, only file names
-  func_convert_core_path_wine_to_w32_result=""
-  if test -n "$1"; then
-    oldIFS=$IFS
-    IFS=:
-    for func_convert_core_path_wine_to_w32_f in $1; do
-      IFS=$oldIFS
-      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
-      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
-        if test -z "$func_convert_core_path_wine_to_w32_result"; then
-          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
-        else
-          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
-        fi
-      fi
-    done
-    IFS=$oldIFS
-  fi
-}
-# end: func_convert_core_path_wine_to_w32
-
-
-# func_cygpath ARGS...
-# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
-# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
-# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
-# (2), returns the Cygwin file name or path in func_cygpath_result (input
-# file name or path is assumed to be in w32 format, as previously converted
-# from $build's *nix or MSYS format). In case (3), returns the w32 file name
-# or path in func_cygpath_result (input file name or path is assumed to be in
-# Cygwin format). Returns an empty string on error.
-#
-# ARGS are passed to cygpath, with the last one being the file name or path to
-# be converted.
-#
-# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
-# environment variable; do not put it in $PATH.
-func_cygpath ()
-{
-  $opt_debug
-  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
-    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
-    if test "$?" -ne 0; then
-      # on failure, ensure result is empty
-      func_cygpath_result=
-    fi
-  else
-    func_cygpath_result=
-    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
-  fi
-}
-#end: func_cygpath
-
-
-# func_convert_core_msys_to_w32 ARG
-# Convert file name or path ARG from MSYS format to w32 format.  Return
-# result in func_convert_core_msys_to_w32_result.
-func_convert_core_msys_to_w32 ()
-{
-  $opt_debug
-  # awkward: cmd appends spaces to result
-  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
-    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
-}
-#end: func_convert_core_msys_to_w32
-
-
-# func_convert_file_check ARG1 ARG2
-# Verify that ARG1 (a file name in $build format) was converted to $host
-# format in ARG2. Otherwise, emit an error message, but continue (resetting
-# func_to_host_file_result to ARG1).
-func_convert_file_check ()
-{
-  $opt_debug
-  if test -z "$2" && test -n "$1" ; then
-    func_error "Could not determine host file name corresponding to"
-    func_error "  \`$1'"
-    func_error "Continuing, but uninstalled executables may not work."
-    # Fallback:
-    func_to_host_file_result="$1"
-  fi
-}
-# end func_convert_file_check
-
-
-# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
-# Verify that FROM_PATH (a path in $build format) was converted to $host
-# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
-# func_to_host_file_result to a simplistic fallback value (see below).
-func_convert_path_check ()
-{
-  $opt_debug
-  if test -z "$4" && test -n "$3"; then
-    func_error "Could not determine the host path corresponding to"
-    func_error "  \`$3'"
-    func_error "Continuing, but uninstalled executables may not work."
-    # Fallback.  This is a deliberately simplistic "conversion" and
-    # should not be "improved".  See libtool.info.
-    if test "x$1" != "x$2"; then
-      lt_replace_pathsep_chars="s|$1|$2|g"
-      func_to_host_path_result=`echo "$3" |
-        $SED -e "$lt_replace_pathsep_chars"`
-    else
-      func_to_host_path_result="$3"
-    fi
-  fi
-}
-# end func_convert_path_check
-
-
-# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
-# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
-# and appending REPL if ORIG matches BACKPAT.
-func_convert_path_front_back_pathsep ()
-{
-  $opt_debug
-  case $4 in
-  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
-    ;;
-  esac
-  case $4 in
-  $2 ) func_append func_to_host_path_result "$3"
-    ;;
-  esac
-}
-# end func_convert_path_front_back_pathsep
-
-
-##################################################
-# $build to $host FILE NAME CONVERSION FUNCTIONS #
-##################################################
-# invoked via `$to_host_file_cmd ARG'
-#
-# In each case, ARG is the path to be converted from $build to $host format.
-# Result will be available in $func_to_host_file_result.
-
-
-# func_to_host_file ARG
-# Converts the file name ARG from $build format to $host format. Return result
-# in func_to_host_file_result.
-func_to_host_file ()
-{
-  $opt_debug
-  $to_host_file_cmd "$1"
-}
-# end func_to_host_file
-
-
-# func_to_tool_file ARG LAZY
-# converts the file name ARG from $build format to toolchain format. Return
-# result in func_to_tool_file_result.  If the conversion in use is listed
-# in (the comma separated) LAZY, no conversion takes place.
-func_to_tool_file ()
-{
-  $opt_debug
-  case ,$2, in
-    *,"$to_tool_file_cmd",*)
-      func_to_tool_file_result=$1
-      ;;
-    *)
-      $to_tool_file_cmd "$1"
-      func_to_tool_file_result=$func_to_host_file_result
-      ;;
-  esac
-}
-# end func_to_tool_file
-
-
-# func_convert_file_noop ARG
-# Copy ARG to func_to_host_file_result.
-func_convert_file_noop ()
-{
-  func_to_host_file_result="$1"
-}
-# end func_convert_file_noop
-
-
-# func_convert_file_msys_to_w32 ARG
-# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
-# conversion to w32 is not available inside the cwrapper.  Returns result in
-# func_to_host_file_result.
-func_convert_file_msys_to_w32 ()
-{
-  $opt_debug
-  func_to_host_file_result="$1"
-  if test -n "$1"; then
-    func_convert_core_msys_to_w32 "$1"
-    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
-  fi
-  func_convert_file_check "$1" "$func_to_host_file_result"
-}
-# end func_convert_file_msys_to_w32
-
-
-# func_convert_file_cygwin_to_w32 ARG
-# Convert file name ARG from Cygwin to w32 format.  Returns result in
-# func_to_host_file_result.
-func_convert_file_cygwin_to_w32 ()
-{
-  $opt_debug
-  func_to_host_file_result="$1"
-  if test -n "$1"; then
-    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
-    # LT_CYGPATH in this case.
-    func_to_host_file_result=`cygpath -m "$1"`
-  fi
-  func_convert_file_check "$1" "$func_to_host_file_result"
-}
-# end func_convert_file_cygwin_to_w32
-
-
-# func_convert_file_nix_to_w32 ARG
-# Convert file name ARG from *nix to w32 format.  Requires a wine environment
-# and a working winepath. Returns result in func_to_host_file_result.
-func_convert_file_nix_to_w32 ()
-{
-  $opt_debug
-  func_to_host_file_result="$1"
-  if test -n "$1"; then
-    func_convert_core_file_wine_to_w32 "$1"
-    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
-  fi
-  func_convert_file_check "$1" "$func_to_host_file_result"
-}
-# end func_convert_file_nix_to_w32
-
-
-# func_convert_file_msys_to_cygwin ARG
-# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
-# Returns result in func_to_host_file_result.
-func_convert_file_msys_to_cygwin ()
-{
-  $opt_debug
-  func_to_host_file_result="$1"
-  if test -n "$1"; then
-    func_convert_core_msys_to_w32 "$1"
-    func_cygpath -u "$func_convert_core_msys_to_w32_result"
-    func_to_host_file_result="$func_cygpath_result"
-  fi
-  func_convert_file_check "$1" "$func_to_host_file_result"
-}
-# end func_convert_file_msys_to_cygwin
-
-
-# func_convert_file_nix_to_cygwin ARG
-# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
-# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
-# in func_to_host_file_result.
-func_convert_file_nix_to_cygwin ()
-{
-  $opt_debug
-  func_to_host_file_result="$1"
-  if test -n "$1"; then
-    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
-    func_convert_core_file_wine_to_w32 "$1"
-    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
-    func_to_host_file_result="$func_cygpath_result"
-  fi
-  func_convert_file_check "$1" "$func_to_host_file_result"
-}
-# end func_convert_file_nix_to_cygwin
-
-
-#############################################
-# $build to $host PATH CONVERSION FUNCTIONS #
-#############################################
-# invoked via `$to_host_path_cmd ARG'
-#
-# In each case, ARG is the path to be converted from $build to $host format.
-# The result will be available in $func_to_host_path_result.
-#
-# Path separators are also converted from $build format to $host format.  If
-# ARG begins or ends with a path separator character, it is preserved (but
-# converted to $host format) on output.
-#
-# All path conversion functions are named using the following convention:
-#   file name conversion function    : func_convert_file_X_to_Y ()
-#   path conversion function         : func_convert_path_X_to_Y ()
-# where, for any given $build/$host combination the 'X_to_Y' value is the
-# same.  If conversion functions are added for new $build/$host combinations,
-# the two new functions must follow this pattern, or func_init_to_host_path_cmd
-# will break.
-
-
-# func_init_to_host_path_cmd
-# Ensures that function "pointer" variable $to_host_path_cmd is set to the
-# appropriate value, based on the value of $to_host_file_cmd.
-to_host_path_cmd=
-func_init_to_host_path_cmd ()
-{
-  $opt_debug
-  if test -z "$to_host_path_cmd"; then
-    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
-    to_host_path_cmd="func_convert_path_${func_stripname_result}"
-  fi
-}
-
-
-# func_to_host_path ARG
-# Converts the path ARG from $build format to $host format. Return result
-# in func_to_host_path_result.
-func_to_host_path ()
-{
-  $opt_debug
-  func_init_to_host_path_cmd
-  $to_host_path_cmd "$1"
-}
-# end func_to_host_path
-
-
-# func_convert_path_noop ARG
-# Copy ARG to func_to_host_path_result.
-func_convert_path_noop ()
-{
-  func_to_host_path_result="$1"
-}
-# end func_convert_path_noop
-
-
-# func_convert_path_msys_to_w32 ARG
-# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
-# conversion to w32 is not available inside the cwrapper.  Returns result in
-# func_to_host_path_result.
-func_convert_path_msys_to_w32 ()
-{
-  $opt_debug
-  func_to_host_path_result="$1"
-  if test -n "$1"; then
-    # Remove leading and trailing path separator characters from ARG.  MSYS
-    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
-    # and winepath ignores them completely.
-    func_stripname : : "$1"
-    func_to_host_path_tmp1=$func_stripname_result
-    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
-    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
-    func_convert_path_check : ";" \
-      "$func_to_host_path_tmp1" "$func_to_host_path_result"
-    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
-  fi
-}
-# end func_convert_path_msys_to_w32
-
-
-# func_convert_path_cygwin_to_w32 ARG
-# Convert path ARG from Cygwin to w32 format.  Returns result in
-# func_to_host_file_result.
-func_convert_path_cygwin_to_w32 ()
-{
-  $opt_debug
-  func_to_host_path_result="$1"
-  if test -n "$1"; then
-    # See func_convert_path_msys_to_w32:
-    func_stripname : : "$1"
-    func_to_host_path_tmp1=$func_stripname_result
-    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
-    func_convert_path_check : ";" \
-      "$func_to_host_path_tmp1" "$func_to_host_path_result"
-    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
-  fi
-}
-# end func_convert_path_cygwin_to_w32
-
-
-# func_convert_path_nix_to_w32 ARG
-# Convert path ARG from *nix to w32 format.  Requires a wine environment and
-# a working winepath.  Returns result in func_to_host_file_result.
-func_convert_path_nix_to_w32 ()
-{
-  $opt_debug
-  func_to_host_path_result="$1"
-  if test -n "$1"; then
-    # See func_convert_path_msys_to_w32:
-    func_stripname : : "$1"
-    func_to_host_path_tmp1=$func_stripname_result
-    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
-    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
-    func_convert_path_check : ";" \
-      "$func_to_host_path_tmp1" "$func_to_host_path_result"
-    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
-  fi
-}
-# end func_convert_path_nix_to_w32
-
-
-# func_convert_path_msys_to_cygwin ARG
-# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
-# Returns result in func_to_host_file_result.
-func_convert_path_msys_to_cygwin ()
-{
-  $opt_debug
-  func_to_host_path_result="$1"
-  if test -n "$1"; then
-    # See func_convert_path_msys_to_w32:
-    func_stripname : : "$1"
-    func_to_host_path_tmp1=$func_stripname_result
-    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
-    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
-    func_to_host_path_result="$func_cygpath_result"
-    func_convert_path_check : : \
-      "$func_to_host_path_tmp1" "$func_to_host_path_result"
-    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
-  fi
-}
-# end func_convert_path_msys_to_cygwin
-
-
-# func_convert_path_nix_to_cygwin ARG
-# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
-# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
-# func_to_host_file_result.
-func_convert_path_nix_to_cygwin ()
-{
-  $opt_debug
-  func_to_host_path_result="$1"
-  if test -n "$1"; then
-    # Remove leading and trailing path separator characters from
-    # ARG. msys behavior is inconsistent here, cygpath turns them
-    # into '.;' and ';.', and winepath ignores them completely.
-    func_stripname : : "$1"
-    func_to_host_path_tmp1=$func_stripname_result
-    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
-    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
-    func_to_host_path_result="$func_cygpath_result"
-    func_convert_path_check : : \
-      "$func_to_host_path_tmp1" "$func_to_host_path_result"
-    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
-  fi
-}
-# end func_convert_path_nix_to_cygwin
-
-
-# func_mode_compile arg...
-func_mode_compile ()
-{
-    $opt_debug
-    # Get the compilation command and the source file.
-    base_compile=
-    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
-    suppress_opt=yes
-    suppress_output=
-    arg_mode=normal
-    libobj=
-    later=
-    pie_flag=
-
-    for arg
-    do
-      case $arg_mode in
-      arg  )
-	# do not "continue".  Instead, add this to base_compile
-	lastarg="$arg"
-	arg_mode=normal
-	;;
-
-      target )
-	libobj="$arg"
-	arg_mode=normal
-	continue
-	;;
-
-      normal )
-	# Accept any command-line options.
-	case $arg in
-	-o)
-	  test -n "$libobj" && \
-	    func_fatal_error "you cannot specify \`-o' more than once"
-	  arg_mode=target
-	  continue
-	  ;;
-
-	-pie | -fpie | -fPIE)
-          func_append pie_flag " $arg"
-	  continue
-	  ;;
-
-	-shared | -static | -prefer-pic | -prefer-non-pic)
-	  func_append later " $arg"
-	  continue
-	  ;;
-
-	-no-suppress)
-	  suppress_opt=no
-	  continue
-	  ;;
-
-	-Xcompiler)
-	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
-	  continue      #  The current "srcfile" will either be retained or
-	  ;;            #  replaced later.  I would guess that would be a bug.
-
-	-Wc,*)
-	  func_stripname '-Wc,' '' "$arg"
-	  args=$func_stripname_result
-	  lastarg=
-	  save_ifs="$IFS"; IFS=','
-	  for arg in $args; do
-	    IFS="$save_ifs"
-	    func_append_quoted lastarg "$arg"
-	  done
-	  IFS="$save_ifs"
-	  func_stripname ' ' '' "$lastarg"
-	  lastarg=$func_stripname_result
-
-	  # Add the arguments to base_compile.
-	  func_append base_compile " $lastarg"
-	  continue
-	  ;;
-
-	*)
-	  # Accept the current argument as the source file.
-	  # The previous "srcfile" becomes the current argument.
-	  #
-	  lastarg="$srcfile"
-	  srcfile="$arg"
-	  ;;
-	esac  #  case $arg
-	;;
-      esac    #  case $arg_mode
-
-      # Aesthetically quote the previous argument.
-      func_append_quoted base_compile "$lastarg"
-    done # for arg
-
-    case $arg_mode in
-    arg)
-      func_fatal_error "you must specify an argument for -Xcompile"
-      ;;
-    target)
-      func_fatal_error "you must specify a target with \`-o'"
-      ;;
-    *)
-      # Get the name of the library object.
-      test -z "$libobj" && {
-	func_basename "$srcfile"
-	libobj="$func_basename_result"
-      }
-      ;;
-    esac
-
-    # Recognize several different file suffixes.
-    # If the user specifies -o file.o, it is replaced with file.lo
-    case $libobj in
-    *.[cCFSifmso] | \
-    *.ada | *.adb | *.ads | *.asm | \
-    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
-      func_xform "$libobj"
-      libobj=$func_xform_result
-      ;;
-    esac
-
-    case $libobj in
-    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
-    *)
-      func_fatal_error "cannot determine name of library object from \`$libobj'"
-      ;;
-    esac
-
-    func_infer_tag $base_compile
-
-    for arg in $later; do
-      case $arg in
-      -shared)
-	test "$build_libtool_libs" != yes && \
-	  func_fatal_configuration "can not build a shared library"
-	build_old_libs=no
-	continue
-	;;
-
-      -static)
-	build_libtool_libs=no
-	build_old_libs=yes
-	continue
-	;;
-
-      -prefer-pic)
-	pic_mode=yes
-	continue
-	;;
-
-      -prefer-non-pic)
-	pic_mode=no
-	continue
-	;;
-      esac
-    done
-
-    func_quote_for_eval "$libobj"
-    test "X$libobj" != "X$func_quote_for_eval_result" \
-      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
-      && func_warning "libobj name \`$libobj' may not contain shell special characters."
-    func_dirname_and_basename "$obj" "/" ""
-    objname="$func_basename_result"
-    xdir="$func_dirname_result"
-    lobj=${xdir}$objdir/$objname
-
-    test -z "$base_compile" && \
-      func_fatal_help "you must specify a compilation command"
-
-    # Delete any leftover library objects.
-    if test "$build_old_libs" = yes; then
-      removelist="$obj $lobj $libobj ${libobj}T"
-    else
-      removelist="$lobj $libobj ${libobj}T"
-    fi
-
-    # On Cygwin there's no "real" PIC flag so we must build both object types
-    case $host_os in
-    cygwin* | mingw* | pw32* | os2* | cegcc*)
-      pic_mode=default
-      ;;
-    esac
-    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
-      # non-PIC code in shared libraries is not supported
-      pic_mode=default
-    fi
-
-    # Calculate the filename of the output object if compiler does
-    # not support -o with -c
-    if test "$compiler_c_o" = no; then
-      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
-      lockfile="$output_obj.lock"
-    else
-      output_obj=
-      need_locks=no
-      lockfile=
-    fi
-
-    # Lock this critical section if it is needed
-    # We use this script file to make the link, it avoids creating a new file
-    if test "$need_locks" = yes; then
-      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
-	func_echo "Waiting for $lockfile to be removed"
-	sleep 2
-      done
-    elif test "$need_locks" = warn; then
-      if test -f "$lockfile"; then
-	$ECHO "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-	$opt_dry_run || $RM $removelist
-	exit $EXIT_FAILURE
-      fi
-      func_append removelist " $output_obj"
-      $ECHO "$srcfile" > "$lockfile"
-    fi
-
-    $opt_dry_run || $RM $removelist
-    func_append removelist " $lockfile"
-    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
-
-    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
-    srcfile=$func_to_tool_file_result
-    func_quote_for_eval "$srcfile"
-    qsrcfile=$func_quote_for_eval_result
-
-    # Only build a PIC object if we are building libtool libraries.
-    if test "$build_libtool_libs" = yes; then
-      # Without this assignment, base_compile gets emptied.
-      fbsd_hideous_sh_bug=$base_compile
-
-      if test "$pic_mode" != no; then
-	command="$base_compile $qsrcfile $pic_flag"
-      else
-	# Don't build PIC code
-	command="$base_compile $qsrcfile"
-      fi
-
-      func_mkdir_p "$xdir$objdir"
-
-      if test -z "$output_obj"; then
-	# Place PIC objects in $objdir
-	func_append command " -o $lobj"
-      fi
-
-      func_show_eval_locale "$command"	\
-          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
-
-      if test "$need_locks" = warn &&
-	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
-	$ECHO "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-	$opt_dry_run || $RM $removelist
-	exit $EXIT_FAILURE
-      fi
-
-      # Just move the object if needed, then go on to compile the next one
-      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
-	func_show_eval '$MV "$output_obj" "$lobj"' \
-	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
-      fi
-
-      # Allow error messages only from the first compilation.
-      if test "$suppress_opt" = yes; then
-	suppress_output=' >/dev/null 2>&1'
-      fi
-    fi
-
-    # Only build a position-dependent object if we build old libraries.
-    if test "$build_old_libs" = yes; then
-      if test "$pic_mode" != yes; then
-	# Don't build PIC code
-	command="$base_compile $qsrcfile$pie_flag"
-      else
-	command="$base_compile $qsrcfile $pic_flag"
-      fi
-      if test "$compiler_c_o" = yes; then
-	func_append command " -o $obj"
-      fi
-
-      # Suppress compiler output if we already did a PIC compilation.
-      func_append command "$suppress_output"
-      func_show_eval_locale "$command" \
-        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
-
-      if test "$need_locks" = warn &&
-	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
-	$ECHO "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-	$opt_dry_run || $RM $removelist
-	exit $EXIT_FAILURE
-      fi
-
-      # Just move the object if needed
-      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
-	func_show_eval '$MV "$output_obj" "$obj"' \
-	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
-      fi
-    fi
-
-    $opt_dry_run || {
-      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
-
-      # Unlock the critical section if it was locked
-      if test "$need_locks" != no; then
-	removelist=$lockfile
-        $RM "$lockfile"
-      fi
-    }
-
-    exit $EXIT_SUCCESS
-}
-
-$opt_help || {
-  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
-}
-
-func_mode_help ()
-{
-    # We need to display help for each of the modes.
-    case $opt_mode in
-      "")
-        # Generic help is extracted from the usage comments
-        # at the start of this file.
-        func_help
-        ;;
-
-      clean)
-        $ECHO \
-"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
-        ;;
-
-      compile)
-      $ECHO \
-"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
-  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
-  -no-suppress      do not suppress compiler output for multiple passes
-  -prefer-pic       try to build PIC objects only
-  -prefer-non-pic   try to build non-PIC objects only
-  -shared           do not build a \`.o' file suitable for static linking
-  -static           only build a \`.o' file suitable for static linking
-  -Wc,FLAG          pass FLAG directly to the compiler
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
-        ;;
-
-      execute)
-        $ECHO \
-"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
-  -dlopen FILE      add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
-        ;;
-
-      finish)
-        $ECHO \
-"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges.  Use
-the \`--dry-run' option if you just want to see what would be executed."
-        ;;
-
-      install)
-        $ECHO \
-"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command.  The first component should be
-either the \`install' or \`cp' program.
-
-The following components of INSTALL-COMMAND are treated specially:
-
-  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
-        ;;
-
-      link)
-        $ECHO \
-"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
-  -all-static       do not do any dynamic linking at all
-  -avoid-version    do not add a version suffix if possible
-  -bindir BINDIR    specify path to binaries directory (for systems where
-                    libraries must be found in the PATH setting at runtime)
-  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
-  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
-  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-  -export-symbols SYMFILE
-                    try to export only the symbols listed in SYMFILE
-  -export-symbols-regex REGEX
-                    try to export only the symbols matching REGEX
-  -LLIBDIR          search LIBDIR for required installed libraries
-  -lNAME            OUTPUT-FILE requires the installed library libNAME
-  -module           build a library that can dlopened
-  -no-fast-install  disable the fast-install mode
-  -no-install       link a not-installable executable
-  -no-undefined     declare that a library does not refer to external symbols
-  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
-  -objectlist FILE  Use a list of object files found in FILE to specify objects
-  -precious-files-regex REGEX
-                    don't remove output files matching REGEX
-  -release RELEASE  specify package release information
-  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
-  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
-  -shared           only do dynamic linking of libtool libraries
-  -shrext SUFFIX    override the standard shared library file extension
-  -static           do not do any dynamic linking of uninstalled libtool libraries
-  -static-libtool-libs
-                    do not do any dynamic linking of libtool libraries
-  -version-info CURRENT[:REVISION[:AGE]]
-                    specify library version info [each variable defaults to 0]
-  -weak LIBNAME     declare that the target provides the LIBNAME interface
-  -Wc,FLAG
-  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
-  -Wl,FLAG
-  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
-  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename.  Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
-        ;;
-
-      uninstall)
-        $ECHO \
-"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
-        ;;
-
-      *)
-        func_fatal_help "invalid operation mode \`$opt_mode'"
-        ;;
-    esac
-
-    echo
-    $ECHO "Try \`$progname --help' for more information about other modes."
-}
-
-# Now that we've collected a possible --mode arg, show help if necessary
-if $opt_help; then
-  if test "$opt_help" = :; then
-    func_mode_help
-  else
-    {
-      func_help noexit
-      for opt_mode in compile link execute install finish uninstall clean; do
-	func_mode_help
-      done
-    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
-    {
-      func_help noexit
-      for opt_mode in compile link execute install finish uninstall clean; do
-	echo
-	func_mode_help
-      done
-    } |
-    sed '1d
-      /^When reporting/,/^Report/{
-	H
-	d
-      }
-      $x
-      /information about other modes/d
-      /more detailed .*MODE/d
-      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
-  fi
-  exit $?
-fi
-
-
-# func_mode_execute arg...
-func_mode_execute ()
-{
-    $opt_debug
-    # The first argument is the command name.
-    cmd="$nonopt"
-    test -z "$cmd" && \
-      func_fatal_help "you must specify a COMMAND"
-
-    # Handle -dlopen flags immediately.
-    for file in $opt_dlopen; do
-      test -f "$file" \
-	|| func_fatal_help "\`$file' is not a file"
-
-      dir=
-      case $file in
-      *.la)
-	func_resolve_sysroot "$file"
-	file=$func_resolve_sysroot_result
-
-	# Check to see that this really is a libtool archive.
-	func_lalib_unsafe_p "$file" \
-	  || func_fatal_help "\`$lib' is not a valid libtool archive"
-
-	# Read the libtool library.
-	dlname=
-	library_names=
-	func_source "$file"
-
-	# Skip this library if it cannot be dlopened.
-	if test -z "$dlname"; then
-	  # Warn if it was a shared library.
-	  test -n "$library_names" && \
-	    func_warning "\`$file' was not linked with \`-export-dynamic'"
-	  continue
-	fi
-
-	func_dirname "$file" "" "."
-	dir="$func_dirname_result"
-
-	if test -f "$dir/$objdir/$dlname"; then
-	  func_append dir "/$objdir"
-	else
-	  if test ! -f "$dir/$dlname"; then
-	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
-	  fi
-	fi
-	;;
-
-      *.lo)
-	# Just add the directory containing the .lo file.
-	func_dirname "$file" "" "."
-	dir="$func_dirname_result"
-	;;
-
-      *)
-	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
-	continue
-	;;
-      esac
-
-      # Get the absolute pathname.
-      absdir=`cd "$dir" && pwd`
-      test -n "$absdir" && dir="$absdir"
-
-      # Now add the directory to shlibpath_var.
-      if eval "test -z \"\$$shlibpath_var\""; then
-	eval "$shlibpath_var=\"\$dir\""
-      else
-	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
-      fi
-    done
-
-    # This variable tells wrapper scripts just to set shlibpath_var
-    # rather than running their programs.
-    libtool_execute_magic="$magic"
-
-    # Check if any of the arguments is a wrapper script.
-    args=
-    for file
-    do
-      case $file in
-      -* | *.la | *.lo ) ;;
-      *)
-	# Do a test to see if this is really a libtool program.
-	if func_ltwrapper_script_p "$file"; then
-	  func_source "$file"
-	  # Transform arg to wrapped name.
-	  file="$progdir/$program"
-	elif func_ltwrapper_executable_p "$file"; then
-	  func_ltwrapper_scriptname "$file"
-	  func_source "$func_ltwrapper_scriptname_result"
-	  # Transform arg to wrapped name.
-	  file="$progdir/$program"
-	fi
-	;;
-      esac
-      # Quote arguments (to preserve shell metacharacters).
-      func_append_quoted args "$file"
-    done
-
-    if test "X$opt_dry_run" = Xfalse; then
-      if test -n "$shlibpath_var"; then
-	# Export the shlibpath_var.
-	eval "export $shlibpath_var"
-      fi
-
-      # Restore saved environment variables
-      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
-      do
-	eval "if test \"\${save_$lt_var+set}\" = set; then
-                $lt_var=\$save_$lt_var; export $lt_var
-	      else
-		$lt_unset $lt_var
-	      fi"
-      done
-
-      # Now prepare to actually exec the command.
-      exec_cmd="\$cmd$args"
-    else
-      # Display what would be done.
-      if test -n "$shlibpath_var"; then
-	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
-	echo "export $shlibpath_var"
-      fi
-      $ECHO "$cmd$args"
-      exit $EXIT_SUCCESS
-    fi
-}
-
-test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
-
-
-# func_mode_finish arg...
-func_mode_finish ()
-{
-    $opt_debug
-    libs=
-    libdirs=
-    admincmds=
-
-    for opt in "$nonopt" ${1+"$@"}
-    do
-      if test -d "$opt"; then
-	func_append libdirs " $opt"
-
-      elif test -f "$opt"; then
-	if func_lalib_unsafe_p "$opt"; then
-	  func_append libs " $opt"
-	else
-	  func_warning "\`$opt' is not a valid libtool archive"
-	fi
-
-      else
-	func_fatal_error "invalid argument \`$opt'"
-      fi
-    done
-
-    if test -n "$libs"; then
-      if test -n "$lt_sysroot"; then
-        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
-        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
-      else
-        sysroot_cmd=
-      fi
-
-      # Remove sysroot references
-      if $opt_dry_run; then
-        for lib in $libs; do
-          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
-        done
-      else
-        tmpdir=`func_mktempdir`
-        for lib in $libs; do
-	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
-	    > $tmpdir/tmp-la
-	  mv -f $tmpdir/tmp-la $lib
-	done
-        ${RM}r "$tmpdir"
-      fi
-    fi
-
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for libdir in $libdirs; do
-	if test -n "$finish_cmds"; then
-	  # Do each command in the finish commands.
-	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
-'"$cmd"'"'
-	fi
-	if test -n "$finish_eval"; then
-	  # Do the single finish_eval.
-	  eval cmds=\"$finish_eval\"
-	  $opt_dry_run || eval "$cmds" || func_append admincmds "
-       $cmds"
-	fi
-      done
-    fi
-
-    # Exit here if they wanted silent mode.
-    $opt_silent && exit $EXIT_SUCCESS
-
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      echo "----------------------------------------------------------------------"
-      echo "Libraries have been installed in:"
-      for libdir in $libdirs; do
-	$ECHO "   $libdir"
-      done
-      echo
-      echo "If you ever happen to want to link against installed libraries"
-      echo "in a given directory, LIBDIR, you must either use libtool, and"
-      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
-      echo "flag during linking and do at least one of the following:"
-      if test -n "$shlibpath_var"; then
-	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-	echo "     during execution"
-      fi
-      if test -n "$runpath_var"; then
-	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
-	echo "     during linking"
-      fi
-      if test -n "$hardcode_libdir_flag_spec"; then
-	libdir=LIBDIR
-	eval flag=\"$hardcode_libdir_flag_spec\"
-
-	$ECHO "   - use the \`$flag' linker flag"
-      fi
-      if test -n "$admincmds"; then
-	$ECHO "   - have your system administrator run these commands:$admincmds"
-      fi
-      if test -f /etc/ld.so.conf; then
-	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-      fi
-      echo
-
-      echo "See any operating system documentation about shared libraries for"
-      case $host in
-	solaris2.[6789]|solaris2.1[0-9])
-	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
-	  echo "pages."
-	  ;;
-	*)
-	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
-	  ;;
-      esac
-      echo "----------------------------------------------------------------------"
-    fi
-    exit $EXIT_SUCCESS
-}
-
-test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
-
-
-# func_mode_install arg...
-func_mode_install ()
-{
-    $opt_debug
-    # There may be an optional sh(1) argument at the beginning of
-    # install_prog (especially on Windows NT).
-    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
-       # Allow the use of GNU shtool's install command.
-       case $nonopt in *shtool*) :;; *) false;; esac; then
-      # Aesthetically quote it.
-      func_quote_for_eval "$nonopt"
-      install_prog="$func_quote_for_eval_result "
-      arg=$1
-      shift
-    else
-      install_prog=
-      arg=$nonopt
-    fi
-
-    # The real first argument should be the name of the installation program.
-    # Aesthetically quote it.
-    func_quote_for_eval "$arg"
-    func_append install_prog "$func_quote_for_eval_result"
-    install_shared_prog=$install_prog
-    case " $install_prog " in
-      *[\\\ /]cp\ *) install_cp=: ;;
-      *) install_cp=false ;;
-    esac
-
-    # We need to accept at least all the BSD install flags.
-    dest=
-    files=
-    opts=
-    prev=
-    install_type=
-    isdir=no
-    stripme=
-    no_mode=:
-    for arg
-    do
-      arg2=
-      if test -n "$dest"; then
-	func_append files " $dest"
-	dest=$arg
-	continue
-      fi
-
-      case $arg in
-      -d) isdir=yes ;;
-      -f)
-	if $install_cp; then :; else
-	  prev=$arg
-	fi
-	;;
-      -g | -m | -o)
-	prev=$arg
-	;;
-      -s)
-	stripme=" -s"
-	continue
-	;;
-      -*)
-	;;
-      *)
-	# If the previous option needed an argument, then skip it.
-	if test -n "$prev"; then
-	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
-	    arg2=$install_override_mode
-	    no_mode=false
-	  fi
-	  prev=
-	else
-	  dest=$arg
-	  continue
-	fi
-	;;
-      esac
-
-      # Aesthetically quote the argument.
-      func_quote_for_eval "$arg"
-      func_append install_prog " $func_quote_for_eval_result"
-      if test -n "$arg2"; then
-	func_quote_for_eval "$arg2"
-      fi
-      func_append install_shared_prog " $func_quote_for_eval_result"
-    done
-
-    test -z "$install_prog" && \
-      func_fatal_help "you must specify an install program"
-
-    test -n "$prev" && \
-      func_fatal_help "the \`$prev' option requires an argument"
-
-    if test -n "$install_override_mode" && $no_mode; then
-      if $install_cp; then :; else
-	func_quote_for_eval "$install_override_mode"
-	func_append install_shared_prog " -m $func_quote_for_eval_result"
-      fi
-    fi
-
-    if test -z "$files"; then
-      if test -z "$dest"; then
-	func_fatal_help "no file or destination specified"
-      else
-	func_fatal_help "you must specify a destination"
-      fi
-    fi
-
-    # Strip any trailing slash from the destination.
-    func_stripname '' '/' "$dest"
-    dest=$func_stripname_result
-
-    # Check to see that the destination is a directory.
-    test -d "$dest" && isdir=yes
-    if test "$isdir" = yes; then
-      destdir="$dest"
-      destname=
-    else
-      func_dirname_and_basename "$dest" "" "."
-      destdir="$func_dirname_result"
-      destname="$func_basename_result"
-
-      # Not a directory, so check to see that there is only one file specified.
-      set dummy $files; shift
-      test "$#" -gt 1 && \
-	func_fatal_help "\`$dest' is not a directory"
-    fi
-    case $destdir in
-    [\\/]* | [A-Za-z]:[\\/]*) ;;
-    *)
-      for file in $files; do
-	case $file in
-	*.lo) ;;
-	*)
-	  func_fatal_help "\`$destdir' must be an absolute directory name"
-	  ;;
-	esac
-      done
-      ;;
-    esac
-
-    # This variable tells wrapper scripts just to set variables rather
-    # than running their programs.
-    libtool_install_magic="$magic"
-
-    staticlibs=
-    future_libdirs=
-    current_libdirs=
-    for file in $files; do
-
-      # Do each installation.
-      case $file in
-      *.$libext)
-	# Do the static libraries later.
-	func_append staticlibs " $file"
-	;;
-
-      *.la)
-	func_resolve_sysroot "$file"
-	file=$func_resolve_sysroot_result
-
-	# Check to see that this really is a libtool archive.
-	func_lalib_unsafe_p "$file" \
-	  || func_fatal_help "\`$file' is not a valid libtool archive"
-
-	library_names=
-	old_library=
-	relink_command=
-	func_source "$file"
-
-	# Add the libdir to current_libdirs if it is the destination.
-	if test "X$destdir" = "X$libdir"; then
-	  case "$current_libdirs " in
-	  *" $libdir "*) ;;
-	  *) func_append current_libdirs " $libdir" ;;
-	  esac
-	else
-	  # Note the libdir as a future libdir.
-	  case "$future_libdirs " in
-	  *" $libdir "*) ;;
-	  *) func_append future_libdirs " $libdir" ;;
-	  esac
-	fi
-
-	func_dirname "$file" "/" ""
-	dir="$func_dirname_result"
-	func_append dir "$objdir"
-
-	if test -n "$relink_command"; then
-	  # Determine the prefix the user has applied to our future dir.
-	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
-
-	  # Don't allow the user to place us outside of our expected
-	  # location b/c this prevents finding dependent libraries that
-	  # are installed to the same prefix.
-	  # At present, this check doesn't affect windows .dll's that
-	  # are installed into $libdir/../bin (currently, that works fine)
-	  # but it's something to keep an eye on.
-	  test "$inst_prefix_dir" = "$destdir" && \
-	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
-
-	  if test -n "$inst_prefix_dir"; then
-	    # Stick the inst_prefix_dir data into the link command.
-	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
-	  else
-	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
-	  fi
-
-	  func_warning "relinking \`$file'"
-	  func_show_eval "$relink_command" \
-	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
-	fi
-
-	# See the names of the shared library.
-	set dummy $library_names; shift
-	if test -n "$1"; then
-	  realname="$1"
-	  shift
-
-	  srcname="$realname"
-	  test -n "$relink_command" && srcname="$realname"T
-
-	  # Install the shared library and build the symlinks.
-	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
-	      'exit $?'
-	  tstripme="$stripme"
-	  case $host_os in
-	  cygwin* | mingw* | pw32* | cegcc*)
-	    case $realname in
-	    *.dll.a)
-	      tstripme=""
-	      ;;
-	    esac
-	    ;;
-	  esac
-	  if test -n "$tstripme" && test -n "$striplib"; then
-	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
-	  fi
-
-	  if test "$#" -gt 0; then
-	    # Delete the old symlinks, and create new ones.
-	    # Try `ln -sf' first, because the `ln' binary might depend on
-	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
-	    # so we also need to try rm && ln -s.
-	    for linkname
-	    do
-	      test "$linkname" != "$realname" \
-		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
-	    done
-	  fi
-
-	  # Do each command in the postinstall commands.
-	  lib="$destdir/$realname"
-	  func_execute_cmds "$postinstall_cmds" 'exit $?'
-	fi
-
-	# Install the pseudo-library for information purposes.
-	func_basename "$file"
-	name="$func_basename_result"
-	instname="$dir/$name"i
-	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
-
-	# Maybe install the static library, too.
-	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
-	;;
-
-      *.lo)
-	# Install (i.e. copy) a libtool object.
-
-	# Figure out destination file name, if it wasn't already specified.
-	if test -n "$destname"; then
-	  destfile="$destdir/$destname"
-	else
-	  func_basename "$file"
-	  destfile="$func_basename_result"
-	  destfile="$destdir/$destfile"
-	fi
-
-	# Deduce the name of the destination old-style object file.
-	case $destfile in
-	*.lo)
-	  func_lo2o "$destfile"
-	  staticdest=$func_lo2o_result
-	  ;;
-	*.$objext)
-	  staticdest="$destfile"
-	  destfile=
-	  ;;
-	*)
-	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
-	  ;;
-	esac
-
-	# Install the libtool object if requested.
-	test -n "$destfile" && \
-	  func_show_eval "$install_prog $file $destfile" 'exit $?'
-
-	# Install the old object if enabled.
-	if test "$build_old_libs" = yes; then
-	  # Deduce the name of the old-style object file.
-	  func_lo2o "$file"
-	  staticobj=$func_lo2o_result
-	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
-	fi
-	exit $EXIT_SUCCESS
-	;;
-
-      *)
-	# Figure out destination file name, if it wasn't already specified.
-	if test -n "$destname"; then
-	  destfile="$destdir/$destname"
-	else
-	  func_basename "$file"
-	  destfile="$func_basename_result"
-	  destfile="$destdir/$destfile"
-	fi
-
-	# If the file is missing, and there is a .exe on the end, strip it
-	# because it is most likely a libtool script we actually want to
-	# install
-	stripped_ext=""
-	case $file in
-	  *.exe)
-	    if test ! -f "$file"; then
-	      func_stripname '' '.exe' "$file"
-	      file=$func_stripname_result
-	      stripped_ext=".exe"
-	    fi
-	    ;;
-	esac
-
-	# Do a test to see if this is really a libtool program.
-	case $host in
-	*cygwin* | *mingw*)
-	    if func_ltwrapper_executable_p "$file"; then
-	      func_ltwrapper_scriptname "$file"
-	      wrapper=$func_ltwrapper_scriptname_result
-	    else
-	      func_stripname '' '.exe' "$file"
-	      wrapper=$func_stripname_result
-	    fi
-	    ;;
-	*)
-	    wrapper=$file
-	    ;;
-	esac
-	if func_ltwrapper_script_p "$wrapper"; then
-	  notinst_deplibs=
-	  relink_command=
-
-	  func_source "$wrapper"
-
-	  # Check the variables that should have been set.
-	  test -z "$generated_by_libtool_version" && \
-	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
-
-	  finalize=yes
-	  for lib in $notinst_deplibs; do
-	    # Check to see that each library is installed.
-	    libdir=
-	    if test -f "$lib"; then
-	      func_source "$lib"
-	    fi
-	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
-	    if test -n "$libdir" && test ! -f "$libfile"; then
-	      func_warning "\`$lib' has not been installed in \`$libdir'"
-	      finalize=no
-	    fi
-	  done
-
-	  relink_command=
-	  func_source "$wrapper"
-
-	  outputname=
-	  if test "$fast_install" = no && test -n "$relink_command"; then
-	    $opt_dry_run || {
-	      if test "$finalize" = yes; then
-	        tmpdir=`func_mktempdir`
-		func_basename "$file$stripped_ext"
-		file="$func_basename_result"
-	        outputname="$tmpdir/$file"
-	        # Replace the output file specification.
-	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
-
-	        $opt_silent || {
-	          func_quote_for_expand "$relink_command"
-		  eval "func_echo $func_quote_for_expand_result"
-	        }
-	        if eval "$relink_command"; then :
-	          else
-		  func_error "error: relink \`$file' with the above command before installing it"
-		  $opt_dry_run || ${RM}r "$tmpdir"
-		  continue
-	        fi
-	        file="$outputname"
-	      else
-	        func_warning "cannot relink \`$file'"
-	      fi
-	    }
-	  else
-	    # Install the binary that we compiled earlier.
-	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
-	  fi
-	fi
-
-	# remove .exe since cygwin /usr/bin/install will append another
-	# one anyway
-	case $install_prog,$host in
-	*/usr/bin/install*,*cygwin*)
-	  case $file:$destfile in
-	  *.exe:*.exe)
-	    # this is ok
-	    ;;
-	  *.exe:*)
-	    destfile=$destfile.exe
-	    ;;
-	  *:*.exe)
-	    func_stripname '' '.exe' "$destfile"
-	    destfile=$func_stripname_result
-	    ;;
-	  esac
-	  ;;
-	esac
-	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
-	$opt_dry_run || if test -n "$outputname"; then
-	  ${RM}r "$tmpdir"
-	fi
-	;;
-      esac
-    done
-
-    for file in $staticlibs; do
-      func_basename "$file"
-      name="$func_basename_result"
-
-      # Set up the ranlib parameters.
-      oldlib="$destdir/$name"
-      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
-      tool_oldlib=$func_to_tool_file_result
-
-      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
-
-      if test -n "$stripme" && test -n "$old_striplib"; then
-	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
-      fi
-
-      # Do each command in the postinstall commands.
-      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
-    done
-
-    test -n "$future_libdirs" && \
-      func_warning "remember to run \`$progname --finish$future_libdirs'"
-
-    if test -n "$current_libdirs"; then
-      # Maybe just do a dry run.
-      $opt_dry_run && current_libdirs=" -n$current_libdirs"
-      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
-    else
-      exit $EXIT_SUCCESS
-    fi
-}
-
-test "$opt_mode" = install && func_mode_install ${1+"$@"}
-
-
-# func_generate_dlsyms outputname originator pic_p
-# Extract symbols from dlprefiles and create ${outputname}S.o with
-# a dlpreopen symbol table.
-func_generate_dlsyms ()
-{
-    $opt_debug
-    my_outputname="$1"
-    my_originator="$2"
-    my_pic_p="${3-no}"
-    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
-    my_dlsyms=
-
-    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-      if test -n "$NM" && test -n "$global_symbol_pipe"; then
-	my_dlsyms="${my_outputname}S.c"
-      else
-	func_error "not configured to extract global symbols from dlpreopened files"
-      fi
-    fi
-
-    if test -n "$my_dlsyms"; then
-      case $my_dlsyms in
-      "") ;;
-      *.c)
-	# Discover the nlist of each of the dlfiles.
-	nlist="$output_objdir/${my_outputname}.nm"
-
-	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
-
-	# Parse the name list into a source file.
-	func_verbose "creating $output_objdir/$my_dlsyms"
-
-	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
-/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
-/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
-#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
-#endif
-
-/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
-   relocations are performed -- see ld's documentation on pseudo-relocs.  */
-# define LT_DLSYM_CONST
-#elif defined(__osf__)
-/* This system does not cope well with relocations in const data.  */
-# define LT_DLSYM_CONST
-#else
-# define LT_DLSYM_CONST const
-#endif
-
-/* External symbol declarations for the compiler. */\
-"
-
-	if test "$dlself" = yes; then
-	  func_verbose "generating symbol list for \`$output'"
-
-	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
-
-	  # Add our own program objects to the symbol list.
-	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
-	  for progfile in $progfiles; do
-	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
-	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
-	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
-	  done
-
-	  if test -n "$exclude_expsyms"; then
-	    $opt_dry_run || {
-	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
-	      eval '$MV "$nlist"T "$nlist"'
-	    }
-	  fi
-
-	  if test -n "$export_symbols_regex"; then
-	    $opt_dry_run || {
-	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
-	      eval '$MV "$nlist"T "$nlist"'
-	    }
-	  fi
-
-	  # Prepare the list of exported symbols
-	  if test -z "$export_symbols"; then
-	    export_symbols="$output_objdir/$outputname.exp"
-	    $opt_dry_run || {
-	      $RM $export_symbols
-	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
-	      case $host in
-	      *cygwin* | *mingw* | *cegcc* )
-                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
-	        ;;
-	      esac
-	    }
-	  else
-	    $opt_dry_run || {
-	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
-	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
-	      eval '$MV "$nlist"T "$nlist"'
-	      case $host in
-	        *cygwin* | *mingw* | *cegcc* )
-	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
-	          ;;
-	      esac
-	    }
-	  fi
-	fi
-
-	for dlprefile in $dlprefiles; do
-	  func_verbose "extracting global C symbols from \`$dlprefile'"
-	  func_basename "$dlprefile"
-	  name="$func_basename_result"
-          case $host in
-	    *cygwin* | *mingw* | *cegcc* )
-	      # if an import library, we need to obtain dlname
-	      if func_win32_import_lib_p "$dlprefile"; then
-	        func_tr_sh "$dlprefile"
-	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
-	        dlprefile_dlbasename=""
-	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
-	          # Use subshell, to avoid clobbering current variable values
-	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
-	          if test -n "$dlprefile_dlname" ; then
-	            func_basename "$dlprefile_dlname"
-	            dlprefile_dlbasename="$func_basename_result"
-	          else
-	            # no lafile. user explicitly requested -dlpreopen <import library>.
-	            $sharedlib_from_linklib_cmd "$dlprefile"
-	            dlprefile_dlbasename=$sharedlib_from_linklib_result
-	          fi
-	        fi
-	        $opt_dry_run || {
-	          if test -n "$dlprefile_dlbasename" ; then
-	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
-	          else
-	            func_warning "Could not compute DLL name from $name"
-	            eval '$ECHO ": $name " >> "$nlist"'
-	          fi
-	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
-	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
-	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
-	        }
-	      else # not an import lib
-	        $opt_dry_run || {
-	          eval '$ECHO ": $name " >> "$nlist"'
-	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
-	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-	        }
-	      fi
-	    ;;
-	    *)
-	      $opt_dry_run || {
-	        eval '$ECHO ": $name " >> "$nlist"'
-	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
-	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-	      }
-	    ;;
-          esac
-	done
-
-	$opt_dry_run || {
-	  # Make sure we have at least an empty file.
-	  test -f "$nlist" || : > "$nlist"
-
-	  if test -n "$exclude_expsyms"; then
-	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
-	    $MV "$nlist"T "$nlist"
-	  fi
-
-	  # Try sorting and uniquifying the output.
-	  if $GREP -v "^: " < "$nlist" |
-	      if sort -k 3 </dev/null >/dev/null 2>&1; then
-		sort -k 3
-	      else
-		sort +2
-	      fi |
-	      uniq > "$nlist"S; then
-	    :
-	  else
-	    $GREP -v "^: " < "$nlist" > "$nlist"S
-	  fi
-
-	  if test -f "$nlist"S; then
-	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
-	  else
-	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
-	  fi
-
-	  echo >> "$output_objdir/$my_dlsyms" "\
-
-/* The mapping between symbol names and symbols.  */
-typedef struct {
-  const char *name;
-  void *address;
-} lt_dlsymlist;
-extern LT_DLSYM_CONST lt_dlsymlist
-lt_${my_prefix}_LTX_preloaded_symbols[];
-LT_DLSYM_CONST lt_dlsymlist
-lt_${my_prefix}_LTX_preloaded_symbols[] =
-{\
-  { \"$my_originator\", (void *) 0 },"
-
-	  case $need_lib_prefix in
-	  no)
-	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
-	    ;;
-	  *)
-	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
-	    ;;
-	  esac
-	  echo >> "$output_objdir/$my_dlsyms" "\
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt_${my_prefix}_LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
-	} # !$opt_dry_run
-
-	pic_flag_for_symtable=
-	case "$compile_command " in
-	*" -static "*) ;;
-	*)
-	  case $host in
-	  # compiling the symbol table file with pic_flag works around
-	  # a FreeBSD bug that causes programs to crash when -lm is
-	  # linked before any other PIC object.  But we must not use
-	  # pic_flag when linking with -static.  The problem exists in
-	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
-	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
-	  *-*-hpux*)
-	    pic_flag_for_symtable=" $pic_flag"  ;;
-	  *)
-	    if test "X$my_pic_p" != Xno; then
-	      pic_flag_for_symtable=" $pic_flag"
-	    fi
-	    ;;
-	  esac
-	  ;;
-	esac
-	symtab_cflags=
-	for arg in $LTCFLAGS; do
-	  case $arg in
-	  -pie | -fpie | -fPIE) ;;
-	  *) func_append symtab_cflags " $arg" ;;
-	  esac
-	done
-
-	# Now compile the dynamic symbol file.
-	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
-
-	# Clean up the generated files.
-	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
-
-	# Transform the symbol file into the correct name.
-	symfileobj="$output_objdir/${my_outputname}S.$objext"
-	case $host in
-	*cygwin* | *mingw* | *cegcc* )
-	  if test -f "$output_objdir/$my_outputname.def"; then
-	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
-	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
-	  else
-	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
-	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
-	  fi
-	  ;;
-	*)
-	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
-	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
-	  ;;
-	esac
-	;;
-      *)
-	func_fatal_error "unknown suffix for \`$my_dlsyms'"
-	;;
-      esac
-    else
-      # We keep going just in case the user didn't refer to
-      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
-      # really was required.
-
-      # Nullify the symbol file.
-      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
-      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
-    fi
-}
-
-# func_win32_libid arg
-# return the library type of file 'arg'
-#
-# Need a lot of goo to handle *both* DLLs and import libs
-# Has to be a shell function in order to 'eat' the argument
-# that is supplied when $file_magic_command is called.
-# Despite the name, also deal with 64 bit binaries.
-func_win32_libid ()
-{
-  $opt_debug
-  win32_libid_type="unknown"
-  win32_fileres=`file -L $1 2>/dev/null`
-  case $win32_fileres in
-  *ar\ archive\ import\ library*) # definitely import
-    win32_libid_type="x86 archive import"
-    ;;
-  *ar\ archive*) # could be an import, or static
-    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
-    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
-       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
-      func_to_tool_file "$1" func_convert_file_msys_to_w32
-      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
-	$SED -n -e '
-	    1,100{
-		/ I /{
-		    s,.*,import,
-		    p
-		    q
-		}
-	    }'`
-      case $win32_nmres in
-      import*)  win32_libid_type="x86 archive import";;
-      *)        win32_libid_type="x86 archive static";;
-      esac
-    fi
-    ;;
-  *DLL*)
-    win32_libid_type="x86 DLL"
-    ;;
-  *executable*) # but shell scripts are "executable" too...
-    case $win32_fileres in
-    *MS\ Windows\ PE\ Intel*)
-      win32_libid_type="x86 DLL"
-      ;;
-    esac
-    ;;
-  esac
-  $ECHO "$win32_libid_type"
-}
-
-# func_cygming_dll_for_implib ARG
-#
-# Platform-specific function to extract the
-# name of the DLL associated with the specified
-# import library ARG.
-# Invoked by eval'ing the libtool variable
-#    $sharedlib_from_linklib_cmd
-# Result is available in the variable
-#    $sharedlib_from_linklib_result
-func_cygming_dll_for_implib ()
-{
-  $opt_debug
-  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
-}
-
-# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
-#
-# The is the core of a fallback implementation of a
-# platform-specific function to extract the name of the
-# DLL associated with the specified import library LIBNAME.
-#
-# SECTION_NAME is either .idata$6 or .idata$7, depending
-# on the platform and compiler that created the implib.
-#
-# Echos the name of the DLL associated with the
-# specified import library.
-func_cygming_dll_for_implib_fallback_core ()
-{
-  $opt_debug
-  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
-  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
-    $SED '/^Contents of section '"$match_literal"':/{
-      # Place marker at beginning of archive member dllname section
-      s/.*/====MARK====/
-      p
-      d
-    }
-    # These lines can sometimes be longer than 43 characters, but
-    # are always uninteresting
-    /:[	 ]*file format pe[i]\{,1\}-/d
-    /^In archive [^:]*:/d
-    # Ensure marker is printed
-    /^====MARK====/p
-    # Remove all lines with less than 43 characters
-    /^.\{43\}/!d
-    # From remaining lines, remove first 43 characters
-    s/^.\{43\}//' |
-    $SED -n '
-      # Join marker and all lines until next marker into a single line
-      /^====MARK====/ b para
-      H
-      $ b para
-      b
-      :para
-      x
-      s/\n//g
-      # Remove the marker
-      s/^====MARK====//
-      # Remove trailing dots and whitespace
-      s/[\. \t]*$//
-      # Print
-      /./p' |
-    # we now have a list, one entry per line, of the stringified
-    # contents of the appropriate section of all members of the
-    # archive which possess that section. Heuristic: eliminate
-    # all those which have a first or second character that is
-    # a '.' (that is, objdump's representation of an unprintable
-    # character.) This should work for all archives with less than
-    # 0x302f exports -- but will fail for DLLs whose name actually
-    # begins with a literal '.' or a single character followed by
-    # a '.'.
-    #
-    # Of those that remain, print the first one.
-    $SED -e '/^\./d;/^.\./d;q'
-}
-
-# func_cygming_gnu_implib_p ARG
-# This predicate returns with zero status (TRUE) if
-# ARG is a GNU/binutils-style import library. Returns
-# with nonzero status (FALSE) otherwise.
-func_cygming_gnu_implib_p ()
-{
-  $opt_debug
-  func_to_tool_file "$1" func_convert_file_msys_to_w32
-  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
-  test -n "$func_cygming_gnu_implib_tmp"
-}
-
-# func_cygming_ms_implib_p ARG
-# This predicate returns with zero status (TRUE) if
-# ARG is an MS-style import library. Returns
-# with nonzero status (FALSE) otherwise.
-func_cygming_ms_implib_p ()
-{
-  $opt_debug
-  func_to_tool_file "$1" func_convert_file_msys_to_w32
-  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
-  test -n "$func_cygming_ms_implib_tmp"
-}
-
-# func_cygming_dll_for_implib_fallback ARG
-# Platform-specific function to extract the
-# name of the DLL associated with the specified
-# import library ARG.
-#
-# This fallback implementation is for use when $DLLTOOL
-# does not support the --identify-strict option.
-# Invoked by eval'ing the libtool variable
-#    $sharedlib_from_linklib_cmd
-# Result is available in the variable
-#    $sharedlib_from_linklib_result
-func_cygming_dll_for_implib_fallback ()
-{
-  $opt_debug
-  if func_cygming_gnu_implib_p "$1" ; then
-    # binutils import library
-    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
-  elif func_cygming_ms_implib_p "$1" ; then
-    # ms-generated import library
-    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
-  else
-    # unknown
-    sharedlib_from_linklib_result=""
-  fi
-}
-
-
-# func_extract_an_archive dir oldlib
-func_extract_an_archive ()
-{
-    $opt_debug
-    f_ex_an_ar_dir="$1"; shift
-    f_ex_an_ar_oldlib="$1"
-    if test "$lock_old_archive_extraction" = yes; then
-      lockfile=$f_ex_an_ar_oldlib.lock
-      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
-	func_echo "Waiting for $lockfile to be removed"
-	sleep 2
-      done
-    fi
-    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
-		   'stat=$?; rm -f "$lockfile"; exit $stat'
-    if test "$lock_old_archive_extraction" = yes; then
-      $opt_dry_run || rm -f "$lockfile"
-    fi
-    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
-     :
-    else
-      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
-    fi
-}
-
-
-# func_extract_archives gentop oldlib ...
-func_extract_archives ()
-{
-    $opt_debug
-    my_gentop="$1"; shift
-    my_oldlibs=${1+"$@"}
-    my_oldobjs=""
-    my_xlib=""
-    my_xabs=""
-    my_xdir=""
-
-    for my_xlib in $my_oldlibs; do
-      # Extract the objects.
-      case $my_xlib in
-	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
-	*) my_xabs=`pwd`"/$my_xlib" ;;
-      esac
-      func_basename "$my_xlib"
-      my_xlib="$func_basename_result"
-      my_xlib_u=$my_xlib
-      while :; do
-        case " $extracted_archives " in
-	*" $my_xlib_u "*)
-	  func_arith $extracted_serial + 1
-	  extracted_serial=$func_arith_result
-	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
-	*) break ;;
-	esac
-      done
-      extracted_archives="$extracted_archives $my_xlib_u"
-      my_xdir="$my_gentop/$my_xlib_u"
-
-      func_mkdir_p "$my_xdir"
-
-      case $host in
-      *-darwin*)
-	func_verbose "Extracting $my_xabs"
-	# Do not bother doing anything if just a dry run
-	$opt_dry_run || {
-	  darwin_orig_dir=`pwd`
-	  cd $my_xdir || exit $?
-	  darwin_archive=$my_xabs
-	  darwin_curdir=`pwd`
-	  darwin_base_archive=`basename "$darwin_archive"`
-	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
-	  if test -n "$darwin_arches"; then
-	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
-	    darwin_arch=
-	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
-	    for darwin_arch in  $darwin_arches ; do
-	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
-	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
-	      cd "$darwin_curdir"
-	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
-	    done # $darwin_arches
-            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
-	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
-	    darwin_file=
-	    darwin_files=
-	    for darwin_file in $darwin_filelist; do
-	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
-	      $LIPO -create -output "$darwin_file" $darwin_files
-	    done # $darwin_filelist
-	    $RM -rf unfat-$$
-	    cd "$darwin_orig_dir"
-	  else
-	    cd $darwin_orig_dir
-	    func_extract_an_archive "$my_xdir" "$my_xabs"
-	  fi # $darwin_arches
-	} # !$opt_dry_run
-	;;
-      *)
-        func_extract_an_archive "$my_xdir" "$my_xabs"
-	;;
-      esac
-      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
-    done
-
-    func_extract_archives_result="$my_oldobjs"
-}
-
-
-# func_emit_wrapper [arg=no]
-#
-# Emit a libtool wrapper script on stdout.
-# Don't directly open a file because we may want to
-# incorporate the script contents within a cygwin/mingw
-# wrapper executable.  Must ONLY be called from within
-# func_mode_link because it depends on a number of variables
-# set therein.
-#
-# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
-# variable will take.  If 'yes', then the emitted script
-# will assume that the directory in which it is stored is
-# the $objdir directory.  This is a cygwin/mingw-specific
-# behavior.
-func_emit_wrapper ()
-{
-	func_emit_wrapper_arg1=${1-no}
-
-	$ECHO "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='$sed_quote_subst'
-
-# Be Bourne compatible
-if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
-fi
-BIN_SH=xpg4; export BIN_SH # for Tru64
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
-  # install mode needs the following variables:
-  generated_by_libtool_version='$macro_version'
-  notinst_deplibs='$notinst_deplibs'
-else
-  # When we are sourced in execute mode, \$file and \$ECHO are already set.
-  if test \"\$libtool_execute_magic\" != \"$magic\"; then
-    file=\"\$0\""
-
-    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
-    $ECHO "\
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
-  eval 'cat <<_LTECHO_EOF
-\$1
-_LTECHO_EOF'
-}
-    ECHO=\"$qECHO\"
-  fi
-
-# Very basic option parsing. These options are (a) specific to
-# the libtool wrapper, (b) are identical between the wrapper
-# /script/ and the wrapper /executable/ which is used only on
-# windows platforms, and (c) all begin with the string "--lt-"
-# (application programs are unlikely to have options which match
-# this pattern).
-#
-# There are only two supported options: --lt-debug and
-# --lt-dump-script. There is, deliberately, no --lt-help.
-#
-# The first argument to this parsing function should be the
-# script's $0 value, followed by "$@".
-lt_option_debug=
-func_parse_lt_options ()
-{
-  lt_script_arg0=\$0
-  shift
-  for lt_opt
-  do
-    case \"\$lt_opt\" in
-    --lt-debug) lt_option_debug=1 ;;
-    --lt-dump-script)
-        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
-        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
-        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
-        cat \"\$lt_dump_D/\$lt_dump_F\"
-        exit 0
-      ;;
-    --lt-*)
-        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
-        exit 1
-      ;;
-    esac
-  done
-
-  # Print the debug banner immediately:
-  if test -n \"\$lt_option_debug\"; then
-    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
-  fi
-}
-
-# Used when --lt-debug. Prints its arguments to stdout
-# (redirection is the responsibility of the caller)
-func_lt_dump_args ()
-{
-  lt_dump_args_N=1;
-  for lt_arg
-  do
-    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
-    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
-  done
-}
-
-# Core function for launching the target application
-func_exec_program_core ()
-{
-"
-  case $host in
-  # Backslashes separate directories on plain windows
-  *-*-mingw | *-*-os2* | *-cegcc*)
-    $ECHO "\
-      if test -n \"\$lt_option_debug\"; then
-        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
-        func_lt_dump_args \${1+\"\$@\"} 1>&2
-      fi
-      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
-    ;;
-
-  *)
-    $ECHO "\
-      if test -n \"\$lt_option_debug\"; then
-        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
-        func_lt_dump_args \${1+\"\$@\"} 1>&2
-      fi
-      exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
-    ;;
-  esac
-  $ECHO "\
-      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
-      exit 1
-}
-
-# A function to encapsulate launching the target application
-# Strips options in the --lt-* namespace from \$@ and
-# launches target application with the remaining arguments.
-func_exec_program ()
-{
-  case \" \$* \" in
-  *\\ --lt-*)
-    for lt_wr_arg
-    do
-      case \$lt_wr_arg in
-      --lt-*) ;;
-      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
-      esac
-      shift
-    done ;;
-  esac
-  func_exec_program_core \${1+\"\$@\"}
-}
-
-  # Parse options
-  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
-
-  # Find the directory that this script lives in.
-  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
-  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
-  # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
-  while test -n \"\$file\"; do
-    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
-
-    # If there was a directory component, then change thisdir.
-    if test \"x\$destdir\" != \"x\$file\"; then
-      case \"\$destdir\" in
-      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
-      *) thisdir=\"\$thisdir/\$destdir\" ;;
-      esac
-    fi
-
-    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
-  done
-
-  # Usually 'no', except on cygwin/mingw when embedded into
-  # the cwrapper.
-  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
-  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
-    # special case for '.'
-    if test \"\$thisdir\" = \".\"; then
-      thisdir=\`pwd\`
-    fi
-    # remove .libs from thisdir
-    case \"\$thisdir\" in
-    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
-    $objdir )   thisdir=. ;;
-    esac
-  fi
-
-  # Try to get the absolute directory name.
-  absdir=\`cd \"\$thisdir\" && pwd\`
-  test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
-	if test "$fast_install" = yes; then
-	  $ECHO "\
-  program=lt-'$outputname'$exeext
-  progdir=\"\$thisdir/$objdir\"
-
-  if test ! -f \"\$progdir/\$program\" ||
-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
-       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
-    file=\"\$\$-\$program\"
-
-    if test ! -d \"\$progdir\"; then
-      $MKDIR \"\$progdir\"
-    else
-      $RM \"\$progdir/\$file\"
-    fi"
-
-	  $ECHO "\
-
-    # relink executable if necessary
-    if test -n \"\$relink_command\"; then
-      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
-      else
-	$ECHO \"\$relink_command_output\" >&2
-	$RM \"\$progdir/\$file\"
-	exit 1
-      fi
-    fi
-
-    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
-    { $RM \"\$progdir/\$program\";
-      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
-    $RM \"\$progdir/\$file\"
-  fi"
-	else
-	  $ECHO "\
-  program='$outputname'
-  progdir=\"\$thisdir/$objdir\"
-"
-	fi
-
-	$ECHO "\
-
-  if test -f \"\$progdir/\$program\"; then"
-
-	# fixup the dll searchpath if we need to.
-	#
-	# Fix the DLL searchpath if we need to.  Do this before prepending
-	# to shlibpath, because on Windows, both are PATH and uninstalled
-	# libraries must come first.
-	if test -n "$dllsearchpath"; then
-	  $ECHO "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-	fi
-
-	# Export our shlibpath_var if we have one.
-	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-	  $ECHO "\
-    # Add our own library path to $shlibpath_var
-    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
-    # Some systems cannot cope with colon-terminated $shlibpath_var
-    # The second colon is a workaround for a bug in BeOS R4 sed
-    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
-
-    export $shlibpath_var
-"
-	fi
-
-	$ECHO "\
-    if test \"\$libtool_execute_magic\" != \"$magic\"; then
-      # Run the actual program with our arguments.
-      func_exec_program \${1+\"\$@\"}
-    fi
-  else
-    # The program doesn't exist.
-    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
-    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
-    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
-    exit 1
-  fi
-fi\
-"
-}
-
-
-# func_emit_cwrapperexe_src
-# emit the source code for a wrapper executable on stdout
-# Must ONLY be called from within func_mode_link because
-# it depends on a number of variable set therein.
-func_emit_cwrapperexe_src ()
-{
-	cat <<EOF
-
-/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
-   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-
-   The $output program cannot be directly executed until all the libtool
-   libraries that it depends on are installed.
-
-   This wrapper executable should never be moved out of the build directory.
-   If it is, it will not operate correctly.
-*/
-EOF
-	    cat <<"EOF"
-#ifdef _MSC_VER
-# define _CRT_SECURE_NO_DEPRECATE 1
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef _MSC_VER
-# include <direct.h>
-# include <process.h>
-# include <io.h>
-#else
-# include <unistd.h>
-# include <stdint.h>
-# ifdef __CYGWIN__
-#  include <io.h>
-# endif
-#endif
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-/* declarations of non-ANSI functions */
-#if defined(__MINGW32__)
-# ifdef __STRICT_ANSI__
-int _putenv (const char *);
-# endif
-#elif defined(__CYGWIN__)
-# ifdef __STRICT_ANSI__
-char *realpath (const char *, char *);
-int putenv (char *);
-int setenv (const char *, const char *, int);
-# endif
-/* #elif defined (other platforms) ... */
-#endif
-
-/* portability defines, excluding path handling macros */
-#if defined(_MSC_VER)
-# define setmode _setmode
-# define stat    _stat
-# define chmod   _chmod
-# define getcwd  _getcwd
-# define putenv  _putenv
-# define S_IXUSR _S_IEXEC
-# ifndef _INTPTR_T_DEFINED
-#  define _INTPTR_T_DEFINED
-#  define intptr_t int
-# endif
-#elif defined(__MINGW32__)
-# define setmode _setmode
-# define stat    _stat
-# define chmod   _chmod
-# define getcwd  _getcwd
-# define putenv  _putenv
-#elif defined(__CYGWIN__)
-# define HAVE_SETENV
-# define FOPEN_WB "wb"
-/* #elif defined (other platforms) ... */
-#endif
-
-#if defined(PATH_MAX)
-# define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
-# define LT_PATHMAX MAXPATHLEN
-#else
-# define LT_PATHMAX 1024
-#endif
-
-#ifndef S_IXOTH
-# define S_IXOTH 0
-#endif
-#ifndef S_IXGRP
-# define S_IXGRP 0
-#endif
-
-/* path handling portability macros */
-#ifndef DIR_SEPARATOR
-# define DIR_SEPARATOR '/'
-# define PATH_SEPARATOR ':'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
-  defined (__OS2__)
-# define HAVE_DOS_BASED_FILE_SYSTEM
-# define FOPEN_WB "wb"
-# ifndef DIR_SEPARATOR_2
-#  define DIR_SEPARATOR_2 '\\'
-# endif
-# ifndef PATH_SEPARATOR_2
-#  define PATH_SEPARATOR_2 ';'
-# endif
-#endif
-
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else /* DIR_SEPARATOR_2 */
-# define IS_DIR_SEPARATOR(ch) \
-	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif /* DIR_SEPARATOR_2 */
-
-#ifndef PATH_SEPARATOR_2
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
-#else /* PATH_SEPARATOR_2 */
-# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
-#endif /* PATH_SEPARATOR_2 */
-
-#ifndef FOPEN_WB
-# define FOPEN_WB "w"
-#endif
-#ifndef _O_BINARY
-# define _O_BINARY 0
-#endif
-
-#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
-#define XFREE(stale) do { \
-  if (stale) { free ((void *) stale); stale = 0; } \
-} while (0)
-
-#if defined(LT_DEBUGWRAPPER)
-static int lt_debug = 1;
-#else
-static int lt_debug = 0;
-#endif
-
-const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
-
-void *xmalloc (size_t num);
-char *xstrdup (const char *string);
-const char *base_name (const char *name);
-char *find_executable (const char *wrapper);
-char *chase_symlinks (const char *pathspec);
-int make_executable (const char *path);
-int check_executable (const char *path);
-char *strendzap (char *str, const char *pat);
-void lt_debugprintf (const char *file, int line, const char *fmt, ...);
-void lt_fatal (const char *file, int line, const char *message, ...);
-static const char *nonnull (const char *s);
-static const char *nonempty (const char *s);
-void lt_setenv (const char *name, const char *value);
-char *lt_extend_str (const char *orig_value, const char *add, int to_end);
-void lt_update_exe_path (const char *name, const char *value);
-void lt_update_lib_path (const char *name, const char *value);
-char **prepare_spawn (char **argv);
-void lt_dump_script (FILE *f);
-EOF
-
-	    cat <<EOF
-volatile const char * MAGIC_EXE = "$magic_exe";
-const char * LIB_PATH_VARNAME = "$shlibpath_var";
-EOF
-
-	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-              func_to_host_path "$temp_rpath"
-	      cat <<EOF
-const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
-EOF
-	    else
-	      cat <<"EOF"
-const char * LIB_PATH_VALUE   = "";
-EOF
-	    fi
-
-	    if test -n "$dllsearchpath"; then
-              func_to_host_path "$dllsearchpath:"
-	      cat <<EOF
-const char * EXE_PATH_VARNAME = "PATH";
-const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
-EOF
-	    else
-	      cat <<"EOF"
-const char * EXE_PATH_VARNAME = "";
-const char * EXE_PATH_VALUE   = "";
-EOF
-	    fi
-
-	    if test "$fast_install" = yes; then
-	      cat <<EOF
-const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
-EOF
-	    else
-	      cat <<EOF
-const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
-EOF
-	    fi
-
-
-	    cat <<"EOF"
-
-#define LTWRAPPER_OPTION_PREFIX         "--lt-"
-
-static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
-static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
-static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
-
-int
-main (int argc, char *argv[])
-{
-  char **newargz;
-  int  newargc;
-  char *tmp_pathspec;
-  char *actual_cwrapper_path;
-  char *actual_cwrapper_name;
-  char *target_name;
-  char *lt_argv_zero;
-  intptr_t rval = 127;
-
-  int i;
-
-  program_name = (char *) xstrdup (base_name (argv[0]));
-  newargz = XMALLOC (char *, argc + 1);
-
-  /* very simple arg parsing; don't want to rely on getopt
-   * also, copy all non cwrapper options to newargz, except
-   * argz[0], which is handled differently
-   */
-  newargc=0;
-  for (i = 1; i < argc; i++)
-    {
-      if (strcmp (argv[i], dumpscript_opt) == 0)
-	{
-EOF
-	    case "$host" in
-	      *mingw* | *cygwin* )
-		# make stdout use "unix" line endings
-		echo "          setmode(1,_O_BINARY);"
-		;;
-	      esac
-
-	    cat <<"EOF"
-	  lt_dump_script (stdout);
-	  return 0;
-	}
-      if (strcmp (argv[i], debug_opt) == 0)
-	{
-          lt_debug = 1;
-          continue;
-	}
-      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
-        {
-          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
-             namespace, but it is not one of the ones we know about and
-             have already dealt with, above (inluding dump-script), then
-             report an error. Otherwise, targets might begin to believe
-             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
-             namespace. The first time any user complains about this, we'll
-             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
-             or a configure.ac-settable value.
-           */
-          lt_fatal (__FILE__, __LINE__,
-		    "unrecognized %s option: '%s'",
-                    ltwrapper_option_prefix, argv[i]);
-        }
-      /* otherwise ... */
-      newargz[++newargc] = xstrdup (argv[i]);
-    }
-  newargz[++newargc] = NULL;
-
-EOF
-	    cat <<EOF
-  /* The GNU banner must be the first non-error debug message */
-  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
-EOF
-	    cat <<"EOF"
-  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
-  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
-
-  tmp_pathspec = find_executable (argv[0]);
-  if (tmp_pathspec == NULL)
-    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
-  lt_debugprintf (__FILE__, __LINE__,
-                  "(main) found exe (before symlink chase) at: %s\n",
-		  tmp_pathspec);
-
-  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
-  lt_debugprintf (__FILE__, __LINE__,
-                  "(main) found exe (after symlink chase) at: %s\n",
-		  actual_cwrapper_path);
-  XFREE (tmp_pathspec);
-
-  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
-  strendzap (actual_cwrapper_path, actual_cwrapper_name);
-
-  /* wrapper name transforms */
-  strendzap (actual_cwrapper_name, ".exe");
-  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
-  XFREE (actual_cwrapper_name);
-  actual_cwrapper_name = tmp_pathspec;
-  tmp_pathspec = 0;
-
-  /* target_name transforms -- use actual target program name; might have lt- prefix */
-  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
-  strendzap (target_name, ".exe");
-  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
-  XFREE (target_name);
-  target_name = tmp_pathspec;
-  tmp_pathspec = 0;
-
-  lt_debugprintf (__FILE__, __LINE__,
-		  "(main) libtool target name: %s\n",
-		  target_name);
-EOF
-
-	    cat <<EOF
-  newargz[0] =
-    XMALLOC (char, (strlen (actual_cwrapper_path) +
-		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
-  strcpy (newargz[0], actual_cwrapper_path);
-  strcat (newargz[0], "$objdir");
-  strcat (newargz[0], "/");
-EOF
-
-	    cat <<"EOF"
-  /* stop here, and copy so we don't have to do this twice */
-  tmp_pathspec = xstrdup (newargz[0]);
-
-  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
-  strcat (newargz[0], actual_cwrapper_name);
-
-  /* DO want the lt- prefix here if it exists, so use target_name */
-  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
-  XFREE (tmp_pathspec);
-  tmp_pathspec = NULL;
-EOF
-
-	    case $host_os in
-	      mingw*)
-	    cat <<"EOF"
-  {
-    char* p;
-    while ((p = strchr (newargz[0], '\\')) != NULL)
-      {
-	*p = '/';
-      }
-    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
-      {
-	*p = '/';
-      }
-  }
-EOF
-	    ;;
-	    esac
-
-	    cat <<"EOF"
-  XFREE (target_name);
-  XFREE (actual_cwrapper_path);
-  XFREE (actual_cwrapper_name);
-
-  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
-  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
-  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
-     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
-     because on Windows, both *_VARNAMEs are PATH but uninstalled
-     libraries must come first. */
-  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
-  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
-
-  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
-		  nonnull (lt_argv_zero));
-  for (i = 0; i < newargc; i++)
-    {
-      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
-		      i, nonnull (newargz[i]));
-    }
-
-EOF
-
-	    case $host_os in
-	      mingw*)
-		cat <<"EOF"
-  /* execv doesn't actually work on mingw as expected on unix */
-  newargz = prepare_spawn (newargz);
-  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
-  if (rval == -1)
-    {
-      /* failed to start process */
-      lt_debugprintf (__FILE__, __LINE__,
-		      "(main) failed to launch target \"%s\": %s\n",
-		      lt_argv_zero, nonnull (strerror (errno)));
-      return 127;
-    }
-  return rval;
-EOF
-		;;
-	      *)
-		cat <<"EOF"
-  execv (lt_argv_zero, newargz);
-  return rval; /* =127, but avoids unused variable warning */
-EOF
-		;;
-	    esac
-
-	    cat <<"EOF"
-}
-
-void *
-xmalloc (size_t num)
-{
-  void *p = (void *) malloc (num);
-  if (!p)
-    lt_fatal (__FILE__, __LINE__, "memory exhausted");
-
-  return p;
-}
-
-char *
-xstrdup (const char *string)
-{
-  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
-			  string) : NULL;
-}
-
-const char *
-base_name (const char *name)
-{
-  const char *base;
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-  /* Skip over the disk name in MSDOS pathnames. */
-  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
-    name += 2;
-#endif
-
-  for (base = name; *name; name++)
-    if (IS_DIR_SEPARATOR (*name))
-      base = name + 1;
-  return base;
-}
-
-int
-check_executable (const char *path)
-{
-  struct stat st;
-
-  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
-                  nonempty (path));
-  if ((!path) || (!*path))
-    return 0;
-
-  if ((stat (path, &st) >= 0)
-      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
-    return 1;
-  else
-    return 0;
-}
-
-int
-make_executable (const char *path)
-{
-  int rval = 0;
-  struct stat st;
-
-  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
-                  nonempty (path));
-  if ((!path) || (!*path))
-    return 0;
-
-  if (stat (path, &st) >= 0)
-    {
-      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
-    }
-  return rval;
-}
-
-/* Searches for the full path of the wrapper.  Returns
-   newly allocated full path name if found, NULL otherwise
-   Does not chase symlinks, even on platforms that support them.
-*/
-char *
-find_executable (const char *wrapper)
-{
-  int has_slash = 0;
-  const char *p;
-  const char *p_next;
-  /* static buffer for getcwd */
-  char tmp[LT_PATHMAX + 1];
-  int tmp_len;
-  char *concat_name;
-
-  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
-                  nonempty (wrapper));
-
-  if ((wrapper == NULL) || (*wrapper == '\0'))
-    return NULL;
-
-  /* Absolute path? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
-    {
-      concat_name = xstrdup (wrapper);
-      if (check_executable (concat_name))
-	return concat_name;
-      XFREE (concat_name);
-    }
-  else
-    {
-#endif
-      if (IS_DIR_SEPARATOR (wrapper[0]))
-	{
-	  concat_name = xstrdup (wrapper);
-	  if (check_executable (concat_name))
-	    return concat_name;
-	  XFREE (concat_name);
-	}
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-    }
-#endif
-
-  for (p = wrapper; *p; p++)
-    if (*p == '/')
-      {
-	has_slash = 1;
-	break;
-      }
-  if (!has_slash)
-    {
-      /* no slashes; search PATH */
-      const char *path = getenv ("PATH");
-      if (path != NULL)
-	{
-	  for (p = path; *p; p = p_next)
-	    {
-	      const char *q;
-	      size_t p_len;
-	      for (q = p; *q; q++)
-		if (IS_PATH_SEPARATOR (*q))
-		  break;
-	      p_len = q - p;
-	      p_next = (*q == '\0' ? q : q + 1);
-	      if (p_len == 0)
-		{
-		  /* empty path: current directory */
-		  if (getcwd (tmp, LT_PATHMAX) == NULL)
-		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
-                              nonnull (strerror (errno)));
-		  tmp_len = strlen (tmp);
-		  concat_name =
-		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
-		  memcpy (concat_name, tmp, tmp_len);
-		  concat_name[tmp_len] = '/';
-		  strcpy (concat_name + tmp_len + 1, wrapper);
-		}
-	      else
-		{
-		  concat_name =
-		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
-		  memcpy (concat_name, p, p_len);
-		  concat_name[p_len] = '/';
-		  strcpy (concat_name + p_len + 1, wrapper);
-		}
-	      if (check_executable (concat_name))
-		return concat_name;
-	      XFREE (concat_name);
-	    }
-	}
-      /* not found in PATH; assume curdir */
-    }
-  /* Relative path | not found in path: prepend cwd */
-  if (getcwd (tmp, LT_PATHMAX) == NULL)
-    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
-              nonnull (strerror (errno)));
-  tmp_len = strlen (tmp);
-  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
-  memcpy (concat_name, tmp, tmp_len);
-  concat_name[tmp_len] = '/';
-  strcpy (concat_name + tmp_len + 1, wrapper);
-
-  if (check_executable (concat_name))
-    return concat_name;
-  XFREE (concat_name);
-  return NULL;
-}
-
-char *
-chase_symlinks (const char *pathspec)
-{
-#ifndef S_ISLNK
-  return xstrdup (pathspec);
-#else
-  char buf[LT_PATHMAX];
-  struct stat s;
-  char *tmp_pathspec = xstrdup (pathspec);
-  char *p;
-  int has_symlinks = 0;
-  while (strlen (tmp_pathspec) && !has_symlinks)
-    {
-      lt_debugprintf (__FILE__, __LINE__,
-		      "checking path component for symlinks: %s\n",
-		      tmp_pathspec);
-      if (lstat (tmp_pathspec, &s) == 0)
-	{
-	  if (S_ISLNK (s.st_mode) != 0)
-	    {
-	      has_symlinks = 1;
-	      break;
-	    }
-
-	  /* search backwards for last DIR_SEPARATOR */
-	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
-	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
-	    p--;
-	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
-	    {
-	      /* no more DIR_SEPARATORS left */
-	      break;
-	    }
-	  *p = '\0';
-	}
-      else
-	{
-	  lt_fatal (__FILE__, __LINE__,
-		    "error accessing file \"%s\": %s",
-		    tmp_pathspec, nonnull (strerror (errno)));
-	}
-    }
-  XFREE (tmp_pathspec);
-
-  if (!has_symlinks)
-    {
-      return xstrdup (pathspec);
-    }
-
-  tmp_pathspec = realpath (pathspec, buf);
-  if (tmp_pathspec == 0)
-    {
-      lt_fatal (__FILE__, __LINE__,
-		"could not follow symlinks for %s", pathspec);
-    }
-  return xstrdup (tmp_pathspec);
-#endif
-}
-
-char *
-strendzap (char *str, const char *pat)
-{
-  size_t len, patlen;
-
-  assert (str != NULL);
-  assert (pat != NULL);
-
-  len = strlen (str);
-  patlen = strlen (pat);
-
-  if (patlen <= len)
-    {
-      str += len - patlen;
-      if (strcmp (str, pat) == 0)
-	*str = '\0';
-    }
-  return str;
-}
-
-void
-lt_debugprintf (const char *file, int line, const char *fmt, ...)
-{
-  va_list args;
-  if (lt_debug)
-    {
-      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
-      va_start (args, fmt);
-      (void) vfprintf (stderr, fmt, args);
-      va_end (args);
-    }
-}
-
-static void
-lt_error_core (int exit_status, const char *file,
-	       int line, const char *mode,
-	       const char *message, va_list ap)
-{
-  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
-  vfprintf (stderr, message, ap);
-  fprintf (stderr, ".\n");
-
-  if (exit_status >= 0)
-    exit (exit_status);
-}
-
-void
-lt_fatal (const char *file, int line, const char *message, ...)
-{
-  va_list ap;
-  va_start (ap, message);
-  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
-  va_end (ap);
-}
-
-static const char *
-nonnull (const char *s)
-{
-  return s ? s : "(null)";
-}
-
-static const char *
-nonempty (const char *s)
-{
-  return (s && !*s) ? "(empty)" : nonnull (s);
-}
-
-void
-lt_setenv (const char *name, const char *value)
-{
-  lt_debugprintf (__FILE__, __LINE__,
-		  "(lt_setenv) setting '%s' to '%s'\n",
-                  nonnull (name), nonnull (value));
-  {
-#ifdef HAVE_SETENV
-    /* always make a copy, for consistency with !HAVE_SETENV */
-    char *str = xstrdup (value);
-    setenv (name, str, 1);
-#else
-    int len = strlen (name) + 1 + strlen (value) + 1;
-    char *str = XMALLOC (char, len);
-    sprintf (str, "%s=%s", name, value);
-    if (putenv (str) != EXIT_SUCCESS)
-      {
-        XFREE (str);
-      }
-#endif
-  }
-}
-
-char *
-lt_extend_str (const char *orig_value, const char *add, int to_end)
-{
-  char *new_value;
-  if (orig_value && *orig_value)
-    {
-      int orig_value_len = strlen (orig_value);
-      int add_len = strlen (add);
-      new_value = XMALLOC (char, add_len + orig_value_len + 1);
-      if (to_end)
-        {
-          strcpy (new_value, orig_value);
-          strcpy (new_value + orig_value_len, add);
-        }
-      else
-        {
-          strcpy (new_value, add);
-          strcpy (new_value + add_len, orig_value);
-        }
-    }
-  else
-    {
-      new_value = xstrdup (add);
-    }
-  return new_value;
-}
-
-void
-lt_update_exe_path (const char *name, const char *value)
-{
-  lt_debugprintf (__FILE__, __LINE__,
-		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
-                  nonnull (name), nonnull (value));
-
-  if (name && *name && value && *value)
-    {
-      char *new_value = lt_extend_str (getenv (name), value, 0);
-      /* some systems can't cope with a ':'-terminated path #' */
-      int len = strlen (new_value);
-      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
-        {
-          new_value[len-1] = '\0';
-        }
-      lt_setenv (name, new_value);
-      XFREE (new_value);
-    }
-}
-
-void
-lt_update_lib_path (const char *name, const char *value)
-{
-  lt_debugprintf (__FILE__, __LINE__,
-		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
-                  nonnull (name), nonnull (value));
-
-  if (name && *name && value && *value)
-    {
-      char *new_value = lt_extend_str (getenv (name), value, 0);
-      lt_setenv (name, new_value);
-      XFREE (new_value);
-    }
-}
-
-EOF
-	    case $host_os in
-	      mingw*)
-		cat <<"EOF"
-
-/* Prepares an argument vector before calling spawn().
-   Note that spawn() does not by itself call the command interpreter
-     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
-      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-         GetVersionEx(&v);
-         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
-      }) ? "cmd.exe" : "command.com").
-   Instead it simply concatenates the arguments, separated by ' ', and calls
-   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
-   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
-   special way:
-   - Space and tab are interpreted as delimiters. They are not treated as
-     delimiters if they are surrounded by double quotes: "...".
-   - Unescaped double quotes are removed from the input. Their only effect is
-     that within double quotes, space and tab are treated like normal
-     characters.
-   - Backslashes not followed by double quotes are not special.
-   - But 2*n+1 backslashes followed by a double quote become
-     n backslashes followed by a double quote (n >= 0):
-       \" -> "
-       \\\" -> \"
-       \\\\\" -> \\"
- */
-#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
-#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
-char **
-prepare_spawn (char **argv)
-{
-  size_t argc;
-  char **new_argv;
-  size_t i;
-
-  /* Count number of arguments.  */
-  for (argc = 0; argv[argc] != NULL; argc++)
-    ;
-
-  /* Allocate new argument vector.  */
-  new_argv = XMALLOC (char *, argc + 1);
-
-  /* Put quoted arguments into the new argument vector.  */
-  for (i = 0; i < argc; i++)
-    {
-      const char *string = argv[i];
-
-      if (string[0] == '\0')
-	new_argv[i] = xstrdup ("\"\"");
-      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
-	{
-	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
-	  size_t length;
-	  unsigned int backslashes;
-	  const char *s;
-	  char *quoted_string;
-	  char *p;
-
-	  length = 0;
-	  backslashes = 0;
-	  if (quote_around)
-	    length++;
-	  for (s = string; *s != '\0'; s++)
-	    {
-	      char c = *s;
-	      if (c == '"')
-		length += backslashes + 1;
-	      length++;
-	      if (c == '\\')
-		backslashes++;
-	      else
-		backslashes = 0;
-	    }
-	  if (quote_around)
-	    length += backslashes + 1;
-
-	  quoted_string = XMALLOC (char, length + 1);
-
-	  p = quoted_string;
-	  backslashes = 0;
-	  if (quote_around)
-	    *p++ = '"';
-	  for (s = string; *s != '\0'; s++)
-	    {
-	      char c = *s;
-	      if (c == '"')
-		{
-		  unsigned int j;
-		  for (j = backslashes + 1; j > 0; j--)
-		    *p++ = '\\';
-		}
-	      *p++ = c;
-	      if (c == '\\')
-		backslashes++;
-	      else
-		backslashes = 0;
-	    }
-	  if (quote_around)
-	    {
-	      unsigned int j;
-	      for (j = backslashes; j > 0; j--)
-		*p++ = '\\';
-	      *p++ = '"';
-	    }
-	  *p = '\0';
-
-	  new_argv[i] = quoted_string;
-	}
-      else
-	new_argv[i] = (char *) string;
-    }
-  new_argv[argc] = NULL;
-
-  return new_argv;
-}
-EOF
-		;;
-	    esac
-
-            cat <<"EOF"
-void lt_dump_script (FILE* f)
-{
-EOF
-	    func_emit_wrapper yes |
-	      $SED -n -e '
-s/^\(.\{79\}\)\(..*\)/\1\
-\2/
-h
-s/\([\\"]\)/\\\1/g
-s/$/\\n/
-s/\([^\n]*\).*/  fputs ("\1", f);/p
-g
-D'
-            cat <<"EOF"
-}
-EOF
-}
-# end: func_emit_cwrapperexe_src
-
-# func_win32_import_lib_p ARG
-# True if ARG is an import lib, as indicated by $file_magic_cmd
-func_win32_import_lib_p ()
-{
-    $opt_debug
-    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
-    *import*) : ;;
-    *) false ;;
-    esac
-}
-
-# func_mode_link arg...
-func_mode_link ()
-{
-    $opt_debug
-    case $host in
-    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-      # It is impossible to link a dll without this setting, and
-      # we shouldn't force the makefile maintainer to figure out
-      # which system we are compiling for in order to pass an extra
-      # flag for every libtool invocation.
-      # allow_undefined=no
-
-      # FIXME: Unfortunately, there are problems with the above when trying
-      # to make a dll which has undefined symbols, in which case not
-      # even a static library is built.  For now, we need to specify
-      # -no-undefined on the libtool link line when we can be certain
-      # that all symbols are satisfied, otherwise we get a static library.
-      allow_undefined=yes
-      ;;
-    *)
-      allow_undefined=yes
-      ;;
-    esac
-    libtool_args=$nonopt
-    base_compile="$nonopt $@"
-    compile_command=$nonopt
-    finalize_command=$nonopt
-
-    compile_rpath=
-    finalize_rpath=
-    compile_shlibpath=
-    finalize_shlibpath=
-    convenience=
-    old_convenience=
-    deplibs=
-    old_deplibs=
-    compiler_flags=
-    linker_flags=
-    dllsearchpath=
-    lib_search_path=`pwd`
-    inst_prefix_dir=
-    new_inherited_linker_flags=
-
-    avoid_version=no
-    bindir=
-    dlfiles=
-    dlprefiles=
-    dlself=no
-    export_dynamic=no
-    export_symbols=
-    export_symbols_regex=
-    generated=
-    libobjs=
-    ltlibs=
-    module=no
-    no_install=no
-    objs=
-    non_pic_objects=
-    precious_files_regex=
-    prefer_static_libs=no
-    preload=no
-    prev=
-    prevarg=
-    release=
-    rpath=
-    xrpath=
-    perm_rpath=
-    temp_rpath=
-    thread_safe=no
-    vinfo=
-    vinfo_number=no
-    weak_libs=
-    single_module="${wl}-single_module"
-    func_infer_tag $base_compile
-
-    # We need to know -static, to get the right output filenames.
-    for arg
-    do
-      case $arg in
-      -shared)
-	test "$build_libtool_libs" != yes && \
-	  func_fatal_configuration "can not build a shared library"
-	build_old_libs=no
-	break
-	;;
-      -all-static | -static | -static-libtool-libs)
-	case $arg in
-	-all-static)
-	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
-	    func_warning "complete static linking is impossible in this configuration"
-	  fi
-	  if test -n "$link_static_flag"; then
-	    dlopen_self=$dlopen_self_static
-	  fi
-	  prefer_static_libs=yes
-	  ;;
-	-static)
-	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
-	    dlopen_self=$dlopen_self_static
-	  fi
-	  prefer_static_libs=built
-	  ;;
-	-static-libtool-libs)
-	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
-	    dlopen_self=$dlopen_self_static
-	  fi
-	  prefer_static_libs=yes
-	  ;;
-	esac
-	build_libtool_libs=no
-	build_old_libs=yes
-	break
-	;;
-      esac
-    done
-
-    # See if our shared archives depend on static archives.
-    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
-    # Go through the arguments, transforming them on the way.
-    while test "$#" -gt 0; do
-      arg="$1"
-      shift
-      func_quote_for_eval "$arg"
-      qarg=$func_quote_for_eval_unquoted_result
-      func_append libtool_args " $func_quote_for_eval_result"
-
-      # If the previous option needs an argument, assign it.
-      if test -n "$prev"; then
-	case $prev in
-	output)
-	  func_append compile_command " @OUTPUT@"
-	  func_append finalize_command " @OUTPUT@"
-	  ;;
-	esac
-
-	case $prev in
-	bindir)
-	  bindir="$arg"
-	  prev=
-	  continue
-	  ;;
-	dlfiles|dlprefiles)
-	  if test "$preload" = no; then
-	    # Add the symbol object into the linking commands.
-	    func_append compile_command " @SYMFILE@"
-	    func_append finalize_command " @SYMFILE@"
-	    preload=yes
-	  fi
-	  case $arg in
-	  *.la | *.lo) ;;  # We handle these cases below.
-	  force)
-	    if test "$dlself" = no; then
-	      dlself=needless
-	      export_dynamic=yes
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  self)
-	    if test "$prev" = dlprefiles; then
-	      dlself=yes
-	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
-	      dlself=yes
-	    else
-	      dlself=needless
-	      export_dynamic=yes
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  *)
-	    if test "$prev" = dlfiles; then
-	      func_append dlfiles " $arg"
-	    else
-	      func_append dlprefiles " $arg"
-	    fi
-	    prev=
-	    continue
-	    ;;
-	  esac
-	  ;;
-	expsyms)
-	  export_symbols="$arg"
-	  test -f "$arg" \
-	    || func_fatal_error "symbol file \`$arg' does not exist"
-	  prev=
-	  continue
-	  ;;
-	expsyms_regex)
-	  export_symbols_regex="$arg"
-	  prev=
-	  continue
-	  ;;
-	framework)
-	  case $host in
-	    *-*-darwin*)
-	      case "$deplibs " in
-		*" $qarg.ltframework "*) ;;
-		*) func_append deplibs " $qarg.ltframework" # this is fixed later
-		   ;;
-	      esac
-	      ;;
-	  esac
-	  prev=
-	  continue
-	  ;;
-	inst_prefix)
-	  inst_prefix_dir="$arg"
-	  prev=
-	  continue
-	  ;;
-	objectlist)
-	  if test -f "$arg"; then
-	    save_arg=$arg
-	    moreargs=
-	    for fil in `cat "$save_arg"`
-	    do
-#	      func_append moreargs " $fil"
-	      arg=$fil
-	      # A libtool-controlled object.
-
-	      # Check to see that this really is a libtool object.
-	      if func_lalib_unsafe_p "$arg"; then
-		pic_object=
-		non_pic_object=
-
-		# Read the .lo file
-		func_source "$arg"
-
-		if test -z "$pic_object" ||
-		   test -z "$non_pic_object" ||
-		   test "$pic_object" = none &&
-		   test "$non_pic_object" = none; then
-		  func_fatal_error "cannot find name of object for \`$arg'"
-		fi
-
-		# Extract subdirectory from the argument.
-		func_dirname "$arg" "/" ""
-		xdir="$func_dirname_result"
-
-		if test "$pic_object" != none; then
-		  # Prepend the subdirectory the object is found in.
-		  pic_object="$xdir$pic_object"
-
-		  if test "$prev" = dlfiles; then
-		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		      func_append dlfiles " $pic_object"
-		      prev=
-		      continue
-		    else
-		      # If libtool objects are unsupported, then we need to preload.
-		      prev=dlprefiles
-		    fi
-		  fi
-
-		  # CHECK ME:  I think I busted this.  -Ossama
-		  if test "$prev" = dlprefiles; then
-		    # Preload the old-style object.
-		    func_append dlprefiles " $pic_object"
-		    prev=
-		  fi
-
-		  # A PIC object.
-		  func_append libobjs " $pic_object"
-		  arg="$pic_object"
-		fi
-
-		# Non-PIC object.
-		if test "$non_pic_object" != none; then
-		  # Prepend the subdirectory the object is found in.
-		  non_pic_object="$xdir$non_pic_object"
-
-		  # A standard non-PIC object
-		  func_append non_pic_objects " $non_pic_object"
-		  if test -z "$pic_object" || test "$pic_object" = none ; then
-		    arg="$non_pic_object"
-		  fi
-		else
-		  # If the PIC object exists, use it instead.
-		  # $xdir was prepended to $pic_object above.
-		  non_pic_object="$pic_object"
-		  func_append non_pic_objects " $non_pic_object"
-		fi
-	      else
-		# Only an error if not doing a dry-run.
-		if $opt_dry_run; then
-		  # Extract subdirectory from the argument.
-		  func_dirname "$arg" "/" ""
-		  xdir="$func_dirname_result"
-
-		  func_lo2o "$arg"
-		  pic_object=$xdir$objdir/$func_lo2o_result
-		  non_pic_object=$xdir$func_lo2o_result
-		  func_append libobjs " $pic_object"
-		  func_append non_pic_objects " $non_pic_object"
-	        else
-		  func_fatal_error "\`$arg' is not a valid libtool object"
-		fi
-	      fi
-	    done
-	  else
-	    func_fatal_error "link input file \`$arg' does not exist"
-	  fi
-	  arg=$save_arg
-	  prev=
-	  continue
-	  ;;
-	precious_regex)
-	  precious_files_regex="$arg"
-	  prev=
-	  continue
-	  ;;
-	release)
-	  release="-$arg"
-	  prev=
-	  continue
-	  ;;
-	rpath | xrpath)
-	  # We need an absolute path.
-	  case $arg in
-	  [\\/]* | [A-Za-z]:[\\/]*) ;;
-	  *)
-	    func_fatal_error "only absolute run-paths are allowed"
-	    ;;
-	  esac
-	  if test "$prev" = rpath; then
-	    case "$rpath " in
-	    *" $arg "*) ;;
-	    *) func_append rpath " $arg" ;;
-	    esac
-	  else
-	    case "$xrpath " in
-	    *" $arg "*) ;;
-	    *) func_append xrpath " $arg" ;;
-	    esac
-	  fi
-	  prev=
-	  continue
-	  ;;
-	shrext)
-	  shrext_cmds="$arg"
-	  prev=
-	  continue
-	  ;;
-	weak)
-	  func_append weak_libs " $arg"
-	  prev=
-	  continue
-	  ;;
-	xcclinker)
-	  func_append linker_flags " $qarg"
-	  func_append compiler_flags " $qarg"
-	  prev=
-	  func_append compile_command " $qarg"
-	  func_append finalize_command " $qarg"
-	  continue
-	  ;;
-	xcompiler)
-	  func_append compiler_flags " $qarg"
-	  prev=
-	  func_append compile_command " $qarg"
-	  func_append finalize_command " $qarg"
-	  continue
-	  ;;
-	xlinker)
-	  func_append linker_flags " $qarg"
-	  func_append compiler_flags " $wl$qarg"
-	  prev=
-	  func_append compile_command " $wl$qarg"
-	  func_append finalize_command " $wl$qarg"
-	  continue
-	  ;;
-	*)
-	  eval "$prev=\"\$arg\""
-	  prev=
-	  continue
-	  ;;
-	esac
-      fi # test -n "$prev"
-
-      prevarg="$arg"
-
-      case $arg in
-      -all-static)
-	if test -n "$link_static_flag"; then
-	  # See comment for -static flag below, for more details.
-	  func_append compile_command " $link_static_flag"
-	  func_append finalize_command " $link_static_flag"
-	fi
-	continue
-	;;
-
-      -allow-undefined)
-	# FIXME: remove this flag sometime in the future.
-	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
-	;;
-
-      -avoid-version)
-	avoid_version=yes
-	continue
-	;;
-
-      -bindir)
-	prev=bindir
-	continue
-	;;
-
-      -dlopen)
-	prev=dlfiles
-	continue
-	;;
-
-      -dlpreopen)
-	prev=dlprefiles
-	continue
-	;;
-
-      -export-dynamic)
-	export_dynamic=yes
-	continue
-	;;
-
-      -export-symbols | -export-symbols-regex)
-	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-	  func_fatal_error "more than one -exported-symbols argument is not allowed"
-	fi
-	if test "X$arg" = "X-export-symbols"; then
-	  prev=expsyms
-	else
-	  prev=expsyms_regex
-	fi
-	continue
-	;;
-
-      -framework)
-	prev=framework
-	continue
-	;;
-
-      -inst-prefix-dir)
-	prev=inst_prefix
-	continue
-	;;
-
-      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
-      # so, if we see these flags be careful not to treat them like -L
-      -L[A-Z][A-Z]*:*)
-	case $with_gcc/$host in
-	no/*-*-irix* | /*-*-irix*)
-	  func_append compile_command " $arg"
-	  func_append finalize_command " $arg"
-	  ;;
-	esac
-	continue
-	;;
-
-      -L*)
-	func_stripname "-L" '' "$arg"
-	if test -z "$func_stripname_result"; then
-	  if test "$#" -gt 0; then
-	    func_fatal_error "require no space between \`-L' and \`$1'"
-	  else
-	    func_fatal_error "need path for \`-L' option"
-	  fi
-	fi
-	func_resolve_sysroot "$func_stripname_result"
-	dir=$func_resolve_sysroot_result
-	# We need an absolute path.
-	case $dir in
-	[\\/]* | [A-Za-z]:[\\/]*) ;;
-	*)
-	  absdir=`cd "$dir" && pwd`
-	  test -z "$absdir" && \
-	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
-	  dir="$absdir"
-	  ;;
-	esac
-	case "$deplibs " in
-	*" -L$dir "* | *" $arg "*)
-	  # Will only happen for absolute or sysroot arguments
-	  ;;
-	*)
-	  # Preserve sysroot, but never include relative directories
-	  case $dir in
-	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
-	    *) func_append deplibs " -L$dir" ;;
-	  esac
-	  func_append lib_search_path " $dir"
-	  ;;
-	esac
-	case $host in
-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
-	  case :$dllsearchpath: in
-	  *":$dir:"*) ;;
-	  ::) dllsearchpath=$dir;;
-	  *) func_append dllsearchpath ":$dir";;
-	  esac
-	  case :$dllsearchpath: in
-	  *":$testbindir:"*) ;;
-	  ::) dllsearchpath=$testbindir;;
-	  *) func_append dllsearchpath ":$testbindir";;
-	  esac
-	  ;;
-	esac
-	continue
-	;;
-
-      -l*)
-	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
-	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
-	    # These systems don't actually have a C or math library (as such)
-	    continue
-	    ;;
-	  *-*-os2*)
-	    # These systems don't actually have a C library (as such)
-	    test "X$arg" = "X-lc" && continue
-	    ;;
-	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-	    # Do not include libc due to us having libc/libc_r.
-	    test "X$arg" = "X-lc" && continue
-	    ;;
-	  *-*-rhapsody* | *-*-darwin1.[012])
-	    # Rhapsody C and math libraries are in the System framework
-	    func_append deplibs " System.ltframework"
-	    continue
-	    ;;
-	  *-*-sco3.2v5* | *-*-sco5v6*)
-	    # Causes problems with __ctype
-	    test "X$arg" = "X-lc" && continue
-	    ;;
-	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
-	    # Compiler inserts libc in the correct place for threads to work
-	    test "X$arg" = "X-lc" && continue
-	    ;;
-	  esac
-	elif test "X$arg" = "X-lc_r"; then
-	 case $host in
-	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-	   # Do not include libc_r directly, use -pthread flag.
-	   continue
-	   ;;
-	 esac
-	fi
-	func_append deplibs " $arg"
-	continue
-	;;
-
-      -module)
-	module=yes
-	continue
-	;;
-
-      # Tru64 UNIX uses -model [arg] to determine the layout of C++
-      # classes, name mangling, and exception handling.
-      # Darwin uses the -arch flag to determine output architecture.
-      -model|-arch|-isysroot|--sysroot)
-	func_append compiler_flags " $arg"
-	func_append compile_command " $arg"
-	func_append finalize_command " $arg"
-	prev=xcompiler
-	continue
-	;;
-
-      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
-      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
-	func_append compiler_flags " $arg"
-	func_append compile_command " $arg"
-	func_append finalize_command " $arg"
-	case "$new_inherited_linker_flags " in
-	    *" $arg "*) ;;
-	    * ) func_append new_inherited_linker_flags " $arg" ;;
-	esac
-	continue
-	;;
-
-      -multi_module)
-	single_module="${wl}-multi_module"
-	continue
-	;;
-
-      -no-fast-install)
-	fast_install=no
-	continue
-	;;
-
-      -no-install)
-	case $host in
-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
-	  # The PATH hackery in wrapper scripts is required on Windows
-	  # and Darwin in order for the loader to find any dlls it needs.
-	  func_warning "\`-no-install' is ignored for $host"
-	  func_warning "assuming \`-no-fast-install' instead"
-	  fast_install=no
-	  ;;
-	*) no_install=yes ;;
-	esac
-	continue
-	;;
-
-      -no-undefined)
-	allow_undefined=no
-	continue
-	;;
-
-      -objectlist)
-	prev=objectlist
-	continue
-	;;
-
-      -o) prev=output ;;
-
-      -precious-files-regex)
-	prev=precious_regex
-	continue
-	;;
-
-      -release)
-	prev=release
-	continue
-	;;
-
-      -rpath)
-	prev=rpath
-	continue
-	;;
-
-      -R)
-	prev=xrpath
-	continue
-	;;
-
-      -R*)
-	func_stripname '-R' '' "$arg"
-	dir=$func_stripname_result
-	# We need an absolute path.
-	case $dir in
-	[\\/]* | [A-Za-z]:[\\/]*) ;;
-	=*)
-	  func_stripname '=' '' "$dir"
-	  dir=$lt_sysroot$func_stripname_result
-	  ;;
-	*)
-	  func_fatal_error "only absolute run-paths are allowed"
-	  ;;
-	esac
-	case "$xrpath " in
-	*" $dir "*) ;;
-	*) func_append xrpath " $dir" ;;
-	esac
-	continue
-	;;
-
-      -shared)
-	# The effects of -shared are defined in a previous loop.
-	continue
-	;;
-
-      -shrext)
-	prev=shrext
-	continue
-	;;
-
-      -static | -static-libtool-libs)
-	# The effects of -static are defined in a previous loop.
-	# We used to do the same as -all-static on platforms that
-	# didn't have a PIC flag, but the assumption that the effects
-	# would be equivalent was wrong.  It would break on at least
-	# Digital Unix and AIX.
-	continue
-	;;
-
-      -thread-safe)
-	thread_safe=yes
-	continue
-	;;
-
-      -version-info)
-	prev=vinfo
-	continue
-	;;
-
-      -version-number)
-	prev=vinfo
-	vinfo_number=yes
-	continue
-	;;
-
-      -weak)
-        prev=weak
-	continue
-	;;
-
-      -Wc,*)
-	func_stripname '-Wc,' '' "$arg"
-	args=$func_stripname_result
-	arg=
-	save_ifs="$IFS"; IFS=','
-	for flag in $args; do
-	  IFS="$save_ifs"
-          func_quote_for_eval "$flag"
-	  func_append arg " $func_quote_for_eval_result"
-	  func_append compiler_flags " $func_quote_for_eval_result"
-	done
-	IFS="$save_ifs"
-	func_stripname ' ' '' "$arg"
-	arg=$func_stripname_result
-	;;
-
-      -Wl,*)
-	func_stripname '-Wl,' '' "$arg"
-	args=$func_stripname_result
-	arg=
-	save_ifs="$IFS"; IFS=','
-	for flag in $args; do
-	  IFS="$save_ifs"
-          func_quote_for_eval "$flag"
-	  func_append arg " $wl$func_quote_for_eval_result"
-	  func_append compiler_flags " $wl$func_quote_for_eval_result"
-	  func_append linker_flags " $func_quote_for_eval_result"
-	done
-	IFS="$save_ifs"
-	func_stripname ' ' '' "$arg"
-	arg=$func_stripname_result
-	;;
-
-      -Xcompiler)
-	prev=xcompiler
-	continue
-	;;
-
-      -Xlinker)
-	prev=xlinker
-	continue
-	;;
-
-      -XCClinker)
-	prev=xcclinker
-	continue
-	;;
-
-      # -msg_* for osf cc
-      -msg_*)
-	func_quote_for_eval "$arg"
-	arg="$func_quote_for_eval_result"
-	;;
-
-      # Flags to be passed through unchanged, with rationale:
-      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
-      # -r[0-9][0-9]*        specify processor for the SGI compiler
-      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
-      # +DA*, +DD*           enable 64-bit mode for the HP compiler
-      # -q*                  compiler args for the IBM compiler
-      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
-      # -F/path              path to uninstalled frameworks, gcc on darwin
-      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
-      # @file                GCC response files
-      # -tp=*                Portland pgcc target processor selection
-      # --sysroot=*          for sysroot support
-      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
-      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
-        func_quote_for_eval "$arg"
-	arg="$func_quote_for_eval_result"
-        func_append compile_command " $arg"
-        func_append finalize_command " $arg"
-        func_append compiler_flags " $arg"
-        continue
-        ;;
-
-      # Some other compiler flag.
-      -* | +*)
-        func_quote_for_eval "$arg"
-	arg="$func_quote_for_eval_result"
-	;;
-
-      *.$objext)
-	# A standard object.
-	func_append objs " $arg"
-	;;
-
-      *.lo)
-	# A libtool-controlled object.
-
-	# Check to see that this really is a libtool object.
-	if func_lalib_unsafe_p "$arg"; then
-	  pic_object=
-	  non_pic_object=
-
-	  # Read the .lo file
-	  func_source "$arg"
-
-	  if test -z "$pic_object" ||
-	     test -z "$non_pic_object" ||
-	     test "$pic_object" = none &&
-	     test "$non_pic_object" = none; then
-	    func_fatal_error "cannot find name of object for \`$arg'"
-	  fi
-
-	  # Extract subdirectory from the argument.
-	  func_dirname "$arg" "/" ""
-	  xdir="$func_dirname_result"
-
-	  if test "$pic_object" != none; then
-	    # Prepend the subdirectory the object is found in.
-	    pic_object="$xdir$pic_object"
-
-	    if test "$prev" = dlfiles; then
-	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		func_append dlfiles " $pic_object"
-		prev=
-		continue
-	      else
-		# If libtool objects are unsupported, then we need to preload.
-		prev=dlprefiles
-	      fi
-	    fi
-
-	    # CHECK ME:  I think I busted this.  -Ossama
-	    if test "$prev" = dlprefiles; then
-	      # Preload the old-style object.
-	      func_append dlprefiles " $pic_object"
-	      prev=
-	    fi
-
-	    # A PIC object.
-	    func_append libobjs " $pic_object"
-	    arg="$pic_object"
-	  fi
-
-	  # Non-PIC object.
-	  if test "$non_pic_object" != none; then
-	    # Prepend the subdirectory the object is found in.
-	    non_pic_object="$xdir$non_pic_object"
-
-	    # A standard non-PIC object
-	    func_append non_pic_objects " $non_pic_object"
-	    if test -z "$pic_object" || test "$pic_object" = none ; then
-	      arg="$non_pic_object"
-	    fi
-	  else
-	    # If the PIC object exists, use it instead.
-	    # $xdir was prepended to $pic_object above.
-	    non_pic_object="$pic_object"
-	    func_append non_pic_objects " $non_pic_object"
-	  fi
-	else
-	  # Only an error if not doing a dry-run.
-	  if $opt_dry_run; then
-	    # Extract subdirectory from the argument.
-	    func_dirname "$arg" "/" ""
-	    xdir="$func_dirname_result"
-
-	    func_lo2o "$arg"
-	    pic_object=$xdir$objdir/$func_lo2o_result
-	    non_pic_object=$xdir$func_lo2o_result
-	    func_append libobjs " $pic_object"
-	    func_append non_pic_objects " $non_pic_object"
-	  else
-	    func_fatal_error "\`$arg' is not a valid libtool object"
-	  fi
-	fi
-	;;
-
-      *.$libext)
-	# An archive.
-	func_append deplibs " $arg"
-	func_append old_deplibs " $arg"
-	continue
-	;;
-
-      *.la)
-	# A libtool-controlled library.
-
-	func_resolve_sysroot "$arg"
-	if test "$prev" = dlfiles; then
-	  # This library was specified with -dlopen.
-	  func_append dlfiles " $func_resolve_sysroot_result"
-	  prev=
-	elif test "$prev" = dlprefiles; then
-	  # The library was specified with -dlpreopen.
-	  func_append dlprefiles " $func_resolve_sysroot_result"
-	  prev=
-	else
-	  func_append deplibs " $func_resolve_sysroot_result"
-	fi
-	continue
-	;;
-
-      # Some other compiler argument.
-      *)
-	# Unknown arguments in both finalize_command and compile_command need
-	# to be aesthetically quoted because they are evaled later.
-	func_quote_for_eval "$arg"
-	arg="$func_quote_for_eval_result"
-	;;
-      esac # arg
-
-      # Now actually substitute the argument into the commands.
-      if test -n "$arg"; then
-	func_append compile_command " $arg"
-	func_append finalize_command " $arg"
-      fi
-    done # argument parsing loop
-
-    test -n "$prev" && \
-      func_fatal_help "the \`$prevarg' option requires an argument"
-
-    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-      eval arg=\"$export_dynamic_flag_spec\"
-      func_append compile_command " $arg"
-      func_append finalize_command " $arg"
-    fi
-
-    oldlibs=
-    # calculate the name of the file, without its directory
-    func_basename "$output"
-    outputname="$func_basename_result"
-    libobjs_save="$libobjs"
-
-    if test -n "$shlibpath_var"; then
-      # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
-    else
-      shlib_search_path=
-    fi
-    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
-    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
-    func_dirname "$output" "/" ""
-    output_objdir="$func_dirname_result$objdir"
-    func_to_tool_file "$output_objdir/"
-    tool_output_objdir=$func_to_tool_file_result
-    # Create the object directory.
-    func_mkdir_p "$output_objdir"
-
-    # Determine the type of output
-    case $output in
-    "")
-      func_fatal_help "you must specify an output file"
-      ;;
-    *.$libext) linkmode=oldlib ;;
-    *.lo | *.$objext) linkmode=obj ;;
-    *.la) linkmode=lib ;;
-    *) linkmode=prog ;; # Anything else should be a program.
-    esac
-
-    specialdeplibs=
-
-    libs=
-    # Find all interdependent deplibs by searching for libraries
-    # that are linked more than once (e.g. -la -lb -la)
-    for deplib in $deplibs; do
-      if $opt_preserve_dup_deps ; then
-	case "$libs " in
-	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
-	esac
-      fi
-      func_append libs " $deplib"
-    done
-
-    if test "$linkmode" = lib; then
-      libs="$predeps $libs $compiler_lib_search_path $postdeps"
-
-      # Compute libraries that are listed more than once in $predeps
-      # $postdeps and mark them as special (i.e., whose duplicates are
-      # not to be eliminated).
-      pre_post_deps=
-      if $opt_duplicate_compiler_generated_deps; then
-	for pre_post_dep in $predeps $postdeps; do
-	  case "$pre_post_deps " in
-	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
-	  esac
-	  func_append pre_post_deps " $pre_post_dep"
-	done
-      fi
-      pre_post_deps=
-    fi
-
-    deplibs=
-    newdependency_libs=
-    newlib_search_path=
-    need_relink=no # whether we're linking any uninstalled libtool libraries
-    notinst_deplibs= # not-installed libtool libraries
-    notinst_path= # paths that contain not-installed libtool libraries
-
-    case $linkmode in
-    lib)
-	passes="conv dlpreopen link"
-	for file in $dlfiles $dlprefiles; do
-	  case $file in
-	  *.la) ;;
-	  *)
-	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
-	    ;;
-	  esac
-	done
-	;;
-    prog)
-	compile_deplibs=
-	finalize_deplibs=
-	alldeplibs=no
-	newdlfiles=
-	newdlprefiles=
-	passes="conv scan dlopen dlpreopen link"
-	;;
-    *)  passes="conv"
-	;;
-    esac
-
-    for pass in $passes; do
-      # The preopen pass in lib mode reverses $deplibs; put it back here
-      # so that -L comes before libs that need it for instance...
-      if test "$linkmode,$pass" = "lib,link"; then
-	## FIXME: Find the place where the list is rebuilt in the wrong
-	##        order, and fix it there properly
-        tmp_deplibs=
-	for deplib in $deplibs; do
-	  tmp_deplibs="$deplib $tmp_deplibs"
-	done
-	deplibs="$tmp_deplibs"
-      fi
-
-      if test "$linkmode,$pass" = "lib,link" ||
-	 test "$linkmode,$pass" = "prog,scan"; then
-	libs="$deplibs"
-	deplibs=
-      fi
-      if test "$linkmode" = prog; then
-	case $pass in
-	dlopen) libs="$dlfiles" ;;
-	dlpreopen) libs="$dlprefiles" ;;
-	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
-	esac
-      fi
-      if test "$linkmode,$pass" = "lib,dlpreopen"; then
-	# Collect and forward deplibs of preopened libtool libs
-	for lib in $dlprefiles; do
-	  # Ignore non-libtool-libs
-	  dependency_libs=
-	  func_resolve_sysroot "$lib"
-	  case $lib in
-	  *.la)	func_source "$func_resolve_sysroot_result" ;;
-	  esac
-
-	  # Collect preopened libtool deplibs, except any this library
-	  # has declared as weak libs
-	  for deplib in $dependency_libs; do
-	    func_basename "$deplib"
-            deplib_base=$func_basename_result
-	    case " $weak_libs " in
-	    *" $deplib_base "*) ;;
-	    *) func_append deplibs " $deplib" ;;
-	    esac
-	  done
-	done
-	libs="$dlprefiles"
-      fi
-      if test "$pass" = dlopen; then
-	# Collect dlpreopened libraries
-	save_deplibs="$deplibs"
-	deplibs=
-      fi
-
-      for deplib in $libs; do
-	lib=
-	found=no
-	case $deplib in
-	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
-        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
-	  if test "$linkmode,$pass" = "prog,link"; then
-	    compile_deplibs="$deplib $compile_deplibs"
-	    finalize_deplibs="$deplib $finalize_deplibs"
-	  else
-	    func_append compiler_flags " $deplib"
-	    if test "$linkmode" = lib ; then
-		case "$new_inherited_linker_flags " in
-		    *" $deplib "*) ;;
-		    * ) func_append new_inherited_linker_flags " $deplib" ;;
-		esac
-	    fi
-	  fi
-	  continue
-	  ;;
-	-l*)
-	  if test "$linkmode" != lib && test "$linkmode" != prog; then
-	    func_warning "\`-l' is ignored for archives/objects"
-	    continue
-	  fi
-	  func_stripname '-l' '' "$deplib"
-	  name=$func_stripname_result
-	  if test "$linkmode" = lib; then
-	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
-	  else
-	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
-	  fi
-	  for searchdir in $searchdirs; do
-	    for search_ext in .la $std_shrext .so .a; do
-	      # Search the libtool library
-	      lib="$searchdir/lib${name}${search_ext}"
-	      if test -f "$lib"; then
-		if test "$search_ext" = ".la"; then
-		  found=yes
-		else
-		  found=no
-		fi
-		break 2
-	      fi
-	    done
-	  done
-	  if test "$found" != yes; then
-	    # deplib doesn't seem to be a libtool library
-	    if test "$linkmode,$pass" = "prog,link"; then
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    else
-	      deplibs="$deplib $deplibs"
-	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-	    fi
-	    continue
-	  else # deplib is a libtool library
-	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
-	    # We need to do some special things here, and not later.
-	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-	      case " $predeps $postdeps " in
-	      *" $deplib "*)
-		if func_lalib_p "$lib"; then
-		  library_names=
-		  old_library=
-		  func_source "$lib"
-		  for l in $old_library $library_names; do
-		    ll="$l"
-		  done
-		  if test "X$ll" = "X$old_library" ; then # only static version available
-		    found=no
-		    func_dirname "$lib" "" "."
-		    ladir="$func_dirname_result"
-		    lib=$ladir/$old_library
-		    if test "$linkmode,$pass" = "prog,link"; then
-		      compile_deplibs="$deplib $compile_deplibs"
-		      finalize_deplibs="$deplib $finalize_deplibs"
-		    else
-		      deplibs="$deplib $deplibs"
-		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-		    fi
-		    continue
-		  fi
-		fi
-		;;
-	      *) ;;
-	      esac
-	    fi
-	  fi
-	  ;; # -l
-	*.ltframework)
-	  if test "$linkmode,$pass" = "prog,link"; then
-	    compile_deplibs="$deplib $compile_deplibs"
-	    finalize_deplibs="$deplib $finalize_deplibs"
-	  else
-	    deplibs="$deplib $deplibs"
-	    if test "$linkmode" = lib ; then
-		case "$new_inherited_linker_flags " in
-		    *" $deplib "*) ;;
-		    * ) func_append new_inherited_linker_flags " $deplib" ;;
-		esac
-	    fi
-	  fi
-	  continue
-	  ;;
-	-L*)
-	  case $linkmode in
-	  lib)
-	    deplibs="$deplib $deplibs"
-	    test "$pass" = conv && continue
-	    newdependency_libs="$deplib $newdependency_libs"
-	    func_stripname '-L' '' "$deplib"
-	    func_resolve_sysroot "$func_stripname_result"
-	    func_append newlib_search_path " $func_resolve_sysroot_result"
-	    ;;
-	  prog)
-	    if test "$pass" = conv; then
-	      deplibs="$deplib $deplibs"
-	      continue
-	    fi
-	    if test "$pass" = scan; then
-	      deplibs="$deplib $deplibs"
-	    else
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    fi
-	    func_stripname '-L' '' "$deplib"
-	    func_resolve_sysroot "$func_stripname_result"
-	    func_append newlib_search_path " $func_resolve_sysroot_result"
-	    ;;
-	  *)
-	    func_warning "\`-L' is ignored for archives/objects"
-	    ;;
-	  esac # linkmode
-	  continue
-	  ;; # -L
-	-R*)
-	  if test "$pass" = link; then
-	    func_stripname '-R' '' "$deplib"
-	    func_resolve_sysroot "$func_stripname_result"
-	    dir=$func_resolve_sysroot_result
-	    # Make sure the xrpath contains only unique directories.
-	    case "$xrpath " in
-	    *" $dir "*) ;;
-	    *) func_append xrpath " $dir" ;;
-	    esac
-	  fi
-	  deplibs="$deplib $deplibs"
-	  continue
-	  ;;
-	*.la)
-	  func_resolve_sysroot "$deplib"
-	  lib=$func_resolve_sysroot_result
-	  ;;
-	*.$libext)
-	  if test "$pass" = conv; then
-	    deplibs="$deplib $deplibs"
-	    continue
-	  fi
-	  case $linkmode in
-	  lib)
-	    # Linking convenience modules into shared libraries is allowed,
-	    # but linking other static libraries is non-portable.
-	    case " $dlpreconveniencelibs " in
-	    *" $deplib "*) ;;
-	    *)
-	      valid_a_lib=no
-	      case $deplibs_check_method in
-		match_pattern*)
-		  set dummy $deplibs_check_method; shift
-		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
-		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
-		    | $EGREP "$match_pattern_regex" > /dev/null; then
-		    valid_a_lib=yes
-		  fi
-		;;
-		pass_all)
-		  valid_a_lib=yes
-		;;
-	      esac
-	      if test "$valid_a_lib" != yes; then
-		echo
-		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
-		echo "*** I have the capability to make that library automatically link in when"
-		echo "*** you link to this library.  But I can only do this if you have a"
-		echo "*** shared version of the library, which you do not appear to have"
-		echo "*** because the file extensions .$libext of this argument makes me believe"
-		echo "*** that it is just a static archive that I should not use here."
-	      else
-		echo
-		$ECHO "*** Warning: Linking the shared library $output against the"
-		$ECHO "*** static library $deplib is not portable!"
-		deplibs="$deplib $deplibs"
-	      fi
-	      ;;
-	    esac
-	    continue
-	    ;;
-	  prog)
-	    if test "$pass" != link; then
-	      deplibs="$deplib $deplibs"
-	    else
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    fi
-	    continue
-	    ;;
-	  esac # linkmode
-	  ;; # *.$libext
-	*.lo | *.$objext)
-	  if test "$pass" = conv; then
-	    deplibs="$deplib $deplibs"
-	  elif test "$linkmode" = prog; then
-	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
-	      # If there is no dlopen support or we're linking statically,
-	      # we need to preload.
-	      func_append newdlprefiles " $deplib"
-	      compile_deplibs="$deplib $compile_deplibs"
-	      finalize_deplibs="$deplib $finalize_deplibs"
-	    else
-	      func_append newdlfiles " $deplib"
-	    fi
-	  fi
-	  continue
-	  ;;
-	%DEPLIBS%)
-	  alldeplibs=yes
-	  continue
-	  ;;
-	esac # case $deplib
-
-	if test "$found" = yes || test -f "$lib"; then :
-	else
-	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
-	fi
-
-	# Check to see that this really is a libtool archive.
-	func_lalib_unsafe_p "$lib" \
-	  || func_fatal_error "\`$lib' is not a valid libtool archive"
-
-	func_dirname "$lib" "" "."
-	ladir="$func_dirname_result"
-
-	dlname=
-	dlopen=
-	dlpreopen=
-	libdir=
-	library_names=
-	old_library=
-	inherited_linker_flags=
-	# If the library was installed with an old release of libtool,
-	# it will not redefine variables installed, or shouldnotlink
-	installed=yes
-	shouldnotlink=no
-	avoidtemprpath=
-
-
-	# Read the .la file
-	func_source "$lib"
-
-	# Convert "-framework foo" to "foo.ltframework"
-	if test -n "$inherited_linker_flags"; then
-	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
-	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
-	    case " $new_inherited_linker_flags " in
-	      *" $tmp_inherited_linker_flag "*) ;;
-	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
-	    esac
-	  done
-	fi
-	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-	if test "$linkmode,$pass" = "lib,link" ||
-	   test "$linkmode,$pass" = "prog,scan" ||
-	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-	  test -n "$dlopen" && func_append dlfiles " $dlopen"
-	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
-	fi
-
-	if test "$pass" = conv; then
-	  # Only check for convenience libraries
-	  deplibs="$lib $deplibs"
-	  if test -z "$libdir"; then
-	    if test -z "$old_library"; then
-	      func_fatal_error "cannot find name of link library for \`$lib'"
-	    fi
-	    # It is a libtool convenience library, so add in its objects.
-	    func_append convenience " $ladir/$objdir/$old_library"
-	    func_append old_convenience " $ladir/$objdir/$old_library"
-	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
-	    func_fatal_error "\`$lib' is not a convenience library"
-	  fi
-	  tmp_libs=
-	  for deplib in $dependency_libs; do
-	    deplibs="$deplib $deplibs"
-	    if $opt_preserve_dup_deps ; then
-	      case "$tmp_libs " in
-	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
-	      esac
-	    fi
-	    func_append tmp_libs " $deplib"
-	  done
-	  continue
-	fi # $pass = conv
-
-
-	# Get the name of the library we link against.
-	linklib=
-	if test -n "$old_library" &&
-	   { test "$prefer_static_libs" = yes ||
-	     test "$prefer_static_libs,$installed" = "built,no"; }; then
-	  linklib=$old_library
-	else
-	  for l in $old_library $library_names; do
-	    linklib="$l"
-	  done
-	fi
-	if test -z "$linklib"; then
-	  func_fatal_error "cannot find name of link library for \`$lib'"
-	fi
-
-	# This library was specified with -dlopen.
-	if test "$pass" = dlopen; then
-	  if test -z "$libdir"; then
-	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
-	  fi
-	  if test -z "$dlname" ||
-	     test "$dlopen_support" != yes ||
-	     test "$build_libtool_libs" = no; then
-	    # If there is no dlname, no dlopen support or we're linking
-	    # statically, we need to preload.  We also need to preload any
-	    # dependent libraries so libltdl's deplib preloader doesn't
-	    # bomb out in the load deplibs phase.
-	    func_append dlprefiles " $lib $dependency_libs"
-	  else
-	    func_append newdlfiles " $lib"
-	  fi
-	  continue
-	fi # $pass = dlopen
-
-	# We need an absolute path.
-	case $ladir in
-	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
-	*)
-	  abs_ladir=`cd "$ladir" && pwd`
-	  if test -z "$abs_ladir"; then
-	    func_warning "cannot determine absolute directory name of \`$ladir'"
-	    func_warning "passing it literally to the linker, although it might fail"
-	    abs_ladir="$ladir"
-	  fi
-	  ;;
-	esac
-	func_basename "$lib"
-	laname="$func_basename_result"
-
-	# Find the relevant object directory and library name.
-	if test "X$installed" = Xyes; then
-	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-	    func_warning "library \`$lib' was moved."
-	    dir="$ladir"
-	    absdir="$abs_ladir"
-	    libdir="$abs_ladir"
-	  else
-	    dir="$lt_sysroot$libdir"
-	    absdir="$lt_sysroot$libdir"
-	  fi
-	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
-	else
-	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-	    dir="$ladir"
-	    absdir="$abs_ladir"
-	    # Remove this search path later
-	    func_append notinst_path " $abs_ladir"
-	  else
-	    dir="$ladir/$objdir"
-	    absdir="$abs_ladir/$objdir"
-	    # Remove this search path later
-	    func_append notinst_path " $abs_ladir"
-	  fi
-	fi # $installed = yes
-	func_stripname 'lib' '.la' "$laname"
-	name=$func_stripname_result
-
-	# This library was specified with -dlpreopen.
-	if test "$pass" = dlpreopen; then
-	  if test -z "$libdir" && test "$linkmode" = prog; then
-	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
-	  fi
-	  case "$host" in
-	    # special handling for platforms with PE-DLLs.
-	    *cygwin* | *mingw* | *cegcc* )
-	      # Linker will automatically link against shared library if both
-	      # static and shared are present.  Therefore, ensure we extract
-	      # symbols from the import library if a shared library is present
-	      # (otherwise, the dlopen module name will be incorrect).  We do
-	      # this by putting the import library name into $newdlprefiles.
-	      # We recover the dlopen module name by 'saving' the la file
-	      # name in a special purpose variable, and (later) extracting the
-	      # dlname from the la file.
-	      if test -n "$dlname"; then
-	        func_tr_sh "$dir/$linklib"
-	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
-	        func_append newdlprefiles " $dir/$linklib"
-	      else
-	        func_append newdlprefiles " $dir/$old_library"
-	        # Keep a list of preopened convenience libraries to check
-	        # that they are being used correctly in the link pass.
-	        test -z "$libdir" && \
-	          func_append dlpreconveniencelibs " $dir/$old_library"
-	      fi
-	    ;;
-	    * )
-	      # Prefer using a static library (so that no silly _DYNAMIC symbols
-	      # are required to link).
-	      if test -n "$old_library"; then
-	        func_append newdlprefiles " $dir/$old_library"
-	        # Keep a list of preopened convenience libraries to check
-	        # that they are being used correctly in the link pass.
-	        test -z "$libdir" && \
-	          func_append dlpreconveniencelibs " $dir/$old_library"
-	      # Otherwise, use the dlname, so that lt_dlopen finds it.
-	      elif test -n "$dlname"; then
-	        func_append newdlprefiles " $dir/$dlname"
-	      else
-	        func_append newdlprefiles " $dir/$linklib"
-	      fi
-	    ;;
-	  esac
-	fi # $pass = dlpreopen
-
-	if test -z "$libdir"; then
-	  # Link the convenience library
-	  if test "$linkmode" = lib; then
-	    deplibs="$dir/$old_library $deplibs"
-	  elif test "$linkmode,$pass" = "prog,link"; then
-	    compile_deplibs="$dir/$old_library $compile_deplibs"
-	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
-	  else
-	    deplibs="$lib $deplibs" # used for prog,scan pass
-	  fi
-	  continue
-	fi
-
-
-	if test "$linkmode" = prog && test "$pass" != link; then
-	  func_append newlib_search_path " $ladir"
-	  deplibs="$lib $deplibs"
-
-	  linkalldeplibs=no
-	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
-	     test "$build_libtool_libs" = no; then
-	    linkalldeplibs=yes
-	  fi
-
-	  tmp_libs=
-	  for deplib in $dependency_libs; do
-	    case $deplib in
-	    -L*) func_stripname '-L' '' "$deplib"
-	         func_resolve_sysroot "$func_stripname_result"
-	         func_append newlib_search_path " $func_resolve_sysroot_result"
-		 ;;
-	    esac
-	    # Need to link against all dependency_libs?
-	    if test "$linkalldeplibs" = yes; then
-	      deplibs="$deplib $deplibs"
-	    else
-	      # Need to hardcode shared library paths
-	      # or/and link against static libraries
-	      newdependency_libs="$deplib $newdependency_libs"
-	    fi
-	    if $opt_preserve_dup_deps ; then
-	      case "$tmp_libs " in
-	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
-	      esac
-	    fi
-	    func_append tmp_libs " $deplib"
-	  done # for deplib
-	  continue
-	fi # $linkmode = prog...
-
-	if test "$linkmode,$pass" = "prog,link"; then
-	  if test -n "$library_names" &&
-	     { { test "$prefer_static_libs" = no ||
-	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
-	       test -z "$old_library"; }; then
-	    # We need to hardcode the library path
-	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
-	      # Make sure the rpath contains only unique directories.
-	      case "$temp_rpath:" in
-	      *"$absdir:"*) ;;
-	      *) func_append temp_rpath "$absdir:" ;;
-	      esac
-	    fi
-
-	    # Hardcode the library path.
-	    # Skip directories that are in the system default run-time
-	    # search path.
-	    case " $sys_lib_dlsearch_path " in
-	    *" $absdir "*) ;;
-	    *)
-	      case "$compile_rpath " in
-	      *" $absdir "*) ;;
-	      *) func_append compile_rpath " $absdir" ;;
-	      esac
-	      ;;
-	    esac
-	    case " $sys_lib_dlsearch_path " in
-	    *" $libdir "*) ;;
-	    *)
-	      case "$finalize_rpath " in
-	      *" $libdir "*) ;;
-	      *) func_append finalize_rpath " $libdir" ;;
-	      esac
-	      ;;
-	    esac
-	  fi # $linkmode,$pass = prog,link...
-
-	  if test "$alldeplibs" = yes &&
-	     { test "$deplibs_check_method" = pass_all ||
-	       { test "$build_libtool_libs" = yes &&
-		 test -n "$library_names"; }; }; then
-	    # We only need to search for static libraries
-	    continue
-	  fi
-	fi
-
-	link_static=no # Whether the deplib will be linked statically
-	use_static_libs=$prefer_static_libs
-	if test "$use_static_libs" = built && test "$installed" = yes; then
-	  use_static_libs=no
-	fi
-	if test -n "$library_names" &&
-	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
-	  case $host in
-	  *cygwin* | *mingw* | *cegcc*)
-	      # No point in relinking DLLs because paths are not encoded
-	      func_append notinst_deplibs " $lib"
-	      need_relink=no
-	    ;;
-	  *)
-	    if test "$installed" = no; then
-	      func_append notinst_deplibs " $lib"
-	      need_relink=yes
-	    fi
-	    ;;
-	  esac
-	  # This is a shared library
-
-	  # Warn about portability, can't link against -module's on some
-	  # systems (darwin).  Don't bleat about dlopened modules though!
-	  dlopenmodule=""
-	  for dlpremoduletest in $dlprefiles; do
-	    if test "X$dlpremoduletest" = "X$lib"; then
-	      dlopenmodule="$dlpremoduletest"
-	      break
-	    fi
-	  done
-	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
-	    echo
-	    if test "$linkmode" = prog; then
-	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
-	    else
-	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
-	    fi
-	    $ECHO "*** $linklib is not portable!"
-	  fi
-	  if test "$linkmode" = lib &&
-	     test "$hardcode_into_libs" = yes; then
-	    # Hardcode the library path.
-	    # Skip directories that are in the system default run-time
-	    # search path.
-	    case " $sys_lib_dlsearch_path " in
-	    *" $absdir "*) ;;
-	    *)
-	      case "$compile_rpath " in
-	      *" $absdir "*) ;;
-	      *) func_append compile_rpath " $absdir" ;;
-	      esac
-	      ;;
-	    esac
-	    case " $sys_lib_dlsearch_path " in
-	    *" $libdir "*) ;;
-	    *)
-	      case "$finalize_rpath " in
-	      *" $libdir "*) ;;
-	      *) func_append finalize_rpath " $libdir" ;;
-	      esac
-	      ;;
-	    esac
-	  fi
-
-	  if test -n "$old_archive_from_expsyms_cmds"; then
-	    # figure out the soname
-	    set dummy $library_names
-	    shift
-	    realname="$1"
-	    shift
-	    libname=`eval "\\$ECHO \"$libname_spec\""`
-	    # use dlname if we got it. it's perfectly good, no?
-	    if test -n "$dlname"; then
-	      soname="$dlname"
-	    elif test -n "$soname_spec"; then
-	      # bleh windows
-	      case $host in
-	      *cygwin* | mingw* | *cegcc*)
-	        func_arith $current - $age
-		major=$func_arith_result
-		versuffix="-$major"
-		;;
-	      esac
-	      eval soname=\"$soname_spec\"
-	    else
-	      soname="$realname"
-	    fi
-
-	    # Make a new name for the extract_expsyms_cmds to use
-	    soroot="$soname"
-	    func_basename "$soroot"
-	    soname="$func_basename_result"
-	    func_stripname 'lib' '.dll' "$soname"
-	    newlib=libimp-$func_stripname_result.a
-
-	    # If the library has no export list, then create one now
-	    if test -f "$output_objdir/$soname-def"; then :
-	    else
-	      func_verbose "extracting exported symbol list from \`$soname'"
-	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
-	    fi
-
-	    # Create $newlib
-	    if test -f "$output_objdir/$newlib"; then :; else
-	      func_verbose "generating import library for \`$soname'"
-	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
-	    fi
-	    # make sure the library variables are pointing to the new library
-	    dir=$output_objdir
-	    linklib=$newlib
-	  fi # test -n "$old_archive_from_expsyms_cmds"
-
-	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
-	    add_shlibpath=
-	    add_dir=
-	    add=
-	    lib_linked=yes
-	    case $hardcode_action in
-	    immediate | unsupported)
-	      if test "$hardcode_direct" = no; then
-		add="$dir/$linklib"
-		case $host in
-		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
-		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
-		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
-		    *-*-unixware7*) add_dir="-L$dir" ;;
-		  *-*-darwin* )
-		    # if the lib is a (non-dlopened) module then we can not
-		    # link against it, someone is ignoring the earlier warnings
-		    if /usr/bin/file -L $add 2> /dev/null |
-			 $GREP ": [^:]* bundle" >/dev/null ; then
-		      if test "X$dlopenmodule" != "X$lib"; then
-			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
-			if test -z "$old_library" ; then
-			  echo
-			  echo "*** And there doesn't seem to be a static archive available"
-			  echo "*** The link will probably fail, sorry"
-			else
-			  add="$dir/$old_library"
-			fi
-		      elif test -n "$old_library"; then
-			add="$dir/$old_library"
-		      fi
-		    fi
-		esac
-	      elif test "$hardcode_minus_L" = no; then
-		case $host in
-		*-*-sunos*) add_shlibpath="$dir" ;;
-		esac
-		add_dir="-L$dir"
-		add="-l$name"
-	      elif test "$hardcode_shlibpath_var" = no; then
-		add_shlibpath="$dir"
-		add="-l$name"
-	      else
-		lib_linked=no
-	      fi
-	      ;;
-	    relink)
-	      if test "$hardcode_direct" = yes &&
-	         test "$hardcode_direct_absolute" = no; then
-		add="$dir/$linklib"
-	      elif test "$hardcode_minus_L" = yes; then
-		add_dir="-L$absdir"
-		# Try looking first in the location we're being installed to.
-		if test -n "$inst_prefix_dir"; then
-		  case $libdir in
-		    [\\/]*)
-		      func_append add_dir " -L$inst_prefix_dir$libdir"
-		      ;;
-		  esac
-		fi
-		add="-l$name"
-	      elif test "$hardcode_shlibpath_var" = yes; then
-		add_shlibpath="$dir"
-		add="-l$name"
-	      else
-		lib_linked=no
-	      fi
-	      ;;
-	    *) lib_linked=no ;;
-	    esac
-
-	    if test "$lib_linked" != yes; then
-	      func_fatal_configuration "unsupported hardcode properties"
-	    fi
-
-	    if test -n "$add_shlibpath"; then
-	      case :$compile_shlibpath: in
-	      *":$add_shlibpath:"*) ;;
-	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
-	      esac
-	    fi
-	    if test "$linkmode" = prog; then
-	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
-	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
-	    else
-	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
-	      test -n "$add" && deplibs="$add $deplibs"
-	      if test "$hardcode_direct" != yes &&
-		 test "$hardcode_minus_L" != yes &&
-		 test "$hardcode_shlibpath_var" = yes; then
-		case :$finalize_shlibpath: in
-		*":$libdir:"*) ;;
-		*) func_append finalize_shlibpath "$libdir:" ;;
-		esac
-	      fi
-	    fi
-	  fi
-
-	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
-	    add_shlibpath=
-	    add_dir=
-	    add=
-	    # Finalize command for both is simple: just hardcode it.
-	    if test "$hardcode_direct" = yes &&
-	       test "$hardcode_direct_absolute" = no; then
-	      add="$libdir/$linklib"
-	    elif test "$hardcode_minus_L" = yes; then
-	      add_dir="-L$libdir"
-	      add="-l$name"
-	    elif test "$hardcode_shlibpath_var" = yes; then
-	      case :$finalize_shlibpath: in
-	      *":$libdir:"*) ;;
-	      *) func_append finalize_shlibpath "$libdir:" ;;
-	      esac
-	      add="-l$name"
-	    elif test "$hardcode_automatic" = yes; then
-	      if test -n "$inst_prefix_dir" &&
-		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
-		add="$inst_prefix_dir$libdir/$linklib"
-	      else
-		add="$libdir/$linklib"
-	      fi
-	    else
-	      # We cannot seem to hardcode it, guess we'll fake it.
-	      add_dir="-L$libdir"
-	      # Try looking first in the location we're being installed to.
-	      if test -n "$inst_prefix_dir"; then
-		case $libdir in
-		  [\\/]*)
-		    func_append add_dir " -L$inst_prefix_dir$libdir"
-		    ;;
-		esac
-	      fi
-	      add="-l$name"
-	    fi
-
-	    if test "$linkmode" = prog; then
-	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
-	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
-	    else
-	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
-	      test -n "$add" && deplibs="$add $deplibs"
-	    fi
-	  fi
-	elif test "$linkmode" = prog; then
-	  # Here we assume that one of hardcode_direct or hardcode_minus_L
-	  # is not unsupported.  This is valid on all known static and
-	  # shared platforms.
-	  if test "$hardcode_direct" != unsupported; then
-	    test -n "$old_library" && linklib="$old_library"
-	    compile_deplibs="$dir/$linklib $compile_deplibs"
-	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
-	  else
-	    compile_deplibs="-l$name -L$dir $compile_deplibs"
-	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
-	  fi
-	elif test "$build_libtool_libs" = yes; then
-	  # Not a shared library
-	  if test "$deplibs_check_method" != pass_all; then
-	    # We're trying link a shared library against a static one
-	    # but the system doesn't support it.
-
-	    # Just print a warning and add the library to dependency_libs so
-	    # that the program can be linked against the static library.
-	    echo
-	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
-	    echo "*** I have the capability to make that library automatically link in when"
-	    echo "*** you link to this library.  But I can only do this if you have a"
-	    echo "*** shared version of the library, which you do not appear to have."
-	    if test "$module" = yes; then
-	      echo "*** But as you try to build a module library, libtool will still create "
-	      echo "*** a static module, that should work as long as the dlopening application"
-	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
-	      if test -z "$global_symbol_pipe"; then
-		echo
-		echo "*** However, this would only work if libtool was able to extract symbol"
-		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-		echo "*** not find such a program.  So, this module is probably useless."
-		echo "*** \`nm' from GNU binutils and a full rebuild may help."
-	      fi
-	      if test "$build_old_libs" = no; then
-		build_libtool_libs=module
-		build_old_libs=yes
-	      else
-		build_libtool_libs=no
-	      fi
-	    fi
-	  else
-	    deplibs="$dir/$old_library $deplibs"
-	    link_static=yes
-	  fi
-	fi # link shared/static library?
-
-	if test "$linkmode" = lib; then
-	  if test -n "$dependency_libs" &&
-	     { test "$hardcode_into_libs" != yes ||
-	       test "$build_old_libs" = yes ||
-	       test "$link_static" = yes; }; then
-	    # Extract -R from dependency_libs
-	    temp_deplibs=
-	    for libdir in $dependency_libs; do
-	      case $libdir in
-	      -R*) func_stripname '-R' '' "$libdir"
-	           temp_xrpath=$func_stripname_result
-		   case " $xrpath " in
-		   *" $temp_xrpath "*) ;;
-		   *) func_append xrpath " $temp_xrpath";;
-		   esac;;
-	      *) func_append temp_deplibs " $libdir";;
-	      esac
-	    done
-	    dependency_libs="$temp_deplibs"
-	  fi
-
-	  func_append newlib_search_path " $absdir"
-	  # Link against this library
-	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
-	  # ... and its dependency_libs
-	  tmp_libs=
-	  for deplib in $dependency_libs; do
-	    newdependency_libs="$deplib $newdependency_libs"
-	    case $deplib in
-              -L*) func_stripname '-L' '' "$deplib"
-                   func_resolve_sysroot "$func_stripname_result";;
-              *) func_resolve_sysroot "$deplib" ;;
-            esac
-	    if $opt_preserve_dup_deps ; then
-	      case "$tmp_libs " in
-	      *" $func_resolve_sysroot_result "*)
-                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
-	      esac
-	    fi
-	    func_append tmp_libs " $func_resolve_sysroot_result"
-	  done
-
-	  if test "$link_all_deplibs" != no; then
-	    # Add the search paths of all dependency libraries
-	    for deplib in $dependency_libs; do
-	      path=
-	      case $deplib in
-	      -L*) path="$deplib" ;;
-	      *.la)
-	        func_resolve_sysroot "$deplib"
-	        deplib=$func_resolve_sysroot_result
-	        func_dirname "$deplib" "" "."
-		dir=$func_dirname_result
-		# We need an absolute path.
-		case $dir in
-		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
-		*)
-		  absdir=`cd "$dir" && pwd`
-		  if test -z "$absdir"; then
-		    func_warning "cannot determine absolute directory name of \`$dir'"
-		    absdir="$dir"
-		  fi
-		  ;;
-		esac
-		if $GREP "^installed=no" $deplib > /dev/null; then
-		case $host in
-		*-*-darwin*)
-		  depdepl=
-		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
-		  if test -n "$deplibrary_names" ; then
-		    for tmp in $deplibrary_names ; do
-		      depdepl=$tmp
-		    done
-		    if test -f "$absdir/$objdir/$depdepl" ; then
-		      depdepl="$absdir/$objdir/$depdepl"
-		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
-                      if test -z "$darwin_install_name"; then
-                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
-                      fi
-		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
-		      path=
-		    fi
-		  fi
-		  ;;
-		*)
-		  path="-L$absdir/$objdir"
-		  ;;
-		esac
-		else
-		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-		  test -z "$libdir" && \
-		    func_fatal_error "\`$deplib' is not a valid libtool archive"
-		  test "$absdir" != "$libdir" && \
-		    func_warning "\`$deplib' seems to be moved"
-
-		  path="-L$absdir"
-		fi
-		;;
-	      esac
-	      case " $deplibs " in
-	      *" $path "*) ;;
-	      *) deplibs="$path $deplibs" ;;
-	      esac
-	    done
-	  fi # link_all_deplibs != no
-	fi # linkmode = lib
-      done # for deplib in $libs
-      if test "$pass" = link; then
-	if test "$linkmode" = "prog"; then
-	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
-	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
-	else
-	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-	fi
-      fi
-      dependency_libs="$newdependency_libs"
-      if test "$pass" = dlpreopen; then
-	# Link the dlpreopened libraries before other libraries
-	for deplib in $save_deplibs; do
-	  deplibs="$deplib $deplibs"
-	done
-      fi
-      if test "$pass" != dlopen; then
-	if test "$pass" != conv; then
-	  # Make sure lib_search_path contains only unique directories.
-	  lib_search_path=
-	  for dir in $newlib_search_path; do
-	    case "$lib_search_path " in
-	    *" $dir "*) ;;
-	    *) func_append lib_search_path " $dir" ;;
-	    esac
-	  done
-	  newlib_search_path=
-	fi
-
-	if test "$linkmode,$pass" != "prog,link"; then
-	  vars="deplibs"
-	else
-	  vars="compile_deplibs finalize_deplibs"
-	fi
-	for var in $vars dependency_libs; do
-	  # Add libraries to $var in reverse order
-	  eval tmp_libs=\"\$$var\"
-	  new_libs=
-	  for deplib in $tmp_libs; do
-	    # FIXME: Pedantically, this is the right thing to do, so
-	    #        that some nasty dependency loop isn't accidentally
-	    #        broken:
-	    #new_libs="$deplib $new_libs"
-	    # Pragmatically, this seems to cause very few problems in
-	    # practice:
-	    case $deplib in
-	    -L*) new_libs="$deplib $new_libs" ;;
-	    -R*) ;;
-	    *)
-	      # And here is the reason: when a library appears more
-	      # than once as an explicit dependence of a library, or
-	      # is implicitly linked in more than once by the
-	      # compiler, it is considered special, and multiple
-	      # occurrences thereof are not removed.  Compare this
-	      # with having the same library being listed as a
-	      # dependency of multiple other libraries: in this case,
-	      # we know (pedantically, we assume) the library does not
-	      # need to be listed more than once, so we keep only the
-	      # last copy.  This is not always right, but it is rare
-	      # enough that we require users that really mean to play
-	      # such unportable linking tricks to link the library
-	      # using -Wl,-lname, so that libtool does not consider it
-	      # for duplicate removal.
-	      case " $specialdeplibs " in
-	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
-	      *)
-		case " $new_libs " in
-		*" $deplib "*) ;;
-		*) new_libs="$deplib $new_libs" ;;
-		esac
-		;;
-	      esac
-	      ;;
-	    esac
-	  done
-	  tmp_libs=
-	  for deplib in $new_libs; do
-	    case $deplib in
-	    -L*)
-	      case " $tmp_libs " in
-	      *" $deplib "*) ;;
-	      *) func_append tmp_libs " $deplib" ;;
-	      esac
-	      ;;
-	    *) func_append tmp_libs " $deplib" ;;
-	    esac
-	  done
-	  eval $var=\"$tmp_libs\"
-	done # for var
-      fi
-      # Last step: remove runtime libs from dependency_libs
-      # (they stay in deplibs)
-      tmp_libs=
-      for i in $dependency_libs ; do
-	case " $predeps $postdeps $compiler_lib_search_path " in
-	*" $i "*)
-	  i=""
-	  ;;
-	esac
-	if test -n "$i" ; then
-	  func_append tmp_libs " $i"
-	fi
-      done
-      dependency_libs=$tmp_libs
-    done # for pass
-    if test "$linkmode" = prog; then
-      dlfiles="$newdlfiles"
-    fi
-    if test "$linkmode" = prog || test "$linkmode" = lib; then
-      dlprefiles="$newdlprefiles"
-    fi
-
-    case $linkmode in
-    oldlib)
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	func_warning "\`-dlopen' is ignored for archives"
-      fi
-
-      case " $deplibs" in
-      *\ -l* | *\ -L*)
-	func_warning "\`-l' and \`-L' are ignored for archives" ;;
-      esac
-
-      test -n "$rpath" && \
-	func_warning "\`-rpath' is ignored for archives"
-
-      test -n "$xrpath" && \
-	func_warning "\`-R' is ignored for archives"
-
-      test -n "$vinfo" && \
-	func_warning "\`-version-info/-version-number' is ignored for archives"
-
-      test -n "$release" && \
-	func_warning "\`-release' is ignored for archives"
-
-      test -n "$export_symbols$export_symbols_regex" && \
-	func_warning "\`-export-symbols' is ignored for archives"
-
-      # Now set the variables for building old libraries.
-      build_libtool_libs=no
-      oldlibs="$output"
-      func_append objs "$old_deplibs"
-      ;;
-
-    lib)
-      # Make sure we only generate libraries of the form `libNAME.la'.
-      case $outputname in
-      lib*)
-	func_stripname 'lib' '.la' "$outputname"
-	name=$func_stripname_result
-	eval shared_ext=\"$shrext_cmds\"
-	eval libname=\"$libname_spec\"
-	;;
-      *)
-	test "$module" = no && \
-	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
-
-	if test "$need_lib_prefix" != no; then
-	  # Add the "lib" prefix for modules if required
-	  func_stripname '' '.la' "$outputname"
-	  name=$func_stripname_result
-	  eval shared_ext=\"$shrext_cmds\"
-	  eval libname=\"$libname_spec\"
-	else
-	  func_stripname '' '.la' "$outputname"
-	  libname=$func_stripname_result
-	fi
-	;;
-      esac
-
-      if test -n "$objs"; then
-	if test "$deplibs_check_method" != pass_all; then
-	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
-	else
-	  echo
-	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
-	  $ECHO "*** objects $objs is not portable!"
-	  func_append libobjs " $objs"
-	fi
-      fi
-
-      test "$dlself" != no && \
-	func_warning "\`-dlopen self' is ignored for libtool libraries"
-
-      set dummy $rpath
-      shift
-      test "$#" -gt 1 && \
-	func_warning "ignoring multiple \`-rpath's for a libtool library"
-
-      install_libdir="$1"
-
-      oldlibs=
-      if test -z "$rpath"; then
-	if test "$build_libtool_libs" = yes; then
-	  # Building a libtool convenience library.
-	  # Some compilers have problems with a `.al' extension so
-	  # convenience libraries should have the same extension an
-	  # archive normally would.
-	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
-	  build_libtool_libs=convenience
-	  build_old_libs=yes
-	fi
-
-	test -n "$vinfo" && \
-	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
-
-	test -n "$release" && \
-	  func_warning "\`-release' is ignored for convenience libraries"
-      else
-
-	# Parse the version information argument.
-	save_ifs="$IFS"; IFS=':'
-	set dummy $vinfo 0 0 0
-	shift
-	IFS="$save_ifs"
-
-	test -n "$7" && \
-	  func_fatal_help "too many parameters to \`-version-info'"
-
-	# convert absolute version numbers to libtool ages
-	# this retains compatibility with .la files and attempts
-	# to make the code below a bit more comprehensible
-
-	case $vinfo_number in
-	yes)
-	  number_major="$1"
-	  number_minor="$2"
-	  number_revision="$3"
-	  #
-	  # There are really only two kinds -- those that
-	  # use the current revision as the major version
-	  # and those that subtract age and use age as
-	  # a minor version.  But, then there is irix
-	  # which has an extra 1 added just for fun
-	  #
-	  case $version_type in
-	  # correct linux to gnu/linux during the next big refactor
-	  darwin|linux|osf|windows|none)
-	    func_arith $number_major + $number_minor
-	    current=$func_arith_result
-	    age="$number_minor"
-	    revision="$number_revision"
-	    ;;
-	  freebsd-aout|freebsd-elf|qnx|sunos)
-	    current="$number_major"
-	    revision="$number_minor"
-	    age="0"
-	    ;;
-	  irix|nonstopux)
-	    func_arith $number_major + $number_minor
-	    current=$func_arith_result
-	    age="$number_minor"
-	    revision="$number_minor"
-	    lt_irix_increment=no
-	    ;;
-	  esac
-	  ;;
-	no)
-	  current="$1"
-	  revision="$2"
-	  age="$3"
-	  ;;
-	esac
-
-	# Check that each of the things are valid numbers.
-	case $current in
-	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
-	*)
-	  func_error "CURRENT \`$current' must be a nonnegative integer"
-	  func_fatal_error "\`$vinfo' is not valid version information"
-	  ;;
-	esac
-
-	case $revision in
-	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
-	*)
-	  func_error "REVISION \`$revision' must be a nonnegative integer"
-	  func_fatal_error "\`$vinfo' is not valid version information"
-	  ;;
-	esac
-
-	case $age in
-	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
-	*)
-	  func_error "AGE \`$age' must be a nonnegative integer"
-	  func_fatal_error "\`$vinfo' is not valid version information"
-	  ;;
-	esac
-
-	if test "$age" -gt "$current"; then
-	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
-	  func_fatal_error "\`$vinfo' is not valid version information"
-	fi
-
-	# Calculate the version variables.
-	major=
-	versuffix=
-	verstring=
-	case $version_type in
-	none) ;;
-
-	darwin)
-	  # Like Linux, but with the current version available in
-	  # verstring for coding it into the library header
-	  func_arith $current - $age
-	  major=.$func_arith_result
-	  versuffix="$major.$age.$revision"
-	  # Darwin ld doesn't like 0 for these options...
-	  func_arith $current + 1
-	  minor_current=$func_arith_result
-	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
-	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
-	  ;;
-
-	freebsd-aout)
-	  major=".$current"
-	  versuffix=".$current.$revision";
-	  ;;
-
-	freebsd-elf)
-	  major=".$current"
-	  versuffix=".$current"
-	  ;;
-
-	irix | nonstopux)
-	  if test "X$lt_irix_increment" = "Xno"; then
-	    func_arith $current - $age
-	  else
-	    func_arith $current - $age + 1
-	  fi
-	  major=$func_arith_result
-
-	  case $version_type in
-	    nonstopux) verstring_prefix=nonstopux ;;
-	    *)         verstring_prefix=sgi ;;
-	  esac
-	  verstring="$verstring_prefix$major.$revision"
-
-	  # Add in all the interfaces that we are compatible with.
-	  loop=$revision
-	  while test "$loop" -ne 0; do
-	    func_arith $revision - $loop
-	    iface=$func_arith_result
-	    func_arith $loop - 1
-	    loop=$func_arith_result
-	    verstring="$verstring_prefix$major.$iface:$verstring"
-	  done
-
-	  # Before this point, $major must not contain `.'.
-	  major=.$major
-	  versuffix="$major.$revision"
-	  ;;
-
-	linux) # correct to gnu/linux during the next big refactor
-	  func_arith $current - $age
-	  major=.$func_arith_result
-	  versuffix="$major.$age.$revision"
-	  ;;
-
-	osf)
-	  func_arith $current - $age
-	  major=.$func_arith_result
-	  versuffix=".$current.$age.$revision"
-	  verstring="$current.$age.$revision"
-
-	  # Add in all the interfaces that we are compatible with.
-	  loop=$age
-	  while test "$loop" -ne 0; do
-	    func_arith $current - $loop
-	    iface=$func_arith_result
-	    func_arith $loop - 1
-	    loop=$func_arith_result
-	    verstring="$verstring:${iface}.0"
-	  done
-
-	  # Make executables depend on our current version.
-	  func_append verstring ":${current}.0"
-	  ;;
-
-	qnx)
-	  major=".$current"
-	  versuffix=".$current"
-	  ;;
-
-	sunos)
-	  major=".$current"
-	  versuffix=".$current.$revision"
-	  ;;
-
-	windows)
-	  # Use '-' rather than '.', since we only want one
-	  # extension on DOS 8.3 filesystems.
-	  func_arith $current - $age
-	  major=$func_arith_result
-	  versuffix="-$major"
-	  ;;
-
-	*)
-	  func_fatal_configuration "unknown library version type \`$version_type'"
-	  ;;
-	esac
-
-	# Clear the version info if we defaulted, and they specified a release.
-	if test -z "$vinfo" && test -n "$release"; then
-	  major=
-	  case $version_type in
-	  darwin)
-	    # we can't check for "0.0" in archive_cmds due to quoting
-	    # problems, so we reset it completely
-	    verstring=
-	    ;;
-	  *)
-	    verstring="0.0"
-	    ;;
-	  esac
-	  if test "$need_version" = no; then
-	    versuffix=
-	  else
-	    versuffix=".0.0"
-	  fi
-	fi
-
-	# Remove version info from name if versioning should be avoided
-	if test "$avoid_version" = yes && test "$need_version" = no; then
-	  major=
-	  versuffix=
-	  verstring=""
-	fi
-
-	# Check to see if the archive will have undefined symbols.
-	if test "$allow_undefined" = yes; then
-	  if test "$allow_undefined_flag" = unsupported; then
-	    func_warning "undefined symbols not allowed in $host shared libraries"
-	    build_libtool_libs=no
-	    build_old_libs=yes
-	  fi
-	else
-	  # Don't allow undefined symbols.
-	  allow_undefined_flag="$no_undefined_flag"
-	fi
-
-      fi
-
-      func_generate_dlsyms "$libname" "$libname" "yes"
-      func_append libobjs " $symfileobj"
-      test "X$libobjs" = "X " && libobjs=
-
-      if test "$opt_mode" != relink; then
-	# Remove our outputs, but don't remove object files since they
-	# may have been created when compiling PIC objects.
-	removelist=
-	tempremovelist=`$ECHO "$output_objdir/*"`
-	for p in $tempremovelist; do
-	  case $p in
-	    *.$objext | *.gcno)
-	       ;;
-	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
-	       if test "X$precious_files_regex" != "X"; then
-		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
-		 then
-		   continue
-		 fi
-	       fi
-	       func_append removelist " $p"
-	       ;;
-	    *) ;;
-	  esac
-	done
-	test -n "$removelist" && \
-	  func_show_eval "${RM}r \$removelist"
-      fi
-
-      # Now set the variables for building old libraries.
-      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-	func_append oldlibs " $output_objdir/$libname.$libext"
-
-	# Transform .lo files to .o files.
-	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
-      fi
-
-      # Eliminate all temporary directories.
-      #for path in $notinst_path; do
-      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
-      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
-      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
-      #done
-
-      if test -n "$xrpath"; then
-	# If the user specified any rpath flags, then add them.
-	temp_xrpath=
-	for libdir in $xrpath; do
-	  func_replace_sysroot "$libdir"
-	  func_append temp_xrpath " -R$func_replace_sysroot_result"
-	  case "$finalize_rpath " in
-	  *" $libdir "*) ;;
-	  *) func_append finalize_rpath " $libdir" ;;
-	  esac
-	done
-	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
-	  dependency_libs="$temp_xrpath $dependency_libs"
-	fi
-      fi
-
-      # Make sure dlfiles contains only unique files that won't be dlpreopened
-      old_dlfiles="$dlfiles"
-      dlfiles=
-      for lib in $old_dlfiles; do
-	case " $dlprefiles $dlfiles " in
-	*" $lib "*) ;;
-	*) func_append dlfiles " $lib" ;;
-	esac
-      done
-
-      # Make sure dlprefiles contains only unique files
-      old_dlprefiles="$dlprefiles"
-      dlprefiles=
-      for lib in $old_dlprefiles; do
-	case "$dlprefiles " in
-	*" $lib "*) ;;
-	*) func_append dlprefiles " $lib" ;;
-	esac
-      done
-
-      if test "$build_libtool_libs" = yes; then
-	if test -n "$rpath"; then
-	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
-	    # these systems don't actually have a c library (as such)!
-	    ;;
-	  *-*-rhapsody* | *-*-darwin1.[012])
-	    # Rhapsody C library is in the System framework
-	    func_append deplibs " System.ltframework"
-	    ;;
-	  *-*-netbsd*)
-	    # Don't link with libc until the a.out ld.so is fixed.
-	    ;;
-	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-	    # Do not include libc due to us having libc/libc_r.
-	    ;;
-	  *-*-sco3.2v5* | *-*-sco5v6*)
-	    # Causes problems with __ctype
-	    ;;
-	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
-	    # Compiler inserts libc in the correct place for threads to work
-	    ;;
-	  *)
-	    # Add libc to deplibs on all other systems if necessary.
-	    if test "$build_libtool_need_lc" = "yes"; then
-	      func_append deplibs " -lc"
-	    fi
-	    ;;
-	  esac
-	fi
-
-	# Transform deplibs into only deplibs that can be linked in shared.
-	name_save=$name
-	libname_save=$libname
-	release_save=$release
-	versuffix_save=$versuffix
-	major_save=$major
-	# I'm not sure if I'm treating the release correctly.  I think
-	# release should show up in the -l (ie -lgmp5) so we don't want to
-	# add it in twice.  Is that correct?
-	release=""
-	versuffix=""
-	major=""
-	newdeplibs=
-	droppeddeps=no
-	case $deplibs_check_method in
-	pass_all)
-	  # Don't check for shared/static.  Everything works.
-	  # This might be a little naive.  We might want to check
-	  # whether the library exists or not.  But this is on
-	  # osf3 & osf4 and I'm not really sure... Just
-	  # implementing what was already the behavior.
-	  newdeplibs=$deplibs
-	  ;;
-	test_compile)
-	  # This code stresses the "libraries are programs" paradigm to its
-	  # limits. Maybe even breaks it.  We compile a program, linking it
-	  # against the deplibs as a proxy for the library.  Then we can check
-	  # whether they linked in statically or dynamically with ldd.
-	  $opt_dry_run || $RM conftest.c
-	  cat > conftest.c <<EOF
-	  int main() { return 0; }
-EOF
-	  $opt_dry_run || $RM conftest
-	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
-	    ldd_output=`ldd conftest`
-	    for i in $deplibs; do
-	      case $i in
-	      -l*)
-		func_stripname -l '' "$i"
-		name=$func_stripname_result
-		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		  case " $predeps $postdeps " in
-		  *" $i "*)
-		    func_append newdeplibs " $i"
-		    i=""
-		    ;;
-		  esac
-		fi
-		if test -n "$i" ; then
-		  libname=`eval "\\$ECHO \"$libname_spec\""`
-		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
-		  set dummy $deplib_matches; shift
-		  deplib_match=$1
-		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		    func_append newdeplibs " $i"
-		  else
-		    droppeddeps=yes
-		    echo
-		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-		    echo "*** I have the capability to make that library automatically link in when"
-		    echo "*** you link to this library.  But I can only do this if you have a"
-		    echo "*** shared version of the library, which I believe you do not have"
-		    echo "*** because a test_compile did reveal that the linker did not use it for"
-		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
-		  fi
-		fi
-		;;
-	      *)
-		func_append newdeplibs " $i"
-		;;
-	      esac
-	    done
-	  else
-	    # Error occurred in the first compile.  Let's try to salvage
-	    # the situation: Compile a separate program for each library.
-	    for i in $deplibs; do
-	      case $i in
-	      -l*)
-		func_stripname -l '' "$i"
-		name=$func_stripname_result
-		$opt_dry_run || $RM conftest
-		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
-		  ldd_output=`ldd conftest`
-		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		    case " $predeps $postdeps " in
-		    *" $i "*)
-		      func_append newdeplibs " $i"
-		      i=""
-		      ;;
-		    esac
-		  fi
-		  if test -n "$i" ; then
-		    libname=`eval "\\$ECHO \"$libname_spec\""`
-		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
-		    set dummy $deplib_matches; shift
-		    deplib_match=$1
-		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		      func_append newdeplibs " $i"
-		    else
-		      droppeddeps=yes
-		      echo
-		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-		      echo "*** I have the capability to make that library automatically link in when"
-		      echo "*** you link to this library.  But I can only do this if you have a"
-		      echo "*** shared version of the library, which you do not appear to have"
-		      echo "*** because a test_compile did reveal that the linker did not use this one"
-		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
-		    fi
-		  fi
-		else
-		  droppeddeps=yes
-		  echo
-		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
-		  echo "*** make it link in!  You will probably need to install it or some"
-		  echo "*** library that it depends on before this library will be fully"
-		  echo "*** functional.  Installing it before continuing would be even better."
-		fi
-		;;
-	      *)
-		func_append newdeplibs " $i"
-		;;
-	      esac
-	    done
-	  fi
-	  ;;
-	file_magic*)
-	  set dummy $deplibs_check_method; shift
-	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
-	  for a_deplib in $deplibs; do
-	    case $a_deplib in
-	    -l*)
-	      func_stripname -l '' "$a_deplib"
-	      name=$func_stripname_result
-	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		case " $predeps $postdeps " in
-		*" $a_deplib "*)
-		  func_append newdeplibs " $a_deplib"
-		  a_deplib=""
-		  ;;
-		esac
-	      fi
-	      if test -n "$a_deplib" ; then
-		libname=`eval "\\$ECHO \"$libname_spec\""`
-		if test -n "$file_magic_glob"; then
-		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
-		else
-		  libnameglob=$libname
-		fi
-		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
-		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  if test "$want_nocaseglob" = yes; then
-		    shopt -s nocaseglob
-		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
-		    $nocaseglob
-		  else
-		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
-		  fi
-		  for potent_lib in $potential_libs; do
-		      # Follow soft links.
-		      if ls -lLd "$potent_lib" 2>/dev/null |
-			 $GREP " -> " >/dev/null; then
-			continue
-		      fi
-		      # The statement above tries to avoid entering an
-		      # endless loop below, in case of cyclic links.
-		      # We might still enter an endless loop, since a link
-		      # loop can be closed while we follow links,
-		      # but so what?
-		      potlib="$potent_lib"
-		      while test -h "$potlib" 2>/dev/null; do
-			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
-			case $potliblink in
-			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
-			esac
-		      done
-		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
-			 $SED -e 10q |
-			 $EGREP "$file_magic_regex" > /dev/null; then
-			func_append newdeplibs " $a_deplib"
-			a_deplib=""
-			break 2
-		      fi
-		  done
-		done
-	      fi
-	      if test -n "$a_deplib" ; then
-		droppeddeps=yes
-		echo
-		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-		echo "*** I have the capability to make that library automatically link in when"
-		echo "*** you link to this library.  But I can only do this if you have a"
-		echo "*** shared version of the library, which you do not appear to have"
-		echo "*** because I did check the linker path looking for a file starting"
-		if test -z "$potlib" ; then
-		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
-		else
-		  $ECHO "*** with $libname and none of the candidates passed a file format test"
-		  $ECHO "*** using a file magic. Last file checked: $potlib"
-		fi
-	      fi
-	      ;;
-	    *)
-	      # Add a -L argument.
-	      func_append newdeplibs " $a_deplib"
-	      ;;
-	    esac
-	  done # Gone through all deplibs.
-	  ;;
-	match_pattern*)
-	  set dummy $deplibs_check_method; shift
-	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
-	  for a_deplib in $deplibs; do
-	    case $a_deplib in
-	    -l*)
-	      func_stripname -l '' "$a_deplib"
-	      name=$func_stripname_result
-	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-		case " $predeps $postdeps " in
-		*" $a_deplib "*)
-		  func_append newdeplibs " $a_deplib"
-		  a_deplib=""
-		  ;;
-		esac
-	      fi
-	      if test -n "$a_deplib" ; then
-		libname=`eval "\\$ECHO \"$libname_spec\""`
-		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-		  for potent_lib in $potential_libs; do
-		    potlib="$potent_lib" # see symlink-check above in file_magic test
-		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
-		       $EGREP "$match_pattern_regex" > /dev/null; then
-		      func_append newdeplibs " $a_deplib"
-		      a_deplib=""
-		      break 2
-		    fi
-		  done
-		done
-	      fi
-	      if test -n "$a_deplib" ; then
-		droppeddeps=yes
-		echo
-		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-		echo "*** I have the capability to make that library automatically link in when"
-		echo "*** you link to this library.  But I can only do this if you have a"
-		echo "*** shared version of the library, which you do not appear to have"
-		echo "*** because I did check the linker path looking for a file starting"
-		if test -z "$potlib" ; then
-		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
-		else
-		  $ECHO "*** with $libname and none of the candidates passed a file format test"
-		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
-		fi
-	      fi
-	      ;;
-	    *)
-	      # Add a -L argument.
-	      func_append newdeplibs " $a_deplib"
-	      ;;
-	    esac
-	  done # Gone through all deplibs.
-	  ;;
-	none | unknown | *)
-	  newdeplibs=""
-	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
-	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-	    for i in $predeps $postdeps ; do
-	      # can't use Xsed below, because $i might contain '/'
-	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
-	    done
-	  fi
-	  case $tmp_deplibs in
-	  *[!\	\ ]*)
-	    echo
-	    if test "X$deplibs_check_method" = "Xnone"; then
-	      echo "*** Warning: inter-library dependencies are not supported in this platform."
-	    else
-	      echo "*** Warning: inter-library dependencies are not known to be supported."
-	    fi
-	    echo "*** All declared inter-library dependencies are being dropped."
-	    droppeddeps=yes
-	    ;;
-	  esac
-	  ;;
-	esac
-	versuffix=$versuffix_save
-	major=$major_save
-	release=$release_save
-	libname=$libname_save
-	name=$name_save
-
-	case $host in
-	*-*-rhapsody* | *-*-darwin1.[012])
-	  # On Rhapsody replace the C library with the System framework
-	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
-	  ;;
-	esac
-
-	if test "$droppeddeps" = yes; then
-	  if test "$module" = yes; then
-	    echo
-	    echo "*** Warning: libtool could not satisfy all declared inter-library"
-	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
-	    echo "*** a static module, that should work as long as the dlopening"
-	    echo "*** application is linked with the -dlopen flag."
-	    if test -z "$global_symbol_pipe"; then
-	      echo
-	      echo "*** However, this would only work if libtool was able to extract symbol"
-	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-	      echo "*** not find such a program.  So, this module is probably useless."
-	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
-	    fi
-	    if test "$build_old_libs" = no; then
-	      oldlibs="$output_objdir/$libname.$libext"
-	      build_libtool_libs=module
-	      build_old_libs=yes
-	    else
-	      build_libtool_libs=no
-	    fi
-	  else
-	    echo "*** The inter-library dependencies that have been dropped here will be"
-	    echo "*** automatically added whenever a program is linked with this library"
-	    echo "*** or is declared to -dlopen it."
-
-	    if test "$allow_undefined" = no; then
-	      echo
-	      echo "*** Since this library must not contain undefined symbols,"
-	      echo "*** because either the platform does not support them or"
-	      echo "*** it was explicitly requested with -no-undefined,"
-	      echo "*** libtool will only create a static version of it."
-	      if test "$build_old_libs" = no; then
-		oldlibs="$output_objdir/$libname.$libext"
-		build_libtool_libs=module
-		build_old_libs=yes
-	      else
-		build_libtool_libs=no
-	      fi
-	    fi
-	  fi
-	fi
-	# Done checking deplibs!
-	deplibs=$newdeplibs
-      fi
-      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
-      case $host in
-	*-*-darwin*)
-	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  ;;
-      esac
-
-      # move library search paths that coincide with paths to not yet
-      # installed libraries to the beginning of the library search list
-      new_libs=
-      for path in $notinst_path; do
-	case " $new_libs " in
-	*" -L$path/$objdir "*) ;;
-	*)
-	  case " $deplibs " in
-	  *" -L$path/$objdir "*)
-	    func_append new_libs " -L$path/$objdir" ;;
-	  esac
-	  ;;
-	esac
-      done
-      for deplib in $deplibs; do
-	case $deplib in
-	-L*)
-	  case " $new_libs " in
-	  *" $deplib "*) ;;
-	  *) func_append new_libs " $deplib" ;;
-	  esac
-	  ;;
-	*) func_append new_libs " $deplib" ;;
-	esac
-      done
-      deplibs="$new_libs"
-
-      # All the library-specific variables (install_libdir is set above).
-      library_names=
-      old_library=
-      dlname=
-
-      # Test again, we may have decided not to build it any more
-      if test "$build_libtool_libs" = yes; then
-	# Remove ${wl} instances when linking with ld.
-	# FIXME: should test the right _cmds variable.
-	case $archive_cmds in
-	  *\$LD\ *) wl= ;;
-        esac
-	if test "$hardcode_into_libs" = yes; then
-	  # Hardcode the library paths
-	  hardcode_libdirs=
-	  dep_rpath=
-	  rpath="$finalize_rpath"
-	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
-	  for libdir in $rpath; do
-	    if test -n "$hardcode_libdir_flag_spec"; then
-	      if test -n "$hardcode_libdir_separator"; then
-		func_replace_sysroot "$libdir"
-		libdir=$func_replace_sysroot_result
-		if test -z "$hardcode_libdirs"; then
-		  hardcode_libdirs="$libdir"
-		else
-		  # Just accumulate the unique libdirs.
-		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		    ;;
-		  *)
-		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
-		    ;;
-		  esac
-		fi
-	      else
-		eval flag=\"$hardcode_libdir_flag_spec\"
-		func_append dep_rpath " $flag"
-	      fi
-	    elif test -n "$runpath_var"; then
-	      case "$perm_rpath " in
-	      *" $libdir "*) ;;
-	      *) func_append perm_rpath " $libdir" ;;
-	      esac
-	    fi
-	  done
-	  # Substitute the hardcoded libdirs into the rpath.
-	  if test -n "$hardcode_libdir_separator" &&
-	     test -n "$hardcode_libdirs"; then
-	    libdir="$hardcode_libdirs"
-	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
-	  fi
-	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
-	    # We should set the runpath_var.
-	    rpath=
-	    for dir in $perm_rpath; do
-	      func_append rpath "$dir:"
-	    done
-	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
-	  fi
-	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
-	fi
-
-	shlibpath="$finalize_shlibpath"
-	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
-	if test -n "$shlibpath"; then
-	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
-	fi
-
-	# Get the real and link names of the library.
-	eval shared_ext=\"$shrext_cmds\"
-	eval library_names=\"$library_names_spec\"
-	set dummy $library_names
-	shift
-	realname="$1"
-	shift
-
-	if test -n "$soname_spec"; then
-	  eval soname=\"$soname_spec\"
-	else
-	  soname="$realname"
-	fi
-	if test -z "$dlname"; then
-	  dlname=$soname
-	fi
-
-	lib="$output_objdir/$realname"
-	linknames=
-	for link
-	do
-	  func_append linknames " $link"
-	done
-
-	# Use standard objects if they are pic
-	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
-	test "X$libobjs" = "X " && libobjs=
-
-	delfiles=
-	if test -n "$export_symbols" && test -n "$include_expsyms"; then
-	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
-	  export_symbols="$output_objdir/$libname.uexp"
-	  func_append delfiles " $export_symbols"
-	fi
-
-	orig_export_symbols=
-	case $host_os in
-	cygwin* | mingw* | cegcc*)
-	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
-	    # exporting using user supplied symfile
-	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
-	      # and it's NOT already a .def file. Must figure out
-	      # which of the given symbols are data symbols and tag
-	      # them as such. So, trigger use of export_symbols_cmds.
-	      # export_symbols gets reassigned inside the "prepare
-	      # the list of exported symbols" if statement, so the
-	      # include_expsyms logic still works.
-	      orig_export_symbols="$export_symbols"
-	      export_symbols=
-	      always_export_symbols=yes
-	    fi
-	  fi
-	  ;;
-	esac
-
-	# Prepare the list of exported symbols
-	if test -z "$export_symbols"; then
-	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
-	    func_verbose "generating symbol list for \`$libname.la'"
-	    export_symbols="$output_objdir/$libname.exp"
-	    $opt_dry_run || $RM $export_symbols
-	    cmds=$export_symbols_cmds
-	    save_ifs="$IFS"; IFS='~'
-	    for cmd1 in $cmds; do
-	      IFS="$save_ifs"
-	      # Take the normal branch if the nm_file_list_spec branch
-	      # doesn't work or if tool conversion is not needed.
-	      case $nm_file_list_spec~$to_tool_file_cmd in
-		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
-		  try_normal_branch=yes
-		  eval cmd=\"$cmd1\"
-		  func_len " $cmd"
-		  len=$func_len_result
-		  ;;
-		*)
-		  try_normal_branch=no
-		  ;;
-	      esac
-	      if test "$try_normal_branch" = yes \
-		 && { test "$len" -lt "$max_cmd_len" \
-		      || test "$max_cmd_len" -le -1; }
-	      then
-		func_show_eval "$cmd" 'exit $?'
-		skipped_export=false
-	      elif test -n "$nm_file_list_spec"; then
-		func_basename "$output"
-		output_la=$func_basename_result
-		save_libobjs=$libobjs
-		save_output=$output
-		output=${output_objdir}/${output_la}.nm
-		func_to_tool_file "$output"
-		libobjs=$nm_file_list_spec$func_to_tool_file_result
-		func_append delfiles " $output"
-		func_verbose "creating $NM input file list: $output"
-		for obj in $save_libobjs; do
-		  func_to_tool_file "$obj"
-		  $ECHO "$func_to_tool_file_result"
-		done > "$output"
-		eval cmd=\"$cmd1\"
-		func_show_eval "$cmd" 'exit $?'
-		output=$save_output
-		libobjs=$save_libobjs
-		skipped_export=false
-	      else
-		# The command line is too long to execute in one step.
-		func_verbose "using reloadable object file for export list..."
-		skipped_export=:
-		# Break out early, otherwise skipped_export may be
-		# set to false by a later but shorter cmd.
-		break
-	      fi
-	    done
-	    IFS="$save_ifs"
-	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
-	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
-	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
-	    fi
-	  fi
-	fi
-
-	if test -n "$export_symbols" && test -n "$include_expsyms"; then
-	  tmp_export_symbols="$export_symbols"
-	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
-	fi
-
-	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
-	  # The given exports_symbols file has to be filtered, so filter it.
-	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
-	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
-	  # 's' commands which not all seds can handle. GNU sed should be fine
-	  # though. Also, the filter scales superlinearly with the number of
-	  # global variables. join(1) would be nice here, but unfortunately
-	  # isn't a blessed tool.
-	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
-	  export_symbols=$output_objdir/$libname.def
-	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
-	fi
-
-	tmp_deplibs=
-	for test_deplib in $deplibs; do
-	  case " $convenience " in
-	  *" $test_deplib "*) ;;
-	  *)
-	    func_append tmp_deplibs " $test_deplib"
-	    ;;
-	  esac
-	done
-	deplibs="$tmp_deplibs"
-
-	if test -n "$convenience"; then
-	  if test -n "$whole_archive_flag_spec" &&
-	    test "$compiler_needs_object" = yes &&
-	    test -z "$libobjs"; then
-	    # extract the archives, so we have objects to list.
-	    # TODO: could optimize this to just extract one archive.
-	    whole_archive_flag_spec=
-	  fi
-	  if test -n "$whole_archive_flag_spec"; then
-	    save_libobjs=$libobjs
-	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-	    test "X$libobjs" = "X " && libobjs=
-	  else
-	    gentop="$output_objdir/${outputname}x"
-	    func_append generated " $gentop"
-
-	    func_extract_archives $gentop $convenience
-	    func_append libobjs " $func_extract_archives_result"
-	    test "X$libobjs" = "X " && libobjs=
-	  fi
-	fi
-
-	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
-	  eval flag=\"$thread_safe_flag_spec\"
-	  func_append linker_flags " $flag"
-	fi
-
-	# Make a backup of the uninstalled library when relinking
-	if test "$opt_mode" = relink; then
-	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
-	fi
-
-	# Do each of the archive commands.
-	if test "$module" = yes && test -n "$module_cmds" ; then
-	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-	    eval test_cmds=\"$module_expsym_cmds\"
-	    cmds=$module_expsym_cmds
-	  else
-	    eval test_cmds=\"$module_cmds\"
-	    cmds=$module_cmds
-	  fi
-	else
-	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-	    eval test_cmds=\"$archive_expsym_cmds\"
-	    cmds=$archive_expsym_cmds
-	  else
-	    eval test_cmds=\"$archive_cmds\"
-	    cmds=$archive_cmds
-	  fi
-	fi
-
-	if test "X$skipped_export" != "X:" &&
-	   func_len " $test_cmds" &&
-	   len=$func_len_result &&
-	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-	  :
-	else
-	  # The command line is too long to link in one step, link piecewise
-	  # or, if using GNU ld and skipped_export is not :, use a linker
-	  # script.
-
-	  # Save the value of $output and $libobjs because we want to
-	  # use them later.  If we have whole_archive_flag_spec, we
-	  # want to use save_libobjs as it was before
-	  # whole_archive_flag_spec was expanded, because we can't
-	  # assume the linker understands whole_archive_flag_spec.
-	  # This may have to be revisited, in case too many
-	  # convenience libraries get linked in and end up exceeding
-	  # the spec.
-	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
-	    save_libobjs=$libobjs
-	  fi
-	  save_output=$output
-	  func_basename "$output"
-	  output_la=$func_basename_result
-
-	  # Clear the reloadable object creation command queue and
-	  # initialize k to one.
-	  test_cmds=
-	  concat_cmds=
-	  objlist=
-	  last_robj=
-	  k=1
-
-	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
-	    output=${output_objdir}/${output_la}.lnkscript
-	    func_verbose "creating GNU ld script: $output"
-	    echo 'INPUT (' > $output
-	    for obj in $save_libobjs
-	    do
-	      func_to_tool_file "$obj"
-	      $ECHO "$func_to_tool_file_result" >> $output
-	    done
-	    echo ')' >> $output
-	    func_append delfiles " $output"
-	    func_to_tool_file "$output"
-	    output=$func_to_tool_file_result
-	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
-	    output=${output_objdir}/${output_la}.lnk
-	    func_verbose "creating linker input file list: $output"
-	    : > $output
-	    set x $save_libobjs
-	    shift
-	    firstobj=
-	    if test "$compiler_needs_object" = yes; then
-	      firstobj="$1 "
-	      shift
-	    fi
-	    for obj
-	    do
-	      func_to_tool_file "$obj"
-	      $ECHO "$func_to_tool_file_result" >> $output
-	    done
-	    func_append delfiles " $output"
-	    func_to_tool_file "$output"
-	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
-	  else
-	    if test -n "$save_libobjs"; then
-	      func_verbose "creating reloadable object files..."
-	      output=$output_objdir/$output_la-${k}.$objext
-	      eval test_cmds=\"$reload_cmds\"
-	      func_len " $test_cmds"
-	      len0=$func_len_result
-	      len=$len0
-
-	      # Loop over the list of objects to be linked.
-	      for obj in $save_libobjs
-	      do
-		func_len " $obj"
-		func_arith $len + $func_len_result
-		len=$func_arith_result
-		if test "X$objlist" = X ||
-		   test "$len" -lt "$max_cmd_len"; then
-		  func_append objlist " $obj"
-		else
-		  # The command $test_cmds is almost too long, add a
-		  # command to the queue.
-		  if test "$k" -eq 1 ; then
-		    # The first file doesn't have a previous command to add.
-		    reload_objs=$objlist
-		    eval concat_cmds=\"$reload_cmds\"
-		  else
-		    # All subsequent reloadable object files will link in
-		    # the last one created.
-		    reload_objs="$objlist $last_robj"
-		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
-		  fi
-		  last_robj=$output_objdir/$output_la-${k}.$objext
-		  func_arith $k + 1
-		  k=$func_arith_result
-		  output=$output_objdir/$output_la-${k}.$objext
-		  objlist=" $obj"
-		  func_len " $last_robj"
-		  func_arith $len0 + $func_len_result
-		  len=$func_arith_result
-		fi
-	      done
-	      # Handle the remaining objects by creating one last
-	      # reloadable object file.  All subsequent reloadable object
-	      # files will link in the last one created.
-	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	      reload_objs="$objlist $last_robj"
-	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
-	      if test -n "$last_robj"; then
-	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
-	      fi
-	      func_append delfiles " $output"
-
-	    else
-	      output=
-	    fi
-
-	    if ${skipped_export-false}; then
-	      func_verbose "generating symbol list for \`$libname.la'"
-	      export_symbols="$output_objdir/$libname.exp"
-	      $opt_dry_run || $RM $export_symbols
-	      libobjs=$output
-	      # Append the command to create the export file.
-	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
-	      if test -n "$last_robj"; then
-		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
-	      fi
-	    fi
-
-	    test -n "$save_libobjs" &&
-	      func_verbose "creating a temporary reloadable object file: $output"
-
-	    # Loop through the commands generated above and execute them.
-	    save_ifs="$IFS"; IFS='~'
-	    for cmd in $concat_cmds; do
-	      IFS="$save_ifs"
-	      $opt_silent || {
-		  func_quote_for_expand "$cmd"
-		  eval "func_echo $func_quote_for_expand_result"
-	      }
-	      $opt_dry_run || eval "$cmd" || {
-		lt_exit=$?
-
-		# Restore the uninstalled library and exit
-		if test "$opt_mode" = relink; then
-		  ( cd "$output_objdir" && \
-		    $RM "${realname}T" && \
-		    $MV "${realname}U" "$realname" )
-		fi
-
-		exit $lt_exit
-	      }
-	    done
-	    IFS="$save_ifs"
-
-	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
-	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
-	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
-	    fi
-	  fi
-
-          if ${skipped_export-false}; then
-	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
-	      tmp_export_symbols="$export_symbols"
-	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
-	    fi
-
-	    if test -n "$orig_export_symbols"; then
-	      # The given exports_symbols file has to be filtered, so filter it.
-	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
-	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
-	      # 's' commands which not all seds can handle. GNU sed should be fine
-	      # though. Also, the filter scales superlinearly with the number of
-	      # global variables. join(1) would be nice here, but unfortunately
-	      # isn't a blessed tool.
-	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
-	      export_symbols=$output_objdir/$libname.def
-	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
-	    fi
-	  fi
-
-	  libobjs=$output
-	  # Restore the value of output.
-	  output=$save_output
-
-	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
-	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-	    test "X$libobjs" = "X " && libobjs=
-	  fi
-	  # Expand the library linking commands again to reset the
-	  # value of $libobjs for piecewise linking.
-
-	  # Do each of the archive commands.
-	  if test "$module" = yes && test -n "$module_cmds" ; then
-	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-	      cmds=$module_expsym_cmds
-	    else
-	      cmds=$module_cmds
-	    fi
-	  else
-	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-	      cmds=$archive_expsym_cmds
-	    else
-	      cmds=$archive_cmds
-	    fi
-	  fi
-	fi
-
-	if test -n "$delfiles"; then
-	  # Append the command to remove temporary files to $cmds.
-	  eval cmds=\"\$cmds~\$RM $delfiles\"
-	fi
-
-	# Add any objects from preloaded convenience libraries
-	if test -n "$dlprefiles"; then
-	  gentop="$output_objdir/${outputname}x"
-	  func_append generated " $gentop"
-
-	  func_extract_archives $gentop $dlprefiles
-	  func_append libobjs " $func_extract_archives_result"
-	  test "X$libobjs" = "X " && libobjs=
-	fi
-
-	save_ifs="$IFS"; IFS='~'
-	for cmd in $cmds; do
-	  IFS="$save_ifs"
-	  eval cmd=\"$cmd\"
-	  $opt_silent || {
-	    func_quote_for_expand "$cmd"
-	    eval "func_echo $func_quote_for_expand_result"
-	  }
-	  $opt_dry_run || eval "$cmd" || {
-	    lt_exit=$?
-
-	    # Restore the uninstalled library and exit
-	    if test "$opt_mode" = relink; then
-	      ( cd "$output_objdir" && \
-	        $RM "${realname}T" && \
-		$MV "${realname}U" "$realname" )
-	    fi
-
-	    exit $lt_exit
-	  }
-	done
-	IFS="$save_ifs"
-
-	# Restore the uninstalled library and exit
-	if test "$opt_mode" = relink; then
-	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
-
-	  if test -n "$convenience"; then
-	    if test -z "$whole_archive_flag_spec"; then
-	      func_show_eval '${RM}r "$gentop"'
-	    fi
-	  fi
-
-	  exit $EXIT_SUCCESS
-	fi
-
-	# Create links to the real library.
-	for linkname in $linknames; do
-	  if test "$realname" != "$linkname"; then
-	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
-	  fi
-	done
-
-	# If -module or -export-dynamic was specified, set the dlname.
-	if test "$module" = yes || test "$export_dynamic" = yes; then
-	  # On all known operating systems, these are identical.
-	  dlname="$soname"
-	fi
-      fi
-      ;;
-
-    obj)
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	func_warning "\`-dlopen' is ignored for objects"
-      fi
-
-      case " $deplibs" in
-      *\ -l* | *\ -L*)
-	func_warning "\`-l' and \`-L' are ignored for objects" ;;
-      esac
-
-      test -n "$rpath" && \
-	func_warning "\`-rpath' is ignored for objects"
-
-      test -n "$xrpath" && \
-	func_warning "\`-R' is ignored for objects"
-
-      test -n "$vinfo" && \
-	func_warning "\`-version-info' is ignored for objects"
-
-      test -n "$release" && \
-	func_warning "\`-release' is ignored for objects"
-
-      case $output in
-      *.lo)
-	test -n "$objs$old_deplibs" && \
-	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
-
-	libobj=$output
-	func_lo2o "$libobj"
-	obj=$func_lo2o_result
-	;;
-      *)
-	libobj=
-	obj="$output"
-	;;
-      esac
-
-      # Delete the old objects.
-      $opt_dry_run || $RM $obj $libobj
-
-      # Objects from convenience libraries.  This assumes
-      # single-version convenience libraries.  Whenever we create
-      # different ones for PIC/non-PIC, this we'll have to duplicate
-      # the extraction.
-      reload_conv_objs=
-      gentop=
-      # reload_cmds runs $LD directly, so let us get rid of
-      # -Wl from whole_archive_flag_spec and hope we can get by with
-      # turning comma into space..
-      wl=
-
-      if test -n "$convenience"; then
-	if test -n "$whole_archive_flag_spec"; then
-	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
-	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
-	else
-	  gentop="$output_objdir/${obj}x"
-	  func_append generated " $gentop"
-
-	  func_extract_archives $gentop $convenience
-	  reload_conv_objs="$reload_objs $func_extract_archives_result"
-	fi
-      fi
-
-      # If we're not building shared, we need to use non_pic_objs
-      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
-
-      # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
-      output="$obj"
-      func_execute_cmds "$reload_cmds" 'exit $?'
-
-      # Exit if we aren't doing a library object file.
-      if test -z "$libobj"; then
-	if test -n "$gentop"; then
-	  func_show_eval '${RM}r "$gentop"'
-	fi
-
-	exit $EXIT_SUCCESS
-      fi
-
-      if test "$build_libtool_libs" != yes; then
-	if test -n "$gentop"; then
-	  func_show_eval '${RM}r "$gentop"'
-	fi
-
-	# Create an invalid libtool object if no PIC, so that we don't
-	# accidentally link it into a program.
-	# $show "echo timestamp > $libobj"
-	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
-	exit $EXIT_SUCCESS
-      fi
-
-      if test -n "$pic_flag" || test "$pic_mode" != default; then
-	# Only do commands if we really have different PIC objects.
-	reload_objs="$libobjs $reload_conv_objs"
-	output="$libobj"
-	func_execute_cmds "$reload_cmds" 'exit $?'
-      fi
-
-      if test -n "$gentop"; then
-	func_show_eval '${RM}r "$gentop"'
-      fi
-
-      exit $EXIT_SUCCESS
-      ;;
-
-    prog)
-      case $host in
-	*cygwin*) func_stripname '' '.exe' "$output"
-	          output=$func_stripname_result.exe;;
-      esac
-      test -n "$vinfo" && \
-	func_warning "\`-version-info' is ignored for programs"
-
-      test -n "$release" && \
-	func_warning "\`-release' is ignored for programs"
-
-      test "$preload" = yes \
-        && test "$dlopen_support" = unknown \
-	&& test "$dlopen_self" = unknown \
-	&& test "$dlopen_self_static" = unknown && \
-	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
-
-      case $host in
-      *-*-rhapsody* | *-*-darwin1.[012])
-	# On Rhapsody replace the C library is the System framework
-	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
-	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
-	;;
-      esac
-
-      case $host in
-      *-*-darwin*)
-	# Don't allow lazy linking, it breaks C++ global constructors
-	# But is supposedly fixed on 10.4 or later (yay!).
-	if test "$tagname" = CXX ; then
-	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
-	    10.[0123])
-	      func_append compile_command " ${wl}-bind_at_load"
-	      func_append finalize_command " ${wl}-bind_at_load"
-	    ;;
-	  esac
-	fi
-	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
-	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-	;;
-      esac
-
-
-      # move library search paths that coincide with paths to not yet
-      # installed libraries to the beginning of the library search list
-      new_libs=
-      for path in $notinst_path; do
-	case " $new_libs " in
-	*" -L$path/$objdir "*) ;;
-	*)
-	  case " $compile_deplibs " in
-	  *" -L$path/$objdir "*)
-	    func_append new_libs " -L$path/$objdir" ;;
-	  esac
-	  ;;
-	esac
-      done
-      for deplib in $compile_deplibs; do
-	case $deplib in
-	-L*)
-	  case " $new_libs " in
-	  *" $deplib "*) ;;
-	  *) func_append new_libs " $deplib" ;;
-	  esac
-	  ;;
-	*) func_append new_libs " $deplib" ;;
-	esac
-      done
-      compile_deplibs="$new_libs"
-
-
-      func_append compile_command " $compile_deplibs"
-      func_append finalize_command " $finalize_deplibs"
-
-      if test -n "$rpath$xrpath"; then
-	# If the user specified any rpath flags, then add them.
-	for libdir in $rpath $xrpath; do
-	  # This is the magic to use -rpath.
-	  case "$finalize_rpath " in
-	  *" $libdir "*) ;;
-	  *) func_append finalize_rpath " $libdir" ;;
-	  esac
-	done
-      fi
-
-      # Now hardcode the library paths
-      rpath=
-      hardcode_libdirs=
-      for libdir in $compile_rpath $finalize_rpath; do
-	if test -n "$hardcode_libdir_flag_spec"; then
-	  if test -n "$hardcode_libdir_separator"; then
-	    if test -z "$hardcode_libdirs"; then
-	      hardcode_libdirs="$libdir"
-	    else
-	      # Just accumulate the unique libdirs.
-	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		;;
-	      *)
-		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
-		;;
-	      esac
-	    fi
-	  else
-	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    func_append rpath " $flag"
-	  fi
-	elif test -n "$runpath_var"; then
-	  case "$perm_rpath " in
-	  *" $libdir "*) ;;
-	  *) func_append perm_rpath " $libdir" ;;
-	  esac
-	fi
-	case $host in
-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
-	  case :$dllsearchpath: in
-	  *":$libdir:"*) ;;
-	  ::) dllsearchpath=$libdir;;
-	  *) func_append dllsearchpath ":$libdir";;
-	  esac
-	  case :$dllsearchpath: in
-	  *":$testbindir:"*) ;;
-	  ::) dllsearchpath=$testbindir;;
-	  *) func_append dllsearchpath ":$testbindir";;
-	  esac
-	  ;;
-	esac
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-	 test -n "$hardcode_libdirs"; then
-	libdir="$hardcode_libdirs"
-	eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      compile_rpath="$rpath"
-
-      rpath=
-      hardcode_libdirs=
-      for libdir in $finalize_rpath; do
-	if test -n "$hardcode_libdir_flag_spec"; then
-	  if test -n "$hardcode_libdir_separator"; then
-	    if test -z "$hardcode_libdirs"; then
-	      hardcode_libdirs="$libdir"
-	    else
-	      # Just accumulate the unique libdirs.
-	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-		;;
-	      *)
-		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
-		;;
-	      esac
-	    fi
-	  else
-	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    func_append rpath " $flag"
-	  fi
-	elif test -n "$runpath_var"; then
-	  case "$finalize_perm_rpath " in
-	  *" $libdir "*) ;;
-	  *) func_append finalize_perm_rpath " $libdir" ;;
-	  esac
-	fi
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-	 test -n "$hardcode_libdirs"; then
-	libdir="$hardcode_libdirs"
-	eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      finalize_rpath="$rpath"
-
-      if test -n "$libobjs" && test "$build_old_libs" = yes; then
-	# Transform all the library objects into standard objects.
-	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
-	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
-      fi
-
-      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
-
-      # template prelinking step
-      if test -n "$prelink_cmds"; then
-	func_execute_cmds "$prelink_cmds" 'exit $?'
-      fi
-
-      wrappers_required=yes
-      case $host in
-      *cegcc* | *mingw32ce*)
-        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
-        wrappers_required=no
-        ;;
-      *cygwin* | *mingw* )
-        if test "$build_libtool_libs" != yes; then
-          wrappers_required=no
-        fi
-        ;;
-      *)
-        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
-          wrappers_required=no
-        fi
-        ;;
-      esac
-      if test "$wrappers_required" = no; then
-	# Replace the output file specification.
-	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
-	link_command="$compile_command$compile_rpath"
-
-	# We have no uninstalled library dependencies, so finalize right now.
-	exit_status=0
-	func_show_eval "$link_command" 'exit_status=$?'
-
-	if test -n "$postlink_cmds"; then
-	  func_to_tool_file "$output"
-	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
-	  func_execute_cmds "$postlink_cmds" 'exit $?'
-	fi
-
-	# Delete the generated files.
-	if test -f "$output_objdir/${outputname}S.${objext}"; then
-	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
-	fi
-
-	exit $exit_status
-      fi
-
-      if test -n "$compile_shlibpath$finalize_shlibpath"; then
-	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
-      fi
-      if test -n "$finalize_shlibpath"; then
-	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
-      fi
-
-      compile_var=
-      finalize_var=
-      if test -n "$runpath_var"; then
-	if test -n "$perm_rpath"; then
-	  # We should set the runpath_var.
-	  rpath=
-	  for dir in $perm_rpath; do
-	    func_append rpath "$dir:"
-	  done
-	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
-	fi
-	if test -n "$finalize_perm_rpath"; then
-	  # We should set the runpath_var.
-	  rpath=
-	  for dir in $finalize_perm_rpath; do
-	    func_append rpath "$dir:"
-	  done
-	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
-	fi
-      fi
-
-      if test "$no_install" = yes; then
-	# We don't need to create a wrapper script.
-	link_command="$compile_var$compile_command$compile_rpath"
-	# Replace the output file specification.
-	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
-	# Delete the old output file.
-	$opt_dry_run || $RM $output
-	# Link the executable and exit
-	func_show_eval "$link_command" 'exit $?'
-
-	if test -n "$postlink_cmds"; then
-	  func_to_tool_file "$output"
-	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
-	  func_execute_cmds "$postlink_cmds" 'exit $?'
-	fi
-
-	exit $EXIT_SUCCESS
-      fi
-
-      if test "$hardcode_action" = relink; then
-	# Fast installation is not supported
-	link_command="$compile_var$compile_command$compile_rpath"
-	relink_command="$finalize_var$finalize_command$finalize_rpath"
-
-	func_warning "this platform does not like uninstalled shared libraries"
-	func_warning "\`$output' will be relinked during installation"
-      else
-	if test "$fast_install" != no; then
-	  link_command="$finalize_var$compile_command$finalize_rpath"
-	  if test "$fast_install" = yes; then
-	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
-	  else
-	    # fast_install is set to needless
-	    relink_command=
-	  fi
-	else
-	  link_command="$compile_var$compile_command$compile_rpath"
-	  relink_command="$finalize_var$finalize_command$finalize_rpath"
-	fi
-      fi
-
-      # Replace the output file specification.
-      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
-      # Delete the old output files.
-      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
-      func_show_eval "$link_command" 'exit $?'
-
-      if test -n "$postlink_cmds"; then
-	func_to_tool_file "$output_objdir/$outputname"
-	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
-	func_execute_cmds "$postlink_cmds" 'exit $?'
-      fi
-
-      # Now create the wrapper script.
-      func_verbose "creating $output"
-
-      # Quote the relink command for shipping.
-      if test -n "$relink_command"; then
-	# Preserve any variables that may affect compiler behavior
-	for var in $variables_saved_for_relink; do
-	  if eval test -z \"\${$var+set}\"; then
-	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
-	  elif eval var_value=\$$var; test -z "$var_value"; then
-	    relink_command="$var=; export $var; $relink_command"
-	  else
-	    func_quote_for_eval "$var_value"
-	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
-	  fi
-	done
-	relink_command="(cd `pwd`; $relink_command)"
-	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
-      fi
-
-      # Only actually do things if not in dry run mode.
-      $opt_dry_run || {
-	# win32 will think the script is a binary if it has
-	# a .exe suffix, so we strip it off here.
-	case $output in
-	  *.exe) func_stripname '' '.exe' "$output"
-	         output=$func_stripname_result ;;
-	esac
-	# test for cygwin because mv fails w/o .exe extensions
-	case $host in
-	  *cygwin*)
-	    exeext=.exe
-	    func_stripname '' '.exe' "$outputname"
-	    outputname=$func_stripname_result ;;
-	  *) exeext= ;;
-	esac
-	case $host in
-	  *cygwin* | *mingw* )
-	    func_dirname_and_basename "$output" "" "."
-	    output_name=$func_basename_result
-	    output_path=$func_dirname_result
-	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
-	    cwrapper="$output_path/$output_name.exe"
-	    $RM $cwrappersource $cwrapper
-	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
-
-	    func_emit_cwrapperexe_src > $cwrappersource
-
-	    # The wrapper executable is built using the $host compiler,
-	    # because it contains $host paths and files. If cross-
-	    # compiling, it, like the target executable, must be
-	    # executed on the $host or under an emulation environment.
-	    $opt_dry_run || {
-	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
-	      $STRIP $cwrapper
-	    }
-
-	    # Now, create the wrapper script for func_source use:
-	    func_ltwrapper_scriptname $cwrapper
-	    $RM $func_ltwrapper_scriptname_result
-	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
-	    $opt_dry_run || {
-	      # note: this script will not be executed, so do not chmod.
-	      if test "x$build" = "x$host" ; then
-		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
-	      else
-		func_emit_wrapper no > $func_ltwrapper_scriptname_result
-	      fi
-	    }
-	  ;;
-	  * )
-	    $RM $output
-	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
-
-	    func_emit_wrapper no > $output
-	    chmod +x $output
-	  ;;
-	esac
-      }
-      exit $EXIT_SUCCESS
-      ;;
-    esac
-
-    # See if we need to build an old-fashioned archive.
-    for oldlib in $oldlibs; do
-
-      if test "$build_libtool_libs" = convenience; then
-	oldobjs="$libobjs_save $symfileobj"
-	addlibs="$convenience"
-	build_libtool_libs=no
-      else
-	if test "$build_libtool_libs" = module; then
-	  oldobjs="$libobjs_save"
-	  build_libtool_libs=no
-	else
-	  oldobjs="$old_deplibs $non_pic_objects"
-	  if test "$preload" = yes && test -f "$symfileobj"; then
-	    func_append oldobjs " $symfileobj"
-	  fi
-	fi
-	addlibs="$old_convenience"
-      fi
-
-      if test -n "$addlibs"; then
-	gentop="$output_objdir/${outputname}x"
-	func_append generated " $gentop"
-
-	func_extract_archives $gentop $addlibs
-	func_append oldobjs " $func_extract_archives_result"
-      fi
-
-      # Do each command in the archive commands.
-      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
-	cmds=$old_archive_from_new_cmds
-      else
-
-	# Add any objects from preloaded convenience libraries
-	if test -n "$dlprefiles"; then
-	  gentop="$output_objdir/${outputname}x"
-	  func_append generated " $gentop"
-
-	  func_extract_archives $gentop $dlprefiles
-	  func_append oldobjs " $func_extract_archives_result"
-	fi
-
-	# POSIX demands no paths to be encoded in archives.  We have
-	# to avoid creating archives with duplicate basenames if we
-	# might have to extract them afterwards, e.g., when creating a
-	# static archive out of a convenience library, or when linking
-	# the entirety of a libtool archive into another (currently
-	# not supported by libtool).
-	if (for obj in $oldobjs
-	    do
-	      func_basename "$obj"
-	      $ECHO "$func_basename_result"
-	    done | sort | sort -uc >/dev/null 2>&1); then
-	  :
-	else
-	  echo "copying selected object files to avoid basename conflicts..."
-	  gentop="$output_objdir/${outputname}x"
-	  func_append generated " $gentop"
-	  func_mkdir_p "$gentop"
-	  save_oldobjs=$oldobjs
-	  oldobjs=
-	  counter=1
-	  for obj in $save_oldobjs
-	  do
-	    func_basename "$obj"
-	    objbase="$func_basename_result"
-	    case " $oldobjs " in
-	    " ") oldobjs=$obj ;;
-	    *[\ /]"$objbase "*)
-	      while :; do
-		# Make sure we don't pick an alternate name that also
-		# overlaps.
-		newobj=lt$counter-$objbase
-		func_arith $counter + 1
-		counter=$func_arith_result
-		case " $oldobjs " in
-		*[\ /]"$newobj "*) ;;
-		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
-		esac
-	      done
-	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-	      func_append oldobjs " $gentop/$newobj"
-	      ;;
-	    *) func_append oldobjs " $obj" ;;
-	    esac
-	  done
-	fi
-	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
-	tool_oldlib=$func_to_tool_file_result
-	eval cmds=\"$old_archive_cmds\"
-
-	func_len " $cmds"
-	len=$func_len_result
-	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-	  cmds=$old_archive_cmds
-	elif test -n "$archiver_list_spec"; then
-	  func_verbose "using command file archive linking..."
-	  for obj in $oldobjs
-	  do
-	    func_to_tool_file "$obj"
-	    $ECHO "$func_to_tool_file_result"
-	  done > $output_objdir/$libname.libcmd
-	  func_to_tool_file "$output_objdir/$libname.libcmd"
-	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
-	  cmds=$old_archive_cmds
-	else
-	  # the command line is too long to link in one step, link in parts
-	  func_verbose "using piecewise archive linking..."
-	  save_RANLIB=$RANLIB
-	  RANLIB=:
-	  objlist=
-	  concat_cmds=
-	  save_oldobjs=$oldobjs
-	  oldobjs=
-	  # Is there a better way of finding the last object in the list?
-	  for obj in $save_oldobjs
-	  do
-	    last_oldobj=$obj
-	  done
-	  eval test_cmds=\"$old_archive_cmds\"
-	  func_len " $test_cmds"
-	  len0=$func_len_result
-	  len=$len0
-	  for obj in $save_oldobjs
-	  do
-	    func_len " $obj"
-	    func_arith $len + $func_len_result
-	    len=$func_arith_result
-	    func_append objlist " $obj"
-	    if test "$len" -lt "$max_cmd_len"; then
-	      :
-	    else
-	      # the above command should be used before it gets too long
-	      oldobjs=$objlist
-	      if test "$obj" = "$last_oldobj" ; then
-		RANLIB=$save_RANLIB
-	      fi
-	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
-	      objlist=
-	      len=$len0
-	    fi
-	  done
-	  RANLIB=$save_RANLIB
-	  oldobjs=$objlist
-	  if test "X$oldobjs" = "X" ; then
-	    eval cmds=\"\$concat_cmds\"
-	  else
-	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
-	  fi
-	fi
-      fi
-      func_execute_cmds "$cmds" 'exit $?'
-    done
-
-    test -n "$generated" && \
-      func_show_eval "${RM}r$generated"
-
-    # Now create the libtool archive.
-    case $output in
-    *.la)
-      old_library=
-      test "$build_old_libs" = yes && old_library="$libname.$libext"
-      func_verbose "creating $output"
-
-      # Preserve any variables that may affect compiler behavior
-      for var in $variables_saved_for_relink; do
-	if eval test -z \"\${$var+set}\"; then
-	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
-	elif eval var_value=\$$var; test -z "$var_value"; then
-	  relink_command="$var=; export $var; $relink_command"
-	else
-	  func_quote_for_eval "$var_value"
-	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
-	fi
-      done
-      # Quote the link command for shipping.
-      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
-      if test "$hardcode_automatic" = yes ; then
-	relink_command=
-      fi
-
-      # Only create the output if not a dry run.
-      $opt_dry_run || {
-	for installed in no yes; do
-	  if test "$installed" = yes; then
-	    if test -z "$install_libdir"; then
-	      break
-	    fi
-	    output="$output_objdir/$outputname"i
-	    # Replace all uninstalled libtool libraries with the installed ones
-	    newdependency_libs=
-	    for deplib in $dependency_libs; do
-	      case $deplib in
-	      *.la)
-		func_basename "$deplib"
-		name="$func_basename_result"
-		func_resolve_sysroot "$deplib"
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
-		test -z "$libdir" && \
-		  func_fatal_error "\`$deplib' is not a valid libtool archive"
-		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
-		;;
-	      -L*)
-		func_stripname -L '' "$deplib"
-		func_replace_sysroot "$func_stripname_result"
-		func_append newdependency_libs " -L$func_replace_sysroot_result"
-		;;
-	      -R*)
-		func_stripname -R '' "$deplib"
-		func_replace_sysroot "$func_stripname_result"
-		func_append newdependency_libs " -R$func_replace_sysroot_result"
-		;;
-	      *) func_append newdependency_libs " $deplib" ;;
-	      esac
-	    done
-	    dependency_libs="$newdependency_libs"
-	    newdlfiles=
-
-	    for lib in $dlfiles; do
-	      case $lib in
-	      *.la)
-	        func_basename "$lib"
-		name="$func_basename_result"
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-		test -z "$libdir" && \
-		  func_fatal_error "\`$lib' is not a valid libtool archive"
-		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
-		;;
-	      *) func_append newdlfiles " $lib" ;;
-	      esac
-	    done
-	    dlfiles="$newdlfiles"
-	    newdlprefiles=
-	    for lib in $dlprefiles; do
-	      case $lib in
-	      *.la)
-		# Only pass preopened files to the pseudo-archive (for
-		# eventual linking with the app. that links it) if we
-		# didn't already link the preopened objects directly into
-		# the library:
-		func_basename "$lib"
-		name="$func_basename_result"
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-		test -z "$libdir" && \
-		  func_fatal_error "\`$lib' is not a valid libtool archive"
-		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
-		;;
-	      esac
-	    done
-	    dlprefiles="$newdlprefiles"
-	  else
-	    newdlfiles=
-	    for lib in $dlfiles; do
-	      case $lib in
-		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-		*) abs=`pwd`"/$lib" ;;
-	      esac
-	      func_append newdlfiles " $abs"
-	    done
-	    dlfiles="$newdlfiles"
-	    newdlprefiles=
-	    for lib in $dlprefiles; do
-	      case $lib in
-		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-		*) abs=`pwd`"/$lib" ;;
-	      esac
-	      func_append newdlprefiles " $abs"
-	    done
-	    dlprefiles="$newdlprefiles"
-	  fi
-	  $RM $output
-	  # place dlname in correct position for cygwin
-	  # In fact, it would be nice if we could use this code for all target
-	  # systems that can't hard-code library paths into their executables
-	  # and that have no shared library path variable independent of PATH,
-	  # but it turns out we can't easily determine that from inspecting
-	  # libtool variables, so we have to hard-code the OSs to which it
-	  # applies here; at the moment, that means platforms that use the PE
-	  # object format with DLL files.  See the long comment at the top of
-	  # tests/bindir.at for full details.
-	  tdlname=$dlname
-	  case $host,$output,$installed,$module,$dlname in
-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
-	      # If a -bindir argument was supplied, place the dll there.
-	      if test "x$bindir" != x ;
-	      then
-		func_relative_path "$install_libdir" "$bindir"
-		tdlname=$func_relative_path_result$dlname
-	      else
-		# Otherwise fall back on heuristic.
-		tdlname=../bin/$dlname
-	      fi
-	      ;;
-	  esac
-	  $ECHO > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$tdlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Linker flags that can not go in dependency_libs.
-inherited_linker_flags='$new_inherited_linker_flags'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Names of additional weak libraries provided by this library
-weak_library_names='$weak_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=$module
-
-# Files to dlopen/dlpreopen
-dlopen='$dlfiles'
-dlpreopen='$dlprefiles'
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'"
-	  if test "$installed" = no && test "$need_relink" = yes; then
-	    $ECHO >> $output "\
-relink_command=\"$relink_command\""
-	  fi
-	done
-      }
-
-      # Do a symbolic link so that the libtool archive can be found in
-      # LD_LIBRARY_PATH before the program is installed.
-      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
-      ;;
-    esac
-    exit $EXIT_SUCCESS
-}
-
-{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
-    func_mode_link ${1+"$@"}
-
-
-# func_mode_uninstall arg...
-func_mode_uninstall ()
-{
-    $opt_debug
-    RM="$nonopt"
-    files=
-    rmforce=
-    exit_status=0
-
-    # This variable tells wrapper scripts just to set variables rather
-    # than running their programs.
-    libtool_install_magic="$magic"
-
-    for arg
-    do
-      case $arg in
-      -f) func_append RM " $arg"; rmforce=yes ;;
-      -*) func_append RM " $arg" ;;
-      *) func_append files " $arg" ;;
-      esac
-    done
-
-    test -z "$RM" && \
-      func_fatal_help "you must specify an RM program"
-
-    rmdirs=
-
-    for file in $files; do
-      func_dirname "$file" "" "."
-      dir="$func_dirname_result"
-      if test "X$dir" = X.; then
-	odir="$objdir"
-      else
-	odir="$dir/$objdir"
-      fi
-      func_basename "$file"
-      name="$func_basename_result"
-      test "$opt_mode" = uninstall && odir="$dir"
-
-      # Remember odir for removal later, being careful to avoid duplicates
-      if test "$opt_mode" = clean; then
-	case " $rmdirs " in
-	  *" $odir "*) ;;
-	  *) func_append rmdirs " $odir" ;;
-	esac
-      fi
-
-      # Don't error if the file doesn't exist and rm -f was used.
-      if { test -L "$file"; } >/dev/null 2>&1 ||
-	 { test -h "$file"; } >/dev/null 2>&1 ||
-	 test -f "$file"; then
-	:
-      elif test -d "$file"; then
-	exit_status=1
-	continue
-      elif test "$rmforce" = yes; then
-	continue
-      fi
-
-      rmfiles="$file"
-
-      case $name in
-      *.la)
-	# Possibly a libtool archive, so verify it.
-	if func_lalib_p "$file"; then
-	  func_source $dir/$name
-
-	  # Delete the libtool libraries and symlinks.
-	  for n in $library_names; do
-	    func_append rmfiles " $odir/$n"
-	  done
-	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
-
-	  case "$opt_mode" in
-	  clean)
-	    case " $library_names " in
-	    *" $dlname "*) ;;
-	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
-	    esac
-	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
-	    ;;
-	  uninstall)
-	    if test -n "$library_names"; then
-	      # Do each command in the postuninstall commands.
-	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
-	    fi
-
-	    if test -n "$old_library"; then
-	      # Do each command in the old_postuninstall commands.
-	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
-	    fi
-	    # FIXME: should reinstall the best remaining shared library.
-	    ;;
-	  esac
-	fi
-	;;
-
-      *.lo)
-	# Possibly a libtool object, so verify it.
-	if func_lalib_p "$file"; then
-
-	  # Read the .lo file
-	  func_source $dir/$name
-
-	  # Add PIC object to the list of files to remove.
-	  if test -n "$pic_object" &&
-	     test "$pic_object" != none; then
-	    func_append rmfiles " $dir/$pic_object"
-	  fi
-
-	  # Add non-PIC object to the list of files to remove.
-	  if test -n "$non_pic_object" &&
-	     test "$non_pic_object" != none; then
-	    func_append rmfiles " $dir/$non_pic_object"
-	  fi
-	fi
-	;;
-
-      *)
-	if test "$opt_mode" = clean ; then
-	  noexename=$name
-	  case $file in
-	  *.exe)
-	    func_stripname '' '.exe' "$file"
-	    file=$func_stripname_result
-	    func_stripname '' '.exe' "$name"
-	    noexename=$func_stripname_result
-	    # $file with .exe has already been added to rmfiles,
-	    # add $file without .exe
-	    func_append rmfiles " $file"
-	    ;;
-	  esac
-	  # Do a test to see if this is a libtool program.
-	  if func_ltwrapper_p "$file"; then
-	    if func_ltwrapper_executable_p "$file"; then
-	      func_ltwrapper_scriptname "$file"
-	      relink_command=
-	      func_source $func_ltwrapper_scriptname_result
-	      func_append rmfiles " $func_ltwrapper_scriptname_result"
-	    else
-	      relink_command=
-	      func_source $dir/$noexename
-	    fi
-
-	    # note $name still contains .exe if it was in $file originally
-	    # as does the version of $file that was added into $rmfiles
-	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
-	    if test "$fast_install" = yes && test -n "$relink_command"; then
-	      func_append rmfiles " $odir/lt-$name"
-	    fi
-	    if test "X$noexename" != "X$name" ; then
-	      func_append rmfiles " $odir/lt-${noexename}.c"
-	    fi
-	  fi
-	fi
-	;;
-      esac
-      func_show_eval "$RM $rmfiles" 'exit_status=1'
-    done
-
-    # Try to remove the ${objdir}s in the directories where we deleted files
-    for dir in $rmdirs; do
-      if test -d "$dir"; then
-	func_show_eval "rmdir $dir >/dev/null 2>&1"
-      fi
-    done
-
-    exit $exit_status
-}
-
-{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
-    func_mode_uninstall ${1+"$@"}
-
-test -z "$opt_mode" && {
-  help="$generic_help"
-  func_fatal_help "you must specify a MODE"
-}
-
-test -z "$exec_cmd" && \
-  func_fatal_help "invalid operation mode \`$opt_mode'"
-
-if test -n "$exec_cmd"; then
-  eval exec "$exec_cmd"
-  exit $EXIT_FAILURE
-fi
-
-exit $exit_status
-
-
-# The TAGs below are defined such that we never get into a situation
-# in which we disable both kinds of libraries.  Given conflicting
-# choices, we go for a static library, that is the most portable,
-# since we can't tell whether shared libraries were disabled because
-# the user asked for that or because the platform doesn't support
-# them.  This is particularly important on AIX, because we don't
-# support having both static and shared libraries enabled at the same
-# time on that platform, so we default to a shared-only configuration.
-# If a disable-shared tag is given, we'll fallback to a static-only
-# configuration.  But we'll never go from static-only to shared-only.
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-build_libtool_libs=no
-build_old_libs=yes
-# ### END LIBTOOL TAG CONFIG: disable-shared
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
-# ### END LIBTOOL TAG CONFIG: disable-static
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
-# vi:sw=2
-
diff --git a/config/missing b/config/missing
deleted file mode 100644
index 9a55648..0000000
--- a/config/missing
+++ /dev/null
@@ -1,330 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-
-scriptversion=2012-01-06.18; # UTC
-
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-if test $# -eq 0; then
-  echo 1>&2 "Try '$0 --help' for more information"
-  exit 1
-fi
-
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, 'missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
-case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
-
-  -h|--h|--he|--hel|--help)
-    echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
-  -h, --help      display this help and exit
-  -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
-
-Supported PROGRAM values:
-  aclocal      touch file 'aclocal.m4'
-  autoconf     touch file 'configure'
-  autoheader   touch file 'config.h.in'
-  autom4te     touch the output file, or create a stub one
-  automake     touch all 'Makefile.in' files
-  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
-  flex         create 'lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create 'lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
-
-Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
-'g' are ignored when checking the name.
-
-Send bug reports to <bug-automake at gnu.org>."
-    exit $?
-    ;;
-
-  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
-    echo "missing $scriptversion (GNU Automake)"
-    exit $?
-    ;;
-
-  -*)
-    echo 1>&2 "$0: Unknown '$1' option"
-    echo 1>&2 "Try '$0 --help' for more information"
-    exit 1
-    ;;
-
-esac
-
-# normalize program name to check for.
-program=`echo "$1" | sed '
-  s/^gnu-//; t
-  s/^gnu//; t
-  s/^g//; t'`
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).  This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
-  lex*|yacc*)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running '$TOOL --version' or '$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $program in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
-         to install the Automake and Perl packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified '${configure_ac}'.  You might want to install the
-         Autoconf and GNU m4 packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'acconfig.h' or '${configure_ac}'.  You might want
-         to install the Autoconf and GNU m4 packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case $f in
-      *:*) touch_files="$touch_files "`echo "$f" |
-				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
-         You might want to install the Automake and Perl packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-	   sed 's/\.am$/.in/' |
-	   while read f; do touch "$f"; done
-    ;;
-
-  autom4te*)
-    echo 1>&2 "\
-WARNING: '$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get '$1' as part of Autoconf from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo "#! /bin/sh"
-	echo "# Created by GNU Automake missing as a replacement of"
-	echo "#  $ $@"
-	echo "exit 0"
-	chmod +x $file
-	exit 1
-    fi
-    ;;
-
-  bison*|yacc*)
-    echo 1>&2 "\
-WARNING: '$1' $msg.  You should only need it if
-         you modified a '.y' file.  You may need the Bison package
-         in order for those modifications to take effect.  You can get
-         Bison from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-	case $LASTARG in
-	*.y)
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.c
-	    fi
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.h
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f y.tab.h; then
-	echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-	echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex*|flex*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified a '.l' file.  You may need the Flex package
-         in order for those modifications to take effect.  You can get
-         Flex from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-	case $LASTARG in
-	*.l)
-	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" lex.yy.c
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f lex.yy.c; then
-	echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-	 you modified a dependency of a manual page.  You may need the
-	 Help2man package in order for those modifications to take
-	 effect.  You can get Help2man from any GNU archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo ".ab help2man is required to generate this page"
-	exit $?
-    fi
-    ;;
-
-  makeinfo*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified a '.texi' or '.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy 'make' (AIX,
-         DU, IRIX).  You might want to install the Texinfo package or
-         the GNU make package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '
-	/^@setfilename/{
-	  s/.* \([^ ]*\) *$/\1/
-	  p
-	  q
-	}' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
-
-  *)
-    echo 1>&2 "\
-WARNING: '$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the 'README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing '$1' program."
-    exit 1
-    ;;
-esac
-
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/configure b/configure
deleted file mode 100644
index 2fdf263..0000000
--- a/configure
+++ /dev/null
@@ -1,22488 +0,0 @@
-#! /bin/sh
-# From configure.ac Id: configure.ac 3971 2013-04-29 08:59:35Z tovo .
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for NFFT 3.2.3.
-#
-# Report bugs to <bugs at nfft.org>.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-#
-# 2003, 2012, Jens Keiner, Stefan Kunis, Daniel Potts
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
-  # into an infinite loop, continuously re-executing ourselves.
-  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
-    _as_can_reexec=no; export _as_can_reexec;
-    # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
-  fi
-  # We don't want this to propagate to other subprocesses.
-          { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-
-  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
-    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
-    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
-    PATH=/empty FPATH=/empty; export PATH FPATH
-    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
-      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-	 /*)
-	   for as_base in sh bash ksh sh5; do
-	     # Try only shells that exist, to save several forks.
-	     as_shell=$as_dir/$as_base
-	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-	   done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  export CONFIG_SHELL
-             # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell bug-autoconf at gnu.org and bugs at nfft.org
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
-  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-  # already done that, so ensure we don't try to do so again and fall
-  # in an infinite loop.  This has already happened in practice.
-  _as_can_reexec=no; export _as_can_reexec
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='NFFT'
-PACKAGE_TARNAME='nfft'
-PACKAGE_VERSION='3.2.3'
-PACKAGE_STRING='NFFT 3.2.3'
-PACKAGE_BUGREPORT='bugs at nfft.org'
-PACKAGE_URL=''
-
-ac_unique_file="include/nfft3.h"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='am__EXEEXT_FALSE
-am__EXEEXT_TRUE
-LTLIBOBJS
-TICKS_PER_SECOND
-LIBOBJS
-POW_LIB
-ALLOCA
-PRTDIAG
-matlab_fftw3_LDFLAGS
-matlab_fftw3_LIBS
-matlab_mexext
-matlab_LDFLAGS
-matlab_LIBS
-matlab_CPPFLAGS
-HAVE_MATLAB_THREADS_FALSE
-HAVE_MATLAB_THREADS_TRUE
-HAVE_MATLAB_FALSE
-HAVE_MATLAB_TRUE
-matlab_prog_mexext
-OPENMP_CFLAGS
-HAVE_OPENMP_FALSE
-HAVE_OPENMP_TRUE
-fftw3_LDFLAGS
-fftw3_threads_LIBS
-fftw3_LIBS
-am__fastdepCCAS_FALSE
-am__fastdepCCAS_TRUE
-CCASDEPMODE
-CCASFLAGS
-CCAS
-HAVE_THREADS_FALSE
-HAVE_THREADS_TRUE
-HAVE_FPT
-HAVE_FPT_FALSE
-HAVE_FPT_TRUE
-HAVE_MRI
-HAVE_MRI_FALSE
-HAVE_MRI_TRUE
-HAVE_NSFFT
-HAVE_NSFFT_FALSE
-HAVE_NSFFT_TRUE
-HAVE_NNFFT
-HAVE_NNFFT_FALSE
-HAVE_NNFFT_TRUE
-HAVE_NFSOFT
-HAVE_NFSOFT_FALSE
-HAVE_NFSOFT_TRUE
-HAVE_NFSFT
-HAVE_NFSFT_FALSE
-HAVE_NFSFT_TRUE
-HAVE_NFST
-HAVE_NFST_FALSE
-HAVE_NFST_TRUE
-HAVE_NFCT
-HAVE_NFCT_FALSE
-HAVE_NFCT_TRUE
-MAINT
-MAINTAINER_MODE_FALSE
-MAINTAINER_MODE_TRUE
-am__fastdepCC_FALSE
-am__fastdepCC_TRUE
-CCDEPMODE
-am__nodep
-AMDEPBACKSLASH
-AMDEP_FALSE
-AMDEP_TRUE
-am__quote
-am__include
-DEPDIR
-am__untar
-am__tar
-AMTAR
-am__leading_dot
-mkdir_p
-MKDIR_P
-INSTALL_STRIP_PROGRAM
-install_sh
-MAKEINFO
-AUTOHEADER
-AUTOMAKE
-AUTOCONF
-ACLOCAL
-VERSION
-PACKAGE
-CYGPATH_W
-am__isrc
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-SET_MAKE
-SHARED_VERSION_INFO
-LIBTOOL_DEPS
-CPP
-OTOOL64
-OTOOL
-LIPO
-NMEDIT
-DSYMUTIL
-MANIFEST_TOOL
-AWK
-RANLIB
-STRIP
-ac_ct_AR
-AR
-LN_S
-NM
-ac_ct_DUMPBIN
-DUMPBIN
-LD
-FGREP
-EGREP
-GREP
-SED
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-LIBTOOL
-OBJDUMP
-DLLTOOL
-AS
-abs_srcdir
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_shared
-enable_static
-with_pic
-enable_fast_install
-with_gnu_ld
-with_sysroot
-enable_libtool_lock
-enable_dependency_tracking
-enable_maintainer_mode
-enable_all
-enable_nfct
-enable_nfst
-enable_nfsft
-enable_nfsoft
-enable_nnfft
-enable_nsfft
-enable_mri
-enable_fpt
-enable_openmp
-enable_debug
-enable_measure_time
-enable_measure_time_fftw
-enable_mips_zbus_timer
-with_window
-with_fftw3
-with_fftw3_libdir
-with_fftw3_includedir
-with_matlab
-with_matlab_arch
-enable_matlab_argchecks
-with_matlab_fftw3_libdir
-enable_matlab_threads
-enable_portable_binary
-with_gcc_arch
-with_apple_gcc_arch
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP
-CCAS
-CCASFLAGS'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *=)   ac_optarg= ;;
-  *)    ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
-		datadir sysconfdir sharedstatedir localstatedir includedir \
-		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_myself" : 'X\(//\)[^/]' \| \
-	 X"$as_myself" : 'X\(//\)$' \| \
-	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
-	pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures NFFT 3.2.3 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/nfft]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_ACEOF
-
-  cat <<\_ACEOF
-
-Program names:
-  --program-prefix=PREFIX            prepend PREFIX to installed program names
-  --program-suffix=SUFFIX            append SUFFIX to installed program names
-  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of NFFT 3.2.3:";;
-   esac
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-option-checking  ignore unrecognized --enable/--with options
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-shared[=PKGS]  build shared libraries [default=yes]
-  --enable-static[=PKGS]  build static libraries [default=yes]
-  --enable-fast-install[=PKGS]
-                          optimize for fast installation [default=yes]
-  --disable-libtool-lock  avoid locking (might break parallel builds)
-  --enable-dependency-tracking
-                          do not reject slow dependency extractors
-  --disable-dependency-tracking
-                          speeds up one-time build
-  --enable-maintainer-mode
-                          enable make rules and dependencies not useful (and
-                          sometimes confusing) to the casual installer
-  --enable-all            build all modules
-  --enable-nfct           build NFCT module (nonequispaced fast cosine
-                          transform)
-  --enable-nfst           build NFST module (nonequispaced fast sine
-                          transform)
-  --enable-nfsft          build NFSFT module (nonequispaced fast spherical
-                          Fourier transform)
-  --enable-nfsoft         build NFSOFT module (nonequispaced fast SO(3)
-                          Fourier transform)
-  --enable-nnfft          build NNFFT module (nonequispaced fast Fourier
-                          transform -- # nonequispaced in both domains)
-  --enable-nsfft          build NSFFT module (nonequispaced sparse fast
-                          Fourier transform)
-  --enable-mri            build MRI module (magnet resonance imaging)
-  --enable-fpt            build FPT module (fast polynomial transform)
-  --enable-openmp         enable OpenMP multithreaded code
-  --enable-debug          compile with extra runtime checks for debugging
-  --enable-measure-time   measure time during execution
-  --enable-measure-time-fftw
-                          measure time of FFTW transforms during execution
-  --enable-mips-zbus-timer
-                          use MIPS ZBus cycle-counter
-  --enable-matlab-argchecks
-                          Compile Matlab interface with argument checks
-                          [default=yes]
-  --enable-matlab-threads Compile Matlab interface with thread support
-                          [default same as --enable-openmp]
-  --enable-portable-binary
-                          disable compiler optimizations that would produce
-                          unportable binaries
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
-                          both]
-  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-sysroot=DIR Search for dependent libraries within DIR
-                        (or the compiler's sysroot if not specified).
-  --with-window=ARG       choose window function (ARG can be one of:
-                          kaiserbessel (default), gaussian, bspline, sinc,
-                          dirac)
-  --with-fftw3=DIR        compile with fftw3 in DIR
-  --with-fftw3-libdir=DIR compile with fftw3 library directory DIR
-  --with-fftw3-includedir=DIR
-                          compile with fftw3 include directory DIR
-  --with-matlab=DIR       the directory where Matlab is installed
-  --with-matlab-arch=DIR  Matlab architecture acronym
-  --with-matlab-fftw3-libdir=DIR
-                          compile Matlab interface with fftw3 library
-                          directory DIR
-  --with-gcc-arch=<arch>  use architecture <arch> for gcc -march/-mtune,
-                          instead of guessing
-  --with-apple-gcc-arch=<arch>
-                          use architecture <arch> for Apple's gcc -arch,
-                          instead of guessing
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-  CCAS        assembler compiler command (defaults to CC)
-  CCASFLAGS   assembler compiler flags (defaults to CFLAGS)
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to <bugs at nfft.org>.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-NFFT configure 3.2.3
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-
-2003, 2012, Jens Keiner, Stefan Kunis, Daniel Potts
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } > conftest.i && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ---------------------------- ##
-## Report this to bugs at nfft.org ##
-## ---------------------------- ##"
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=no"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof ($2))
-	 return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
-	    return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_type
-
-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
-# --------------------------------------------
-# Tries to find the compile-time value of EXPR in a program that includes
-# INCLUDES, setting VAR accordingly. Returns whether the value could be
-# computed
-ac_fn_c_compute_int ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if test "$cross_compiling" = yes; then
-    # Depending upon the size, compute the lo and hi bounds.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid; break
-else
-  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=$ac_mid; break
-else
-  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  ac_lo= ac_hi=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid
-else
-  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in #((
-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
-'') ac_retval=1 ;;
-esac
-  else
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (($2) < 0)
-    {
-      long int i = longval ();
-      if (i != ($2))
-	return 1;
-      fprintf (f, "%ld", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ($2))
-	return 1;
-      fprintf (f, "%lu", i);
-    }
-  /* Do not output a trailing newline, as this causes \r\n confusion
-     on some platforms.  */
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
-  ac_retval=1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-rm -f conftest.val
-
-  fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_compute_int
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_decl
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by NFFT $as_me 3.2.3, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-	"s/'\''/'\''\\\\'\'''\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=\$$ac_var
-	case $ac_val in
-	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-	esac
-	$as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	# differences in whitespace do not lead to failure.
-	ac_old_val_w=`echo x $ac_old_val`
-	ac_new_val_w=`echo x $ac_new_val`
-	if test "$ac_old_val_w" != "$ac_new_val_w"; then
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	  ac_cache_corrupted=:
-	else
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-	  eval $ac_var=\$ac_old_val
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-# revision id from svn
-
-
-# copyright notice
-
-
-# m4 macros go here
-
-
-# where to put auxilliary files
-ac_aux_dir=
-for ac_dir in config "$srcdir"/config; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-
-# how to recognize the source directory
-
-
-# header to create
-ac_config_headers="$ac_config_headers include/config.h:include/config.h.in"
-
-
-# canonical host system type string
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-
-# number of CPUs
-#AX_COUNT_CPUS
-#AC_DEFINE_UNQUOTED(NFFT_NUM_CORES,$cpu_count,[Define to number of cores.])
-
-# substitute abs_srcdir in generated Makefiles
-
-
-# minimum required libtool version
-
-
-# libtool initialization
-case `pwd` in
-  *\ * | *\	*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
-esac
-
-
-
-macro_version='2.4.2'
-macro_revision='1.3337'
-
-
-
-
-
-
-
-
-
-
-
-
-
-ltmain="$ac_aux_dir/ltmain.sh"
-
-# Backslashify metacharacters that are still active within
-# double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
-$as_echo_n "checking how to print strings... " >&6; }
-# Test print first, because it will be a builtin if present.
-if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
-   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
-  ECHO='print -r --'
-elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-  ECHO='printf %s\n'
-else
-  # Use this function as a fallback that always works.
-  func_fallback_echo ()
-  {
-    eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
-  }
-  ECHO='func_fallback_echo'
-fi
-
-# func_echo_all arg...
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
-    $ECHO ""
-}
-
-case "$ECHO" in
-  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
-$as_echo "printf" >&6; } ;;
-  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
-$as_echo "print -r" >&6; } ;;
-  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
-$as_echo "cat" >&6; } ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-	then :; else
-	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	fi
-	# We set ac_cv_exeext here because the later test for it is not
-	# safe: cross compilers may not add the suffix if given an `-o'
-	# argument, so we may need to know it at that point already.
-	# Even if this section looks crufty: it has the advantage of
-	# actually working.
-	break;;
-    * )
-	break;;
-  esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
-  ac_file=''
-fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
-     for ac_i in 1 2 3 4 5 6 7; do
-       ac_script="$ac_script$as_nl$ac_script"
-     done
-     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     { ac_script=; unset ac_script;}
-     if test -z "$SED"; then
-  ac_path_SED_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_SED" || continue
-# Check for GNU ac_path_SED and select it if it is found.
-  # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
-  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
-    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_SED_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_SED="$ac_path_SED"
-      ac_path_SED_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_SED_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_SED"; then
-    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
-  fi
-else
-  ac_cv_path_SED=$SED
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
-  rm -f conftest.sed
-
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
-$as_echo_n "checking for fgrep... " >&6; }
-if ${ac_cv_path_FGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
-   then ac_cv_path_FGREP="$GREP -F"
-   else
-     if test -z "$FGREP"; then
-  ac_path_FGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in fgrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_FGREP" || continue
-# Check for GNU ac_path_FGREP and select it if it is found.
-  # Check for GNU $ac_path_FGREP
-case `"$ac_path_FGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'FGREP' >> "conftest.nl"
-    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_FGREP="$ac_path_FGREP"
-      ac_path_FGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_FGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_FGREP=$FGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
-$as_echo "$ac_cv_path_FGREP" >&6; }
- FGREP="$ac_cv_path_FGREP"
-
-
-test -z "$GREP" && GREP=grep
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [\\/]* | ?:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if ${lt_cv_path_LD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
-	;;
-      *)
-	test "$with_gnu_ld" != yes && break
-	;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${lt_cv_prog_gnu_ld+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
-$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if ${lt_cv_path_NM+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
-	  lt_cv_path_NM="$tmp_nm -B"
-	  break
-	  ;;
-	*)
-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-	  */dev/null*)
-	    lt_cv_path_NM="$tmp_nm -p"
-	    break
-	    ;;
-	  *)
-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-	    continue # so that we can try to find one that supports BSD flags
-	    ;;
-	  esac
-	  ;;
-	esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  if test -n "$DUMPBIN"; then :
-    # Let the user override the test.
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in dumpbin "link -dump"
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DUMPBIN+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$DUMPBIN"; then
-  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-DUMPBIN=$ac_cv_prog_DUMPBIN
-if test -n "$DUMPBIN"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
-$as_echo "$DUMPBIN" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$DUMPBIN" && break
-  done
-fi
-if test -z "$DUMPBIN"; then
-  ac_ct_DUMPBIN=$DUMPBIN
-  for ac_prog in dumpbin "link -dump"
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_DUMPBIN"; then
-  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
-if test -n "$ac_ct_DUMPBIN"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
-$as_echo "$ac_ct_DUMPBIN" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_DUMPBIN" && break
-done
-
-  if test "x$ac_ct_DUMPBIN" = x; then
-    DUMPBIN=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    DUMPBIN=$ac_ct_DUMPBIN
-  fi
-fi
-
-    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
-    *COFF*)
-      DUMPBIN="$DUMPBIN -symbols"
-      ;;
-    *)
-      DUMPBIN=:
-      ;;
-    esac
-  fi
-
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
-$as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if ${lt_cv_nm_interface+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&5
-  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&5
-  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
-  cat conftest.out >&5
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
-$as_echo "$lt_cv_nm_interface" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-# find the maximum length of command line arguments
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if ${lt_cv_sys_max_cmd_len+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-    i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  mint*)
-    # On MiNT this can take a long time and run out of memory.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  os2*)
-    # The test takes a long time on OS/2.
-    lt_cv_sys_max_cmd_len=8192
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
-	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
-	      test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-
-fi
-
-if test -n $lt_cv_sys_max_cmd_len ; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-
-
-
-
-
-: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
-$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,b/c, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
-$as_echo "$xsi_shell" >&6; }
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
-$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
-$as_echo "$lt_shell_append" >&6; }
-
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-
-
-
-
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-if ${lt_cv_to_host_file_cmd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $host in
-  *-*-mingw* )
-    case $build in
-      *-*-mingw* ) # actually msys
-        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-        ;;
-      *-*-cygwin* )
-        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-        ;;
-      * ) # otherwise, assume *nix
-        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-        ;;
-    esac
-    ;;
-  *-*-cygwin* )
-    case $build in
-      *-*-mingw* ) # actually msys
-        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-        ;;
-      *-*-cygwin* )
-        lt_cv_to_host_file_cmd=func_convert_file_noop
-        ;;
-      * ) # otherwise, assume *nix
-        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-        ;;
-    esac
-    ;;
-  * ) # unhandled hosts (and "normal" native builds)
-    lt_cv_to_host_file_cmd=func_convert_file_noop
-    ;;
-esac
-
-fi
-
-to_host_file_cmd=$lt_cv_to_host_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-if ${lt_cv_to_tool_file_cmd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  #assume ordinary cross tools, or native build.
-lt_cv_to_tool_file_cmd=func_convert_file_noop
-case $host in
-  *-*-mingw* )
-    case $build in
-      *-*-mingw* ) # actually msys
-        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-        ;;
-    esac
-    ;;
-esac
-
-fi
-
-to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if ${lt_cv_ld_reload_flag+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_ld_reload_flag='-r'
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
-$as_echo "$lt_cv_ld_reload_flag" >&6; }
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    if test "$GCC" != yes; then
-      reload_cmds=false
-    fi
-    ;;
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
-set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OBJDUMP"; then
-  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OBJDUMP=$ac_cv_prog_OBJDUMP
-if test -n "$OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OBJDUMP"; then
-  ac_ct_OBJDUMP=$OBJDUMP
-  # Extract the first word of "objdump", so it can be a program name with args.
-set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OBJDUMP"; then
-  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_OBJDUMP="objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
-if test -n "$ac_ct_OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_OBJDUMP" = x; then
-    OBJDUMP="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OBJDUMP=$ac_ct_OBJDUMP
-  fi
-else
-  OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if ${lt_cv_deplibs_check_method+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[4-9]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[45]*)
-  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
-  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    # Keep this pattern in sync with the one in func_win32_libid.
-    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc*)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-haiku*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[3-9]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
-
-file_magic_glob=
-want_nocaseglob=no
-if test "$build" = "$host"; then
-  case $host_os in
-  mingw* | pw32*)
-    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-      want_nocaseglob=yes
-    else
-      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
-    fi
-    ;;
-  esac
-fi
-
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$DLLTOOL"; then
-  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-DLLTOOL=$ac_cv_prog_DLLTOOL
-if test -n "$DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DLLTOOL"; then
-  ac_ct_DLLTOOL=$DLLTOOL
-  # Extract the first word of "dlltool", so it can be a program name with args.
-set dummy dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_DLLTOOL"; then
-  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-if test -n "$ac_ct_DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_DLLTOOL" = x; then
-    DLLTOOL="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    DLLTOOL=$ac_ct_DLLTOOL
-  fi
-else
-  DLLTOOL="$ac_cv_prog_DLLTOOL"
-fi
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_sharedlib_from_linklib_cmd='unknown'
-
-case $host_os in
-cygwin* | mingw* | pw32* | cegcc*)
-  # two different shell functions defined in ltmain.sh
-  # decide which to use based on capabilities of $DLLTOOL
-  case `$DLLTOOL --help 2>&1` in
-  *--identify-strict*)
-    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-    ;;
-  *)
-    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-    ;;
-  esac
-  ;;
-*)
-  # fallback: assume linklib IS sharedlib
-  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-  ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  for ac_prog in ar
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$AR" && break
-  done
-fi
-if test -z "$AR"; then
-  ac_ct_AR=$AR
-  for ac_prog in ar
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_AR="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_AR" && break
-done
-
-  if test "x$ac_ct_AR" = x; then
-    AR="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    AR=$ac_ct_AR
-  fi
-fi
-
-: ${AR=ar}
-: ${AR_FLAGS=cru}
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-$as_echo_n "checking for archiver @FILE support... " >&6; }
-if ${lt_cv_ar_at_file+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_ar_at_file=no
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  echo conftest.$ac_objext > conftest.lst
-      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
-      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-  (eval $lt_ar_try) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-      if test "$ac_status" -eq 0; then
-	# Ensure the archiver fails upon bogus file names.
-	rm -f conftest.$ac_objext libconftest.a
-	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
-  (eval $lt_ar_try) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-	if test "$ac_status" -ne 0; then
-          lt_cv_ar_at_file=@
-        fi
-      fi
-      rm -f conftest.* libconftest.a
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-$as_echo "$lt_cv_ar_at_file" >&6; }
-
-if test "x$lt_cv_ar_at_file" = xno; then
-  archiver_list_spec=
-else
-  archiver_list_spec=$lt_cv_ar_at_file
-fi
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-test -z "$STRIP" && STRIP=:
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-test -z "$RANLIB" && RANLIB=:
-
-
-
-
-
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
-fi
-
-case $host_os in
-  darwin*)
-    lock_old_archive_extraction=yes ;;
-  *)
-    lock_old_archive_extraction=no ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-for ac_prog in gawk mawk nawk awk
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$AWK" && break
-done
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
-$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if ${lt_cv_sys_global_symbol_pipe+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[BCDT]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[ABCDGISTW]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[ABCDEGRST]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[BCDEGRST]'
-  ;;
-osf*)
-  symcode='[BCDEGQRST]'
-  ;;
-solaris*)
-  symcode='[BDRT]'
-  ;;
-sco3.2v5*)
-  symcode='[DT]'
-  ;;
-sysv4.2uw2*)
-  symcode='[DT]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[ABDT]'
-  ;;
-sysv4)
-  symcode='[DFNSTU]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[ABCDGIRSTW]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK '"\
-"     {last_section=section; section=\$ 3};"\
-"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
-  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<_LT_EOF > conftest.$ac_ext
-/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
-   relocations are performed -- see ld's documentation on pseudo-relocs.  */
-# define LT_DLSYM_CONST
-#elif defined(__osf__)
-/* This system does not cope well with relocations in const data.  */
-# define LT_DLSYM_CONST
-#else
-# define LT_DLSYM_CONST const
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-	  # Now generate the symbol file.
-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-	  cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-LT_DLSYM_CONST struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-	  cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-	  # Now try linking the two files.
-	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_globsym_save_LIBS=$LIBS
-	  lt_globsym_save_CFLAGS=$CFLAGS
-	  LIBS="conftstm.$ac_objext"
-	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
-	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
-	    pipe_works=yes
-	  fi
-	  LIBS=$lt_globsym_save_LIBS
-	  CFLAGS=$lt_globsym_save_CFLAGS
-	else
-	  echo "cannot find nm_test_func in $nlist" >&5
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&5
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
-    fi
-  else
-    echo "$progname: failed program was:" >&5
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-
-fi
-
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
-fi
-
-# Response file support.
-if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-  nm_file_list_spec='@'
-elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
-  nm_file_list_spec='@'
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-$as_echo_n "checking for sysroot... " >&6; }
-
-# Check whether --with-sysroot was given.
-if test "${with_sysroot+set}" = set; then :
-  withval=$with_sysroot;
-else
-  with_sysroot=no
-fi
-
-
-lt_sysroot=
-case ${with_sysroot} in #(
- yes)
-   if test "$GCC" = yes; then
-     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-   fi
-   ;; #(
- /*)
-   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
-   ;; #(
- no|'')
-   ;; #(
- *)
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
-$as_echo "${with_sysroot}" >&6; }
-   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
-   ;;
-esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then :
-  enableval=$enable_libtool_lock;
-fi
-
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-	HPUX_IA64_MODE="32"
-	;;
-      *ELF-64*)
-	HPUX_IA64_MODE="64"
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -melf32bsmip"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -melf32bmipn32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -melf64bmip"
-	;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -32"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -n32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -64"
-	  ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_i386_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_i386"
-	    ;;
-	  ppc64-*linux*|powerpc64-*linux*)
-	    LD="${LD-ld} -m elf32ppclinux"
-	    ;;
-	  s390x-*linux*)
-	    LD="${LD-ld} -m elf_s390"
-	    ;;
-	  sparc64-*linux*)
-	    LD="${LD-ld} -m elf32_sparc"
-	    ;;
-	esac
-	;;
-      *64-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_x86_64_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_x86_64"
-	    ;;
-	  ppc*-*linux*|powerpc*-*linux*)
-	    LD="${LD-ld} -m elf64ppc"
-	    ;;
-	  s390*-*linux*|s390*-*tpf*)
-	    LD="${LD-ld} -m elf64_s390"
-	    ;;
-	  sparc*-*linux*)
-	    LD="${LD-ld} -m elf64_sparc"
-	    ;;
-	esac
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if ${lt_cv_cc_needs_belf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  lt_cv_cc_needs_belf=yes
-else
-  lt_cv_cc_needs_belf=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*)
-        case $host in
-        i?86-*-solaris*)
-          LD="${LD-ld} -m elf_x86_64"
-          ;;
-        sparc*-*-solaris*)
-          LD="${LD-ld} -m elf64_sparc"
-          ;;
-        esac
-        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
-        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
-          LD="${LD-ld}_sol2"
-        fi
-        ;;
-      *)
-	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-	  LD="${LD-ld} -64"
-	fi
-	;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-set dummy ${ac_tool_prefix}mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$MANIFEST_TOOL"; then
-  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-if test -n "$MANIFEST_TOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-$as_echo "$MANIFEST_TOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
-  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
-  # Extract the first word of "mt", so it can be a program name with args.
-set dummy mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_MANIFEST_TOOL"; then
-  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-if test -n "$ac_ct_MANIFEST_TOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_MANIFEST_TOOL" = x; then
-    MANIFEST_TOOL=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
-  fi
-else
-  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-fi
-
-test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-if ${lt_cv_path_mainfest_tool+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_path_mainfest_tool=no
-  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
-  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-  cat conftest.err >&5
-  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-    lt_cv_path_mainfest_tool=yes
-  fi
-  rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-if test "x$lt_cv_path_mainfest_tool" != xyes; then
-  MANIFEST_TOOL=:
-fi
-
-
-
-
-
-
-  case $host_os in
-    rhapsody* | darwin*)
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DSYMUTIL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$DSYMUTIL"; then
-  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-DSYMUTIL=$ac_cv_prog_DSYMUTIL
-if test -n "$DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DSYMUTIL"; then
-  ac_ct_DSYMUTIL=$DSYMUTIL
-  # Extract the first word of "dsymutil", so it can be a program name with args.
-set dummy dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_DSYMUTIL"; then
-  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
-if test -n "$ac_ct_DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_DSYMUTIL" = x; then
-    DSYMUTIL=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    DSYMUTIL=$ac_ct_DSYMUTIL
-  fi
-else
-  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NMEDIT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$NMEDIT"; then
-  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-NMEDIT=$ac_cv_prog_NMEDIT
-if test -n "$NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_NMEDIT"; then
-  ac_ct_NMEDIT=$NMEDIT
-  # Extract the first word of "nmedit", so it can be a program name with args.
-set dummy nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_NMEDIT"; then
-  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_NMEDIT="nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
-if test -n "$ac_ct_NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_NMEDIT" = x; then
-    NMEDIT=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    NMEDIT=$ac_ct_NMEDIT
-  fi
-else
-  NMEDIT="$ac_cv_prog_NMEDIT"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
-set dummy ${ac_tool_prefix}lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LIPO+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$LIPO"; then
-  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-LIPO=$ac_cv_prog_LIPO
-if test -n "$LIPO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
-$as_echo "$LIPO" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_LIPO"; then
-  ac_ct_LIPO=$LIPO
-  # Extract the first word of "lipo", so it can be a program name with args.
-set dummy lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_LIPO"; then
-  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_LIPO="lipo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
-if test -n "$ac_ct_LIPO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
-$as_echo "$ac_ct_LIPO" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_LIPO" = x; then
-    LIPO=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    LIPO=$ac_ct_LIPO
-  fi
-else
-  LIPO="$ac_cv_prog_LIPO"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OTOOL"; then
-  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL=$ac_cv_prog_OTOOL
-if test -n "$OTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
-$as_echo "$OTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL"; then
-  ac_ct_OTOOL=$OTOOL
-  # Extract the first word of "otool", so it can be a program name with args.
-set dummy otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OTOOL"; then
-  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_OTOOL="otool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
-if test -n "$ac_ct_OTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
-$as_echo "$ac_ct_OTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_OTOOL" = x; then
-    OTOOL=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OTOOL=$ac_ct_OTOOL
-  fi
-else
-  OTOOL="$ac_cv_prog_OTOOL"
-fi
-
-    if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL64+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OTOOL64"; then
-  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL64=$ac_cv_prog_OTOOL64
-if test -n "$OTOOL64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
-$as_echo "$OTOOL64" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL64"; then
-  ac_ct_OTOOL64=$OTOOL64
-  # Extract the first word of "otool64", so it can be a program name with args.
-set dummy otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OTOOL64"; then
-  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_OTOOL64="otool64"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
-if test -n "$ac_ct_OTOOL64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
-$as_echo "$ac_ct_OTOOL64" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_OTOOL64" = x; then
-    OTOOL64=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OTOOL64=$ac_ct_OTOOL64
-  fi
-else
-  OTOOL64="$ac_cv_prog_OTOOL64"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if ${lt_cv_apple_cc_single_mod+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-	# By default we will add the -single_module flag. You can override
-	# by either setting the environment variable LT_MULTI_MODULE
-	# non-empty at configure time, or by adding -multi_module to the
-	# link flags.
-	rm -rf libconftest.dylib*
-	echo "int foo(void){return 1;}" > conftest.c
-	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&5
-	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-	# If there is a non-empty error log, and "single_module"
-	# appears in it, assume the flag caused a linker warning
-        if test -s conftest.err && $GREP single_module conftest.err; then
-	  cat conftest.err >&5
-	# Otherwise, if the output was created with a 0 exit code from
-	# the compiler, it worked.
-	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
-	  lt_cv_apple_cc_single_mod=yes
-	else
-	  cat conftest.err >&5
-	fi
-	rm -rf libconftest.dylib*
-	rm -f conftest.*
-      fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if ${lt_cv_ld_exported_symbols_list+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  lt_cv_ld_exported_symbols_list=yes
-else
-  lt_cv_ld_exported_symbols_list=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-	LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
-$as_echo_n "checking for -force_load linker flag... " >&6; }
-if ${lt_cv_ld_force_load+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_ld_force_load=no
-      cat > conftest.c << _LT_EOF
-int forced_loaded() { return 2;}
-_LT_EOF
-      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
-      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
-      echo "$AR cru libconftest.a conftest.o" >&5
-      $AR cru libconftest.a conftest.o 2>&5
-      echo "$RANLIB libconftest.a" >&5
-      $RANLIB libconftest.a 2>&5
-      cat > conftest.c << _LT_EOF
-int main() { return 0;}
-_LT_EOF
-      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
-      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
-      _lt_result=$?
-      if test -s conftest.err && $GREP force_load conftest.err; then
-	cat conftest.err >&5
-      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
-	lt_cv_ld_force_load=yes
-      else
-	cat conftest.err >&5
-      fi
-        rm -f conftest.err libconftest.a conftest conftest.c
-        rm -rf conftest.dSYM
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
-$as_echo "$lt_cv_ld_force_load" >&6; }
-    case $host_os in
-    rhapsody* | darwin1.[012])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[012]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in dlfcn.h
-do :
-  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_dlfcn_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-# Set options
-enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
-set dummy ${ac_tool_prefix}as; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AS+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AS"; then
-  ac_cv_prog_AS="$AS" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AS="${ac_tool_prefix}as"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AS=$ac_cv_prog_AS
-if test -n "$AS"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
-$as_echo "$AS" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AS"; then
-  ac_ct_AS=$AS
-  # Extract the first word of "as", so it can be a program name with args.
-set dummy as; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AS+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_AS"; then
-  ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_AS="as"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AS=$ac_cv_prog_ac_ct_AS
-if test -n "$ac_ct_AS"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
-$as_echo "$ac_ct_AS" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_AS" = x; then
-    AS="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    AS=$ac_ct_AS
-  fi
-else
-  AS="$ac_cv_prog_AS"
-fi
-
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$DLLTOOL"; then
-  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-DLLTOOL=$ac_cv_prog_DLLTOOL
-if test -n "$DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DLLTOOL"; then
-  ac_ct_DLLTOOL=$DLLTOOL
-  # Extract the first word of "dlltool", so it can be a program name with args.
-set dummy dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_DLLTOOL"; then
-  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-if test -n "$ac_ct_DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_DLLTOOL" = x; then
-    DLLTOOL="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    DLLTOOL=$ac_ct_DLLTOOL
-  fi
-else
-  DLLTOOL="$ac_cv_prog_DLLTOOL"
-fi
-
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
-set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OBJDUMP"; then
-  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OBJDUMP=$ac_cv_prog_OBJDUMP
-if test -n "$OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OBJDUMP"; then
-  ac_ct_OBJDUMP=$OBJDUMP
-  # Extract the first word of "objdump", so it can be a program name with args.
-set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OBJDUMP"; then
-  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_OBJDUMP="objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
-if test -n "$ac_ct_OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_OBJDUMP" = x; then
-    OBJDUMP="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OBJDUMP=$ac_ct_OBJDUMP
-  fi
-else
-  OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
-  ;;
-esac
-
-test -z "$AS" && AS=as
-
-
-
-
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-
-
-
-
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-
-
-
-
-
-
-        enable_dlopen=no
-
-
-
-            # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then :
-  enableval=$enable_shared; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_shared=yes
-fi
-
-
-
-
-
-
-
-
-
-  # Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then :
-  enableval=$enable_static; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_static=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_static=yes
-fi
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then :
-  withval=$with_pic; lt_p=${PACKAGE-default}
-    case $withval in
-    yes|no) pic_mode=$withval ;;
-    *)
-      pic_mode=default
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for lt_pkg in $withval; do
-	IFS="$lt_save_ifs"
-	if test "X$lt_pkg" = "X$lt_p"; then
-	  pic_mode=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  pic_mode=default
-fi
-
-
-test -z "$pic_mode" && pic_mode=default
-
-
-
-
-
-
-
-  # Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then :
-  enableval=$enable_fast_install; p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_fast_install=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac
-else
-  enable_fast_install=yes
-fi
-
-
-
-
-
-
-
-
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-test -z "$LN_S" && LN_S="ln -s"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if ${lt_cv_objdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
-$as_echo "$lt_cv_objdir" >&6; }
-objdir=$lt_cv_objdir
-
-
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define LT_OBJDIR "$lt_cv_objdir/"
-_ACEOF
-
-
-
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
-
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $MAGIC_CMD in
-[\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/${ac_tool_prefix}file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
-      if test -n "$file_magic_test_file"; then
-	case $deplibs_check_method in
-	"file_magic "*)
-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-	    $EGREP "$file_magic_regex" > /dev/null; then
-	    :
-	  else
-	    cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-_LT_EOF
-	  fi ;;
-	esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $MAGIC_CMD in
-[\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/file; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/file"
-      if test -n "$file_magic_test_file"; then
-	case $deplibs_check_method in
-	"file_magic "*)
-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-	    $EGREP "$file_magic_regex" > /dev/null; then
-	    :
-	  else
-	    cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-_LT_EOF
-	  fi ;;
-	esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac
-fi
-
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  else
-    MAGIC_CMD=:
-  fi
-fi
-
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-
-lt_save_CC="$CC"
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-objext=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-if test -n "$compiler"; then
-
-lt_prog_compiler_no_builtin_flag=
-
-if test "$GCC" = yes; then
-  case $cc_basename in
-  nvcc*)
-    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
-  *)
-    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
-  esac
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_rtti_exceptions=no
-   ac_outfile=conftest.$ac_objext
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="-fno-rtti -fno-exceptions"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_rtti_exceptions=yes
-     fi
-   fi
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
-    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
-else
-    :
-fi
-
-fi
-
-
-
-
-
-
-  lt_prog_compiler_wl=
-lt_prog_compiler_pic=
-lt_prog_compiler_static=
-
-
-  if test "$GCC" = yes; then
-    lt_prog_compiler_wl='-Wl,'
-    lt_prog_compiler_static='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	lt_prog_compiler_static='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            lt_prog_compiler_pic='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      lt_prog_compiler_pic='-DDLL_EXPORT'
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic='-fno-common'
-      ;;
-
-    haiku*)
-      # PIC is the default for Haiku.
-      # The "-static" flag exists, but is broken.
-      lt_prog_compiler_static=
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	# +Z the default
-	;;
-      *)
-	lt_prog_compiler_pic='-fPIC'
-	;;
-      esac
-      ;;
-
-    interix[3-9]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      lt_prog_compiler_can_build_shared=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      lt_prog_compiler_pic='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	lt_prog_compiler_pic=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      lt_prog_compiler_pic='-fPIC'
-      ;;
-    esac
-
-    case $cc_basename in
-    nvcc*) # Cuda Compiler Driver 2.2
-      lt_prog_compiler_wl='-Xlinker '
-      if test -n "$lt_prog_compiler_pic"; then
-        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
-      fi
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      lt_prog_compiler_wl='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	lt_prog_compiler_static='-Bstatic'
-      else
-	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      lt_prog_compiler_pic='-DDLL_EXPORT'
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      lt_prog_compiler_wl='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-	# +Z the default
-	;;
-      *)
-	lt_prog_compiler_pic='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      lt_prog_compiler_static='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      lt_prog_compiler_wl='-Wl,'
-      # PIC (with -KPIC) is the default.
-      lt_prog_compiler_static='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='-KPIC'
-	lt_prog_compiler_static='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='-fPIC'
-	lt_prog_compiler_static='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='--shared'
-	lt_prog_compiler_static='--static'
-	;;
-      nagfor*)
-	# NAG Fortran compiler
-	lt_prog_compiler_wl='-Wl,-Wl,,'
-	lt_prog_compiler_pic='-PIC'
-	lt_prog_compiler_static='-Bstatic'
-	;;
-      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='-fpic'
-	lt_prog_compiler_static='-Bstatic'
-        ;;
-      ccc*)
-        lt_prog_compiler_wl='-Wl,'
-        # All Alpha code is PIC.
-        lt_prog_compiler_static='-non_shared'
-        ;;
-      xl* | bgxl* | bgf* | mpixl*)
-	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
-	lt_prog_compiler_wl='-Wl,'
-	lt_prog_compiler_pic='-qpic'
-	lt_prog_compiler_static='-qstaticlink'
-	;;
-      *)
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  lt_prog_compiler_pic='-KPIC'
-	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl=''
-	  ;;
-	*Sun\ F* | *Sun*Fortran*)
-	  lt_prog_compiler_pic='-KPIC'
-	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl='-Qoption ld '
-	  ;;
-	*Sun\ C*)
-	  # Sun C 5.9
-	  lt_prog_compiler_pic='-KPIC'
-	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl='-Wl,'
-	  ;;
-        *Intel*\ [CF]*Compiler*)
-	  lt_prog_compiler_wl='-Wl,'
-	  lt_prog_compiler_pic='-fPIC'
-	  lt_prog_compiler_static='-static'
-	  ;;
-	*Portland\ Group*)
-	  lt_prog_compiler_wl='-Wl,'
-	  lt_prog_compiler_pic='-fpic'
-	  lt_prog_compiler_static='-Bstatic'
-	  ;;
-	esac
-	;;
-      esac
-      ;;
-
-    newsos6)
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      lt_prog_compiler_pic='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      lt_prog_compiler_wl='-Wl,'
-      # All OSF/1 code is PIC.
-      lt_prog_compiler_static='-non_shared'
-      ;;
-
-    rdos*)
-      lt_prog_compiler_static='-non_shared'
-      ;;
-
-    solaris*)
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
-	lt_prog_compiler_wl='-Qoption ld ';;
-      *)
-	lt_prog_compiler_wl='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      lt_prog_compiler_wl='-Qoption ld '
-      lt_prog_compiler_pic='-PIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      lt_prog_compiler_wl='-Wl,'
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	lt_prog_compiler_pic='-Kconform_pic'
-	lt_prog_compiler_static='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      lt_prog_compiler_wl='-Wl,'
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    unicos*)
-      lt_prog_compiler_wl='-Wl,'
-      lt_prog_compiler_can_build_shared=no
-      ;;
-
-    uts4*)
-      lt_prog_compiler_pic='-pic'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    *)
-      lt_prog_compiler_can_build_shared=no
-      ;;
-    esac
-  fi
-
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic=
-    ;;
-  *)
-    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
-    ;;
-esac
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-if ${lt_cv_prog_compiler_pic+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if ${lt_cv_prog_compiler_pic_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_pic_works=no
-   ac_outfile=conftest.$ac_objext
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_pic_works=yes
-     fi
-   fi
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
-    case $lt_prog_compiler_pic in
-     "" | " "*) ;;
-     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
-     esac
-else
-    lt_prog_compiler_pic=
-     lt_prog_compiler_can_build_shared=no
-fi
-
-fi
-
-
-
-
-
-
-
-
-
-
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if ${lt_cv_prog_compiler_static_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_static_works=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&5
-       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         lt_cv_prog_compiler_static_works=yes
-       fi
-     else
-       lt_cv_prog_compiler_static_works=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works" = xyes; then
-    :
-else
-    lt_prog_compiler_static=
-fi
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if ${lt_cv_prog_compiler_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_c_o=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o=yes
-     fi
-   fi
-   chmod u+w . 2>&5
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if ${lt_cv_prog_compiler_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler_c_o=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       lt_cv_prog_compiler_c_o=yes
-     fi
-   fi
-   chmod u+w . 2>&5
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
-  runpath_var=
-  allow_undefined_flag=
-  always_export_symbols=no
-  archive_cmds=
-  archive_expsym_cmds=
-  compiler_needs_object=no
-  enable_shared_with_static_runtimes=no
-  export_dynamic_flag_spec=
-  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  hardcode_automatic=no
-  hardcode_direct=no
-  hardcode_direct_absolute=no
-  hardcode_libdir_flag_spec=
-  hardcode_libdir_separator=
-  hardcode_minus_L=no
-  hardcode_shlibpath_var=unsupported
-  inherit_rpath=no
-  link_all_deplibs=unknown
-  module_cmds=
-  module_expsym_cmds=
-  old_archive_from_new_cmds=
-  old_archive_from_expsyms_cmds=
-  thread_safe_flag_spec=
-  whole_archive_flag_spec=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  include_expsyms=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  ld_shlibs=yes
-
-  # On some targets, GNU ld is compatible enough with the native linker
-  # that we're better off using the native interface for both.
-  lt_use_gnu_ld_interface=no
-  if test "$with_gnu_ld" = yes; then
-    case $host_os in
-      aix*)
-	# The AIX port of GNU ld has always aspired to compatibility
-	# with the native linker.  However, as the warning in the GNU ld
-	# block says, versions before 2.19.5* couldn't really create working
-	# shared libraries, regardless of the interface used.
-	case `$LD -v 2>&1` in
-	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
-	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
-	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
-	  *)
-	    lt_use_gnu_ld_interface=yes
-	    ;;
-	esac
-	;;
-      *)
-	lt_use_gnu_ld_interface=yes
-	;;
-    esac
-  fi
-
-  if test "$lt_use_gnu_ld_interface" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    export_dynamic_flag_spec='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      whole_archive_flag_spec=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *GNU\ gold*) supports_anon_versioning=yes ;;
-      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[3-9]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	ld_shlibs=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.19, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to install binutils
-*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
-*** You will then need to restart the configuration process.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            archive_expsym_cmds=''
-        ;;
-      m68k)
-            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            hardcode_libdir_flag_spec='-L$libdir'
-            hardcode_minus_L=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	allow_undefined_flag=unsupported
-	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	# support --undefined.  This deserves some investigation.  FIXME
-	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	ld_shlibs=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
-      # as there is no search path for DLLs.
-      hardcode_libdir_flag_spec='-L$libdir'
-      export_dynamic_flag_spec='${wl}--export-all-symbols'
-      allow_undefined_flag=unsupported
-      always_export_symbols=no
-      enable_shared_with_static_runtimes=yes
-      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
-      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	  cp $export_symbols $output_objdir/$soname.def;
-	else
-	  echo EXPORTS > $output_objdir/$soname.def;
-	  cat $export_symbols >> $output_objdir/$soname.def;
-	fi~
-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-	ld_shlibs=no
-      fi
-      ;;
-
-    haiku*)
-      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      link_all_deplibs=yes
-      ;;
-
-    interix[3-9]*)
-      hardcode_direct=no
-      hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-      export_dynamic_flag_spec='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-	case $cc_basename in
-	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
-	esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-	 && test "$tmp_diet" = no
-      then
-	tmp_addflag=' $pic_flag'
-	tmp_sharedflag='-shared'
-	case $cc_basename,$host_cpu in
-        pgcc*)				# Portland Group C compiler
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* | pgf95* | pgfortran*)
-					# Portland Group f77 and f90 compilers
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag -Mnomain' ;;
-	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
-	  tmp_addflag=' -i_dynamic' ;;
-	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
-	  tmp_addflag=' -i_dynamic -nofor_main' ;;
-	ifc* | ifort*)			# Intel Fortran compiler
-	  tmp_addflag=' -nofor_main' ;;
-	lf95*)				# Lahey Fortran 8.1
-	  whole_archive_flag_spec=
-	  tmp_sharedflag='--shared' ;;
-	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
-	  tmp_sharedflag='-qmkshrobj'
-	  tmp_addflag= ;;
-	nvcc*)	# Cuda Compiler Driver 2.2
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
-	  compiler_needs_object=yes
-	  ;;
-	esac
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)			# Sun C 5.9
-	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
-	  compiler_needs_object=yes
-	  tmp_sharedflag='-G' ;;
-	*Sun\ F*)			# Sun Fortran 8.3
-	  tmp_sharedflag='-G' ;;
-	esac
-	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	    echo "local: *; };" >> $output_objdir/$libname.ver~
-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-	case $cc_basename in
-	xlf* | bgf* | bgxlf* | mpixlf*)
-	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-	  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
-	  if test "x$supports_anon_versioning" = xyes; then
-	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-	  fi
-	  ;;
-	esac
-      else
-        ld_shlibs=no
-      fi
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-	ld_shlibs=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	ld_shlibs=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-	ld_shlibs=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-	;;
-	*)
-	  # For security reasons, it is highly recommended that you always
-	  # use absolute paths for naming shared libraries, and exclude the
-	  # DT_RUNPATH tag from executables and libraries.  But doing so
-	  # requires that you compile everything twice, which is a pain.
-	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-	  else
-	    ld_shlibs=no
-	  fi
-	;;
-      esac
-      ;;
-
-    sunos4*)
-      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	ld_shlibs=no
-      fi
-      ;;
-    esac
-
-    if test "$ld_shlibs" = no; then
-      runpath_var=
-      hardcode_libdir_flag_spec=
-      export_dynamic_flag_spec=
-      whole_archive_flag_spec=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      allow_undefined_flag=unsupported
-      always_export_symbols=yes
-      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      hardcode_minus_L=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	hardcode_direct=unsupported
-      fi
-      ;;
-
-    aix[4-9]*)
-      if test "$host_cpu" = ia64; then
-	# On IA64, the linker does run time linking by default, so we don't
-	# have to do anything special.
-	aix_use_runtimelinking=no
-	exp_sym_flag='-Bexport'
-	no_entry_flag=""
-      else
-	# If we're using GNU nm, then we don't want the "-C" option.
-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
-	# Also, AIX nm treats weak defined symbols like other global
-	# defined symbols, whereas GNU nm marks them as "W".
-	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	else
-	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	fi
-	aix_use_runtimelinking=no
-
-	# Test if we are trying to use run time linking or normal
-	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
-	# need to do runtime linking.
-	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-	  for ld_flag in $LDFLAGS; do
-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-	    aix_use_runtimelinking=yes
-	    break
-	  fi
-	  done
-	  ;;
-	esac
-
-	exp_sym_flag='-bexport'
-	no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      archive_cmds=''
-      hardcode_direct=yes
-      hardcode_direct_absolute=yes
-      hardcode_libdir_separator=':'
-      link_all_deplibs=yes
-      file_list_spec='${wl}-f,'
-
-      if test "$GCC" = yes; then
-	case $host_os in aix4.[012]|aix4.[012].*)
-	# We only want to do this on AIX 4.2 and lower, the check
-	# below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	  # We have reworked collect2
-	  :
-	  else
-	  # We have old collect2
-	  hardcode_direct=unsupported
-	  # It fails to find uninstalled libraries when the uninstalled
-	  # path is not listed in the libpath.  Setting hardcode_minus_L
-	  # to unsupported forces relinking
-	  hardcode_minus_L=yes
-	  hardcode_libdir_flag_spec='-L$libdir'
-	  hardcode_libdir_separator=
-	  fi
-	  ;;
-	esac
-	shared_flag='-shared'
-	if test "$aix_use_runtimelinking" = yes; then
-	  shared_flag="$shared_flag "'${wl}-G'
-	fi
-      else
-	# not using gcc
-	if test "$host_cpu" = ia64; then
-	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	# chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-	else
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag='${wl}-G'
-	  else
-	    shared_flag='${wl}-bM:SRE'
-	  fi
-	fi
-      fi
-
-      export_dynamic_flag_spec='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      always_export_symbols=yes
-      if test "$aix_use_runtimelinking" = yes; then
-	# Warning - without using the other runtime loading flags (-brtl),
-	# -berok will link without error, but may produce a broken library.
-	allow_undefined_flag='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        if test "${lt_cv_aix_libpath+set}" = set; then
-  aix_libpath=$lt_cv_aix_libpath
-else
-  if ${lt_cv_aix_libpath_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-  lt_aix_libpath_sed='
-      /Import File Strings/,/^$/ {
-	  /^0/ {
-	      s/^0  *\([^ ]*\) *$/\1/
-	      p
-	  }
-      }'
-  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-  # Check for a 64-bit object if we didn't find anything.
-  if test -z "$lt_cv_aix_libpath_"; then
-    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-  fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-  if test -z "$lt_cv_aix_libpath_"; then
-    lt_cv_aix_libpath_="/usr/lib:/lib"
-  fi
-
-fi
-
-  aix_libpath=$lt_cv_aix_libpath_
-fi
-
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-	if test "$host_cpu" = ia64; then
-	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
-	  allow_undefined_flag="-z nodefs"
-	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an
-	 # empty executable.
-	 if test "${lt_cv_aix_libpath+set}" = set; then
-  aix_libpath=$lt_cv_aix_libpath
-else
-  if ${lt_cv_aix_libpath_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-  lt_aix_libpath_sed='
-      /Import File Strings/,/^$/ {
-	  /^0/ {
-	      s/^0  *\([^ ]*\) *$/\1/
-	      p
-	  }
-      }'
-  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-  # Check for a 64-bit object if we didn't find anything.
-  if test -z "$lt_cv_aix_libpath_"; then
-    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-  fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-  if test -z "$lt_cv_aix_libpath_"; then
-    lt_cv_aix_libpath_="/usr/lib:/lib"
-  fi
-
-fi
-
-  aix_libpath=$lt_cv_aix_libpath_
-fi
-
-	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-	  # Warning - without using the other run time loading flags,
-	  # -berok will link without error, but may produce a broken library.
-	  no_undefined_flag=' ${wl}-bernotok'
-	  allow_undefined_flag=' ${wl}-berok'
-	  if test "$with_gnu_ld" = yes; then
-	    # We only use this code for GNU lds that support --whole-archive.
-	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	  else
-	    # Exported symbols can be pulled into shared objects from archives
-	    whole_archive_flag_spec='$convenience'
-	  fi
-	  archive_cmds_need_lc=yes
-	  # This is similar to how AIX traditionally builds its shared libraries.
-	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            archive_expsym_cmds=''
-        ;;
-      m68k)
-            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            hardcode_libdir_flag_spec='-L$libdir'
-            hardcode_minus_L=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[45]*)
-      export_dynamic_flag_spec=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      case $cc_basename in
-      cl*)
-	# Native MSVC
-	hardcode_libdir_flag_spec=' '
-	allow_undefined_flag=unsupported
-	always_export_symbols=yes
-	file_list_spec='@'
-	# Tell ltmain to make .lib files, not .a files.
-	libext=lib
-	# Tell ltmain to make .dll files, not .so files.
-	shrext_cmds=".dll"
-	# FIXME: Setting linknames here is a bad hack.
-	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-	  else
-	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-	  fi~
-	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-	  linknames='
-	# The linker will not automatically build a static lib if we build a DLL.
-	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
-	enable_shared_with_static_runtimes=yes
-	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
-	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-	# Don't use ranlib
-	old_postinstall_cmds='chmod 644 $oldlib'
-	postlink_cmds='lt_outputfile="@OUTPUT@"~
-	  lt_tool_outputfile="@TOOL_OUTPUT@"~
-	  case $lt_outputfile in
-	    *.exe|*.EXE) ;;
-	    *)
-	      lt_outputfile="$lt_outputfile.exe"
-	      lt_tool_outputfile="$lt_tool_outputfile.exe"
-	      ;;
-	  esac~
-	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-	    $RM "$lt_outputfile.manifest";
-	  fi'
-	;;
-      *)
-	# Assume MSVC wrapper
-	hardcode_libdir_flag_spec=' '
-	allow_undefined_flag=unsupported
-	# Tell ltmain to make .lib files, not .a files.
-	libext=lib
-	# Tell ltmain to make .dll files, not .so files.
-	shrext_cmds=".dll"
-	# FIXME: Setting linknames here is a bad hack.
-	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-	# The linker will automatically build a .lib file if we build a DLL.
-	old_archive_from_new_cmds='true'
-	# FIXME: Should let the user specify the lib program.
-	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-	enable_shared_with_static_runtimes=yes
-	;;
-      esac
-      ;;
-
-    darwin* | rhapsody*)
-
-
-  archive_cmds_need_lc=no
-  hardcode_direct=no
-  hardcode_automatic=yes
-  hardcode_shlibpath_var=unsupported
-  if test "$lt_cv_ld_force_load" = "yes"; then
-    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
-
-  else
-    whole_archive_flag_spec=''
-  fi
-  link_all_deplibs=yes
-  allow_undefined_flag="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=func_echo_all
-    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
-  else
-  ld_shlibs=no
-  fi
-
-      ;;
-
-    dgux*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_shlibpath_var=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2.*)
-      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-      hardcode_libdir_separator=:
-      hardcode_direct=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      hardcode_minus_L=yes
-      export_dynamic_flag_spec='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-	hardcode_libdir_separator=:
-	hardcode_direct=yes
-	hardcode_direct_absolute=yes
-	export_dynamic_flag_spec='${wl}-E'
-	# hardcode_minus_L: Not really in the search PATH,
-	# but as the default location of the library.
-	hardcode_minus_L=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-	case $host_cpu in
-	hppa*64*)
-	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case $host_cpu in
-	hppa*64*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-
-	  # Older versions of the 11.00 compiler do not understand -b yet
-	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
-$as_echo_n "checking if $CC understands -b... " >&6; }
-if ${lt_cv_prog_compiler__b+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_prog_compiler__b=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS -b"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&5
-       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         lt_cv_prog_compiler__b=yes
-       fi
-     else
-       lt_cv_prog_compiler__b=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
-$as_echo "$lt_cv_prog_compiler__b" >&6; }
-
-if test x"$lt_cv_prog_compiler__b" = xyes; then
-    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-else
-    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-fi
-
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-	hardcode_libdir_separator=:
-
-	case $host_cpu in
-	hppa*64*|ia64*)
-	  hardcode_direct=no
-	  hardcode_shlibpath_var=no
-	  ;;
-	*)
-	  hardcode_direct=yes
-	  hardcode_direct_absolute=yes
-	  export_dynamic_flag_spec='${wl}-E'
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  hardcode_minus_L=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	# Try to use the -exported_symbol ld option, if it does not
-	# work, assume that -exports_file does not work either and
-	# implicitly export all symbols.
-	# This should be the same for all languages, so no per-tag cache variable.
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-if ${lt_cv_irix_exported_symbol+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  save_LDFLAGS="$LDFLAGS"
-	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-int foo (void) { return 0; }
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  lt_cv_irix_exported_symbol=yes
-else
-  lt_cv_irix_exported_symbol=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-           LDFLAGS="$save_LDFLAGS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-$as_echo "$lt_cv_irix_exported_symbol" >&6; }
-	if test "$lt_cv_irix_exported_symbol" = yes; then
-          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-	fi
-      else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      inherit_rpath=yes
-      link_all_deplibs=yes
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    newsos6)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct=yes
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      hardcode_shlibpath_var=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-	hardcode_direct=yes
-	hardcode_shlibpath_var=no
-	hardcode_direct_absolute=yes
-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-	  export_dynamic_flag_spec='${wl}-E'
-	else
-	  case $host_os in
-	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	     hardcode_libdir_flag_spec='-R$libdir'
-	     ;;
-	   *)
-	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-	     ;;
-	  esac
-	fi
-      else
-	ld_shlibs=no
-      fi
-      ;;
-
-    os2*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      allow_undefined_flag=unsupported
-      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      else
-	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-	# Both c and cxx compiler support -rpath directly
-	hardcode_libdir_flag_spec='-rpath $libdir'
-      fi
-      archive_cmds_need_lc='no'
-      hardcode_libdir_separator=:
-      ;;
-
-    solaris*)
-      no_undefined_flag=' -z defs'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-	case `$CC -V 2>&1` in
-	*"Compilers 5.0"*)
-	  wlarc=''
-	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-	  ;;
-	*)
-	  wlarc='${wl}'
-	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-	  ;;
-	esac
-      fi
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_shlibpath_var=no
-      case $host_os in
-      solaris2.[0-5] | solaris2.[0-5].*) ;;
-      *)
-	# The compiler driver will combine and reorder linker options,
-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
-	# but is careful enough not to reorder.
-	# Supported since Solaris 2.6 (maybe 2.5.1?)
-	if test "$GCC" = yes; then
-	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-	else
-	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
-	fi
-	;;
-      esac
-      link_all_deplibs=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-	# Use $CC to link under sequent, because it throws in some extra .o
-	# files that make .init and .fini sections work.
-	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  hardcode_direct=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  reload_cmds='$CC -r -o $output$reload_objs'
-	  hardcode_direct=no
-        ;;
-	motorola)
-	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      hardcode_shlibpath_var=no
-      ;;
-
-    sysv4.3*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var=no
-      export_dynamic_flag_spec='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	hardcode_shlibpath_var=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	ld_shlibs=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag='${wl}-z,text'
-      archive_cmds_need_lc=no
-      hardcode_shlibpath_var=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      no_undefined_flag='${wl}-z,text'
-      allow_undefined_flag='${wl}-z,nodefs'
-      archive_cmds_need_lc=no
-      hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-R,$libdir'
-      hardcode_libdir_separator=':'
-      link_all_deplibs=yes
-      export_dynamic_flag_spec='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_shlibpath_var=no
-      ;;
-
-    *)
-      ld_shlibs=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-	export_dynamic_flag_spec='${wl}-Blargedynsym'
-	;;
-      esac
-    fi
-  fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
-test "$ld_shlibs" = no && can_build_shared=no
-
-with_gnu_ld=$with_gnu_ld
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc" in
-x|xyes)
-  # Assume -lc should be added
-  archive_cmds_need_lc=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $archive_cmds in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-if ${lt_cv_archive_cmds_need_lc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  $RM conftest*
-	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } 2>conftest.err; then
-	  soname=conftest
-	  lib=conftest
-	  libobjs=conftest.$ac_objext
-	  deplibs=
-	  wl=$lt_prog_compiler_wl
-	  pic_flag=$lt_prog_compiler_pic
-	  compiler_flags=-v
-	  linker_flags=-v
-	  verstring=
-	  output_objdir=.
-	  libname=conftest
-	  lt_save_allow_undefined_flag=$allow_undefined_flag
-	  allow_undefined_flag=
-	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
-  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-	  then
-	    lt_cv_archive_cmds_need_lc=no
-	  else
-	    lt_cv_archive_cmds_need_lc=yes
-	  fi
-	  allow_undefined_flag=$lt_save_allow_undefined_flag
-	else
-	  cat conftest.err 1>&5
-	fi
-	$RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
-$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
-      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  case $host_os in
-    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
-    *) lt_sed_strip_eq="s,=/,/,g" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
-  case $lt_search_path_spec in
-  *\;*)
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
-    ;;
-  *)
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
-    ;;
-  esac
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[lt_foo]++; }
-  if (lt_freq[lt_foo] == 1) { print lt_foo; }
-}'`
-  # AWK program above erroneously prepends '/' to C:/dos/paths
-  # for these hosts.
-  case $host_os in
-    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
-      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
-  esac
-  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[4-9]*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[01] | aix4.[01].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-	:
-      else
-	can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[45]*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$cc_basename in
-  yes,*)
-    # gcc
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-
-      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    dynamic_linker='Win32 ld.exe'
-    ;;
-
-  *,cl*)
-    # Native MSVC
-    libname_spec='$name'
-    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-    library_names_spec='${libname}.dll.lib'
-
-    case $build_os in
-    mingw*)
-      sys_lib_search_path_spec=
-      lt_save_ifs=$IFS
-      IFS=';'
-      for lt_path in $LIB
-      do
-        IFS=$lt_save_ifs
-        # Let DOS variable expansion print the short 8.3 style file name.
-        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-      done
-      IFS=$lt_save_ifs
-      # Convert to MSYS style.
-      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
-      ;;
-    cygwin*)
-      # Convert to unix form, then to dos form, then back to unix form
-      # but this time dos style (no spaces!) so that the unix form looks
-      # like /cygdrive/c/PROGRA~1:/cygdr...
-      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-      ;;
-    *)
-      sys_lib_search_path_spec="$LIB"
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      # FIXME: find the short name or the path components, as spaces are
-      # common. (e.g. "Program Files" -> "PROGRA~1")
-      ;;
-    esac
-
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-    dynamic_linker='Win32 link.exe'
-    ;;
-
-  *)
-    # Assume MSVC wrapper
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    dynamic_linker='Win32 ld.exe'
-    ;;
-  esac
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[23].*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2.*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[01]* | freebsdelf3.[01]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
-  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-haiku*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  dynamic_linker="$host_os runtime_loader"
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
-  postinstall_cmds='chmod 555 $lib'
-  # or fails outright, so override atomically:
-  install_override_mode=555
-  ;;
-
-interix[3-9]*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux # correct to gnu/linux during the next big refactor
-	else
-		version_type=irix
-	fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-
-  # Some binutils ld are patched to set DT_RUNPATH
-  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  lt_cv_shlibpath_overrides_runpath=no
-    save_LDFLAGS=$LDFLAGS
-    save_libdir=$libdir
-    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
-	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
-  lt_cv_shlibpath_overrides_runpath=yes
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    LDFLAGS=$save_LDFLAGS
-    libdir=$save_libdir
-
-fi
-
-  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux # correct to gnu/linux during the next big refactor
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-	;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" ||
-   test -n "$runpath_var" ||
-   test "X$hardcode_automatic" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$hardcode_direct" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
-     test "$hardcode_minus_L" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action=unsupported
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
-
-if test "$hardcode_action" = relink ||
-   test "$inherit_rpath" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-
-
-
-
-
-  if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dl_dlopen=yes
-else
-  ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-
-fi
-
-    ;;
-
-  *)
-    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = xyes; then :
-  lt_cv_dlopen="shl_load"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if ${ac_cv_lib_dld_shl_load+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-int
-main ()
-{
-return shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dld_shl_load=yes
-else
-  ac_cv_lib_dld_shl_load=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
-  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dl_dlopen=yes
-else
-  ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if ${ac_cv_lib_svld_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_svld_dlopen=yes
-else
-  ac_cv_lib_svld_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if ${ac_cv_lib_dld_dld_link+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link ();
-int
-main ()
-{
-return dld_link ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dld_dld_link=yes
-else
-  ac_cv_lib_dld_dld_link=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  	  if test "$cross_compiling" = yes; then :
-  lt_cv_dlopen_self=cross
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL		RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL		DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL		0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW		DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW	DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW	0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-/* When -fvisbility=hidden is used, assume the code has been annotated
-   correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 42; }
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else
-        {
-	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
-          else puts (dlerror ());
-	}
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}
-_LT_EOF
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&5 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
-      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
-      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
-$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self_static+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  	  if test "$cross_compiling" = yes; then :
-  lt_cv_dlopen_self_static=cross
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL		RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL		DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL		0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW		DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW	DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW	0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-/* When -fvisbility=hidden is used, assume the code has been annotated
-   correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 42; }
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else
-        {
-	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
-          else puts (dlerror ());
-	}
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}
-_LT_EOF
-  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&5 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
-      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
-      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
-    esac
-  else :
-    # compilation failed
-    lt_cv_dlopen_self_static=no
-  fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
-$as_echo "$lt_cv_dlopen_self_static" >&6; }
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-striplib=
-old_striplib=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
-$as_echo_n "checking whether stripping libraries is possible... " >&6; }
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-    fi
-    ;;
-  *)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-    ;;
-  esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-  # Report which library types will actually be built
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[4-9]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
-
-
-
-
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC="$lt_save_CC"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-        ac_config_commands="$ac_config_commands libtool"
-
-
-
-
-# Only expand once:
-
-
-
-# substitute LIBTOOL_DEPS variable in generated Makefiles
-
-
-# version information for shared library
-SHARED_VERSION_INFO="1:0:0"
-
-# substitute SHARED_VERSION_INFO in generated Makefiles
-
-
-# check for make
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
-	@echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
-  *@@@%%%=?*=@@@%%%*)
-    eval ac_cv_prog_make_${ac_make}_set=yes;;
-  *)
-    eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  SET_MAKE=
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-# automake initialization
-am__api_version='1.12'
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
-esac
-case $srcdir in
-  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
-esac
-
-# Do 'set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   am_has_slept=no
-   for am_try in 1 2; do
-     echo "timestamp, slept: $am_has_slept" > conftest.file
-     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-     if test "$*" = "X"; then
-	# -L didn't work.
-	set X `ls -t "$srcdir/configure" conftest.file`
-     fi
-     if test "$*" != "X $srcdir/configure conftest.file" \
-	&& test "$*" != "X conftest.file $srcdir/configure"; then
-
-	# If neither matched, then we have a broken ls.  This can happen
-	# if, for instance, CONFIG_SHELL is bash and it inherits a
-	# broken ls alias from the environment.  This has actually
-	# happened.  Such a system could not be considered "sane".
-	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
-  alias in your environment" "$LINENO" 5
-     fi
-     if test "$2" = conftest.file || test $am_try -eq 2; then
-       break
-     fi
-     # Just in case.
-     sleep 1
-     am_has_slept=yes
-   done
-   test "$2" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   as_fn_error $? "newly created file is older than distributed files!
-Check your system clock" "$LINENO" 5
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-# If we didn't sleep, we still need to ensure time stamps of config.status and
-# generated files are strictly newer.
-am_sleep_pid=
-if grep 'slept: no' conftest.file >/dev/null 2>&1; then
-  ( sleep 1 ) &
-  am_sleep_pid=$!
-fi
-
-rm -f conftest.file
-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
-fi
-
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-
-# Installed binaries are usually stripped using 'strip' when the user
-# run "make install-strip".  However 'strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the 'STRIP' environment variable to overrule this program.
-if test "$cross_compiling" != no; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
-if test -z "$MKDIR_P"; then
-  if ${ac_cv_path_mkdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in mkdir gmkdir; do
-	 for ac_exec_ext in '' $ac_executable_extensions; do
-	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
-	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-	     'mkdir (GNU coreutils) '* | \
-	     'mkdir (coreutils) '* | \
-	     'mkdir (fileutils) '4.1*)
-	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
-	       break 3;;
-	   esac
-	 done
-       done
-  done
-IFS=$as_save_IFS
-
-fi
-
-  test -d ./--version && rmdir ./--version
-  if test "${ac_cv_path_mkdir+set}" = set; then
-    MKDIR_P="$ac_cv_path_mkdir -p"
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for MKDIR_P within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    MKDIR_P="$ac_install_sh -d"
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
-  enableval=$enable_dependency_tracking;
-fi
-
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-  am__nodep='_no'
-fi
- if test "x$enable_dependency_tracking" != xno; then
-  AMDEP_TRUE=
-  AMDEP_FALSE='#'
-else
-  AMDEP_TRUE='#'
-  AMDEP_FALSE=
-fi
-
-
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  am__isrc=' -I$(srcdir)'
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-
-
-# Define the identity of the package.
- PACKAGE='nfft'
- VERSION='3.2.3'
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-
-# Some tools Automake needs.
-
-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
-
-
-AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
-
-
-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
-
-
-AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
-
-
-MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
-
-mkdir_p="$MKDIR_P"
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-# Always define AMTAR for backward compatibility.  Yes, it's still used
-# in the wild :-(  We should find a proper way to deprecate it ...
-AMTAR='$${TAR-tar}'
-
-am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
-
-
-
-
-depcc="$CC"   am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named 'D' -- because '-MD' means "put the output
-  # in D".
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
-
-
-
-
-################################################################################
-# options for customizing the build process
-################################################################################
-
-# maintainer mode option
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
-$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
-    # Check whether --enable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then :
-  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
-else
-  USE_MAINTAINER_MODE=no
-fi
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
-$as_echo "$USE_MAINTAINER_MODE" >&6; }
-   if test $USE_MAINTAINER_MODE = yes; then
-  MAINTAINER_MODE_TRUE=
-  MAINTAINER_MODE_FALSE='#'
-else
-  MAINTAINER_MODE_TRUE='#'
-  MAINTAINER_MODE_FALSE=
-fi
-
-  MAINT=$MAINTAINER_MODE_TRUE
-
-
-
-# enable or disable parts of NFFT
-
-# whether we need the fpt module
-need_fpt="no"
-
-# build all modules by default in maintainer mode or if option is given
-# Check whether --enable-all was given.
-if test "${enable_all+set}" = set; then :
-  enableval=$enable_all; ok=$enableval
-else
-  ok=no
-fi
-
-if test "x$ok" = "xyes" -o "x$USE_MAINTAINER_MODE" = "xyes"; then
-  nfft_module_default="yes"
-else
-  nfft_module_default="no"
-fi
-
-# options for modules
-
-  # Check whether --enable-nfct was given.
-if test "${enable_nfct+set}" = set; then :
-  enableval=$enable_nfct; ok=$enableval
-else
-  ok=$nfft_module_default
-fi
-
-  if test "x$ok" = "xyes"; then
-    HAVE_NFCT="#define HAVE_NFCT 1"
-
-  else
-    HAVE_NFCT="#undef HAVE_NFCT"
-
-  fi
-   if test "x$ok" = "xyes"; then
-  HAVE_NFCT_TRUE=
-  HAVE_NFCT_FALSE='#'
-else
-  HAVE_NFCT_TRUE='#'
-  HAVE_NFCT_FALSE=
-fi
-
-
-
-
-  # Check whether --enable-nfst was given.
-if test "${enable_nfst+set}" = set; then :
-  enableval=$enable_nfst; ok=$enableval
-else
-  ok=$nfft_module_default
-fi
-
-  if test "x$ok" = "xyes"; then
-    HAVE_NFST="#define HAVE_NFST 1"
-
-  else
-    HAVE_NFST="#undef HAVE_NFST"
-
-  fi
-   if test "x$ok" = "xyes"; then
-  HAVE_NFST_TRUE=
-  HAVE_NFST_FALSE='#'
-else
-  HAVE_NFST_TRUE='#'
-  HAVE_NFST_FALSE=
-fi
-
-
-
-
-  # Check whether --enable-nfsft was given.
-if test "${enable_nfsft+set}" = set; then :
-  enableval=$enable_nfsft; ok=$enableval
-else
-  ok=$nfft_module_default
-fi
-
-  if test "x$ok" = "xyes"; then
-    HAVE_NFSFT="#define HAVE_NFSFT 1"
-    need_fpt="yes"
-  else
-    HAVE_NFSFT="#undef HAVE_NFSFT"
-
-  fi
-   if test "x$ok" = "xyes"; then
-  HAVE_NFSFT_TRUE=
-  HAVE_NFSFT_FALSE='#'
-else
-  HAVE_NFSFT_TRUE='#'
-  HAVE_NFSFT_FALSE=
-fi
-
-
-
-
-  # Check whether --enable-nfsoft was given.
-if test "${enable_nfsoft+set}" = set; then :
-  enableval=$enable_nfsoft; ok=$enableval
-else
-  ok=$nfft_module_default
-fi
-
-  if test "x$ok" = "xyes"; then
-    HAVE_NFSOFT="#define HAVE_NFSOFT 1"
-    need_fpt="yes"
-  else
-    HAVE_NFSOFT="#undef HAVE_NFSOFT"
-
-  fi
-   if test "x$ok" = "xyes"; then
-  HAVE_NFSOFT_TRUE=
-  HAVE_NFSOFT_FALSE='#'
-else
-  HAVE_NFSOFT_TRUE='#'
-  HAVE_NFSOFT_FALSE=
-fi
-
-
-
-
-  # Check whether --enable-nnfft was given.
-if test "${enable_nnfft+set}" = set; then :
-  enableval=$enable_nnfft; ok=$enableval
-else
-  ok=$nfft_module_default
-fi
-
-  if test "x$ok" = "xyes"; then
-    HAVE_NNFFT="#define HAVE_NNFFT 1"
-
-  else
-    HAVE_NNFFT="#undef HAVE_NNFFT"
-
-  fi
-   if test "x$ok" = "xyes"; then
-  HAVE_NNFFT_TRUE=
-  HAVE_NNFFT_FALSE='#'
-else
-  HAVE_NNFFT_TRUE='#'
-  HAVE_NNFFT_FALSE=
-fi
-
-
-
-
-  # Check whether --enable-nsfft was given.
-if test "${enable_nsfft+set}" = set; then :
-  enableval=$enable_nsfft; ok=$enableval
-else
-  ok=$nfft_module_default
-fi
-
-  if test "x$ok" = "xyes"; then
-    HAVE_NSFFT="#define HAVE_NSFFT 1"
-
-  else
-    HAVE_NSFFT="#undef HAVE_NSFFT"
-
-  fi
-   if test "x$ok" = "xyes"; then
-  HAVE_NSFFT_TRUE=
-  HAVE_NSFFT_FALSE='#'
-else
-  HAVE_NSFFT_TRUE='#'
-  HAVE_NSFFT_FALSE=
-fi
-
-
-
-
-  # Check whether --enable-mri was given.
-if test "${enable_mri+set}" = set; then :
-  enableval=$enable_mri; ok=$enableval
-else
-  ok=$nfft_module_default
-fi
-
-  if test "x$ok" = "xyes"; then
-    HAVE_MRI="#define HAVE_MRI 1"
-
-  else
-    HAVE_MRI="#undef HAVE_MRI"
-
-  fi
-   if test "x$ok" = "xyes"; then
-  HAVE_MRI_TRUE=
-  HAVE_MRI_FALSE='#'
-else
-  HAVE_MRI_TRUE='#'
-  HAVE_MRI_FALSE=
-fi
-
-
-
-
-  # Check whether --enable-fpt was given.
-if test "${enable_fpt+set}" = set; then :
-  enableval=$enable_fpt; ok=$enableval
-else
-  ok=$nfft_module_default
-fi
-
-  if test "x$ok" = "xyes" -o "x$need_fpt" = "xyes"; then
-    HAVE_FPT="#define HAVE_FPT 1"
-
-  else
-    HAVE_FPT="#undef HAVE_FPT"
-
-  fi
-   if test "x$ok" = "xyes" -o "x$need_fpt" = "xyes"; then
-  HAVE_FPT_TRUE=
-  HAVE_FPT_FALSE='#'
-else
-  HAVE_FPT_TRUE='#'
-  HAVE_FPT_FALSE=
-fi
-
-
-
-
-# multithreaded code
-# Check whether --enable-openmp was given.
-if test "${enable_openmp+set}" = set; then :
-  enableval=$enable_openmp; enable_threads=$enableval
-else
-  enable_threads=no
-fi
-
- if test "x$enable_threads" = "xyes" ; then
-  HAVE_THREADS_TRUE=
-  HAVE_THREADS_FALSE='#'
-else
-  HAVE_THREADS_TRUE='#'
-  HAVE_THREADS_FALSE=
-fi
-
-
-# debug mode
-# Check whether --enable-debug was given.
-if test "${enable_debug+set}" = set; then :
-  enableval=$enable_debug; enable_debug=$enableval
-else
-  enable_debug=no
-fi
-
-if test "x$enable_debug" = "xyes"; then
-
-$as_echo "#define NFFT_DEBUG 1" >>confdefs.h
-
-fi
-
-# runtime time measurements
-# Check whether --enable-measure-time was given.
-if test "${enable_measure_time+set}" = set; then :
-  enableval=$enable_measure_time; ok=$enableval
-else
-  ok=no
-fi
-
-if test "x$ok" = "xyes"; then
-
-$as_echo "#define MEASURE_TIME 1" >>confdefs.h
-
-fi
-
-# runtime time measurements for FFTW part
-# Check whether --enable-measure-time-fftw was given.
-if test "${enable_measure_time_fftw+set}" = set; then :
-  enableval=$enable_measure_time_fftw; ok=$enableval
-else
-  ok=no
-fi
-
-if test "x$ok" = "xyes"; then
-
-$as_echo "#define MEASURE_TIME_FFTW 1" >>confdefs.h
-
-fi
-
-# Check whether --enable-mips_zbus_timer was given.
-if test "${enable_mips_zbus_timer+set}" = set; then :
-  enableval=$enable_mips_zbus_timer; have_mips_zbus_timer=$enableval
-else
-  have_mips_zbus_timer=no
-fi
-
-if test "$have_mips_zbus_timer" = "yes"; then
-
-$as_echo "#define HAVE_MIPS_ZBUS_TIMER 1" >>confdefs.h
-
-fi
-
-# select window function
-
-# Check whether --with-window was given.
-if test "${with_window+set}" = set; then :
-  withval=$with_window; window=$withval
-else
-  window="kaiserbessel"
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking window function" >&5
-$as_echo_n "checking window function... " >&6; }
-case "$window" in
-  gaussian)
-
-$as_echo "#define GAUSSIAN 1" >>confdefs.h
-;;
-  bspline)
-
-$as_echo "#define B_SPLINE 1" >>confdefs.h
-;;
-  sinc)
-
-$as_echo "#define SINC_POWER 1" >>confdefs.h
-;;
-  kaiserbessel)
-
-$as_echo "#define KAISER_BESSEL 1" >>confdefs.h
-;;
-  delta)
-
-$as_echo "#define B_SPLINE 1" >>confdefs.h
-;;
-  *)
-    as_fn_error $? "Unknown window function \"$window\"." "$LINENO" 5;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $window" >&5
-$as_echo "$window" >&6; }
-
-################################################################################
-# compiler characteristis
-################################################################################
-
-# select programming language
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# compiler vendor
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5
-$as_echo_n "checking for C compiler vendor... " >&6; }
-if ${ax_cv_c_compiler_vendor+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ax_cv_c_compiler_vendor=unknown
-  # note: don't check for gcc first since some other compilers define __GNUC__
-  for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ apple:__APPLE_CC__,__APPLE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
-    vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-#if !($vencpp)
-      thisisanerror;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5
-$as_echo "$ax_cv_c_compiler_vendor" >&6; }
-
-
-# check for C99 compliant mode (possibly with GNU extensions)
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
-$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
-if ${ac_cv_prog_cc_c99+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c99=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <stdio.h>
-
-// Check varargs macros.  These examples are taken from C99 6.10.3.5.
-#define debug(...) fprintf (stderr, __VA_ARGS__)
-#define showlist(...) puts (#__VA_ARGS__)
-#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
-static void
-test_varargs_macros (void)
-{
-  int x = 1234;
-  int y = 5678;
-  debug ("Flag");
-  debug ("X = %d\n", x);
-  showlist (The first, second, and third items.);
-  report (x>y, "x is %d but y is %d", x, y);
-}
-
-// Check long long types.
-#define BIG64 18446744073709551615ull
-#define BIG32 4294967295ul
-#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
-#if !BIG_OK
-  your preprocessor is broken;
-#endif
-#if BIG_OK
-#else
-  your preprocessor is broken;
-#endif
-static long long int bignum = -9223372036854775807LL;
-static unsigned long long int ubignum = BIG64;
-
-struct incomplete_array
-{
-  int datasize;
-  double data[];
-};
-
-struct named_init {
-  int number;
-  const wchar_t *name;
-  double average;
-};
-
-typedef const char *ccp;
-
-static inline int
-test_restrict (ccp restrict text)
-{
-  // See if C++-style comments work.
-  // Iterate through items via the restricted pointer.
-  // Also check for declarations in for loops.
-  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
-    continue;
-  return 0;
-}
-
-// Check varargs and va_copy.
-static void
-test_varargs (const char *format, ...)
-{
-  va_list args;
-  va_start (args, format);
-  va_list args_copy;
-  va_copy (args_copy, args);
-
-  const char *str;
-  int number;
-  float fnumber;
-
-  while (*format)
-    {
-      switch (*format++)
-	{
-	case 's': // string
-	  str = va_arg (args_copy, const char *);
-	  break;
-	case 'd': // int
-	  number = va_arg (args_copy, int);
-	  break;
-	case 'f': // float
-	  fnumber = va_arg (args_copy, double);
-	  break;
-	default:
-	  break;
-	}
-    }
-  va_end (args_copy);
-  va_end (args);
-}
-
-int
-main ()
-{
-
-  // Check bool.
-  _Bool success = false;
-
-  // Check restrict.
-  if (test_restrict ("String literal") == 0)
-    success = true;
-  char *restrict newvar = "Another string";
-
-  // Check varargs.
-  test_varargs ("s, d' f .", "string", 65, 34.234);
-  test_varargs_macros ();
-
-  // Check flexible array members.
-  struct incomplete_array *ia =
-    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
-  ia->datasize = 10;
-  for (int i = 0; i < ia->datasize; ++i)
-    ia->data[i] = i * 1.234;
-
-  // Check named initializers.
-  struct named_init ni = {
-    .number = 34,
-    .name = L"Test wide string",
-    .average = 543.34343,
-  };
-
-  ni.number = 58;
-
-  int dynamic_array[ni.number];
-  dynamic_array[ni.number - 1] = 543;
-
-  // work around unused variable warnings
-  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
-	  || dynamic_array[ni.number - 1] != 543);
-
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c99=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c99" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c99" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c99"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
-$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c99" != xno; then :
-
-fi
-
-
-
-# per-target flags
-if test "x$CC" != xcc; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
-$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
-$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
-fi
-set dummy $CC; ac_cc=`$as_echo "$2" |
-		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-# Make sure it works both with $CC and with simple cc.
-# We do the test twice because some compilers refuse to overwrite an
-# existing .o file with -o, though they will create one.
-ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-rm -f conftest2.*
-if { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } &&
-   test -f conftest2.$ac_objext && { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; };
-then
-  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
-  if test "x$CC" != xcc; then
-    # Test first that cc exists at all.
-    if { ac_try='cc -c conftest.$ac_ext >&5'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-      rm -f conftest2.*
-      if { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } &&
-	 test -f conftest2.$ac_objext && { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; };
-      then
-	# cc works too.
-	:
-      else
-	# cc exists but doesn't like -o.
-	eval ac_cv_prog_cc_${ac_cc}_c_o=no
-      fi
-    fi
-  fi
-else
-  eval ac_cv_prog_cc_${ac_cc}_c_o=no
-fi
-rm -f core conftest*
-
-fi
-if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
-
-fi
-
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
-if test "$am_t" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-
-
-
-# enable "const" keyword
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-#ifndef __cplusplus
-  /* Ultrix mips cc rejects this sort of thing.  */
-  typedef int charset[2];
-  const charset cs = { 0, 0 };
-  /* SunOS 4.1.1 cc rejects this.  */
-  char const *const *pcpcc;
-  char **ppc;
-  /* NEC SVR4.0.2 mips cc rejects this.  */
-  struct point {int x, y;};
-  static struct point const zero = {0,0};
-  /* AIX XL C 1.02.0.0 rejects this.
-     It does not let you subtract one const X* pointer from another in
-     an arm of an if-expression whose if-part is not a constant
-     expression */
-  const char *g = "string";
-  pcpcc = &g + (g ? g-g : 0);
-  /* HPUX 7.0 cc rejects these. */
-  ++pcpcc;
-  ppc = (char**) pcpcc;
-  pcpcc = (char const *const *) ppc;
-  { /* SCO 3.2v4 cc rejects this sort of thing.  */
-    char tx;
-    char *t = &tx;
-    char const *s = 0 ? (char *) 0 : (char const *) 0;
-
-    *t++ = 0;
-    if (s) return 0;
-  }
-  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
-    int x[] = {25, 17};
-    const int *foo = &x[0];
-    ++foo;
-  }
-  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
-    typedef const int *iptr;
-    iptr p = 0;
-    ++p;
-  }
-  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
-       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
-    struct s { int j; const int *ap[3]; } bx;
-    struct s *b = &bx; b->j = 5;
-  }
-  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
-    const int foo = 10;
-    if (!foo) return 0;
-  }
-  return !cs[0] && !zero.x;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_const=yes
-else
-  ac_cv_c_const=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-$as_echo "#define const /**/" >>confdefs.h
-
-fi
-
-
-# enable "restrict" keyword
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
-$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
-if ${ac_cv_c_restrict+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_c_restrict=no
-   # The order here caters to the fact that C++ does not require restrict.
-   for ac_kw in __restrict __restrict__ _Restrict restrict; do
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-typedef int * int_ptr;
-	int foo (int_ptr $ac_kw ip) {
-	return ip[0];
-       }
-int
-main ()
-{
-int s[1];
-	int * $ac_kw t = s;
-	t[0] = 0;
-	return foo(t)
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_restrict=$ac_kw
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-     test "$ac_cv_c_restrict" != no && break
-   done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
-$as_echo "$ac_cv_c_restrict" >&6; }
-
- case $ac_cv_c_restrict in
-   restrict) ;;
-   no) $as_echo "#define restrict /**/" >>confdefs.h
- ;;
-   *)  cat >>confdefs.h <<_ACEOF
-#define restrict $ac_cv_c_restrict
-_ACEOF
- ;;
- esac
-
-
-# enable "inline" keyword
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
-$as_echo_n "checking for inline... " >&6; }
-if ${ac_cv_c_inline+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
-#endif
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_inline=$ac_kw
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  test "$ac_cv_c_inline" != no && break
-done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
-$as_echo "$ac_cv_c_inline" >&6; }
-
-case $ac_cv_c_inline in
-  inline | yes) ;;
-  *)
-    case $ac_cv_c_inline in
-      no) ac_val=;;
-      *) ac_val=$ac_cv_c_inline;;
-    esac
-    cat >>confdefs.h <<_ACEOF
-#ifndef __cplusplus
-#define inline $ac_val
-#endif
-_ACEOF
-    ;;
-esac
-
-
-# reset CC variable (the C99 option is added back below)
-CC="$ac_save_CC"
-
-################################################################################
-# program checks
-################################################################################
-
-# C preprocessor
-ac_c_preproc_warn_flag=yes
-
-# assembler
-# By default we simply use the C compiler to build assembly code.
-
-test "${CCAS+set}" = set || CCAS=$CC
-test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
-
-
-
-depcc="$CCAS"   am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named 'D' -- because '-MD' means "put the output
-  # in D".
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CCAS_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CCAS_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CCAS_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
-CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
-  am__fastdepCCAS_TRUE=
-  am__fastdepCCAS_FALSE='#'
-else
-  am__fastdepCCAS_TRUE='#'
-  am__fastdepCCAS_FALSE=
-fi
-
-
-
-# BSD-compatible install
-
-
-# whether ln -s works
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-
-################################################################################
-# 3rd party libraries
-################################################################################
-
-# Check for fftw3.
-
-
-# Check whether --with-fftw3 was given.
-if test "${with_fftw3+set}" = set; then :
-  withval=$with_fftw3; with_fftw3=$withval
-else
-  with_fftw3="yes"
-fi
-
-
-
-# Check whether --with-fftw3-libdir was given.
-if test "${with_fftw3_libdir+set}" = set; then :
-  withval=$with_fftw3_libdir; fftw3_lib_dir=$withval
-else
-  fftw3_lib_dir="yes"
-fi
-
-
-
-# Check whether --with-fftw3-includedir was given.
-if test "${with_fftw3_includedir+set}" = set; then :
-  withval=$with_fftw3_includedir; fftw3_include_dir=$withval
-else
-  fftw3_include_dir="yes"
-fi
-
-
-  if test "x$with_fftw3" != "xyes"; then
-    if test "x${fftw3_include_dir}" = "xyes"; then
-      fftw3_include_dir="$with_fftw3/include"
-    fi
-    if test "x${fftw3_lib_dir}" = "xyes"; then
-      fftw3_lib_dir="$with_fftw3/lib"
-    fi
-  fi
-
-  if test "x${fftw3_include_dir}" != "xyes"; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${fftw3_include_dir} exists" >&5
-$as_echo_n "checking whether directory ${fftw3_include_dir} exists... " >&6; }
-if test -d "${fftw3_include_dir}"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  :
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  as_fn_error $? "The directory ${fftw3_include_dir} does not exist." "$LINENO" 5
-fi
-
-    fftw3_CPPFLAGS="-I$fftw3_include_dir"
-  else
-    fftw3_CPPFLAGS=""
-  fi
-
-  if test "x${fftw3_lib_dir}" != "xyes"; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${fftw3_lib_dir} exists" >&5
-$as_echo_n "checking whether directory ${fftw3_lib_dir} exists... " >&6; }
-if test -d "${fftw3_lib_dir}"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  :
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  as_fn_error $? "The directory ${fftw3_lib_dir} does not exist." "$LINENO" 5
-fi
-
-    fftw3_LDFLAGS="-L$fftw3_lib_dir"
-  else
-    fftw3_LDFLAGS=""
-  fi
-
-  saved_LDFLAGS="$LDFLAGS"
-  saved_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
-  LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
-
-  # Check if header is present and usable.
-  ax_lib_fftw3=yes
-  ax_lib_fftw3_threads=yes
-  ac_fn_c_check_header_mongrel "$LINENO" "fftw3.h" "ac_cv_header_fftw3_h" "$ac_includes_default"
-if test "x$ac_cv_header_fftw3_h" = xyes; then :
-
-else
-  ax_lib_fftw3=no;ax_lib_fftw3_threads=no
-fi
-
-
-
-  if test "x$ax_lib_fftw3" = "xyes"; then
-    saved_LIBS="$LIBS"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_execute in -lfftw3" >&5
-$as_echo_n "checking for fftw_execute in -lfftw3... " >&6; }
-if ${ac_cv_lib_fftw3_fftw_execute+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfftw3  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_execute ();
-int
-main ()
-{
-return fftw_execute ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_fftw3_fftw_execute=yes
-else
-  ac_cv_lib_fftw3_fftw_execute=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_fftw_execute" >&5
-$as_echo "$ac_cv_lib_fftw3_fftw_execute" >&6; }
-if test "x$ac_cv_lib_fftw3_fftw_execute" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBFFTW3 1
-_ACEOF
-
-  LIBS="-lfftw3 $LIBS"
-
-else
-  ax_lib_fftw3=no
-fi
-
-    fftw3_LIBS="-lfftw3"
-    LIBS="$saved_LIBS"
-  fi
-
-  if test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3" = "xyes"; then
-    fftw3_threads_LIBS=""
-    # Combined lib
-    LIBS="-lfftw3 $LIBS"
-    fftw3_threads_LIBS="-lfftw3"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3" >&5
-$as_echo_n "checking for fftw_init_threads in -lfftw3... " >&6; }
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_init_threads ();
-int
-main ()
-{
-return fftw_init_threads ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_lib_fftw3_threads=yes
-else
-  ax_lib_fftw3_threads=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_lib_fftw3_threads" >&5
-$as_echo "$ax_lib_fftw3_threads" >&6; }
-    LIBS="$saved_LIBS"
-
-    if test "x$ax_lib_fftw3_threads" = "xno"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3" >&5
-$as_echo_n "checking for fftw_init_threads in -lfftw3... " >&6; }
-if ${ac_cv_lib_fftw3_fftw_init_threads+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfftw3 -lpthread -lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_init_threads ();
-int
-main ()
-{
-return fftw_init_threads ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_fftw3_fftw_init_threads=yes
-else
-  ac_cv_lib_fftw3_fftw_init_threads=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_fftw_init_threads" >&5
-$as_echo "$ac_cv_lib_fftw3_fftw_init_threads" >&6; }
-if test "x$ac_cv_lib_fftw3_fftw_init_threads" = xyes; then :
-  ax_lib_fftw3_threads=yes
-else
-  ax_lib_fftw3_threads=no
-fi
-
-      fftw3_threads_LIBS="-lfftw3 -lpthread -lm"
-    fi
-
-    if test "x$ax_lib_fftw3_threads" = "xno"; then
-      LIBS="-lfftw3_threads -lfftw3 $LIBS"
-      fftw3_threads_LIBS="-lfftw3_threads -lfftw3"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3_threads" >&5
-$as_echo_n "checking for fftw_init_threads in -lfftw3_threads... " >&6; }
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_init_threads ();
-int
-main ()
-{
-return fftw_init_threads ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_lib_fftw3_threads=yes
-else
-  ax_lib_fftw3_threads=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_lib_fftw3_threads" >&5
-$as_echo "$ax_lib_fftw3_threads" >&6; }
-      LIBS="$saved_LIBS"
-    fi
-
-    if test "x$ax_lib_fftw3_threads" = "xno"; then
-      LIBS="-lfftw3 -lpthread -lm $LIBS"
-      fftw3_threads_LIBS="-lfftw3_threads -lfftw3 -lpthread -lm"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftw_init_threads in -lfftw3_threads" >&5
-$as_echo_n "checking for fftw_init_threads in -lfftw3_threads... " >&6; }
-if ${ac_cv_lib_fftw3_threads_fftw_init_threads+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfftw3_threads  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_init_threads ();
-int
-main ()
-{
-return fftw_init_threads ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_fftw3_threads_fftw_init_threads=yes
-else
-  ac_cv_lib_fftw3_threads_fftw_init_threads=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fftw3_threads_fftw_init_threads" >&5
-$as_echo "$ac_cv_lib_fftw3_threads_fftw_init_threads" >&6; }
-if test "x$ac_cv_lib_fftw3_threads_fftw_init_threads" = xyes; then :
-  ax_lib_fftw3_threads=yes
-else
-  ax_lib_fftw3_threads=no
-fi
-
-    fi
-
-    LIBS="$saved_LIBS"
-  fi
-
-  # Restore saved flags.
-  CPPFLAGS="$saved_CPPFLAGS"
-  LDFLAGS="$saved_LDFLAGS"
-
-
-
-
-
-
-if test "x$ax_lib_fftw3" = "xno"; then
-  as_fn_error $? "You don't seem to have the FFTW 3 library installed. You can #
-     download it from http://www.fftw.org. If you have installed FFTW 3, #
-     make sure that this configure script can find it. See ./configure #
-     --help for more information." "$LINENO" 5
-fi
-
-if  test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3_threads" = "xno"; then
-  as_fn_error $? "You don't seem to have the threaded FFTW 3 library installed." "$LINENO" 5
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of C compiler" >&5
-$as_echo_n "checking for OpenMP flag of C compiler... " >&6; }
-if ${ax_cv_c_openmp+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  saveCFLAGS=$CFLAGS
-ax_cv_c_openmp=unknown
-# Flags to try:  -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI),
-#                -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none
-ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none"
-if test "x$OPENMP_CFLAGS" != x; then
-  ax_openmp_flags="$OPENMP_CFLAGS $ax_openmp_flags"
-fi
-for ax_openmp_flag in $ax_openmp_flags; do
-  case $ax_openmp_flag in
-    none) CFLAGS=$saveC ;;
-    *) CFLAGS="$saveCFLAGS $ax_openmp_flag" ;;
-  esac
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char omp_set_num_threads ();
-int
-main ()
-{
-return omp_set_num_threads ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_cv_c_openmp=$ax_openmp_flag; break
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-done
-CFLAGS=$saveCFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_openmp" >&5
-$as_echo "$ax_cv_c_openmp" >&6; }
-if test "x$ax_cv_c_openmp" = "xunknown"; then
-  :
-else
-  if test "x$ax_cv_c_openmp" != "xnone"; then
-    OPENMP_CFLAGS=$ax_cv_c_openmp
-  fi
-
-$as_echo "#define HAVE_OPENMP 1" >>confdefs.h
-
-fi
-
- if test "x$ax_cv_c_openmp" != "xunknown" ; then
-  HAVE_OPENMP_TRUE=
-  HAVE_OPENMP_FALSE='#'
-else
-  HAVE_OPENMP_TRUE='#'
-  HAVE_OPENMP_FALSE=
-fi
-
-
-
-if  test "x$enable_threads" = "xyes" -a "x$ax_cv_c_openmp" = "xunknown"; then
-  as_fn_error $? "You don't seem to have a C compiler with OpenMP support installed which is required for threaded NFFT." "$LINENO" 5
-fi
-
-# Check for MATLAB.
-
-
-
-
-  # option to enable mex file compilation
-
-# Check whether --with-matlab was given.
-if test "${with_matlab+set}" = set; then :
-  withval=$with_matlab; matlab_dir=${withval}
-else
-  matlab_dir="no"
-fi
-
-
-
-# Check whether --with-matlab-arch was given.
-if test "${with_matlab_arch+set}" = set; then :
-  withval=$with_matlab_arch; matlab_arch=${withval}
-else
-  matlab_arch="yes"
-fi
-
-
-  # Check whether --enable-matlab-argchecks was given.
-if test "${enable_matlab_argchecks+set}" = set; then :
-  enableval=$enable_matlab_argchecks; ok="$enableval"
-else
-  ok="yes"
-fi
-
-
-  if test "x$ok" = "xyes"; then
-
-$as_echo "#define MATLAB_ARGCHECKS 1" >>confdefs.h
-
-  fi
-
-
-# Check whether --with-matlab-fftw3-libdir was given.
-if test "${with_matlab_fftw3_libdir+set}" = set; then :
-  withval=$with_matlab_fftw3_libdir; matlab_fftw3_lib_dir=$withval
-else
-  matlab_fftw3_lib_dir="yes"
-fi
-
-
-  # Check whether --enable-matlab-threads was given.
-if test "${enable_matlab_threads+set}" = set; then :
-  enableval=$enable_matlab_threads; matlab_threads="$enableval"
-else
-  matlab_threads="$enable_threads"
-fi
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to check for Matlab" >&5
-$as_echo_n "checking whether to check for Matlab... " >&6; }
-
-  if test "x${matlab_dir}" = "xno"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-    ax_prog_matlab="no"
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-    # Matlab root
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_dir} exists" >&5
-$as_echo_n "checking whether directory ${matlab_dir} exists... " >&6; }
-if test -d "${matlab_dir}"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  :
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  as_fn_error $? "Please supply a valid path to a Matlab root directory or run configure without the option --with-matlab." "$LINENO" 5
-fi
-
-
-    # subdirectories
-    matlab_bin_dir="${matlab_dir}/bin"
-    matlab_src_dir="${matlab_dir}/extern/src"
-    matlab_include_dir="${matlab_dir}/extern/include"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_bin_dir} exists" >&5
-$as_echo_n "checking whether directory ${matlab_bin_dir} exists... " >&6; }
-if test -d "${matlab_bin_dir}"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  :
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  as_fn_error $? "The directory ${matlab_dir} does not seem to be a valid Matlab root directory." "$LINENO" 5
-fi
-
-    # More recent versions of Matlab do no longer have the src directory.
-    # AX_CHECK_DIR([${matlab_src_dir}],[],
-    #   [AC_MSG_ERROR([The directory ${matlab_dir} does not seem to be a valid Matlab root directory.])])
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_include_dir} exists" >&5
-$as_echo_n "checking whether directory ${matlab_include_dir} exists... " >&6; }
-if test -d "${matlab_include_dir}"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  :
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  as_fn_error $? "The directory ${matlab_dir} does not seem to be a valid Matlab root directory." "$LINENO" 5
-fi
-
-
-    # architecture and mex file extension
-    if test ! "x${matlab_arch}" = "xyes"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab architecture" >&5
-$as_echo_n "checking for Matlab architecture... " >&6; }
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_arch}" >&5
-$as_echo "${matlab_arch}" >&6; }
-      # mex file extension for architecture
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mex file extension" >&5
-$as_echo_n "checking for mex file extension... " >&6; }
-      case $matlab_arch in
-        glnx86) matlab_mexext="mexglx";;
-        glnxa64) matlab_mexext="mexa64";;
-        mac) matlab_mexext="mexmac";;
-        maci) matlab_mexext="mexmaci";;
-        maci64) matlab_mexext="mexmaci64";;
-        sol64) matlab_mexext="mexs64";;
-        win32) matlab_mexext="mexw32";;
-        win64) matlab_mexext="mexw64";;
-        *) as_fn_error $? "Unsupported or invalid architecture ${matlab_arch}." "$LINENO" 5;;
-      esac
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_mexext}" >&5
-$as_echo "${matlab_mexext}" >&6; }
-    else
-      matlab_mexext="unknown"
-      matlab_arch="unknown"
-
-      # mex file extension, maybe
-      for matlab_check_prog_mexext in mexext mexext.sh mexext.bat; do
-        unset ac_cv_path_matlab_prog_mexext
-        # Extract the first word of "$matlab_check_prog_mexext", so it can be a program name with args.
-set dummy $matlab_check_prog_mexext; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_matlab_prog_mexext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $matlab_prog_mexext in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_matlab_prog_mexext="$matlab_prog_mexext" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $matlab_bin_dir$PATH_SEPARATOR$PATH$PATH_SEPARATOR$matlab_bin_dir
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_matlab_prog_mexext="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_path_matlab_prog_mexext" && ac_cv_path_matlab_prog_mexext="no"
-  ;;
-esac
-fi
-matlab_prog_mexext=$ac_cv_path_matlab_prog_mexext
-if test -n "$matlab_prog_mexext"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $matlab_prog_mexext" >&5
-$as_echo "$matlab_prog_mexext" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-        if test ! "x${matlab_prog_mexext}" = "xno"; then
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mex file extension" >&5
-$as_echo_n "checking for mex file extension... " >&6; }
-          if test "x${host_os}" = "xmingw32"; then
-            matlab_mexext=mexw32
-          else
-            matlab_mexext=`${matlab_prog_mexext}`
-            matlab_mexext=`echo ${matlab_mexext} | tr -d '\r\n'`
-          fi
-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_mexext}" >&5
-$as_echo "${matlab_mexext}" >&6; }
-          break
-        fi
-      done
-
-      # architecture, maybe
-      if test "x${matlab_mexext}" = "xunknown"; then
-        # Try guessing the architecture based on host
-        case $host in
-          *86_64*linux*) matlab_arch_test="glnxa64";;
-          *86*linux*) matlab_arch_test="glnx86";;
-          *powerpc*darwin*) matlab_arch_test="mac mac64";;
-          *86*darwin*) matlab_arch_test="maci maci64";;
-          *solaris*) matlab_arch_test="sol sol64";;
-          *cygwin*) matlab_arch_test="win32 win64";;
-          *mingw*) matlab_arch_test="win32 win64";;
-          *) as_fn_error $? "Cannot guess Matlab architecture based on host type." "$LINENO" 5;;
-        esac
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for architecture" >&5
-$as_echo_n "checking for architecture... " >&6; }
-        for matlab_arch in "$matlab_arch_test"; do
-          if test -d "${matlab_bin_dir}/${matlab_arch}" -a -f "${matlab_bin_dir}/${matlab_arch}/MATLAB"; then
-            { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_arch}" >&5
-$as_echo "${matlab_arch}" >&6; }
-            break
-          fi
-          matlab_arch="unkown"
-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
-$as_echo "unknown" >&6; }
-        done
-      fi
-
-      # mex file extension or architecture found
-      if test "x${matlab_mexext}" = "xunknown" -a "x${matlab_arch}" = "xunknown"; then
-        as_fn_error $? "Could not determine mex file extension nor Matlab architecture. Please supply a valid architecture flag using the option --with-matlab-arch" "$LINENO" 5
-      fi
-
-      if test "x${matlab_arch}" = "xunknown"; then
-        # architecture for mex file extension
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for architecture" >&5
-$as_echo_n "checking for architecture... " >&6; }
-        case ${matlab_mexext} in
-          mexglx) matlab_arch="glnx86";;
-          mexa64) matlab_arch="glnxa64";;
-          mexmac) matlab_arch="mac";;
-          mexmaci) matlab_arch="maci";;
-          mexmaci64) matlab_arch="maci64";;
-          mexs64) matlab_arch="sol64";;
-          mexw32) matlab_arch="win32";;
-          mexw64) matlab_arch="win64";;
-          *) as_fn_error $? "Unsupported mex file extension ${matlab_mexext}." "$LINENO" 5;;
-        esac
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_arch}" >&5
-$as_echo "${matlab_arch}" >&6; }
-      elif test "x${matlab_mexext}" = "xunknown"; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mex file extension" >&5
-$as_echo_n "checking for mex file extension... " >&6; }
-        case $matlab_arch in
-          glnx86) matlab_mexext="mexglx";;
-          glnxa64) matlab_mexext="mexa64";;
-          mac) matlab_mexext="mexmac";;
-          maci) matlab_mexext="mexmaci";;
-          maci64) matlab_mexext="mexmaci64";;
-          sol64) matlab_mexext="mexs64";;
-          win32) matlab_mexext="mexw32";;
-          win64) matlab_mexext="mexw64";;
-          *) as_fn_error $? "Unsupported or invalid architecture ${matlab_arch}." "$LINENO" 5;;
-        esac
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${matlab_mexext}" >&5
-$as_echo "${matlab_mexext}" >&6; }
-      fi
-    fi
-
-    # add "." to mex file extension
-    matlab_mexext=".$matlab_mexext"
-
-    # arch bin dir
-    matlab_arch_bin_dir="${matlab_bin_dir}/${matlab_arch}"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_arch_bin_dir} exists" >&5
-$as_echo_n "checking whether directory ${matlab_arch_bin_dir} exists... " >&6; }
-if test -d "${matlab_arch_bin_dir}"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  :
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  as_fn_error $? "The directory ${matlab_dir} does not seem to be a valid Matlab root directory." "$LINENO" 5
-fi
-
-
-    # dynamic library extension for architecture
-    case $matlab_arch in
-      glnx86|glnxa64|sol|sol64) matlab_libext=".so";;
-      mac|mac64|maci|maci64) matlab_libext=".dylib";;
-      win32|win64) matlab_libext=".dll";;
-      *) as_fn_error $? "Unsupported or invalid architecture ${matlab_arch}." "$LINENO" 5;;
-    esac
-
-    # libraries
-    matlab_LDFLAGS="-L${matlab_arch_bin_dir}"
-    saved_LDFLAGS="$LDFLAGS"
-    LDFLAGS="$LDFLAGS ${matlab_LDFLAGS}"
-    matlab_LIBS=""
-    matlab_fftw3_LIBS=""
-    matlab_fftw3_LDFLAGS=""
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mxMalloc in -lmx" >&5
-$as_echo_n "checking for mxMalloc in -lmx... " >&6; }
-if ${ac_cv_lib_mx_mxMalloc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lmx  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char mxMalloc ();
-int
-main ()
-{
-return mxMalloc ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_mx_mxMalloc=yes
-else
-  ac_cv_lib_mx_mxMalloc=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mx_mxMalloc" >&5
-$as_echo "$ac_cv_lib_mx_mxMalloc" >&6; }
-if test "x$ac_cv_lib_mx_mxMalloc" = xyes; then :
-  matlab_LIBS="$matlab_LIBS -lmx"
-else
-  as_ac_File=`$as_echo "ac_cv_file_${matlab_arch_bin_dir}/libmx${matlab_libext}" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_arch_bin_dir}/libmx${matlab_libext}" >&5
-$as_echo_n "checking for ${matlab_arch_bin_dir}/libmx${matlab_libext}... " >&6; }
-if eval \${$as_ac_File+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "${matlab_arch_bin_dir}/libmx${matlab_libext}"; then
-  eval "$as_ac_File=yes"
-else
-  eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
-  matlab_LIBS="$matlab_LIBS -lmx"
-else
-  as_fn_error $? "Needed Matlab library mx not usable." "$LINENO" 5
-fi
-
-fi
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mexCallMATLAB in -lmex" >&5
-$as_echo_n "checking for mexCallMATLAB in -lmex... " >&6; }
-if ${ac_cv_lib_mex_mexCallMATLAB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lmex  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char mexCallMATLAB ();
-int
-main ()
-{
-return mexCallMATLAB ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_mex_mexCallMATLAB=yes
-else
-  ac_cv_lib_mex_mexCallMATLAB=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mex_mexCallMATLAB" >&5
-$as_echo "$ac_cv_lib_mex_mexCallMATLAB" >&6; }
-if test "x$ac_cv_lib_mex_mexCallMATLAB" = xyes; then :
-  matlab_LIBS="$matlab_LIBS -lmex"
-else
-  as_ac_File=`$as_echo "ac_cv_file_${matlab_arch_bin_dir}/libmex${matlab_libext}" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_arch_bin_dir}/libmex${matlab_libext}" >&5
-$as_echo_n "checking for ${matlab_arch_bin_dir}/libmex${matlab_libext}... " >&6; }
-if eval \${$as_ac_File+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "${matlab_arch_bin_dir}/libmex${matlab_libext}"; then
-  eval "$as_ac_File=yes"
-else
-  eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
-  matlab_LIBS="$matlab_LIBS -lmex"
-else
-  as_fn_error $? "Needed Matlab library mex not usable." "$LINENO" 5
-fi
-
-fi
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for matGetVariable in -lmat" >&5
-$as_echo_n "checking for matGetVariable in -lmat... " >&6; }
-if ${ac_cv_lib_mat_matGetVariable+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lmat  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char matGetVariable ();
-int
-main ()
-{
-return matGetVariable ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_mat_matGetVariable=yes
-else
-  ac_cv_lib_mat_matGetVariable=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mat_matGetVariable" >&5
-$as_echo "$ac_cv_lib_mat_matGetVariable" >&6; }
-if test "x$ac_cv_lib_mat_matGetVariable" = xyes; then :
-  matlab_LIBS="$matlab_LIBS -lmat"
-else
-  as_ac_File=`$as_echo "ac_cv_file_${matlab_arch_bin_dir}/libmat${matlab_libext}" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_arch_bin_dir}/libmat${matlab_libext}" >&5
-$as_echo_n "checking for ${matlab_arch_bin_dir}/libmat${matlab_libext}... " >&6; }
-if eval \${$as_ac_File+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "${matlab_arch_bin_dir}/libmat${matlab_libext}"; then
-  eval "$as_ac_File=yes"
-else
-  eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
-  matlab_LIBS="$matlab_LIBS -lmat"
-else
-  as_fn_error $? "Needed Matlab library mat not usable." "$LINENO" 5
-fi
-
-fi
-
-
-    LDFLAGS="$saved_LDFLAGS"
-
-    matlab_CPPFLAGS="-I${matlab_include_dir}"
-
-    # mexversion.c
-    as_ac_File=`$as_echo "ac_cv_file_${matlab_src_dir}/mexversion.c" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${matlab_src_dir}/mexversion.c" >&5
-$as_echo_n "checking for ${matlab_src_dir}/mexversion.c... " >&6; }
-if eval \${$as_ac_File+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  test "$cross_compiling" = yes &&
-  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "${matlab_src_dir}/mexversion.c"; then
-  eval "$as_ac_File=yes"
-else
-  eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
-  matlab_CPPFLAGS="${matlab_CPPFLAGS} -I${matlab_src_dir}";
-$as_echo "#define HAVE_MEXVERSION_C 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: File ${matlab_src_dir}/mexversion.c not found" >&5
-$as_echo "$as_me: WARNING: File ${matlab_src_dir}/mexversion.c not found" >&2;}
-fi
-
-
-    ax_prog_matlab="yes"
-
-    # Only overwrite Matlab fftw3 lib dir when not explicitly set
-    if test "x${matlab_fftw3_lib_dir}" = "xyes"; then
-      matlab_fftw3_lib_dir="${matlab_bin_dir}/${matlab_arch}"
-    else
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directory ${matlab_fftw3_lib_dir} exists" >&5
-$as_echo_n "checking whether directory ${matlab_fftw3_lib_dir} exists... " >&6; }
-if test -d "${matlab_fftw3_lib_dir}"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  :
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  as_fn_error $? "The directory ${matlab_fftw3_lib_dir} does not seem to be a valid fftw3 library directory." "$LINENO" 5
-fi
-
-      matlab_fftw3_LDFLAGS="-L$matlab_fftw3_lib_dir"
-    fi
-
-    saved_LIBS="$LIBS"
-    saved_LDFLAGS="$LDFLAGS"
-
-    matlab_fftw3_LIBS="-lfftw3"
-    LIBS="-lfftw3 $LIBS"
-    LDFLAGS="-L$matlab_fftw3_lib_dir ${matlab_LDFLAGS} $LDFLAGS"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library" >&5
-$as_echo_n "checking for Matlab fftw3 library... " >&6; }
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_execute ();
-int
-main ()
-{
-return fftw_execute ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_matlab_lib_fftw3=yes
-else
-  ax_matlab_lib_fftw3=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3" >&5
-$as_echo "$ax_matlab_lib_fftw3" >&6; }
-
-    if test "x$ax_matlab_lib_fftw3" = "xno"; then
-      matlab_fftw3_LIBS="-lfftw3 -lm"
-      LIBS="$matlab_fftw3_LIBS $saved_LIBS"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library (-lm set)" >&5
-$as_echo_n "checking for Matlab fftw3 library (-lm set)... " >&6; }
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_execute ();
-int
-main ()
-{
-return fftw_execute ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_matlab_lib_fftw3=yes
-else
-  ax_matlab_lib_fftw3=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3" >&5
-$as_echo "$ax_matlab_lib_fftw3" >&6; }
-    fi
-
-    if test "x$ax_matlab_lib_fftw3" = "xno"; then
-      matlab_fftw3_LIBS="-lfftw3 -pthread -lm"
-      LIBS="$matlab_fftw3_LIBS $saved_LIBS"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library (-lpthread -lm set)" >&5
-$as_echo_n "checking for Matlab fftw3 library (-lpthread -lm set)... " >&6; }
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_execute ();
-int
-main ()
-{
-return fftw_execute ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_matlab_lib_fftw3=yes
-else
-  ax_matlab_lib_fftw3=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3" >&5
-$as_echo "$ax_matlab_lib_fftw3" >&6; }
-    fi
-
-    if test "x$ax_matlab_lib_fftw3" = "xno"; then
-      as_fn_error $? "You don't seem to have installed installed the FFTW 3 libray for the NFFT Matlab interface." "$LINENO" 5
-    fi
-
-    if test "x$matlab_threads" = "xyes"; then
-      LIBS="$matlab_fftw3_LIBS $saved_LIBS"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab combined fftw3 library with thread support" >&5
-$as_echo_n "checking for Matlab combined fftw3 library with thread support... " >&6; }
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_init_threads ();
-int
-main ()
-{
-return fftw_init_threads ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_matlab_lib_fftw3_threads=yes
-else
-  ax_matlab_lib_fftw3_threads=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
-$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
-
-      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
-        ax_matlab_lib_fftw3_threads="yes"
-        LIBS="$matlab_fftw3_LIBS -lpthread -lm $saved_LIBS"
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab combined fftw3 library with thread support (-lpthread -lm set)" >&5
-$as_echo_n "checking for Matlab combined fftw3 library with thread support (-lpthread -lm set)... " >&6; }
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_init_threads ();
-int
-main ()
-{
-return fftw_init_threads ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  matlab_fftw3_LIBS="$matlab_fftw3_LIBS -lpthread -lm"
-else
-  ax_matlab_lib_fftw3_threads=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
-$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
-      fi
-
-      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
-        ax_matlab_lib_fftw3_threads="yes"
-        LIBS="-lfftw3_threads $matlab_fftw3_LIBS $saved_LIBS"
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library with thread support" >&5
-$as_echo_n "checking for Matlab fftw3 library with thread support... " >&6; }
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_init_threads ();
-int
-main ()
-{
-return fftw_init_threads ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  matlab_fftw3_LIBS="-lfftw3_threads $matlab_fftw3_LIBS"
-else
-  ax_matlab_lib_fftw3_threads=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
-$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
-      fi
-
-      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
-        ax_matlab_lib_fftw3_threads="yes"
-        LIBS="-lfftw3_threads -lpthread $matlab_fftw3_LIBS $saved_LIBS"
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Matlab fftw3 library with thread support (-lpthread set)" >&5
-$as_echo_n "checking for Matlab fftw3 library with thread support (-lpthread set)... " >&6; }
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fftw_init_threads ();
-int
-main ()
-{
-return fftw_init_threads ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  matlab_fftw3_LIBS="-lfftw3_threads -lpthread $matlab_fftw3_LIBS"
-else
-  ax_matlab_lib_fftw3_threads=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_matlab_lib_fftw3_threads" >&5
-$as_echo "$ax_matlab_lib_fftw3_threads" >&6; }
-      fi
-
-      if test "x$ax_matlab_lib_fftw3_threads" = "xno"; then
-        as_fn_error $? "You don't seem to have installed the FFTW 3 libray for the NFFT Matlab interface." "$LINENO" 5
-      fi
-    fi
-
-    LIBS="$saved_LIBS"
-    LDFLAGS="$saved_LDFLAGS"
-  fi
-   if test "x$ax_prog_matlab" = "xyes" ; then
-  HAVE_MATLAB_TRUE=
-  HAVE_MATLAB_FALSE='#'
-else
-  HAVE_MATLAB_TRUE='#'
-  HAVE_MATLAB_FALSE=
-fi
-
-   if test "x$matlab_threads" = "xyes"; then
-  HAVE_MATLAB_THREADS_TRUE=
-  HAVE_MATLAB_THREADS_FALSE='#'
-else
-  HAVE_MATLAB_THREADS_TRUE='#'
-  HAVE_MATLAB_THREADS_FALSE=
-fi
-
-
-
-
-
-
-
-
-
-if test "x$matlab_threads" = "xyes" -a "x$enable_threads" != "xyes"; then
-  as_fn_error $? "The NFFT Matlab interface with thread support requires the threaded NFFT to be built. Please re-run configure with \"--enable-openmp\"." "$LINENO" 5
-fi
-
- if test "x$ax_prog_matlab" = "xyes" ; then
-  HAVE_MATLAB_TRUE=
-  HAVE_MATLAB_FALSE='#'
-else
-  HAVE_MATLAB_TRUE='#'
-  HAVE_MATLAB_FALSE=
-fi
-
-
-
-
-
-
-################################################################################
-# compiler options
-################################################################################
-
-# Try to choose good compiler options.
-if test "x$ac_test_CFLAGS" != "xset"; then
-  saved_CPPFLAGS="$CPPFLAGS"
-  saved_LDFLAGS="$LDFLAGS"
-  saved_LIBS="$LIBS"
-  CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
-  LIBS="$LIBS $fftw3_LIBS"
-  LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
-
-
-
-
-
-# Check whether --enable-portable-binary was given.
-if test "${enable_portable_binary+set}" = set; then :
-  enableval=$enable_portable_binary; acx_maxopt_portable=$enableval
-else
-  acx_maxopt_portable=no
-fi
-
-
-# Try to determine "good" native compiler flags if none specified via CFLAGS
-if test "$ac_test_CFLAGS" != "set"; then
-  CFLAGS=""
-  case $ax_cv_c_compiler_vendor in
-    dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
-      if test "x$acx_maxopt_portable" = xno; then
-        CFLAGS="$CFLAGS -arch host"
-      fi;;
-
-    sun) CFLAGS="-native -fast -xO5 -dalign"
-      if test "x$acx_maxopt_portable" = xyes; then
-         CFLAGS="$CFLAGS -xarch=generic"
-      fi;;
-
-    hp) CFLAGS="+Oall +Optrs_ansi +DSnative"
-      if test "x$acx_maxopt_portable" = xyes; then
-        CFLAGS="$CFLAGS +DAportable"
-      fi;;
-
-    ibm) if test "x$acx_maxopt_portable" = xno; then
-        xlc_opt="-qarch=auto -qtune=auto"
-      else
-        xlc_opt="-qtune=auto"
-      fi
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5
-$as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; }
-ax_save_FLAGS=$CFLAGS
-   CFLAGS="$xlc_opt"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=yes
-else
-  eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   CFLAGS=$ax_save_FLAGS
-eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="-O3 -qansialias -w $xlc_opt"
-else
-	CFLAGS="-O3 -qansialias -w"
-              echo "******************************************************"
-              echo "*  You seem to have the IBM  C compiler.  It is      *"
-              echo "*  recommended for best performance that you use:    *"
-              echo "*                                                    *"
-              echo "*    CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *"
-              echo "*                      ^^^        ^^^                *"
-              echo "*  where xxx is pwr2, pwr3, 604, or whatever kind of *"
-              echo "*  CPU you have.  (Set the CFLAGS environment var.   *"
-              echo "*  and re-run configure.)  For more info, man cc.    *"
-              echo "******************************************************"
-fi
-
-        ;;
-
-    intel) CFLAGS="-O3"
-        # Intel seems to have changed the spelling of this flag recently
-        icc_ansi_alias="unknown"
-	for flag in -ansi-alias -ansi_alias; do
-	   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
-$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
-ax_save_FLAGS=$CFLAGS
-   CFLAGS="$flag"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes
-else
-  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   CFLAGS=$ax_save_FLAGS
-eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	icc_ansi_alias=$flag; break
-else
-	:
-fi
-
-	done
- 	if test "x$icc_ansi_alias" != xunknown; then
-            CFLAGS="$CFLAGS $icc_ansi_alias"
-        fi
-	 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5
-$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; }
-if ${ax_cv_c_flags__malign_double+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-malign-double"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__malign_double=yes
-else
-  ax_cv_c_flags__malign_double=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -malign-double"
-else
-	:
-fi
-
-	if test "x$acx_maxopt_portable" = xno; then
-	  icc_archflag=unknown
-	  icc_flags=""
-	  # -xN etcetera are for older versions of icc:
-	  case $host_cpu in
-	    i686*|x86_64*)
-              # icc accepts gcc assembly syntax, so these should work:
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5
-$as_echo_n "checking for x86 cpuid 0 output... " >&6; }
-if ${ax_cv_gcc_x86_cpuid_0+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ax_cv_gcc_x86_cpuid_0=unknown
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-
-     int op = 0, eax, ebx, ecx, edx;
-     FILE *f;
-     __asm__("push %%ebx\n\t"
-             "cpuid\n\t"
-             "pop %%ebx"
-             : "=a" (eax), "=c" (ecx), "=d" (edx)
-             : "a" (op));
-     __asm__("push %%ebx\n\t"
-             "cpuid\n\t"
-             "mov %%ebx, %%eax\n\t"
-             "pop %%ebx"
-             : "=a" (ebx), "=c" (ecx), "=d" (edx)
-             : "a" (op));
-     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
-     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
-     fclose(f);
-     return 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid
-else
-  ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5
-$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5
-$as_echo_n "checking for x86 cpuid 1 output... " >&6; }
-if ${ax_cv_gcc_x86_cpuid_1+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ax_cv_gcc_x86_cpuid_1=unknown
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-
-     int op = 1, eax, ebx, ecx, edx;
-     FILE *f;
-     __asm__("push %%ebx\n\t"
-             "cpuid\n\t"
-             "pop %%ebx"
-             : "=a" (eax), "=c" (ecx), "=d" (edx)
-             : "a" (op));
-     __asm__("push %%ebx\n\t"
-             "cpuid\n\t"
-             "mov %%ebx, %%eax\n\t"
-             "pop %%ebx"
-             : "=a" (ebx), "=c" (ecx), "=d" (edx)
-             : "a" (op));
-     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
-     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
-     fclose(f);
-     return 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid
-else
-  ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5
-$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-	      case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG
-                *:756e6547:*:*) # Intel
-                  case $ax_cv_gcc_x86_cpuid_1 in
-                    *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";;
-                    *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";;
-                    *f??:*:*:*) icc_flags="-xN -xW -xK";;
-                  esac ;;
-              esac ;;
-          esac
-          # newer icc versions should support -xHost
-	  icc_flags="-xHost $icc_flags"
-          if test "x$icc_flags" != x; then
-            for flag in $icc_flags; do
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
-$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
-ax_save_FLAGS=$CFLAGS
-   CFLAGS="$flag"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes
-else
-  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   CFLAGS=$ax_save_FLAGS
-eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	icc_archflag=$flag; break
-else
-	:
-fi
-
-            done
-          fi
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5
-$as_echo_n "checking for icc architecture flag... " >&6; }
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5
-$as_echo "$icc_archflag" >&6; }
-          if test "x$icc_archflag" != xunknown; then
-            CFLAGS="$CFLAGS $icc_archflag"
-          fi
-        fi
-	;;
-
-    gnu)
-     # default optimization flags for gcc on all systems
-     CFLAGS="-O3 -fomit-frame-pointer"
-
-     # -malign-double for x86 systems
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5
-$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; }
-if ${ax_cv_c_flags__malign_double+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-malign-double"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__malign_double=yes
-else
-  ax_cv_c_flags__malign_double=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -malign-double"
-else
-	:
-fi
-
-
-     #  -fstrict-aliasing for gcc-2.95+
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5
-$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; }
-if ${ax_cv_c_flags__fstrict_aliasing+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-fstrict-aliasing"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__fstrict_aliasing=yes
-else
-  ax_cv_c_flags__fstrict_aliasing=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -fstrict-aliasing"
-else
-	:
-fi
-
-
-     # note that we enable "unsafe" fp optimization with other compilers, too
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5
-$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; }
-if ${ax_cv_c_flags__ffast_math+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-ffast-math"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__ffast_math=yes
-else
-  ax_cv_c_flags__ffast_math=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -ffast-math"
-else
-	:
-fi
-
-
-
-
-
-
-# Check whether --with-gcc-arch was given.
-if test "${with_gcc_arch+set}" = set; then :
-  withval=$with_gcc_arch; ax_gcc_arch=$withval
-else
-  ax_gcc_arch=yes
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5
-$as_echo_n "checking for gcc architecture flag... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5
-$as_echo "" >&6; }
-if ${ax_cv_gcc_archflag+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-ax_cv_gcc_archflag="unknown"
-
-if test "$GCC" = yes; then
-
-if test "x$ax_gcc_arch" = xyes; then
-ax_gcc_arch=""
-if test "$cross_compiling" = no; then
-case $host_cpu in
-  i[3456]86*|x86_64*|amd64*) # use cpuid codes, in part from x86info-1.21 by D. Jones
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5
-$as_echo_n "checking for x86 cpuid 0 output... " >&6; }
-if ${ax_cv_gcc_x86_cpuid_0+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ax_cv_gcc_x86_cpuid_0=unknown
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-
-     int op = 0, eax, ebx, ecx, edx;
-     FILE *f;
-     __asm__("push %%ebx\n\t"
-             "cpuid\n\t"
-             "pop %%ebx"
-             : "=a" (eax), "=c" (ecx), "=d" (edx)
-             : "a" (op));
-     __asm__("push %%ebx\n\t"
-             "cpuid\n\t"
-             "mov %%ebx, %%eax\n\t"
-             "pop %%ebx"
-             : "=a" (ebx), "=c" (ecx), "=d" (edx)
-             : "a" (op));
-     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
-     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
-     fclose(f);
-     return 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid
-else
-  ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5
-$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5
-$as_echo_n "checking for x86 cpuid 1 output... " >&6; }
-if ${ax_cv_gcc_x86_cpuid_1+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ax_cv_gcc_x86_cpuid_1=unknown
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-
-     int op = 1, eax, ebx, ecx, edx;
-     FILE *f;
-     __asm__("push %%ebx\n\t"
-             "cpuid\n\t"
-             "pop %%ebx"
-             : "=a" (eax), "=c" (ecx), "=d" (edx)
-             : "a" (op));
-     __asm__("push %%ebx\n\t"
-             "cpuid\n\t"
-             "mov %%ebx, %%eax\n\t"
-             "pop %%ebx"
-             : "=a" (ebx), "=c" (ecx), "=d" (edx)
-             : "a" (op));
-     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
-     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
-     fclose(f);
-     return 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid
-else
-  ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5
-$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-     case $ax_cv_gcc_x86_cpuid_0 in
-       *:756e6547:*:*) # Intel
-          case $ax_cv_gcc_x86_cpuid_1 in
-	    *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;;
-	    *5??:*:*:*) ax_gcc_arch=pentium ;;
-	    *6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
-	    *6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;;
-	    *6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
-	    *6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;;
-	    *6[9d]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;;
-	    *6[e]?:*:*:*) ax_gcc_arch="native pentium-m pentium3 pentiumpro" ;; # Core Duo
-	    *6f?:*:*:*) ax_gcc_arch="core2 native pentium-m pentium3 pentiumpro" ;;
-	    *6??:*:*:*) ax_gcc_arch="native pentiumpro" ;;
-            *f3[347]:*:*:*|*f4[1347]:*:*:*)
-		case $host_cpu in
-                  x86_64*|amd64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;;
-                  *) ax_gcc_arch="prescott pentium4 pentiumpro" ;;
-                esac ;;
-            *f??:*:*:*) ax_gcc_arch="native pentium4 pentiumpro";;
-          esac ;;
-       *:68747541:*:*) # AMD
-          case $ax_cv_gcc_x86_cpuid_1 in
-	    *5[67]?:*:*:*) ax_gcc_arch=k6 ;;
-	    *5[8c]?:*:*:*) ax_gcc_arch="k6-2 k6" ;;
-	    *5[9d]?:*:*:*) ax_gcc_arch="k6-3 k6" ;;
-	    *60?:*:*:*) ax_gcc_arch=k7 ;;
-	    *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;;
-	    *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;;
-	    *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;;
-	    *6[68a]?:*:*:*)
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5
-$as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; }
-if ${ax_cv_gcc_x86_cpuid_0x80000006+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ax_cv_gcc_x86_cpuid_0x80000006=unknown
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-
-     int op = 0x80000006, eax, ebx, ecx, edx;
-     FILE *f;
-     __asm__("push %%ebx\n\t"
-             "cpuid\n\t"
-             "pop %%ebx"
-             : "=a" (eax), "=c" (ecx), "=d" (edx)
-             : "a" (op));
-     __asm__("push %%ebx\n\t"
-             "cpuid\n\t"
-             "mov %%ebx, %%eax\n\t"
-             "pop %%ebx"
-             : "=a" (ebx), "=c" (ecx), "=d" (edx)
-             : "a" (op));
-     f = fopen("conftest_cpuid", "w"); if (!f) return 1;
-     fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
-     fclose(f);
-     return 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid
-else
-  ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5
-$as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- # L2 cache size
-	       case $ax_cv_gcc_x86_cpuid_0x80000006 in
-                 *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256
-			ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;;
-                 *) ax_gcc_arch="athlon-4 athlon k7" ;;
-	       esac ;;
-	    *f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;;
-	    *f5?:*:*:*) ax_gcc_arch="opteron k8" ;;
-	    *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;;
-	    *f??:*:*:*) ax_gcc_arch="native k8" ;;
-          esac ;;
-	*:746e6543:*:*) # IDT
-	   case $ax_cv_gcc_x86_cpuid_1 in
-	     *54?:*:*:*) ax_gcc_arch=winchip-c6 ;;
-	     *58?:*:*:*) ax_gcc_arch=winchip2 ;;
-	     *6[78]?:*:*:*) ax_gcc_arch=c3 ;;
-	     *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;;
-	   esac ;;
-     esac
-     if test x"$ax_gcc_arch" = x; then # fallback
-	case $host_cpu in
-	  i586*) ax_gcc_arch="native pentium" ;;
-	  i686*) ax_gcc_arch="native pentiumpro" ;;
-          x86_64*|amd64*) ax_gcc_arch="native" ;;
-        esac
-     fi
-     ;;
-
-  sparc*)
-     # Extract the first word of "prtdiag", so it can be a program name with args.
-set dummy prtdiag; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PRTDIAG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $PRTDIAG in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/"
-for as_dir in $as_dummy
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag"
-  ;;
-esac
-fi
-PRTDIAG=$ac_cv_path_PRTDIAG
-if test -n "$PRTDIAG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5
-$as_echo "$PRTDIAG" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-     cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null`
-     cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters`
-     case $cputype in
-         *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;;
-         *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;;
-         *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;;
-         *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;;
-         *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;;
-         *cypress*) ax_gcc_arch=cypress ;;
-     esac ;;
-
-  alphaev5) ax_gcc_arch=ev5 ;;
-  alphaev56) ax_gcc_arch=ev56 ;;
-  alphapca56) ax_gcc_arch="pca56 ev56" ;;
-  alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;;
-  alphaev6) ax_gcc_arch=ev6 ;;
-  alphaev67) ax_gcc_arch=ev67 ;;
-  alphaev68) ax_gcc_arch="ev68 ev67" ;;
-  alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;;
-  alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;;
-  alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;;
-
-  powerpc*)
-     cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
-     cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
-     case $cputype in
-       *750*) ax_gcc_arch="750 G3" ;;
-       *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;;
-       *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;;
-       *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;;
-       *970*) ax_gcc_arch="970 G5 power4";;
-       *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";;
-       *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";;
-       603ev|8240) ax_gcc_arch="$cputype 603e 603";;
-       *Cell*) ax_gcc_arch="cellppu cell";;
-       *) ax_gcc_arch="$cputype native" ;;
-     esac
-     ax_gcc_arch="$ax_gcc_arch powerpc"
-     ;;
-esac
-fi # not cross-compiling
-fi # guess arch
-
-if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then
-for arch in $ax_gcc_arch; do
-  if test "x$acx_maxopt_portable" = xyes; then # if we require portable code
-    flags="-mtune=$arch"
-    # -mcpu=$arch and m$arch generate nonportable code on every arch except
-    # x86.  And some other arches (e.g. Alpha) don't accept -mtune.  Grrr.
-    case $host_cpu in i*86|x86_64*|amd64*) flags="$flags -mcpu=$arch -m$arch";; esac
-  else
-    flags="-march=$arch -mcpu=$arch -m$arch"
-  fi
-  for flag in $flags; do
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
-$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
-ax_save_FLAGS=$CFLAGS
-   CFLAGS="$flag"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes
-else
-  eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   CFLAGS=$ax_save_FLAGS
-eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	ax_cv_gcc_archflag=$flag; break
-else
-	:
-fi
-
-  done
-  test "x$ax_cv_gcc_archflag" = xunknown || break
-done
-fi
-
-fi # $GCC=yes
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5
-$as_echo_n "checking for gcc architecture flag... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5
-$as_echo "$ax_cv_gcc_archflag" >&6; }
-if test "x$ax_cv_gcc_archflag" = xunknown; then
-  :
-else
-  CFLAGS="$CFLAGS $ax_cv_gcc_archflag"
-fi
-
-     ;;
-   apple)
-     # default optimization flags for apple on all systems
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -O3" >&5
-$as_echo_n "checking whether C compiler accepts -O3... " >&6; }
-if ${ax_cv_c_flags__O3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-O3"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__O3=yes
-else
-  ax_cv_c_flags__O3=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__O3
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -O3"
-else
-	:
-fi
-
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fomit-frame-pointer" >&5
-$as_echo_n "checking whether C compiler accepts -fomit-frame-pointer... " >&6; }
-if ${ax_cv_c_flags__fomit_frame_pointer+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-fomit-frame-pointer"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__fomit_frame_pointer=yes
-else
-  ax_cv_c_flags__fomit_frame_pointer=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__fomit_frame_pointer
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -fomit-frame-pointer"
-else
-	:
-fi
-
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fPIC" >&5
-$as_echo_n "checking whether C compiler accepts -fPIC... " >&6; }
-if ${ax_cv_c_flags__fPIC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-fPIC"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__fPIC=yes
-else
-  ax_cv_c_flags__fPIC=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__fPIC
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -fPIC"
-else
-	:
-fi
-
-
-     # -malign-double for x86 systems
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5
-$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; }
-if ${ax_cv_c_flags__malign_double+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-malign-double"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__malign_double=yes
-else
-  ax_cv_c_flags__malign_double=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -malign-double"
-else
-	:
-fi
-
-
-     #  -fstrict-aliasing for gcc-2.95+
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5
-$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; }
-if ${ax_cv_c_flags__fstrict_aliasing+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-fstrict-aliasing"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__fstrict_aliasing=yes
-else
-  ax_cv_c_flags__fstrict_aliasing=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -fstrict-aliasing"
-else
-	:
-fi
-
-
-     # note that we enable "unsafe" fp optimization with other compilers, too
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5
-$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; }
-if ${ax_cv_c_flags__ffast_math+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-ffast-math"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__ffast_math=yes
-else
-  ax_cv_c_flags__ffast_math=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -ffast-math"
-else
-	:
-fi
-
-
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -march=core2" >&5
-$as_echo_n "checking whether C compiler accepts -march=core2... " >&6; }
-if ${ax_cv_c_flags__march_core2+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-march=core2"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__march_core2=yes
-else
-  ax_cv_c_flags__march_core2=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__march_core2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -march=core2"
-else
-	:
-fi
-
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mtune=core2" >&5
-$as_echo_n "checking whether C compiler accepts -mtune=core2... " >&6; }
-if ${ax_cv_c_flags__mtune_core2+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      ax_save_FLAGS=$CFLAGS
-      CFLAGS="-mtune=core2"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_cv_c_flags__mtune_core2=yes
-else
-  ax_cv_c_flags__mtune_core2=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      CFLAGS=$ax_save_FLAGS
-fi
-
-eval ax_check_compiler_flags=$ax_cv_c_flags__mtune_core2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	CFLAGS="$CFLAGS -mtune=core2"
-else
-	:
-fi
-
-
-
-
-
-
-# Check whether --with-apple-gcc-arch was given.
-if test "${with_apple_gcc_arch+set}" = set; then :
-  withval=$with_apple_gcc_arch; ax_apple_gcc_arch=$withval
-else
-  ax_apple_gcc_arch=yes
-fi
-
-
-if ${ax_cv_apple_gcc_archflag+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-ax_cv_apple_gcc_archflag="unknown"
-
-if test "$GCC" = yes; then
-  if test "x$ax_apple_gcc_arch" = xyes; then
-    ax_apple_gcc_arch=""
-    if test "$cross_compiling" = no; then
-      if test "x$acx_maxopt_portable" = xyes; then # if we require portable code
-        ax_apple_gcc_arch="i386 x86_64 ppc ppc64"
-        echo "default arch because of portable code"
-      else
-        case $host_cpu in
-          x86_64*|amd64*|i[3456]86*)
-            ax_apple_gcc_arch="x86_64 i386"
-            ;;
-          powerpc*)
-             cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null`
-             cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'`
-             case $cputype in
-               *750*|*740[0-9]*|*74[4-5][0-9]*|*74[0-9][0-9]*) ax_apple_gcc_arch="ppc";;
-               *970*|*POWER4*|*power4*|*gq*|*POWER5*|*power5*|*gr*|*gs*) ax_apple_gcc_arch="ppc64";;
-               *) ax_apple_gcc_arch="ppc64 ppc";;
-             esac
-             ;;
-          *)
-            ax_apple_gcc_arch="x86_64 i386 ppc64 ppc"
-            ;;
-        esac
-      fi # portable code
-    fi # not cross-compiling
-  fi # guess arch
-
-  if test "x$ax_apple_gcc_arch" != x -a "x$ax_apple_gcc_arch" != xno; then
-    ax_cv_apple_gcc_archflag=""
-    for arch in $ax_apple_gcc_arch; do
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -arch $arch" >&5
-$as_echo_n "checking whether C compiler accepts -arch $arch... " >&6; }
-ax_save_FLAGS=$CFLAGS
-   CFLAGS="-arch $arch"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval `$as_echo "ax_cv_c_flags_-arch $arch" | $as_tr_sh`=yes
-else
-  eval `$as_echo "ax_cv_c_flags_-arch $arch" | $as_tr_sh`=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   CFLAGS=$ax_save_FLAGS
-eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_-arch $arch" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-
-        saved_CFLAGS="$CFLAGS";
-        CFLAGS="$CFLAGS -arch $arch";
-        LIBS="$LIBS $fftw3_LIBS"
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linking is possible with -arch $arch" >&5
-$as_echo_n "checking whether linking is possible with -arch $arch... " >&6; };
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-int main(void){return 0;}
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  last_result=yes;{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };ax_cv_apple_gcc_archflag="$ax_cv_apple_gcc_archflag -arch $arch"
-else
-  last_result=no;{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext;
-        CFLAGS="$saved_CFLAGS"
-
-else
-	:
-fi
-
-      if test "x$last_result" = "xyes"; then
-        break;
-      fi
-    done
-  fi
-fi # $GCC=yes
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Apple's gcc architecture flag" >&5
-$as_echo_n "checking for Apple's gcc architecture flag... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_apple_gcc_archflag" >&5
-$as_echo "$ax_cv_apple_gcc_archflag" >&6; }
-if test "x$ax_cv_apple_gcc_archflag" = xunknown; then
-  :
-else
-  CFLAGS="$CFLAGS $ax_cv_apple_gcc_archflag"
-fi
-
-     ;;
-  esac
-
-  if test -z "$CFLAGS"; then
-	echo ""
-	echo "********************************************************"
-        echo "* WARNING: Don't know the best CFLAGS for this system  *"
-        echo "* Use ./configure CFLAGS=... to specify your own flags *"
-	echo "* (otherwise, a default of CFLAGS=-O3 will be used)    *"
-	echo "********************************************************"
-	echo ""
-        CFLAGS="-O3"
-  fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5
-$as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; }
-ax_save_FLAGS=$CFLAGS
-   CFLAGS="$CFLAGS"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes
-else
-  eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   CFLAGS=$ax_save_FLAGS
-eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
-$as_echo "$ax_check_compiler_flags" >&6; }
-if test "x$ax_check_compiler_flags" = xyes; then
-	:
-else
-
-	echo ""
-        echo "********************************************************"
-        echo "* WARNING: The guessed CFLAGS don't seem to work with  *"
-        echo "* your compiler.                                       *"
-        echo "* Use ./configure CFLAGS=... to specify your own flags *"
-        echo "********************************************************"
-        echo ""
-        CFLAGS=""
-
-fi
-
-
-fi
-
-  CPPFLAGS="$saved_CPPFLAGS"
-  LDFLAGS="$saved_LDFLAGS"
-  LIBS="$saved_LIBS"
-fi
-
-# override CFLAGS selection when debugging
-if test "x${enable_debug}" = "xyes"; then
-  CFLAGS="-g"
-#  if test "x$ax_cv_c_compiler_vendor" = "xapple"; then
-#    CFLAGS="$CFLAGS $ax_cv_apple_gcc_archflag"
-#  fi
-fi
-
-# add gcc warnings, in debug/maintainer mode only
-if test "x${enable_debug}" = "xyes" || test "x$USE_MAINTAINER_MODE" = "xyes";
-then
-  if test "x$ac_cv_c_compiler_gnu" = "xyes"; then
-    CFLAGS="$CFLAGS -Wall -W -Wcast-qual -Wpointer-arith -Wcast-align -pedantic"
-    CFLAGS="$CFLAGS -Wno-long-long -Wshadow -Wbad-function-cast -Wwrite-strings"
-    CFLAGS="$CFLAGS -Wstrict-prototypes -Wredundant-decls -Wnested-externs"
-    CFLAGS="$CFLAGS -Wundef -Wconversion -Wmissing-prototypes "
-    CFLAGS="$CFLAGS -Wmissing-declarations"
-  fi
-fi
-
-# option to accept C99
-CFLAGS="$CFLAGS $ac_cv_prog_cc_c99"
-
-CPPFLAGS="$CPPFLAGS $fftw3_CPPFLAGS"
-
-# add Matlab CFLAGS
-if test "x$ax_prog_matlab" = "xyes"; then
-  CFLAGS="$CFLAGS $matlab_CFLAGS"
-fi
-
-################################################################################
-# check if mex.h can be included without undefinition of
-################################################################################
-ax_prog_matlab_gcc_require_undef_stdc_utf_16=no
-if test "x$ax_prog_matlab" = "xyes"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if inclusion of mex.h succeeds" >&5
-$as_echo_n "checking if inclusion of mex.h succeeds... " >&6; }
-  saved_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS $matlab_CPPFLAGS"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include "mex.h"
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_prog_matlab_check_compile_mex_h=yes
-else
-  ax_prog_matlab_check_compile_mex_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_prog_matlab_check_compile_mex_h" >&5
-$as_echo "$ax_prog_matlab_check_compile_mex_h" >&6; }
-  if test "x$ax_prog_matlab_check_compile_mex_h" = "xno"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if undefining __STDC_UTF_16__ solves this issue" >&5
-$as_echo_n "checking if undefining __STDC_UTF_16__ solves this issue... " >&6; }
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#undef __STDC_UTF_16__
-    #include "mex.h"
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ax_prog_matlab_gcc_require_undef_stdc_utf_16=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_prog_matlab_gcc_require_undef_stdc_utf_16" >&5
-$as_echo "$ax_prog_matlab_gcc_require_undef_stdc_utf_16" >&6; }
-  fi
-  CPPFLAGS="$saved_CPPFLAGS"
-fi
-if test "x$ax_prog_matlab_gcc_require_undef_stdc_utf_16" =  "xyes"; then
-
-$as_echo "#define HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16 1" >>confdefs.h
-
-fi
-
-################################################################################
-# header files/data types/compiler characteristics
-################################################################################
-
-for ac_header in math.h stdio.h stdlib.h time.h  sys/time.h \
-  complex.h string.h float.h limits.h stdarg.h stddef.h sys/types.h stdint.h \
-  inttypes.h stdbool.h malloc.h c_asm.h intrinsics.h mach/mach_time.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
-$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if ${ac_cv_header_time+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_time=yes
-else
-  ac_cv_header_time=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
-$as_echo "$ac_cv_header_time" >&6; }
-if test $ac_cv_header_time = yes; then
-
-$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
-
-fi
-
-
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "long double" "ac_cv_type_long_double" "$ac_includes_default"
-if test "x$ac_cv_type_long_double" = xyes; then :
-
-$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
-
-fi
-
-ac_fn_c_check_type "$LINENO" "hrtime_t" "ac_cv_type_hrtime_t" "
-#if HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-"
-if test "x$ac_cv_type_hrtime_t" = xyes; then :
-
-$as_echo "#define HAVE_HRTIME_T 1" >>confdefs.h
-
-fi
-
-ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default
-#ifdef HAVE_STDINT_H
-#  include <stdint.h>
-#endif
-"
-if test "x$ac_cv_type_uintptr_t" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UINTPTR_T 1
-_ACEOF
-
-
-else
-  # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_void_p" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (void *)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_void_p=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
-
-
-fi
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_int" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (int)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_int=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
-$as_echo_n "checking size of unsigned int... " >&6; }
-if ${ac_cv_sizeof_unsigned_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_unsigned_int" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned int)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned_int=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
-$as_echo "$ac_cv_sizeof_unsigned_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
-$as_echo_n "checking size of unsigned long... " >&6; }
-if ${ac_cv_sizeof_unsigned_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_unsigned_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned_long=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
-$as_echo "$ac_cv_sizeof_unsigned_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_long_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long_long=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5
-$as_echo_n "checking size of unsigned long long... " >&6; }
-if ${ac_cv_sizeof_unsigned_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_unsigned_long_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned long long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned_long_long=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5
-$as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
-$as_echo_n "checking size of size_t... " >&6; }
-if ${ac_cv_sizeof_size_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_size_t" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (size_t)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_size_t=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
-$as_echo "$ac_cv_sizeof_size_t" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of ptrdiff_t" >&5
-$as_echo_n "checking size of ptrdiff_t... " >&6; }
-if ${ac_cv_sizeof_ptrdiff_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (ptrdiff_t))" "ac_cv_sizeof_ptrdiff_t"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_ptrdiff_t" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (ptrdiff_t)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_ptrdiff_t=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_ptrdiff_t" >&5
-$as_echo "$ac_cv_sizeof_ptrdiff_t" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_PTRDIFF_T $ac_cv_sizeof_ptrdiff_t
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5
-$as_echo_n "checking size of float... " >&6; }
-if ${ac_cv_sizeof_float+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_float" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (float)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_float=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5
-$as_echo "$ac_cv_sizeof_float" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_FLOAT $ac_cv_sizeof_float
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5
-$as_echo_n "checking size of double... " >&6; }
-if ${ac_cv_sizeof_double+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_double" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (double)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_double=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5
-$as_echo "$ac_cv_sizeof_double" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_DOUBLE $ac_cv_sizeof_double
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5
-$as_echo_n "checking size of long double... " >&6; }
-if ${ac_cv_sizeof_long_double+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_long_double" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long double)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long_double=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5
-$as_echo "$ac_cv_sizeof_long_double" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
-_ACEOF
-
-
-
-# library functions
-# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
-# for constant arguments.  Useless!
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
-$as_echo_n "checking for working alloca.h... " >&6; }
-if ${ac_cv_working_alloca_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <alloca.h>
-int
-main ()
-{
-char *p = (char *) alloca (2 * sizeof (int));
-			  if (p) return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_working_alloca_h=yes
-else
-  ac_cv_working_alloca_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
-$as_echo "$ac_cv_working_alloca_h" >&6; }
-if test $ac_cv_working_alloca_h = yes; then
-
-$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
-$as_echo_n "checking for alloca... " >&6; }
-if ${ac_cv_func_alloca_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-#else
-# ifdef _MSC_VER
-#  include <malloc.h>
-#  define alloca _alloca
-# else
-#  ifdef HAVE_ALLOCA_H
-#   include <alloca.h>
-#  else
-#   ifdef _AIX
- #pragma alloca
-#   else
-#    ifndef alloca /* predefined by HP cc +Olibcalls */
-void *alloca (size_t);
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-int
-main ()
-{
-char *p = (char *) alloca (1);
-				    if (p) return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_func_alloca_works=yes
-else
-  ac_cv_func_alloca_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
-$as_echo "$ac_cv_func_alloca_works" >&6; }
-
-if test $ac_cv_func_alloca_works = yes; then
-
-$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
-
-else
-  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
-# that cause trouble.  Some versions do not even contain alloca or
-# contain a buggy version.  If you still want to use their alloca,
-# use ar to extract alloca.o from them instead of compiling alloca.c.
-
-ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
-
-$as_echo "#define C_ALLOCA 1" >>confdefs.h
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
-$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
-if ${ac_cv_os_cray+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#if defined CRAY && ! defined CRAY2
-webecray
-#else
-wenotbecray
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "webecray" >/dev/null 2>&1; then :
-  ac_cv_os_cray=yes
-else
-  ac_cv_os_cray=no
-fi
-rm -f conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
-$as_echo "$ac_cv_os_cray" >&6; }
-if test $ac_cv_os_cray = yes; then
-  for ac_func in _getb67 GETB67 getb67; do
-    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
-
-    break
-fi
-
-  done
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
-$as_echo_n "checking stack direction for C alloca... " >&6; }
-if ${ac_cv_c_stack_direction+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_c_stack_direction=0
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-find_stack_direction (int *addr, int depth)
-{
-  int dir, dummy = 0;
-  if (! addr)
-    addr = &dummy;
-  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
-  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
-  return dir + dummy;
-}
-
-int
-main (int argc, char **argv)
-{
-  return find_stack_direction (0, argc + !argv + 20) < 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_c_stack_direction=1
-else
-  ac_cv_c_stack_direction=-1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
-$as_echo "$ac_cv_c_stack_direction" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define STACK_DIRECTION $ac_cv_c_stack_direction
-_ACEOF
-
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5
-$as_echo_n "checking for working strtod... " >&6; }
-if ${ac_cv_func_strtod+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_strtod=no
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-$ac_includes_default
-#ifndef strtod
-double strtod ();
-#endif
-int
-main()
-{
-  {
-    /* Some versions of Linux strtod mis-parse strings with leading '+'.  */
-    char *string = " +69";
-    char *term;
-    double value;
-    value = strtod (string, &term);
-    if (value != 69 || term != (string + 4))
-      return 1;
-  }
-
-  {
-    /* Under Solaris 2.4, strtod returns the wrong value for the
-       terminating character under some conditions.  */
-    char *string = "NaN";
-    char *term;
-    strtod (string, &term);
-    if (term != string && *(term - 1) == 0)
-      return 1;
-  }
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_strtod=yes
-else
-  ac_cv_func_strtod=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5
-$as_echo "$ac_cv_func_strtod" >&6; }
-if test $ac_cv_func_strtod = no; then
-  case " $LIBOBJS " in
-  *" strtod.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS strtod.$ac_objext"
- ;;
-esac
-
-ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow"
-if test "x$ac_cv_func_pow" = xyes; then :
-
-fi
-
-if test $ac_cv_func_pow = no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
-$as_echo_n "checking for pow in -lm... " >&6; }
-if ${ac_cv_lib_m_pow+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pow ();
-int
-main ()
-{
-return pow ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_m_pow=yes
-else
-  ac_cv_lib_m_pow=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5
-$as_echo "$ac_cv_lib_m_pow" >&6; }
-if test "x$ac_cv_lib_m_pow" = xyes; then :
-  POW_LIB=-lm
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5
-$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;}
-fi
-
-fi
-
-fi
-
-for ac_func in vprintf
-do :
-  ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf"
-if test "x$ac_cv_func_vprintf" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_VPRINTF 1
-_ACEOF
-
-ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
-if test "x$ac_cv_func__doprnt" = xyes; then :
-
-$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h
-
-fi
-
-fi
-done
-
-
-saved_LIBS=$LIBS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5
-$as_echo_n "checking for sin in -lm... " >&6; }
-if ${ac_cv_lib_m_sin+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char sin ();
-int
-main ()
-{
-return sin ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_m_sin=yes
-else
-  ac_cv_lib_m_sin=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sin" >&5
-$as_echo "$ac_cv_lib_m_sin" >&6; }
-if test "x$ac_cv_lib_m_sin" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
-
-  LIBS="-lm $LIBS"
-
-fi
-
-LIBS=$saved_LIBS
-
-for ac_func in gethrtime read_real_time time_base_to_time clock_gettime mach_absolute_time
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-for ac_func in memset posix_memalign memalign
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-for ac_func in _mm_malloc _mm_free sysctl
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-for ac_func in abort snprintf sqrt
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-for ac_func in sleep usleep nanosleep drand48 srand48
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-ac_fn_c_check_decl "$LINENO" "memalign" "ac_cv_have_decl_memalign" "$ac_includes_default"
-if test "x$ac_cv_have_decl_memalign" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MEMALIGN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "posix_memalign" "ac_cv_have_decl_posix_memalign" "$ac_includes_default"
-if test "x$ac_cv_have_decl_posix_memalign" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_POSIX_MEMALIGN $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "sleep" "ac_cv_have_decl_sleep" "#include <unistd.h>
-"
-if test "x$ac_cv_have_decl_sleep" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SLEEP $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "nanosleep" "ac_cv_have_decl_nanosleep" "#include <time.h>
-"
-if test "x$ac_cv_have_decl_nanosleep" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NANOSLEEP $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "drand48" "ac_cv_have_decl_drand48" "#include <stdlib.h>
-"
-if test "x$ac_cv_have_decl_drand48" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_DRAND48 $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "srand48" "ac_cv_have_decl_srand48" "#include <stdlib.h>
-"
-if test "x$ac_cv_have_decl_srand48" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SRAND48 $ac_have_decl
-_ACEOF
-
-
-# Cray UNICOS _rtc() (real-time clock) intrinsic
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _rtc intrinsic" >&5
-$as_echo_n "checking for _rtc intrinsic... " >&6; }
-rtc_ok=yes
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef HAVE_INTRINSICS_H
-#include <intrinsics.h>
-#endif
-int
-main ()
-{
-_rtc()
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-$as_echo "#define HAVE__RTC 1" >>confdefs.h
-
-else
-  rtc_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rtc_ok" >&5
-$as_echo "$rtc_ok" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a cycle counter is available" >&5
-$as_echo_n "checking whether a cycle counter is available... " >&6; }
-save_CPPFLAGS=$CPPFLAGS
-CPPFLAGS="$CPPFLAGS -I$srcdir/include"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include "cycle.h"
-#ifndef HAVE_TICK_COUNTER
-#  error No cycle counter
-#endif
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ok=yes
-else
-  ok=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ok" >&5
-$as_echo "$ok" >&6; }
-TICKS_PER_SECOND=1
-if test $ok = no; then
-  echo "***************************************************************"
-  echo "WARNING: No cycle counter found. Time measurements in NFFT will"
-  echo "         show incorrect results.                               "
-  echo "***************************************************************"
-else
-  if test "$cross_compiling" = yes; then :
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include "cycle.h"
-#include <stdio.h>
-#if defined(HAVE_NANOSLEEP)
-#include <stdlib.h>
-static struct timespec ts = {1,0};
-#define SLEEP nanosleep(&ts, 0)
-#elif defined(HAVE_SLEEP)
-#include <unistd.h>
-#define SLEEP sleep(1)
-#elif defined(HAVE_USLEEP)
-#include <unistd.h>
-#define SLEEP usleep(1000)
-#else
-#error wtf!
-#endif
-int main(){
-ticks t0 = getticks();
-SLEEP;{
-  double tps = elapsed(getticks(),t0)/1.0;
-  FILE *f = fopen("ticks.tmp","w");
-  fprintf(f,"%.1f\n",tps);
-  fclose(f);}
-return 0;}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  read TICKS_PER_SECOND < ticks.tmp
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-    rm -f ticks.tmp
-  if test "$TICKS_PER_SECOND" = "1"; then
-    echo "***************************************************************"
-    echo "WARNING: Number of ticks per second could not be determined.   "
-    echo "         Time measurements in NFFT will be in arbitrary units  "
-    echo "         instead of seconds.                                   "
-    echo "***************************************************************"
-  fi
-fi
-
-CPPFLAGS=$save_CPPFLAGS
-
-
-PRECISION=d
-if test "$PRECISION" = "l"; then
-for ac_func in copysignl nextafterl nanl ceill floorl nearbyintl rintl roundl lrintl lroundl llrintl llroundl truncl fmodl remainderl remquol fdiml fmaxl fminl fmal fabsl sqrtl cbrtl hypotl expl exp2l expm1l logl log2l log10l log1pl logbl ilogbl modfl frexpl ldexpl scalbnl scalblnl powl cosl sinl tanl coshl sinhl tanhl acosl asinl atanl atan2l acoshl asinhl atanhl tgammal lgammal j0l j1l jnl jnl y0l y1l ynl erfl erfcl creall cimagl cabsl cargl conjl cprojl csqrtl cexpl clogl cpowl csinl  [...]
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-ac_fn_c_check_decl "$LINENO" "copysignl" "ac_cv_have_decl_copysignl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_copysignl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_COPYSIGNL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "nextafterl" "ac_cv_have_decl_nextafterl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_nextafterl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NEXTAFTERL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "nanl" "ac_cv_have_decl_nanl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_nanl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NANL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ceill" "ac_cv_have_decl_ceill" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ceill" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CEILL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "floorl" "ac_cv_have_decl_floorl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_floorl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FLOORL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "nearbyintl" "ac_cv_have_decl_nearbyintl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_nearbyintl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NEARBYINTL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "rintl" "ac_cv_have_decl_rintl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_rintl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_RINTL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "roundl" "ac_cv_have_decl_roundl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_roundl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ROUNDL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "lrintl" "ac_cv_have_decl_lrintl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_lrintl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LRINTL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "lroundl" "ac_cv_have_decl_lroundl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_lroundl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LROUNDL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "llrintl" "ac_cv_have_decl_llrintl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_llrintl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LLRINTL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "llroundl" "ac_cv_have_decl_llroundl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_llroundl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LLROUNDL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "truncl" "ac_cv_have_decl_truncl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_truncl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TRUNCL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fmodl" "ac_cv_have_decl_fmodl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fmodl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMODL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "remainderl" "ac_cv_have_decl_remainderl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_remainderl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_REMAINDERL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "remquol" "ac_cv_have_decl_remquol" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_remquol" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_REMQUOL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fdiml" "ac_cv_have_decl_fdiml" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fdiml" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FDIML $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fmaxl" "ac_cv_have_decl_fmaxl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fmaxl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMAXL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fminl" "ac_cv_have_decl_fminl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fminl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMINL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fmal" "ac_cv_have_decl_fmal" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fmal" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMAL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fabsl" "ac_cv_have_decl_fabsl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fabsl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FABSL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "sqrtl" "ac_cv_have_decl_sqrtl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_sqrtl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SQRTL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cbrtl" "ac_cv_have_decl_cbrtl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cbrtl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CBRTL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "hypotl" "ac_cv_have_decl_hypotl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_hypotl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_HYPOTL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "expl" "ac_cv_have_decl_expl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_expl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_EXPL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "exp2l" "ac_cv_have_decl_exp2l" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_exp2l" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_EXP2L $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "expm1l" "ac_cv_have_decl_expm1l" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_expm1l" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_EXPM1L $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "logl" "ac_cv_have_decl_logl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_logl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOGL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "log2l" "ac_cv_have_decl_log2l" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_log2l" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOG2L $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "log10l" "ac_cv_have_decl_log10l" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_log10l" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOG10L $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "log1pl" "ac_cv_have_decl_log1pl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_log1pl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOG1PL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "logbl" "ac_cv_have_decl_logbl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_logbl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOGBL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ilogbl" "ac_cv_have_decl_ilogbl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ilogbl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ILOGBL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "modfl" "ac_cv_have_decl_modfl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_modfl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MODFL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_frexpl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FREXPL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ldexpl" "ac_cv_have_decl_ldexpl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ldexpl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LDEXPL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "scalbnl" "ac_cv_have_decl_scalbnl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_scalbnl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCALBNL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "scalblnl" "ac_cv_have_decl_scalblnl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_scalblnl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCALBLNL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "powl" "ac_cv_have_decl_powl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_powl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_POWL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cosl" "ac_cv_have_decl_cosl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cosl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_COSL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "sinl" "ac_cv_have_decl_sinl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_sinl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SINL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "tanl" "ac_cv_have_decl_tanl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_tanl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TANL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "coshl" "ac_cv_have_decl_coshl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_coshl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_COSHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "sinhl" "ac_cv_have_decl_sinhl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_sinhl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SINHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "tanhl" "ac_cv_have_decl_tanhl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_tanhl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TANHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "acosl" "ac_cv_have_decl_acosl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_acosl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACOSL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "asinl" "ac_cv_have_decl_asinl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_asinl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ASINL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "atanl" "ac_cv_have_decl_atanl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_atanl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ATANL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "atan2l" "ac_cv_have_decl_atan2l" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_atan2l" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ATAN2L $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "acoshl" "ac_cv_have_decl_acoshl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_acoshl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACOSHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "asinhl" "ac_cv_have_decl_asinhl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_asinhl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ASINHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "atanhl" "ac_cv_have_decl_atanhl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_atanhl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ATANHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "tgammal" "ac_cv_have_decl_tgammal" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_tgammal" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TGAMMAL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "lgammal" "ac_cv_have_decl_lgammal" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_lgammal" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LGAMMAL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "j0l" "ac_cv_have_decl_j0l" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_j0l" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_J0L $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "j1l" "ac_cv_have_decl_j1l" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_j1l" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_J1L $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "jnl" "ac_cv_have_decl_jnl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_jnl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_JNL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "y0l" "ac_cv_have_decl_y0l" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_y0l" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_Y0L $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "y1l" "ac_cv_have_decl_y1l" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_y1l" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_Y1L $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ynl" "ac_cv_have_decl_ynl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ynl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_YNL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "erfl" "ac_cv_have_decl_erfl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_erfl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ERFL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "erfcl" "ac_cv_have_decl_erfcl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_erfcl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ERFCL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "creall" "ac_cv_have_decl_creall" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_creall" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CREALL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cimagl" "ac_cv_have_decl_cimagl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cimagl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CIMAGL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cabsl" "ac_cv_have_decl_cabsl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cabsl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CABSL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cargl" "ac_cv_have_decl_cargl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cargl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CARGL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "conjl" "ac_cv_have_decl_conjl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_conjl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CONJL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cprojl" "ac_cv_have_decl_cprojl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cprojl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CPROJL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "csqrtl" "ac_cv_have_decl_csqrtl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_csqrtl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CSQRTL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cexpl" "ac_cv_have_decl_cexpl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cexpl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CEXPL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "clogl" "ac_cv_have_decl_clogl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_clogl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CLOGL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cpowl" "ac_cv_have_decl_cpowl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cpowl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CPOWL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "csinl" "ac_cv_have_decl_csinl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_csinl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CSINL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ccosl" "ac_cv_have_decl_ccosl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ccosl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CCOSL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ctanl" "ac_cv_have_decl_ctanl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ctanl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CTANL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "casinl" "ac_cv_have_decl_casinl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_casinl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CASINL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cacosl" "ac_cv_have_decl_cacosl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cacosl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CACOSL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "catanl" "ac_cv_have_decl_catanl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_catanl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CATANL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "csinhl" "ac_cv_have_decl_csinhl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_csinhl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CSINHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ccoshl" "ac_cv_have_decl_ccoshl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ccoshl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CCOSHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ctanhl" "ac_cv_have_decl_ctanhl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ctanhl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CTANHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "casinhl" "ac_cv_have_decl_casinhl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_casinhl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CASINHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cacoshl" "ac_cv_have_decl_cacoshl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cacoshl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CACOSHL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "catanhl" "ac_cv_have_decl_catanhl" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_catanhl" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CATANHL $ac_have_decl
-_ACEOF
-
-fi
-
-if test "$PRECISION" = "d"; then
-for ac_func in copysign nextafter nan ceil floor nearbyint rint round lrint lround llrint llround trunc fmod remainder remquo fdim fmax fmin fma fabs sqrt cbrt hypot exp exp2 expm1 log log2 log10 log1p logb ilogb modf frexp ldexp scalbn scalbln pow cos sin tan cosh sinh tanh acos asin atan atan2 acosh asinh atanh tgamma lgamma j0 j1 jn y0 y1 yn erf erfc creal cimag cabs carg conj cproj csqrt cexp clog cpow csin ccos ctan casin cacos catan csinh ccosh ctanh casinh cacosh catanh
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-ac_fn_c_check_decl "$LINENO" "copysign" "ac_cv_have_decl_copysign" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_copysign" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_COPYSIGN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "nextafter" "ac_cv_have_decl_nextafter" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_nextafter" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NEXTAFTER $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "nan" "ac_cv_have_decl_nan" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_nan" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NAN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ceil" "ac_cv_have_decl_ceil" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ceil" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CEIL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "floor" "ac_cv_have_decl_floor" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_floor" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FLOOR $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "nearbyint" "ac_cv_have_decl_nearbyint" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_nearbyint" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NEARBYINT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "rint" "ac_cv_have_decl_rint" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_rint" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_RINT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "round" "ac_cv_have_decl_round" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_round" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ROUND $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "lrint" "ac_cv_have_decl_lrint" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_lrint" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LRINT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "lround" "ac_cv_have_decl_lround" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_lround" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LROUND $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "llrint" "ac_cv_have_decl_llrint" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_llrint" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LLRINT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "llround" "ac_cv_have_decl_llround" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_llround" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LLROUND $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "trunc" "ac_cv_have_decl_trunc" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_trunc" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TRUNC $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fmod" "ac_cv_have_decl_fmod" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fmod" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMOD $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "remainder" "ac_cv_have_decl_remainder" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_remainder" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_REMAINDER $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "remquo" "ac_cv_have_decl_remquo" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_remquo" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_REMQUO $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fdim" "ac_cv_have_decl_fdim" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fdim" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FDIM $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fmax" "ac_cv_have_decl_fmax" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fmax" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMAX $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fmin" "ac_cv_have_decl_fmin" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fmin" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMIN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fma" "ac_cv_have_decl_fma" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fma" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMA $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fabs" "ac_cv_have_decl_fabs" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fabs" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FABS $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "sqrt" "ac_cv_have_decl_sqrt" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_sqrt" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SQRT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cbrt" "ac_cv_have_decl_cbrt" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cbrt" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CBRT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "hypot" "ac_cv_have_decl_hypot" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_hypot" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_HYPOT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "exp" "ac_cv_have_decl_exp" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_exp" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_EXP $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "exp2" "ac_cv_have_decl_exp2" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_exp2" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_EXP2 $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "expm1" "ac_cv_have_decl_expm1" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_expm1" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_EXPM1 $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "log" "ac_cv_have_decl_log" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_log" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOG $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "log2" "ac_cv_have_decl_log2" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_log2" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOG2 $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "log10" "ac_cv_have_decl_log10" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_log10" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOG10 $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "log1p" "ac_cv_have_decl_log1p" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_log1p" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOG1P $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "logb" "ac_cv_have_decl_logb" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_logb" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOGB $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ilogb" "ac_cv_have_decl_ilogb" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ilogb" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ILOGB $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "modf" "ac_cv_have_decl_modf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_modf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MODF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "frexp" "ac_cv_have_decl_frexp" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_frexp" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FREXP $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ldexp" "ac_cv_have_decl_ldexp" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ldexp" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LDEXP $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "scalbn" "ac_cv_have_decl_scalbn" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_scalbn" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCALBN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "scalbln" "ac_cv_have_decl_scalbln" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_scalbln" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCALBLN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "pow" "ac_cv_have_decl_pow" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_pow" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_POW $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cos" "ac_cv_have_decl_cos" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cos" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_COS $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "sin" "ac_cv_have_decl_sin" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_sin" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SIN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "tan" "ac_cv_have_decl_tan" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_tan" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TAN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cosh" "ac_cv_have_decl_cosh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cosh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_COSH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "sinh" "ac_cv_have_decl_sinh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_sinh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SINH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "tanh" "ac_cv_have_decl_tanh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_tanh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TANH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "acos" "ac_cv_have_decl_acos" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_acos" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACOS $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "asin" "ac_cv_have_decl_asin" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_asin" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ASIN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "atan" "ac_cv_have_decl_atan" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_atan" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ATAN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "atan2" "ac_cv_have_decl_atan2" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_atan2" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ATAN2 $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "acosh" "ac_cv_have_decl_acosh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_acosh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACOSH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "asinh" "ac_cv_have_decl_asinh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_asinh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ASINH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "atanh" "ac_cv_have_decl_atanh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_atanh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ATANH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "tgamma" "ac_cv_have_decl_tgamma" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_tgamma" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TGAMMA $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "lgamma" "ac_cv_have_decl_lgamma" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_lgamma" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LGAMMA $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "j0" "ac_cv_have_decl_j0" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_j0" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_J0 $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "j1" "ac_cv_have_decl_j1" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_j1" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_J1 $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "jn" "ac_cv_have_decl_jn" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_jn" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_JN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "y0" "ac_cv_have_decl_y0" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_y0" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_Y0 $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "y1" "ac_cv_have_decl_y1" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_y1" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_Y1 $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "yn" "ac_cv_have_decl_yn" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_yn" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_YN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "erf" "ac_cv_have_decl_erf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_erf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ERF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "erfc" "ac_cv_have_decl_erfc" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_erfc" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ERFC $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "creal" "ac_cv_have_decl_creal" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_creal" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CREAL $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cimag" "ac_cv_have_decl_cimag" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cimag" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CIMAG $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cabs" "ac_cv_have_decl_cabs" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cabs" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CABS $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "carg" "ac_cv_have_decl_carg" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_carg" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CARG $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "conj" "ac_cv_have_decl_conj" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_conj" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CONJ $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cproj" "ac_cv_have_decl_cproj" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cproj" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CPROJ $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "csqrt" "ac_cv_have_decl_csqrt" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_csqrt" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CSQRT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cexp" "ac_cv_have_decl_cexp" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cexp" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CEXP $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "clog" "ac_cv_have_decl_clog" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_clog" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CLOG $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cpow" "ac_cv_have_decl_cpow" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cpow" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CPOW $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "csin" "ac_cv_have_decl_csin" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_csin" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CSIN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ccos" "ac_cv_have_decl_ccos" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ccos" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CCOS $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ctan" "ac_cv_have_decl_ctan" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ctan" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CTAN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "casin" "ac_cv_have_decl_casin" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_casin" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CASIN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cacos" "ac_cv_have_decl_cacos" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cacos" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CACOS $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "catan" "ac_cv_have_decl_catan" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_catan" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CATAN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "csinh" "ac_cv_have_decl_csinh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_csinh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CSINH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ccosh" "ac_cv_have_decl_ccosh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ccosh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CCOSH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ctanh" "ac_cv_have_decl_ctanh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ctanh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CTANH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "casinh" "ac_cv_have_decl_casinh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_casinh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CASINH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cacosh" "ac_cv_have_decl_cacosh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cacosh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CACOSH $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "catanh" "ac_cv_have_decl_catanh" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_catanh" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CATANH $ac_have_decl
-_ACEOF
-
-fi
-
-if test "$PRECISION" = "s"; then
-for ac_func in copysignf nextafterf nanf ceilf floorf nearbyintf rintf roundf lrintf lroundf llrintf llroundf truncf fmodf remainderf remquof fdimf fmaxf fminf fmaf fabsf sqrtf cbrtf hypotf expf exp2f expm1f logf log2f log10f log1pf logbf ilogbf modff frexpf ldexpf scalbnf scalblnf powf cosf sinf tanf coshf sinhf tanhf acosf asinf atanf atan2f acoshf asinhf atanhf tgammaf lgammaf j0f j1f jnf y0f y1f ynf erff erfcf crealf cimagf cabsf cargf conjf cprojf csqrtf cexpf clogf cpowf csinf ccos [...]
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-ac_fn_c_check_decl "$LINENO" "copysignf" "ac_cv_have_decl_copysignf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_copysignf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_COPYSIGNF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "nextafterf" "ac_cv_have_decl_nextafterf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_nextafterf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NEXTAFTERF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "nanf" "ac_cv_have_decl_nanf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_nanf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NANF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ceilf" "ac_cv_have_decl_ceilf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ceilf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CEILF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "floorf" "ac_cv_have_decl_floorf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_floorf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FLOORF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "nearbyintf" "ac_cv_have_decl_nearbyintf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_nearbyintf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_NEARBYINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "rintf" "ac_cv_have_decl_rintf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_rintf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_RINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "roundf" "ac_cv_have_decl_roundf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_roundf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ROUNDF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "lrintf" "ac_cv_have_decl_lrintf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_lrintf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LRINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "lroundf" "ac_cv_have_decl_lroundf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_lroundf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LROUNDF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "llrintf" "ac_cv_have_decl_llrintf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_llrintf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LLRINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "llroundf" "ac_cv_have_decl_llroundf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_llroundf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LLROUNDF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "truncf" "ac_cv_have_decl_truncf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_truncf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TRUNCF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fmodf" "ac_cv_have_decl_fmodf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fmodf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMODF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "remainderf" "ac_cv_have_decl_remainderf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_remainderf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_REMAINDERF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "remquof" "ac_cv_have_decl_remquof" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_remquof" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_REMQUOF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fdimf" "ac_cv_have_decl_fdimf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fdimf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FDIMF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fmaxf" "ac_cv_have_decl_fmaxf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fmaxf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMAXF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fminf" "ac_cv_have_decl_fminf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fminf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMINF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fmaf" "ac_cv_have_decl_fmaf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fmaf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FMAF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fabsf" "ac_cv_have_decl_fabsf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_fabsf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FABSF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "sqrtf" "ac_cv_have_decl_sqrtf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_sqrtf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SQRTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cbrtf" "ac_cv_have_decl_cbrtf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cbrtf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CBRTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "hypotf" "ac_cv_have_decl_hypotf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_hypotf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_HYPOTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "expf" "ac_cv_have_decl_expf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_expf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_EXPF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "exp2f" "ac_cv_have_decl_exp2f" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_exp2f" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_EXP2F $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "expm1f" "ac_cv_have_decl_expm1f" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_expm1f" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_EXPM1F $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "logf" "ac_cv_have_decl_logf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_logf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOGF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "log2f" "ac_cv_have_decl_log2f" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_log2f" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOG2F $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "log10f" "ac_cv_have_decl_log10f" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_log10f" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOG10F $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "log1pf" "ac_cv_have_decl_log1pf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_log1pf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOG1PF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "logbf" "ac_cv_have_decl_logbf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_logbf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LOGBF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ilogbf" "ac_cv_have_decl_ilogbf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ilogbf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ILOGBF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "modff" "ac_cv_have_decl_modff" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_modff" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MODFF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "frexpf" "ac_cv_have_decl_frexpf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_frexpf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FREXPF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ldexpf" "ac_cv_have_decl_ldexpf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ldexpf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LDEXPF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "scalbnf" "ac_cv_have_decl_scalbnf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_scalbnf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCALBNF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "scalblnf" "ac_cv_have_decl_scalblnf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_scalblnf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SCALBLNF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "powf" "ac_cv_have_decl_powf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_powf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_POWF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cosf" "ac_cv_have_decl_cosf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cosf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_COSF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "sinf" "ac_cv_have_decl_sinf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_sinf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SINF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "tanf" "ac_cv_have_decl_tanf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_tanf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TANF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "coshf" "ac_cv_have_decl_coshf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_coshf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_COSHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "sinhf" "ac_cv_have_decl_sinhf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_sinhf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SINHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "tanhf" "ac_cv_have_decl_tanhf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_tanhf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TANHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "acosf" "ac_cv_have_decl_acosf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_acosf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACOSF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "asinf" "ac_cv_have_decl_asinf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_asinf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ASINF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "atanf" "ac_cv_have_decl_atanf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_atanf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ATANF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "atan2f" "ac_cv_have_decl_atan2f" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_atan2f" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ATAN2F $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "acoshf" "ac_cv_have_decl_acoshf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_acoshf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACOSHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "asinhf" "ac_cv_have_decl_asinhf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_asinhf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ASINHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "atanhf" "ac_cv_have_decl_atanhf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_atanhf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ATANHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "tgammaf" "ac_cv_have_decl_tgammaf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_tgammaf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TGAMMAF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "lgammaf" "ac_cv_have_decl_lgammaf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_lgammaf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_LGAMMAF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "j0f" "ac_cv_have_decl_j0f" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_j0f" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_J0F $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "j1f" "ac_cv_have_decl_j1f" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_j1f" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_J1F $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "jnf" "ac_cv_have_decl_jnf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_jnf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_JNF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "y0f" "ac_cv_have_decl_y0f" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_y0f" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_Y0F $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "y1f" "ac_cv_have_decl_y1f" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_y1f" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_Y1F $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ynf" "ac_cv_have_decl_ynf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ynf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_YNF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "erff" "ac_cv_have_decl_erff" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_erff" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ERFF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "erfcf" "ac_cv_have_decl_erfcf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_erfcf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ERFCF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "crealf" "ac_cv_have_decl_crealf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_crealf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CREALF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cimagf" "ac_cv_have_decl_cimagf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cimagf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CIMAGF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cabs" "ac_cv_have_decl_cabs" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cabs" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CABS $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cargf" "ac_cv_have_decl_cargf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cargf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CARGF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "conjf" "ac_cv_have_decl_conjf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_conjf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CONJF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cprojf" "ac_cv_have_decl_cprojf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cprojf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CPROJF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "csqrtf" "ac_cv_have_decl_csqrtf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_csqrtf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CSQRTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cexpf" "ac_cv_have_decl_cexpf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cexpf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CEXPF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "clogf" "ac_cv_have_decl_clogf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_clogf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CLOGF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cpowf" "ac_cv_have_decl_cpowf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cpowf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CPOWF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "csinf" "ac_cv_have_decl_csinf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_csinf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CSINF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ccosf" "ac_cv_have_decl_ccosf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ccosf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CCOSF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ctanf" "ac_cv_have_decl_ctanf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ctanf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CTANF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "casinf" "ac_cv_have_decl_casinf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_casinf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CASINF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cacosf" "ac_cv_have_decl_cacosf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cacosf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CACOSF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "catanf" "ac_cv_have_decl_catanf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_catanf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CATANF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "csinhf" "ac_cv_have_decl_csinhf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_csinhf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CSINHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ccoshf" "ac_cv_have_decl_ccoshf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ccoshf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CCOSHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ctanhf" "ac_cv_have_decl_ctanhf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_ctanhf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CTANHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "casinhf" "ac_cv_have_decl_casinhf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_casinhf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CASINHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "cacoshf" "ac_cv_have_decl_cacoshf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_cacoshf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CACOSHF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "catanhf" "ac_cv_have_decl_catanhf" "#include <math.h>
-#include <complex.h>
-"
-if test "x$ac_cv_have_decl_catanhf" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CATANHF $ac_have_decl
-_ACEOF
-
-fi
-
-# The output files to be generated
-ac_config_files="$ac_config_files Makefile nfft3.pc doxygen/doxygen.Doxyfile include/Makefile include/nfft3conf.h include/ticks.h 3rdparty/Makefile 3rdparty/cstripack/Makefile util/Makefile kernel/Makefile kernel/fpt/Makefile kernel/mri/Makefile kernel/nfct/Makefile kernel/nfft/Makefile kernel/nfsft/Makefile kernel/nfsoft/Makefile kernel/nfst/Makefile kernel/nnfft/Makefile kernel/nsfft/Makefile kernel/solver/Makefile kernel/util/Makefile tests/Makefile examples/Makefile examples/fpt/Make [...]
-
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-	cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-	  mv -f confcache "$cache_file"$$ &&
-	  mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-	  mv -f confcache "$cache_file" ;;
-	esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
-$as_echo_n "checking that generated files are newer than configure... " >&6; }
-   if test -n "$am_sleep_pid"; then
-     # Hide warnings about reused PIDs.
-     wait $am_sleep_pid 2>/dev/null
-   fi
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
-$as_echo "done" >&6; }
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error $? "conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
- if test -n "$EXEEXT"; then
-  am__EXEEXT_TRUE=
-  am__EXEEXT_FALSE='#'
-else
-  am__EXEEXT_TRUE='#'
-  am__EXEEXT_FALSE=
-fi
-
-if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
-  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_NFCT_TRUE}" && test -z "${HAVE_NFCT_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_NFCT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_NFST_TRUE}" && test -z "${HAVE_NFST_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_NFST\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_NFSFT_TRUE}" && test -z "${HAVE_NFSFT_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_NFSFT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_NFSOFT_TRUE}" && test -z "${HAVE_NFSOFT_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_NFSOFT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_NNFFT_TRUE}" && test -z "${HAVE_NNFFT_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_NNFFT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_NSFFT_TRUE}" && test -z "${HAVE_NSFFT_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_NSFFT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_MRI_TRUE}" && test -z "${HAVE_MRI_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_MRI\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_FPT_TRUE}" && test -z "${HAVE_FPT_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_FPT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_THREADS_TRUE}" && test -z "${HAVE_THREADS_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_THREADS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_OPENMP_TRUE}" && test -z "${HAVE_OPENMP_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_OPENMP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_MATLAB_TRUE}" && test -z "${HAVE_MATLAB_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_MATLAB\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_MATLAB_THREADS_TRUE}" && test -z "${HAVE_MATLAB_THREADS_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_MATLAB_THREADS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_MATLAB_TRUE}" && test -z "${HAVE_MATLAB_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_MATLAB\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by NFFT $as_me 3.2.3, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to <bugs at nfft.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-NFFT config.status 3.2.3
-configured by $0, generated by GNU Autoconf 2.69,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-MKDIR_P='$MKDIR_P'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#
-# INIT-COMMANDS
-#
-
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
-AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
-DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
-enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
-SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
-ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
-PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
-host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
-host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
-host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
-build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
-build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
-build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
-SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
-Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
-GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
-EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
-FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
-LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
-NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
-LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
-exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
-lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
-lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
-file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
-want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
-sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
-AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
-archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
-STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
-lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
-CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
-compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
-GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
-nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
-lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
-objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
-need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
-MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
-LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
-libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
-postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
-need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
-version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
-install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
-striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
-
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
-  eval 'cat <<_LTECHO_EOF
-\$1
-_LTECHO_EOF'
-}
-
-# Quote evaled strings.
-for var in AS \
-DLLTOOL \
-OBJDUMP \
-SHELL \
-ECHO \
-PATH_SEPARATOR \
-SED \
-GREP \
-EGREP \
-FGREP \
-LD \
-NM \
-LN_S \
-lt_SP2NL \
-lt_NL2SP \
-reload_flag \
-deplibs_check_method \
-file_magic_cmd \
-file_magic_glob \
-want_nocaseglob \
-sharedlib_from_linklib_cmd \
-AR \
-AR_FLAGS \
-archiver_list_spec \
-STRIP \
-RANLIB \
-CC \
-CFLAGS \
-compiler \
-lt_cv_sys_global_symbol_pipe \
-lt_cv_sys_global_symbol_to_cdecl \
-lt_cv_sys_global_symbol_to_c_name_address \
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-nm_file_list_spec \
-lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_pic \
-lt_prog_compiler_wl \
-lt_prog_compiler_static \
-lt_cv_prog_compiler_c_o \
-need_locks \
-MANIFEST_TOOL \
-DSYMUTIL \
-NMEDIT \
-LIPO \
-OTOOL \
-OTOOL64 \
-shrext_cmds \
-export_dynamic_flag_spec \
-whole_archive_flag_spec \
-compiler_needs_object \
-with_gnu_ld \
-allow_undefined_flag \
-no_undefined_flag \
-hardcode_libdir_flag_spec \
-hardcode_libdir_separator \
-exclude_expsyms \
-include_expsyms \
-file_list_spec \
-variables_saved_for_relink \
-libname_spec \
-library_names_spec \
-soname_spec \
-install_override_mode \
-finish_eval \
-old_striplib \
-striplib; do
-    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
-    *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in reload_cmds \
-old_postinstall_cmds \
-old_postuninstall_cmds \
-old_archive_cmds \
-extract_expsyms_cmds \
-old_archive_from_new_cmds \
-old_archive_from_expsyms_cmds \
-archive_cmds \
-archive_expsym_cmds \
-module_cmds \
-module_expsym_cmds \
-export_symbols_cmds \
-prelink_cmds \
-postlink_cmds \
-postinstall_cmds \
-postuninstall_cmds \
-finish_cmds \
-sys_lib_search_path_spec \
-sys_lib_dlsearch_path_spec; do
-    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
-    *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-ac_aux_dir='$ac_aux_dir'
-xsi_shell='$xsi_shell'
-lt_shell_append='$lt_shell_append'
-
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'
-
-
-
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h:include/config.h.in" ;;
-    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
-    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "nfft3.pc") CONFIG_FILES="$CONFIG_FILES nfft3.pc" ;;
-    "doxygen/doxygen.Doxyfile") CONFIG_FILES="$CONFIG_FILES doxygen/doxygen.Doxyfile" ;;
-    "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
-    "include/nfft3conf.h") CONFIG_FILES="$CONFIG_FILES include/nfft3conf.h" ;;
-    "include/ticks.h") CONFIG_FILES="$CONFIG_FILES include/ticks.h" ;;
-    "3rdparty/Makefile") CONFIG_FILES="$CONFIG_FILES 3rdparty/Makefile" ;;
-    "3rdparty/cstripack/Makefile") CONFIG_FILES="$CONFIG_FILES 3rdparty/cstripack/Makefile" ;;
-    "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
-    "kernel/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/Makefile" ;;
-    "kernel/fpt/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/fpt/Makefile" ;;
-    "kernel/mri/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/mri/Makefile" ;;
-    "kernel/nfct/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfct/Makefile" ;;
-    "kernel/nfft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfft/Makefile" ;;
-    "kernel/nfsft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfsft/Makefile" ;;
-    "kernel/nfsoft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfsoft/Makefile" ;;
-    "kernel/nfst/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nfst/Makefile" ;;
-    "kernel/nnfft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nnfft/Makefile" ;;
-    "kernel/nsfft/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/nsfft/Makefile" ;;
-    "kernel/solver/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/solver/Makefile" ;;
-    "kernel/util/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/util/Makefile" ;;
-    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
-    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
-    "examples/fpt/Makefile") CONFIG_FILES="$CONFIG_FILES examples/fpt/Makefile" ;;
-    "examples/mri/Makefile") CONFIG_FILES="$CONFIG_FILES examples/mri/Makefile" ;;
-    "examples/nfct/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfct/Makefile" ;;
-    "examples/nfft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfft/Makefile" ;;
-    "examples/nfsft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfsft/Makefile" ;;
-    "examples/nfsoft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfsoft/Makefile" ;;
-    "examples/nfst/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nfst/Makefile" ;;
-    "examples/nnfft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nnfft/Makefile" ;;
-    "examples/nsfft/Makefile") CONFIG_FILES="$CONFIG_FILES examples/nsfft/Makefile" ;;
-    "examples/solver/Makefile") CONFIG_FILES="$CONFIG_FILES examples/solver/Makefile" ;;
-    "applications/Makefile") CONFIG_FILES="$CONFIG_FILES applications/Makefile" ;;
-    "applications/fastgauss/Makefile") CONFIG_FILES="$CONFIG_FILES applications/fastgauss/Makefile" ;;
-    "applications/fastsum/Makefile") CONFIG_FILES="$CONFIG_FILES applications/fastsum/Makefile" ;;
-    "applications/fastsumS2/Makefile") CONFIG_FILES="$CONFIG_FILES applications/fastsumS2/Makefile" ;;
-    "applications/quadratureS2/Makefile") CONFIG_FILES="$CONFIG_FILES applications/quadratureS2/Makefile" ;;
-    "applications/mri/Makefile") CONFIG_FILES="$CONFIG_FILES applications/mri/Makefile" ;;
-    "applications/mri/mri2d/Makefile") CONFIG_FILES="$CONFIG_FILES applications/mri/mri2d/Makefile" ;;
-    "applications/mri/mri3d/Makefile") CONFIG_FILES="$CONFIG_FILES applications/mri/mri3d/Makefile" ;;
-    "applications/polarFFT/Makefile") CONFIG_FILES="$CONFIG_FILES applications/polarFFT/Makefile" ;;
-    "applications/radon/Makefile") CONFIG_FILES="$CONFIG_FILES applications/radon/Makefile" ;;
-    "applications/iterS2/Makefile") CONFIG_FILES="$CONFIG_FILES applications/iterS2/Makefile" ;;
-    "matlab/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/Makefile" ;;
-    "matlab/nfsft/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/nfsft/Makefile" ;;
-    "matlab/nfft/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/nfft/Makefile" ;;
-    "matlab/nfsft/@f_hat/Makefile") CONFIG_FILES="$CONFIG_FILES matlab/nfsft/@f_hat/Makefile" ;;
-    "doxygen/Makefile") CONFIG_FILES="$CONFIG_FILES doxygen/Makefile" ;;
-    "support/Makefile") CONFIG_FILES="$CONFIG_FILES support/Makefile" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[	 ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_tt"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
-	 # because $ac_f cannot contain `:'.
-	 test -f "$ac_f" ||
-	   case $ac_f in
-	   [\\/$]*) false;;
-	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-  ac_MKDIR_P=$MKDIR_P
-  case $MKDIR_P in
-  [\\/$]* | ?:[\\/]* ) ;;
-  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
-  esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-s&@MKDIR_P@&$ac_MKDIR_P&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
-# Compute "$ac_file"'s index in $config_headers.
-_am_arg="$ac_file"
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
-$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$_am_arg" : 'X\(//\)[^/]' \| \
-	 X"$_am_arg" : 'X\(//\)$' \| \
-	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`/stamp-h$_am_stamp_count
- ;;
-
-  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
-  esac
-
-
-  case $ac_file$ac_mode in
-    "libtool":C)
-
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-#                 Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-
-# The names of the tagged configurations supported by this script.
-available_tags=""
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Which release of libtool.m4 was used?
-macro_version=$macro_version
-macro_revision=$macro_revision
-
-# Assembler program.
-AS=$lt_AS
-
-# DLL creation program.
-DLLTOOL=$lt_DLLTOOL
-
-# Object dumper program.
-OBJDUMP=$lt_OBJDUMP
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# What type of objects to build.
-pic_mode=$pic_mode
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# An echo program that protects backslashes.
-ECHO=$lt_ECHO
-
-# The PATH separator for the build system.
-PATH_SEPARATOR=$lt_PATH_SEPARATOR
-
-# The host system.
-host_alias=$host_alias
-host=$host
-host_os=$host_os
-
-# The build system.
-build_alias=$build_alias
-build=$build
-build_os=$build_os
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="\$SED -e 1s/^X//"
-
-# A grep program that handles long lines.
-GREP=$lt_GREP
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# A literal string matcher.
-FGREP=$lt_FGREP
-
-# A BSD- or MS-compatible name lister.
-NM=$lt_NM
-
-# Whether we need soft or hard links.
-LN_S=$lt_LN_S
-
-# What is the maximum length of a command?
-max_cmd_len=$max_cmd_len
-
-# Object file suffix (normally "o").
-objext=$ac_objext
-
-# Executable file suffix (normally "").
-exeext=$exeext
-
-# whether the shell understands "unset".
-lt_unset=$lt_unset
-
-# turn spaces into newlines.
-SP2NL=$lt_lt_SP2NL
-
-# turn newlines into spaces.
-NL2SP=$lt_lt_NL2SP
-
-# convert \$build file names to \$host format.
-to_host_file_cmd=$lt_cv_to_host_file_cmd
-
-# convert \$build files to toolchain format.
-to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method = "file_magic".
-file_magic_cmd=$lt_file_magic_cmd
-
-# How to find potential files when deplibs_check_method = "file_magic".
-file_magic_glob=$lt_file_magic_glob
-
-# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
-want_nocaseglob=$lt_want_nocaseglob
-
-# Command to associate shared and link libraries.
-sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
-
-# The archiver.
-AR=$lt_AR
-
-# Flags to create an archive.
-AR_FLAGS=$lt_AR_FLAGS
-
-# How to feed a file listing to the archiver.
-archiver_list_spec=$lt_archiver_list_spec
-
-# A symbol stripping program.
-STRIP=$lt_STRIP
-
-# Commands used to install an old-style archive.
-RANLIB=$lt_RANLIB
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Whether to use a lock for old archive extraction.
-lock_old_archive_extraction=$lock_old_archive_extraction
-
-# A C compiler.
-LTCC=$lt_CC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_CFLAGS
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration.
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair.
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# Transform the output of nm in a C name address pair when lib prefix is needed.
-global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
-
-# Specify filename containing input files for \$NM.
-nm_file_list_spec=$lt_nm_file_list_spec
-
-# The root where to search for dependent libraries,and in which our libraries should be installed.
-lt_sysroot=$lt_sysroot
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# Used to examine libraries when file_magic_cmd begins with "file".
-MAGIC_CMD=$MAGIC_CMD
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# Manifest tool.
-MANIFEST_TOOL=$lt_MANIFEST_TOOL
-
-# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
-DSYMUTIL=$lt_DSYMUTIL
-
-# Tool to change global to local symbols on Mac OS X.
-NMEDIT=$lt_NMEDIT
-
-# Tool to manipulate fat objects and archives on Mac OS X.
-LIPO=$lt_LIPO
-
-# ldd/readelf like tool for Mach-O binaries on Mac OS X.
-OTOOL=$lt_OTOOL
-
-# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
-OTOOL64=$lt_OTOOL64
-
-# Old archive suffix (normally "a").
-libext=$libext
-
-# Shared library suffix (normally ".so").
-shrext_cmds=$lt_shrext_cmds
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at link time.
-variables_saved_for_relink=$lt_variables_saved_for_relink
-
-# Do we need the "lib" prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Library versioning type.
-version_type=$version_type
-
-# Shared library runtime path variable.
-runpath_var=$runpath_var
-
-# Shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names.  First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Permission mode override for installation of shared libraries.
-install_override_mode=$lt_install_override_mode
-
-# Command to use after installation of a shared archive.
-postinstall_cmds=$lt_postinstall_cmds
-
-# Command to use after uninstallation of a shared archive.
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# As "finish_cmds", except a single script fragment to be evaled but
-# not shown.
-finish_eval=$lt_finish_eval
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Compile-time system search path for libraries.
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries.
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# Commands used to build an old-style archive.
-old_archive_cmds=$lt_old_archive_cmds
-
-# A language specific compiler.
-CC=$lt_compiler
-
-# Is the compiler the GNU compiler?
-with_gcc=$GCC
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc
-
-# Whether or not to disallow shared libs when runtime libs are static.
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec
-
-# Whether the compiler copes with passing no objects directly.
-compiler_needs_object=$lt_compiler_needs_object
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
-
-# Commands used to build a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-
-# Commands used to build a loadable module if different from building
-# a shared archive.
-module_cmds=$lt_module_cmds
-module_expsym_cmds=$lt_module_expsym_cmds
-
-# Whether we are building with GNU ld or not.
-with_gnu_ld=$lt_with_gnu_ld
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that enforces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-
-# Whether we need a single "-rpath" flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
-# DIR into the resulting binary and the resulting library dependency is
-# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
-# library is relocated.
-hardcode_direct_absolute=$hardcode_direct_absolute
-
-# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-# into the resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-# into the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Set to "yes" if building a shared library automatically hardcodes DIR
-# into the library and all subsequent libraries and executables linked
-# against it.
-hardcode_automatic=$hardcode_automatic
-
-# Set to yes if linker adds runtime paths of dependent libraries
-# to runtime path list.
-inherit_rpath=$inherit_rpath
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Set to "yes" if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms
-
-# Commands necessary for linking programs (against libraries) with templates.
-prelink_cmds=$lt_prelink_cmds
-
-# Commands necessary for finishing linking programs.
-postlink_cmds=$lt_postlink_cmds
-
-# Specify filename containing input files.
-file_list_spec=$lt_file_list_spec
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-
-ltmain="$ac_aux_dir/ltmain.sh"
-
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '$q' "$ltmain" >> "$cfgfile" \
-     || (rm -f "$cfgfile"; exit 1)
-
-  if test x"$xsi_shell" = xyes; then
-  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-func_dirname ()\
-{\
-\    case ${1} in\
-\      */*) func_dirname_result="${1%/*}${2}" ;;\
-\      *  ) func_dirname_result="${3}" ;;\
-\    esac\
-} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_basename ()$/,/^} # func_basename /c\
-func_basename ()\
-{\
-\    func_basename_result="${1##*/}"\
-} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-func_dirname_and_basename ()\
-{\
-\    case ${1} in\
-\      */*) func_dirname_result="${1%/*}${2}" ;;\
-\      *  ) func_dirname_result="${3}" ;;\
-\    esac\
-\    func_basename_result="${1##*/}"\
-} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-func_stripname ()\
-{\
-\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
-\    # positional parameters, so assign one to ordinary parameter first.\
-\    func_stripname_result=${3}\
-\    func_stripname_result=${func_stripname_result#"${1}"}\
-\    func_stripname_result=${func_stripname_result%"${2}"}\
-} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-func_split_long_opt ()\
-{\
-\    func_split_long_opt_name=${1%%=*}\
-\    func_split_long_opt_arg=${1#*=}\
-} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-func_split_short_opt ()\
-{\
-\    func_split_short_opt_arg=${1#??}\
-\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-func_lo2o ()\
-{\
-\    case ${1} in\
-\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-\      *)    func_lo2o_result=${1} ;;\
-\    esac\
-} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_xform ()$/,/^} # func_xform /c\
-func_xform ()\
-{\
-    func_xform_result=${1%.*}.lo\
-} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_arith ()$/,/^} # func_arith /c\
-func_arith ()\
-{\
-    func_arith_result=$(( $* ))\
-} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_len ()$/,/^} # func_len /c\
-func_len ()\
-{\
-    func_len_result=${#1}\
-} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-fi
-
-if test x"$lt_shell_append" = xyes; then
-  sed -e '/^func_append ()$/,/^} # func_append /c\
-func_append ()\
-{\
-    eval "${1}+=\\${2}"\
-} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-func_append_quoted ()\
-{\
-\    func_quote_for_eval "${2}"\
-\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  # Save a `func_append' function call where possible by direct use of '+='
-  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-else
-  # Save a `func_append' function call even when '+=' is not available
-  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-fi
-
-if test x"$_lt_function_replace_fail" = x":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-fi
-
-
-   mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-
- ;;
-    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named 'Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$mf" : 'X\(//\)[^/]' \| \
-	 X"$mf" : 'X\(//\)$' \| \
-	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running 'make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$file" : 'X\(//\)[^/]' \| \
-	 X"$file" : 'X\(//\)$' \| \
-	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      as_dir=$dirpart/$fdir; as_fn_mkdir_p
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
- ;;
-
-  esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/configure.ac b/configure.ac
index fcd76c3..42c6d2d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
-# $Id: configure.ac 3971 2013-04-29 08:59:35Z tovo $
+strlcpy# $Id$
 #
-# Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+# Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 #
 # This program is free software; you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software
@@ -21,10 +21,10 @@
 ################################################################################
 
 # autoconf initialization
-AC_INIT([NFFT],[3.2.3],[bugs at nfft.org])
+AC_INIT([NFFT],[3.3.0],[mail at nfft.org])
 
 # revision id from svn
-AC_REVISION([$Id: configure.ac 3971 2013-04-29 08:59:35Z tovo $])
+AC_REVISION([$Id$])
 
 # copyright notice
 AC_COPYRIGHT([2003, 2012, Jens Keiner, Stefan Kunis, Daniel Potts])
@@ -48,8 +48,9 @@ AC_CANONICAL_HOST
 #AX_COUNT_CPUS
 #AC_DEFINE_UNQUOTED(NFFT_NUM_CORES,$cpu_count,[Define to number of cores.])
 
-# substitute abs_srcdir in generated Makefiles
+# substitute abs_srcdir in generated Makefiles.
 AC_SUBST([abs_srcdir])
+AC_DEFINE_UNQUOTED([ABS_SRCDIR], ["`pwd`/$srcdir"], [Absolute path to source directory.])
 
 # minimum required libtool version
 LT_PREREQ([2.4.2])
@@ -61,7 +62,7 @@ LT_INIT([win32-dll])
 AC_SUBST([LIBTOOL_DEPS])
 
 # version information for shared library
-SHARED_VERSION_INFO="1:0:0"
+SHARED_VERSION_INFO="2:0:0"
 
 # substitute SHARED_VERSION_INFO in generated Makefiles
 AC_SUBST(SHARED_VERSION_INFO)
@@ -79,6 +80,34 @@ AM_INIT_AUTOMAKE(1.10)
 # maintainer mode option
 AM_MAINTAINER_MODE
 
+# Precision.
+AC_ARG_ENABLE(single, [AS_HELP_STRING([--enable-single],[compile NFFT in single precision])], ok=$enableval, ok=no)
+AC_ARG_ENABLE(float, [AS_HELP_STRING([--enable-float],[synonym for --enable-single])], ok=$enableval)
+if test "$ok" = "yes"; then
+  AC_DEFINE(NFFT_SINGLE,1,[Define to compile in single precision.])
+  PRECISION=s
+else
+  PRECISION=d
+fi
+
+AC_ARG_ENABLE(long-double, [AS_HELP_STRING([--enable-long-double],[compile NFFT in long-double precision])], ok=$enableval, ok=no)
+if test "$ok" = "yes"; then
+  if test "$PRECISION" = "s"; then
+    AC_MSG_ERROR([--enable-single/--enable-long-double conflict])
+  fi
+  AC_DEFINE(NFFT_LDOUBLE,1,[Define to compile in long-double precision.])
+  PRECISION=l
+fi
+AC_SUBST(PRECISION)
+
+# Library suffix
+case "$PRECISION" in
+     s) PREC_SUFFIX=f;;
+     d) PREC_SUFFIX=;;
+     l) PREC_SUFFIX=l;;
+esac
+AC_SUBST(PREC_SUFFIX)
+
 # enable or disable parts of NFFT
 
 # whether we need the fpt module
@@ -86,30 +115,38 @@ need_fpt="no"
 
 # build all modules by default in maintainer mode or if option is given
 AC_ARG_ENABLE(all, [AC_HELP_STRING([--enable-all],[build all modules])], 
-  ok=$enableval, ok=no)
-if test "x$ok" = "xyes" -o "x$USE_MAINTAINER_MODE" = "xyes"; then
-  nfft_module_default="yes"
-else
-  nfft_module_default="no"
-fi
+  ok=$enableval, ok=$USE_MAINTAINER_MODE)
+nfft_module_default=$ok
+
+# option for example programs
+nfft_examples_default="yes"
+AC_ARG_ENABLE(examples, [AC_HELP_STRING([--enable-examples],
+  [enable example programs])], enable_examples=$enableval, enable_examples=$nfft_examples_default)
+AM_CONDITIONAL(HAVE_EXAMPLES, test "x$enable_examples" = "xyes" )
+
+# option for application programs
+nfft_applications_default="yes"
+AC_ARG_ENABLE(applications, [AC_HELP_STRING([--enable-applications],
+  [enable application programs])], enable_applications=$enableval, enable_applications=$nfft_applications_default)
+AM_CONDITIONAL(HAVE_APPLICATIONS, test "x$enable_applications" = "xyes" )
 
 # options for modules
-AX_NFFT_MODULE([nfct],[NFCT],[nonequispaced fast cosine transform])
-AX_NFFT_MODULE([nfst],[NFST],[nonequispaced fast sine transform])
-AX_NFFT_MODULE([nfsft],[NFSFT],[nonequispaced fast spherical Fourier transform],
+AX_NFFT_MODULE([nfct],[NFCT],[nonequispaced fast cosine transform],["yes"])
+AX_NFFT_MODULE([nfst],[NFST],[nonequispaced fast sine transform],["yes"])
+AX_NFFT_MODULE([nfsft],[NFSFT],[nonequispaced fast spherical Fourier transform],["no"],
   [need_fpt="yes"])
-AX_NFFT_MODULE([nfsoft],[NFSOFT],[nonequispaced fast SO(3) Fourier transform],
+AX_NFFT_MODULE([nfsoft],[NFSOFT],[nonequispaced fast SO(3) Fourier transform],["no"],
   [need_fpt="yes"])
 AX_NFFT_MODULE([nnfft],[NNFFT],[nonequispaced fast Fourier transform -- ]#
-  [nonequispaced in both domains])
-AX_NFFT_MODULE([nsfft],[NSFFT],[nonequispaced sparse fast Fourier transform])
-AX_NFFT_MODULE([mri],[MRI],[magnet resonance imaging])
-AX_NFFT_MODULE([fpt],[FPT],[fast polynomial transform],[],[],
+  [nonequispaced in both domains],["no"])
+AX_NFFT_MODULE([nsfft],[NSFFT],[nonequispaced sparse fast Fourier transform],["no"])
+AX_NFFT_MODULE([mri],[MRI],[magnet resonance imaging],["no"])
+AX_NFFT_MODULE([fpt],[FPT],[fast polynomial transform],["no"],[],[],
   [test "x$ok" = "xyes" -o "x$need_fpt" = "xyes"])
 
 # multithreaded code
 AC_ARG_ENABLE(openmp, [AC_HELP_STRING([--enable-openmp],
-  [enable OpenMP multithreaded code])], enable_threads=$enableval, enable_threads=no)
+  [enable OpenMP multithreaded code])], [enable_threads=$enableval; AC_DEFINE(ENABLE_OPENMP, 1, ["Define to enable OpenMP code."])], enable_threads=no)
 AM_CONDITIONAL(HAVE_THREADS, test "x$enable_threads" = "xyes" )
 
 # debug mode
@@ -151,16 +188,16 @@ AC_ARG_WITH(window, [AC_HELP_STRING([--with-window=ARG],[choose window function
 
 AC_MSG_CHECKING([window function])
 case "$window" in
+  kaiserbessel)
+    AC_DEFINE(KAISER_BESSEL,1,[Define to enable Kaiser-Bessel window function.]);;
   gaussian)
     AC_DEFINE(GAUSSIAN,1,[Define to enable Gaussian window function.]);;
   bspline)
     AC_DEFINE(B_SPLINE,1,[Define to enable B-spline window function.]);;
   sinc)
     AC_DEFINE(SINC_POWER,1,[Define to enable sinc power window function.]);;
-  kaiserbessel)
-    AC_DEFINE(KAISER_BESSEL,1,[Define to enable Kaiser-Bessel window function.]);;
   delta)
-    AC_DEFINE(B_SPLINE,1,[Define to enable Dirac delta window function.]);;
+    AC_DEFINE(DIRAC_DELTA,1,[Define to enable Dirac delta window function.]);;
   *)
     AC_MSG_ERROR([Unknown window function "$window".]);;
 esac
@@ -239,6 +276,10 @@ fi
 # Check for MATLAB.
 AX_PROG_MATLAB
 
+if test "x$ax_prog_matlab" = "xyes" -a "x$PRECISION" != "xd"; then
+  AC_MSG_ERROR([Building the Matlab interfaces requires double precision.])
+fi
+
 if test "x$matlab_threads" = "xyes" -a "x$enable_threads" != "xyes"; then
   AC_MSG_ERROR([The NFFT Matlab interface with thread support requires the threaded NFFT to be built. Please re-run configure with \"--enable-openmp\".])
 fi
@@ -437,38 +478,39 @@ fi
 CPPFLAGS=$save_CPPFLAGS
 AC_SUBST(TICKS_PER_SECOND)
 
-PRECISION=d
 if test "$PRECISION" = "l"; then
-AC_CHECK_FUNCS([copysignl nextafterl nanl ceill floorl nearbyintl rintl roundl lrintl lroundl llrintl llroundl truncl fmodl remainderl remquol fdiml fmaxl fminl fmal fabsl sqrtl cbrtl hypotl expl exp2l expm1l logl log2l log10l log1pl logbl ilogbl modfl frexpl ldexpl scalbnl scalblnl powl cosl sinl tanl coshl sinhl tanhl acosl asinl atanl atan2l acoshl asinhl atanhl tgammal lgammal j0l j1l jnl jnl y0l y1l ynl erfl erfcl creall cimagl cabsl cargl conjl cprojl csqrtl cexpl clogl cpowl csinl [...]
+#AC_CHECK_FUNCS([copysignl nextafterl nanl ceill floorl nearbyintl rintl roundl lrintl lroundl llrintl llroundl truncl fmodl remainderl remquol fdiml fmaxl fminl fmal fabsl sqrtl cbrtl hypotl expl exp2l expm1l logl log2l log10l log1pl logbl ilogbl modfl frexpl ldexpl scalbnl scalblnl powl cosl sinl tanl coshl sinhl tanhl acosl asinl atanl atan2l acoshl asinhl atanhl tgammal lgammal j0l j1l jnl jnl y0l y1l ynl erfl erfcl creall cimagl cabsl cargl conjl cprojl csqrtl cexpl clogl cpowl csin [...]
 AC_CHECK_DECLS([copysignl, nextafterl, nanl, ceill, floorl, nearbyintl, rintl, roundl, lrintl, lroundl, llrintl, llroundl, truncl, fmodl, remainderl, remquol, fdiml, fmaxl, fminl, fmal, fabsl, sqrtl, cbrtl, hypotl, expl, exp2l, expm1l, logl, log2l, log10l, log1pl, logbl, ilogbl, modfl, frexpl, ldexpl, scalbnl, scalblnl, powl, cosl, sinl, tanl, coshl, sinhl, tanhl, acosl, asinl, atanl, atan2l, acoshl, asinhl, atanhl, tgammal, lgammal, j0l, j1l, jnl, y0l, y1l, ynl, erfl, erfcl, creall, cim [...]
   [#include <math.h> 
 #include <complex.h>])
 fi
 
 if test "$PRECISION" = "d"; then
-AC_CHECK_FUNCS([copysign nextafter nan ceil floor nearbyint rint round lrint lround llrint llround trunc fmod remainder remquo fdim fmax fmin fma fabs sqrt cbrt hypot exp exp2 expm1 log log2 log10 log1p logb ilogb modf frexp ldexp scalbn scalbln pow cos sin tan cosh sinh tanh acos asin atan atan2 acosh asinh atanh tgamma lgamma j0 j1 jn y0 y1 yn erf erfc creal cimag cabs carg conj cproj csqrt cexp clog cpow csin ccos ctan casin cacos catan csinh ccosh ctanh casinh cacosh catanh])
+#AC_CHECK_FUNCS([copysign nextafter nan ceil floor nearbyint rint round lrint lround llrint llround trunc fmod remainder remquo fdim fmax fmin fma fabs sqrt cbrt hypot exp exp2 expm1 log log2 log10 log1p logb ilogb modf frexp ldexp scalbn scalbln pow cos sin tan cosh sinh tanh acos asin atan atan2 acosh asinh atanh tgamma lgamma j0 j1 jn y0 y1 yn erf erfc creal cimag cabs carg conj cproj csqrt cexp clog cpow csin ccos ctan casin cacos catan csinh ccosh ctanh casinh cacosh catanh])
 AC_CHECK_DECLS([copysign, nextafter, nan, ceil, floor, nearbyint, rint, round, lrint, lround, llrint, llround, trunc, fmod, remainder, remquo, fdim, fmax, fmin, fma, fabs, sqrt, cbrt, hypot, exp, exp2, expm1, log, log2, log10, log1p, logb, ilogb, modf, frexp, ldexp, scalbn, scalbln, pow, cos, sin, tan, cosh, sinh, tanh, acos, asin, atan, atan2, acosh, asinh, atanh, tgamma, lgamma, j0, j1, jn, y0, y1, yn, erf, erfc, creal, cimag, cabs, carg, conj, cproj, csqrt, cexp, clog, cpow, csin, cco [...]
   [#include <math.h>
 #include <complex.h>])
 fi
 
 if test "$PRECISION" = "s"; then
-AC_CHECK_FUNCS([copysignf nextafterf nanf ceilf floorf nearbyintf rintf roundf lrintf lroundf llrintf llroundf truncf fmodf remainderf remquof fdimf fmaxf fminf fmaf fabsf sqrtf cbrtf hypotf expf exp2f expm1f logf log2f log10f log1pf logbf ilogbf modff frexpf ldexpf scalbnf scalblnf powf cosf sinf tanf coshf sinhf tanhf acosf asinf atanf atan2f acoshf asinhf atanhf tgammaf lgammaf j0f j1f jnf y0f y1f ynf erff erfcf crealf cimagf cabsf cargf conjf cprojf csqrtf cexpf clogf cpowf csinf cco [...]
-AC_CHECK_DECLS([copysignf, nextafterf, nanf, ceilf, floorf, nearbyintf, rintf, roundf, lrintf, lroundf, llrintf, llroundf, truncf, fmodf, remainderf, remquof, fdimf, fmaxf, fminf, fmaf, fabsf, sqrtf, cbrtf, hypotf, expf, exp2f, expm1f, logf, log2f, log10f, log1pf, logbf, ilogbf, modff, frexpf, ldexpf, scalbnf, scalblnf, powf, cosf, sinf, tanf, coshf, sinhf, tanhf, acosf, asinf, atanf, atan2f, acoshf, asinhf, atanhf, tgammaf, lgammaf, j0f, j1f, jnf, y0f, y1f, ynf, erff, erfcf, crealf, cim [...]
+#AC_CHECK_FUNCS([copysignf nextafterf nanf ceilf floorf nearbyintf rintf roundf lrintf lroundf llrintf llroundf truncf fmodf remainderf remquof fdimf fmaxf fminf fmaf fabsf sqrtf cbrtf hypotf expf exp2f expm1f logf log2f log10f log1pf logbf ilogbf modff frexpf ldexpf scalbnf scalblnf powf cosf sinf tanf coshf sinhf tanhf acosf asinf atanf atan2f acoshf asinhf atanhf tgammaf lgammaf j0f j1f jnf y0f y1f ynf erff erfcf crealf cimagf cabsf cargf conjf cprojf csqrtf cexpf clogf cpowf csinf cc [...]
+AC_CHECK_DECLS([copysignf, nextafterf, nanf, ceilf, floorf, nearbyintf, rintf, roundf, lrintf, lroundf, llrintf, llroundf, truncf, fmodf, remainderf, remquof, fdimf, fmaxf, fminf, fmaf, fabsf, sqrtf, cbrtf, hypotf, expf, exp2f, expm1f, logf, log2f, log10f, log1pf, logbf, ilogbf, modff, frexpf, ldexpf, scalbnf, scalblnf, powf, cosf, sinf, tanf, coshf, sinhf, tanhf, acosf, asinf, atanf, atan2f, acoshf, asinhf, atanhf, tgammaf, lgammaf, j0f, j1f, jnf, y0f, y1f, ynf, erff, erfcf, crealf, cim [...]
   [#include <math.h> 
 #include <complex.h>])
 fi
 
+# CUnit
+AX_CUNIT
+AM_CONDITIONAL(HAVE_CUNIT, test "x$ax_cv_cunit" = "xyes" )
+
 # The output files to be generated
 AC_CONFIG_FILES(Makefile \
                 nfft3.pc \
                 doxygen/doxygen.Doxyfile \
                 include/Makefile \
-                include/nfft3conf.h \
                 include/ticks.h \
                 3rdparty/Makefile \
                 3rdparty/cstripack/Makefile \
-                util/Makefile \
                 kernel/Makefile \
                 kernel/fpt/Makefile \
                 kernel/mri/Makefile \
@@ -482,6 +524,7 @@ AC_CONFIG_FILES(Makefile \
                 kernel/solver/Makefile \
                 kernel/util/Makefile \
                 tests/Makefile \
+                tests/data/Makefile \
                 examples/Makefile \
                 examples/fpt/Makefile \
                 examples/mri/Makefile \
@@ -507,7 +550,9 @@ AC_CONFIG_FILES(Makefile \
                 matlab/Makefile \
                 matlab/nfsft/Makefile \
                 matlab/nfft/Makefile \
+		matlab/nnfft/Makefile \
                 matlab/nfsft/@f_hat/Makefile \
+                matlab/nfsoft/Makefile \
                 doxygen/Makefile \
                 support/Makefile)
 
diff --git a/doc/api/html/images/logo.png b/doc/api/html/images/logo.png
new file mode 100644
index 0000000..b8511af
Binary files /dev/null and b/doc/api/html/images/logo.png differ
diff --git a/doc/api/html/images/sphere.png b/doc/api/html/images/sphere.png
new file mode 100644
index 0000000..42612e1
Binary files /dev/null and b/doc/api/html/images/sphere.png differ
diff --git a/doc/api/latex/images/sphere.eps b/doc/api/latex/images/sphere.eps
new file mode 100644
index 0000000..94c7537
--- /dev/null
+++ b/doc/api/latex/images/sphere.eps
@@ -0,0 +1,99 @@
+%!PS-Adobe-3.0 EPSF-3.0
%%Title: (sphere.pdf)
%%Version: 1 4
%%Creator: Adobe Acrobat 7.0
%%CreationDate: 26/10/06 22:12
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%ADO_ContainsXMP: MainFirst
%%BoundingBox: 0 0 345 326
%%HiResBoundingBox: 0.0 0.0 345.0 326.0
%%Pages: 0
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%DocumentSuppliedResources:
%%+ procset (Adobe Acrobat - PDF operators) 1.2 0
%%+ procset (Adobe Acrobat - type operators) 1.2 0
%%EndComments
%%BeginProlog
%%EndProlog
%%BeginSetup
%ADOPrintSettings: L2 W0 VM op crd os scsa T h ef bg ucr sf ef r b fa pr seps ttf hb EF t2 irt Printer/PostScript Color Management 0
+

%%BeginResource: procset l2check 6.0 1
%%Copyright: Copyright 1993,2001 Adobe Systems Incorporated. All Rights Reserved.
systemdict /languagelevel known
{ systemdict /languagelevel get 1 eq }
{ true }
ifelse
{
initgraphics /Helvetica findfont 18 scalefont setfont
72 600 moveto (Error: This application does not support) dup show
72 580 moveto (printing to a PostScript Language Level 1 printer.) dup show
exch = =
/Times-Roman findfont 16 scalefont setfont
72 500 moveto (As a workaround, try selecting Print As Image from) show
72 480 moveto (the Advanced Print dialog.) show
showpage
quit
}
if
%%EndResource
%%BeginResource: file Pscript_CFF PSVER
userdict /ct_CffDict 6 dict put     
ct_CffDict begin                    
/F0Subr     
{
    systemdict /internaldict known 
   {
      1183615869 systemdict /internaldict get exec 
       /FlxProc known {save true} {false} ifelse
    } 
   {
      userdict /internaldict known not 
        { 
          userdict /internaldict 
          {
               count 0 eq 
             {/internaldict errordict /invalidaccess get exec} if 
             dup type /integertype ne 
             {/internaldict errordict /invalidaccess get exec} if 
             dup 1183615869 eq
             {pop 0} 
             {/internaldict errordict /invalidaccess get exec} 
             ifelse 
          } 
          dup 14 get 1 25 dict put 
          bind executeonly put 
       } if 
       1183615869 userdict /internaldict get exec 
       /FlxProc known {save true} {false} ifelse
    } ifelse
    [ 
       systemdict /internaldict known not 
       { 100 dict /begin cvx /mtx matrix /def cvx } if 
       systemdict /currentpacking known {currentpacking true setpacking} if 
       { 
          systemdict /internaldict known { 
          1183615869 systemdict /internaldict get exec 
          dup /$FlxDict known not { 
          dup dup length exch maxlength eq 
          { pop userdict dup /$FlxDict known not
          { 100 dict begin /mtx matrix def 
          dup /$FlxDict currentdict put end } if } 
          { 100 dict begin /mtx matrix def 
          dup /$FlxDict currentdict put end } 
          ifelse 
          } if /$FlxDict get begin } if 
          grestore 
          /exdef {exch def} def 
          /dmin exch abs 100 div def 
          /epX exdef /epY exdef 
          /c4y2 exdef /c4x2 exdef /c4y1 exdef /c4x1 exdef /c4y0 exdef /c4x0 exdef 
          /c3y2 exdef /c3x2 exdef /c3y1 exdef /c3x1 exdef /c3y0 exdef /c3x0 exdef 
          /c1y2 exdef /c1x2 exdef /c2x2 c4x2 def /c2y2 c4y2 def 
          /yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def 
          /PickCoords {  
          {c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2} 
          {c3x0 c3y0 c3x1 c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2} 
          ifelse 
          /y5 exdef /x5 exdef /y4 exdef /x4 exdef /y3 exdef /x3 exdef 
          /y2 exdef /x2 exdef /y1 exdef /x1 exdef /y0 exdef /x0 exdef 
          } def 
          mtx currentmatrix pop  
          mtx 0 get abs .00001 lt mtx 3 get abs .00001 lt or 
          {/flipXY -1 def} 
          {mtx 1 get abs .00001 lt mtx 2 get abs .00001 lt or 
          {/flipXY 1 def} 
          {/flipXY 0 def} 
          ifelse } 
          ifelse 
          /erosion 1 def 
          systemdict /internaldict known { 
           1183615869 systemdict /internaldict get exec dup  
          /erosion known 
          {/erosion get /erosion exch def} 
          {pop} 
          ifelse 
          } if 
          yflag 
          {
              flipXY 0 eq c3y2 c4y2 eq or 
             {false PickCoords}
             {
                  /shrink c3y2 c4y2 eq 
                {0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs} ifelse def 
                /yshrink {c4y2 sub shrink mul c4y2 add} def 
                /c1y0 c3y0 yshrink def /c1y1 c3y1 yshrink def 
                /c2y0 c4y0 yshrink def /c2y1 c4y1 yshrink def 
                /c1x0 c3x0 def /c1x1 c3x1 def /c2x0 c4x0 def /c2x1 c4x1 def 
                /dY 0 c3y2 c1y2 sub round 
                dtransform flipXY 1 eq {exch} if pop abs def 
                dY dmin lt PickCoords 
                y2 c1y2 sub abs 0.001 gt {
                   c1x2 c1y2 transform flipXY 1 eq {exch} if  
                   /cx exch def /cy exch def 
                   /dY 0 y2 c1y2 sub round dtransform flipXY 1 eq {exch} 
                   if pop def 
                   dY round dup 0 ne 
                   {/dY exdef } 
                   {pop dY 0 lt {-1}{1} ifelse /dY exdef} 
                   ifelse 
                   /erode PaintType 2 ne erosion 0.5 ge and def  
                   erode {/cy cy 0.5 sub def} if 
                   /ey cy dY add def   
                   /ey ey ceiling ey sub ey floor add def   
                   erode {/ey ey 0.5 add def} if   
                   ey cx flipXY 1 eq {exch} if itransform exch pop  
                   y2 sub /eShift exch def  
                   /y1 y1 eShift add def /y2 y2 eShift add def /y3 y3  
                   eShift add def  
                } if  
             } ifelse  
          } 
          {
              flipXY 0 eq c3x2 c4x2 eq or  
             {false PickCoords }  
             { /shrink c3x2 c4x2 eq  
                {0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs} ifelse def  
                /xshrink {c4x2 sub shrink mul c4x2 add} def  
                /c1x0 c3x0 xshrink def /c1x1 c3x1 xshrink def  
                /c2x0 c4x0 xshrink def /c2x1 c4x1 xshrink def  
                /c1y0 c3y0 def /c1y1 c3y1 def /c2y0 c4y0 def /c2y1 c4y1 def  
                /dX c3x2 c1x2 sub round 0 dtransform  
                flipXY -1 eq {exch} if pop abs def 
                dX dmin lt PickCoords  
                x2 c1x2 sub abs 0.001 gt {  
                   c1x2 c1y2 transform flipXY -1 eq {exch} if  
                   /cy exch def /cx exch def   
                   /dX x2 c1x2 sub round 0 dtransform flipXY -1 eq {exch} if pop def  
                   dX round dup 0 ne  
                   {/dX exdef}  
                   {pop dX 0 lt {-1}{1} ifelse /dX exdef}  
                   ifelse  
                   /erode PaintType 2 ne erosion .5 ge and def 
                   erode {/cx cx .5 sub def} if  
                   /ex cx dX add def  
                   /ex ex ceiling ex sub ex floor add def  
                   erode {/ex ex .5 add def} if  
                   ex cy flipXY -1 eq {exch} if itransform pop  
                   x2 sub /eShift exch def  
                   /x1 x1 eShift add def /x2 x2 eShift add def /x3 x3 eShift add def  
                } if  
             } ifelse  
          } ifelse 
          x2 x5 eq y2 y5 eq or  
          {x5 y5 lineto }  
          {x0 y0 x1 y1 x2 y2 curveto  
          x3 y3 x4 y4 x5 y5 curveto}  
          ifelse  
          epY epX   
       }  
       systemdict /currentpacking known {exch setpacking} if   
       /exec cvx /end cvx 
    ] cvx  
    executeonly 
    exch  
    {pop true exch restore}   
    {   
       systemdict /internaldict known not  
       {1183615869 userdict /internaldict get exec  
       exch /FlxProc exch put true}  
       {1183615869 systemdict /internaldict get exec  
       dup length exch maxlength eq  
       {false}   
       {1183615869 systemdict /internaldict get exec 
       exch /FlxProc exch put true}  
       ifelse}  
       ifelse
    } ifelse  
    {
       systemdict /internaldict known  
       {1183615869 systemdict /internaldict get exec /FlxProc get exec}  
       {1183615869 userdict /internaldict get exec /FlxProc get exec}  
       ifelse   
    } if  
} executeonly def
/F1Subr
{gsave currentpoint newpath moveto} bind def 
/F2Subr
{currentpoint grestore gsave currentpoint newpath moveto} bind  def
/HSSubr 
{
   systemdict /internaldict known not
   {pop 3}
   {1183615869 systemdict /internaldict get exec
    dup /startlock known
    {/startlock get exec}
    {dup /strtlck known
    {/strtlck get exec}
    {pop 3}
    ifelse}
    ifelse}
    ifelse
} bind def
end                                 
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.19 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.19 0
systemdict /languagelevel known dup
	{ currentglobal false setglobal }
	{ false }
ifelse
exch
userdict /Adobe_CoolType_Utility 2 copy known
	{ 2 copy get dup maxlength 25 add dict copy }
	{ 25 dict }
ifelse put
Adobe_CoolType_Utility
	begin
	/ct_Level2? exch def
	/ct_Clone? 1183615869 internaldict dup
			/CCRun known not
			exch /eCCRun known not
			ct_Level2? and or def
ct_Level2?
	{ globaldict begin currentglobal true setglobal }
if
	/ct_AddStdCIDMap
		ct_Level2?
			{ {
			((Hex) 57 StartData
			0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
			7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
			d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
			cc36 74f4 1144 b13b 77) 0 () /SubFileDecode filter cvx exec
			} }
			{ {
			<BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E
		 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C
			4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A> eexec
			} }
		ifelse bind def
userdict /cid_extensions known
dup { cid_extensions /cid_UpdateDB known and } if
	 {
	 cid_extensions
	 begin
	 /cid_GetCIDSystemInfo
		 {
		 1 index type /stringtype eq
			 { exch cvn exch }
		 if
		 cid_extensions
			 begin
			 dup load 2 index known
				 {
				 2 copy
				 cid_GetStatusInfo
				 dup null ne
					 {
					 1 index load
					 3 index get
					 dup null eq
						  { pop pop cid_UpdateDB }
						  {
						  exch
						  1 index /Created get eq
							  { exch pop exch pop }
							  { pop cid_UpdateDB }
						  ifelse
						  }
					 ifelse
					 }
					 { pop cid_UpdateDB }
				 ifelse
				 }
				 { cid_UpdateDB }
			 ifelse
			 end
		 } bind def
	 end
	 }
if
ct_Level2?
	{ end setglobal }
if
	/ct_UseNativeCapability?  systemdict /composefont known def
	/ct_MakeOCF 35 dict def
	/ct_Vars 25 dict def
	/ct_GlyphDirProcs 6 dict def
	/ct_BuildCharDict 15 dict dup
		begin
		/charcode 2 string def
		/dst_string 1500 string def
		/nullstring () def
		/usewidths? true def
		end def
	ct_Level2? { setglobal } { pop } ifelse
	ct_GlyphDirProcs
		begin
		/GetGlyphDirectory
			{
			systemdict /languagelevel known
				{ pop /CIDFont findresource /GlyphDirectory get }
				{
				1 index /CIDFont findresource /GlyphDirectory
				get dup type /dicttype eq
					{
					dup dup maxlength exch length sub 2 index lt
						{
						dup length 2 index add dict copy 2 index
						/CIDFont findresource/GlyphDirectory 2 index put
						}
					if
					}
				if
				exch pop exch pop
				}
			ifelse
			+
			} def
		/+
			{
			systemdict /languagelevel known
				{
				currentglobal false setglobal
				3 dict begin
					/vm exch def
				}
				{ 1 dict begin }
			ifelse
			/$ exch def
			systemdict /languagelevel known
				{
				vm setglobal
				/gvm currentglobal def
				$ gcheck setglobal
				}
			if
			? { $ begin } if
			} def
		/? { $ type /dicttype eq } def
		/| {
			userdict /Adobe_CoolType_Data known
				{
			Adobe_CoolType_Data /AddWidths? known
				{
				 currentdict Adobe_CoolType_Data
					begin
					  begin
						AddWidths?
								{
								Adobe_CoolType_Data /CC 3 index put
								? { def } { $ 3 1 roll put } ifelse
								CC charcode exch 1 index 0 2 index 256 idiv put
								1 index exch 1 exch 256 mod put
								stringwidth 2 array astore
								currentfont /Widths get exch CC exch put
								}
								{ ? { def } { $ 3 1 roll put } ifelse }
							ifelse
					end
				end
				}
				{ ? { def } { $ 3 1 roll put } ifelse }	ifelse
				}
				{ ? { def } { $ 3 1 roll put } ifelse }
			ifelse
			} def
		/!
			{
			? { end } if
			systemdict /languagelevel known
				{ gvm setglobal }
			if
			end
			} def
		/: { string currentfile exch readstring pop } executeonly def
		end
	ct_MakeOCF
		begin
		/ct_cHexEncoding
		[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
		 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
		 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
		 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
		 /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
		 /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
		 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
		 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
		 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
		 /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
		 /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
		 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
		 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
		 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
		/ct_CID_STR_SIZE 8000 def
		/ct_mkocfStr100 100 string def
		/ct_defaultFontMtx [.001 0 0 .001 0 0] def
		/ct_1000Mtx [1000 0 0 1000 0 0] def
		/ct_raise {exch cvx exch errordict exch get exec stop} bind def
		/ct_reraise
			{ cvx $error /errorname get (Error: ) print dup (						  ) cvs print
					errordict exch get exec stop
			} bind def
		/ct_cvnsi
			{
			1 index add 1 sub 1 exch 0 4 1 roll
				{
				2 index exch get
				exch 8 bitshift
				add
				}
			for
			exch pop
			} bind def
		/ct_GetInterval
			{
			Adobe_CoolType_Utility /ct_BuildCharDict get
				begin
				/dst_index 0 def
				dup dst_string length gt
					{ dup string /dst_string exch def }
				if
				1 index ct_CID_STR_SIZE idiv
				/arrayIndex exch def
				2 index arrayIndex  get
				2 index
				arrayIndex ct_CID_STR_SIZE mul
				sub
					{
					dup 3 index add 2 index length le
						{
						2 index getinterval
						dst_string  dst_index 2 index putinterval
						length dst_index add /dst_index exch def
						exit
						}
						{
						1 index length 1 index sub
						dup 4 1 roll
						getinterval
						dst_string  dst_index 2 index putinterval
						pop dup dst_index add /dst_index exch def
						sub
						/arrayIndex arrayIndex 1 add def
						2 index dup length arrayIndex gt
							  { arrayIndex get }
							  {
							  pop
							  exit
							  }
						ifelse
						0
						}
					ifelse
					}
				loop
				pop pop pop
				dst_string 0 dst_index getinterval
				end
			} bind def
		ct_Level2?
			{
			/ct_resourcestatus
			currentglobal mark true setglobal
				{ /unknowninstancename /Category resourcestatus }
			stopped
				{ cleartomark setglobal true }
				{ cleartomark currentglobal not exch setglobal }
			ifelse
				{
					{
					mark 3 1 roll /Category findresource
						begin
						ct_Vars /vm currentglobal put
						({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
							{ cleartomark false }
							{ { 3 2 roll pop true } { cleartomark false } ifelse }
						ifelse
						ct_Vars /vm get setglobal
						end
					}
				}
				{ { resourcestatus } }
			ifelse bind def
			/CIDFont /Category ct_resourcestatus
				{ pop pop }
				{
				currentglobal  true setglobal
				/Generic /Category findresource
				dup length dict copy
				dup /InstanceType /dicttype put
				/CIDFont exch /Category defineresource pop
				setglobal
				}
			ifelse
			ct_UseNativeCapability?
				{
				/CIDInit /ProcSet findresource begin
				12 dict begin
				begincmap
				/CIDSystemInfo 3 dict dup begin
				  /Registry (Adobe) def
				  /Ordering (Identity) def
				  /Supplement 0 def
				end def
				/CMapName /Identity-H def
				/CMapVersion 1.000 def
				/CMapType 1 def
				1 begincodespacerange
				<0000> <FFFF>
				endcodespacerange
				1 begincidrange
				<0000> <FFFF> 0
				endcidrange
				endcmap
				CMapName currentdict /CMap defineresource pop
				end
				end
				}
			if
			}
			{
			/ct_Category 2 dict begin
			/CIDFont  10 dict def
			/ProcSet	2 dict def
			currentdict
			end
			def
			/defineresource
				{
				ct_Category 1 index 2 copy known
					{
					get
					dup dup maxlength exch length eq
						{
						dup length 10 add dict copy
						ct_Category 2 index 2 index put
						}
					if
					3 index 3 index put
					pop exch pop
					}
					{ pop pop /defineresource /undefined ct_raise }
				ifelse
				} bind def
			/findresource
				{
				ct_Category 1 index 2 copy known
					{
					get
					2 index 2 copy known
						{ get 3 1 roll pop pop}
						{ pop pop /findresource /undefinedresource ct_raise }
					ifelse
					}
					{ pop pop /findresource /undefined ct_raise }
				ifelse
				} bind def
			/resourcestatus
				{
				ct_Category 1 index 2 copy known
					{
					get
					2 index known
					exch pop exch pop
						{
						0 -1 true
						}
						{
						false
						}
					ifelse
					}
					{ pop pop /findresource /undefined ct_raise }
				ifelse
				} bind def
			/ct_resourcestatus /resourcestatus load def
			}
		ifelse
		/ct_CIDInit 2 dict
			begin
			/ct_cidfont_stream_init
				{
					{
					dup (Binary) eq
						{
						pop
						null
						currentfile
						ct_Level2?
							{
								{ cid_BYTE_COUNT () /SubFileDecode filter }
							stopped
								{ pop pop pop }
							if
							}
						if
						/readstring load
						exit
						}
					if
					dup (Hex) eq
						{
						pop
						currentfile
						ct_Level2?
							{
								{ null exch /ASCIIHexDecode filter /readstring }
							stopped
								{ pop exch pop (>) exch /readhexstring }
							if
							}
							{ (>) exch /readhexstring }
						ifelse
						load
						exit
						}
					if
					/StartData /typecheck ct_raise
					}
				loop
				cid_BYTE_COUNT ct_CID_STR_SIZE le
					{
					2 copy cid_BYTE_COUNT string exch exec
					pop
					1 array dup
					3 -1 roll
					0 exch put
					}
					{
					cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
					dup array exch 2 sub 0 exch 1 exch
						{
						2 copy
						5 index
						ct_CID_STR_SIZE
						string
						6 index exec
						pop
						put
						pop
						}
					for
					2 index
					cid_BYTE_COUNT ct_CID_STR_SIZE mod string
					3 index exec
					pop
					1 index exch
					1 index length 1 sub
					exch put
					}
				ifelse
				cid_CIDFONT exch /GlyphData exch put
				2 index null eq
					{
					pop pop pop
					}
					{
					pop /readstring load
					1 string exch
						{
						3 copy exec
						pop
						dup length 0 eq
							{
							pop pop pop pop pop
							true exit
							}
						if
						4 index
						eq
							{
							pop pop pop pop
							false exit
							}
						if
						}
					loop
					pop
					}
				ifelse
				} bind def
			/StartData
				{
				mark
					{
					currentdict
					dup /FDArray get 0 get /FontMatrix get
					0 get 0.001 eq
						{
						dup /CDevProc known not
							{
							/CDevProc 1183615869 internaldict /stdCDevProc 2 copy known
								{ get }
								{
								pop pop
								{ pop pop pop pop pop 0 -1000 7 index 2 div 880 }
								}
							ifelse
							def
							}
						if
						}
						{
						 /CDevProc
							 {
							 pop pop pop pop pop
							 0
							 1 cid_temp /cid_CIDFONT get
							 /FDArray get 0 get
							 /FontMatrix get 0 get div
							 7 index 2 div
							 1 index 0.88 mul
							 } def
						}
					ifelse
					/cid_temp 15 dict def
					cid_temp
						begin
						/cid_CIDFONT exch def
						3 copy pop
						dup /cid_BYTE_COUNT exch def 0 gt
							{
							ct_cidfont_stream_init
							FDArray
								{
								/Private get
								dup /SubrMapOffset known
									{
									begin
									/Subrs SubrCount array def
									Subrs
									SubrMapOffset
									SubrCount
									SDBytes
									ct_Level2?
										{
										currentdict dup /SubrMapOffset undef
										dup /SubrCount undef
										/SDBytes undef
										}
									if
									end
									/cid_SD_BYTES exch def
									/cid_SUBR_COUNT exch def
									/cid_SUBR_MAP_OFFSET exch def
									/cid_SUBRS exch def
									cid_SUBR_COUNT 0 gt
										{
										GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
										0 cid_SD_BYTES ct_cvnsi
										0 1 cid_SUBR_COUNT 1 sub
											{
											exch 1 index
											1 add
											cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
											GlyphData exch cid_SD_BYTES ct_GetInterval
											0 cid_SD_BYTES ct_cvnsi
											cid_SUBRS 4 2 roll
											GlyphData exch
											4 index
											1 index
											sub
											ct_GetInterval
											dup length string copy put
											}
										for
										pop
										}
									if
									}
									{ pop }
								ifelse
								}
							forall
							}
						if
						cleartomark pop pop
						end
					CIDFontName currentdict /CIDFont defineresource pop
					end end
					}
				stopped
					{ cleartomark /StartData ct_reraise }
				if
				} bind def
			currentdict
			end def
		/ct_saveCIDInit
			{
			/CIDInit /ProcSet ct_resourcestatus
				{ true }
				{ /CIDInitC /ProcSet ct_resourcestatus }
			ifelse
				{
				pop pop
				/CIDInit /ProcSet findresource
				ct_UseNativeCapability?
					{ pop null }
					{ /CIDInit ct_CIDInit /ProcSet defineresource pop }
				ifelse
				}
				{ /CIDInit ct_CIDInit /ProcSet defineresource pop null }
			ifelse
			ct_Vars exch /ct_oldCIDInit exch put
			} bind def
		/ct_restoreCIDInit
			{
			ct_Vars /ct_oldCIDInit get dup null ne
				{ /CIDInit exch /ProcSet defineresource pop }
				{ pop }
			ifelse
			} bind def
		/ct_BuildCharSetUp
			{
			1 index
				begin
				CIDFont
					begin
					Adobe_CoolType_Utility /ct_BuildCharDict get
						begin
						/ct_dfCharCode exch def
						/ct_dfDict exch def
						CIDFirstByte ct_dfCharCode add
						dup CIDCount ge
							{ pop 0 }
						if
						/cid exch def
							{
							GlyphDirectory cid 2 copy known
								{ get }
								{ pop pop nullstring }
							ifelse
							dup length FDBytes sub 0 gt
								{
								dup
								FDBytes 0 ne
									{ 0 FDBytes ct_cvnsi }
									{ pop 0 }
								ifelse
								/fdIndex exch def
								dup length FDBytes sub FDBytes exch getinterval
								/charstring exch def
								exit
								}
								{
								pop
								cid 0 eq
									{ /charstring nullstring def exit }
								if
								/cid 0 def
								}
							ifelse
							}
						loop
			} def
		/ct_SetCacheDevice
			{
			0 0 moveto
			dup stringwidth
			3 -1 roll
			true charpath
			pathbbox
			0 -1000
			7 index 2 div 880
			setcachedevice2
			0 0 moveto
			} def
		/ct_CloneSetCacheProc
			{
			1 eq
				{
				stringwidth
				pop -2 div -880
				0 -1000 setcharwidth
				moveto
				}
				{
				usewidths?
					{
					currentfont /Widths get cid
					2 copy known
						{ get exch pop aload pop }
						{ pop pop stringwidth }
					ifelse
					}
					{ stringwidth }
				ifelse
				setcharwidth
				0 0 moveto
				}
			ifelse
			} def
		/ct_Type3ShowCharString
			{
			ct_FDDict fdIndex 2 copy known
				{ get }
				{
				currentglobal 3 1 roll
				1 index gcheck setglobal
				ct_Type1FontTemplate dup maxlength dict copy
					begin
					FDArray fdIndex get
					dup /FontMatrix 2 copy known
						{ get }
						{ pop pop ct_defaultFontMtx }
					ifelse
					/FontMatrix exch dup length array copy def
					/Private get
					/Private exch def
					/Widths rootfont /Widths get def
					/CharStrings 1 dict dup /.notdef
						<d841272cf18f54fc13> dup length string copy put def
					currentdict
					end
				/ct_Type1Font exch definefont
				dup 5 1 roll put
				setglobal
				}
			ifelse
			dup /CharStrings get 1 index /Encoding get
			ct_dfCharCode get charstring put
			rootfont /WMode 2 copy known
				{ get }
				{ pop pop 0 }
			ifelse
			exch
			1000 scalefont setfont
			ct_str1 0 ct_dfCharCode put
			ct_str1 exch ct_dfSetCacheProc
			ct_SyntheticBold
				{
				currentpoint
				ct_str1 show
				newpath
				moveto
				ct_str1 true charpath
				ct_StrokeWidth setlinewidth
				stroke
				}
				{ ct_str1 show }
			ifelse
			} def
		/ct_Type4ShowCharString
			{
			ct_dfDict ct_dfCharCode charstring
			FDArray fdIndex get
			dup /FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
				{ ct_1000Mtx matrix concatmatrix concat }
				{ pop }
			ifelse
			/Private get
			Adobe_CoolType_Utility /ct_Level2? get not
				{
				ct_dfDict /Private
				3 -1 roll
					{ put }
				1183615869 internaldict /superexec get exec
				}
			if
			1183615869 internaldict
			Adobe_CoolType_Utility /ct_Level2? get
				{ 1 index }
				{ 3 index /Private get mark 6 1 roll }
			ifelse
			dup /RunInt known
				{ /RunInt get }
				{ pop /CCRun }
			ifelse
			get exec
			Adobe_CoolType_Utility /ct_Level2? get not
				{ cleartomark }
			if
			} bind def
		/ct_BuildCharIncremental
			{
				{
				Adobe_CoolType_Utility /ct_MakeOCF get begin
				ct_BuildCharSetUp
				ct_ShowCharString
				}
			stopped
				{ stop }
			if
			end
			end
			end
			end
			} bind def
		/BaseFontNameStr (BF00) def
		/ct_Type1FontTemplate 14 dict
			begin
			/FontType 1 def
			/FontMatrix  [0.001 0 0 0.001 0 0] def
			/FontBBox  [-250 -250 1250 1250] def
			/Encoding ct_cHexEncoding def
			/PaintType 0 def
			currentdict
			end def
		/BaseFontTemplate 11 dict
			begin
			/FontMatrix  [0.001 0 0 0.001 0 0] def
			/FontBBox  [-250 -250 1250 1250] def
			/Encoding ct_cHexEncoding def
			/BuildChar /ct_BuildCharIncremental load def
			ct_Clone?
				{
				/FontType 3 def
				/ct_ShowCharString /ct_Type3ShowCharString load def
				/ct_dfSetCacheProc /ct_CloneSetCacheProc load def
				/ct_SyntheticBold false def
				/ct_StrokeWidth 1 def
				}
				{
				/FontType 4 def
				/Private 1 dict dup /lenIV 4 put def
				/CharStrings 1 dict dup /.notdef <d841272cf18f54fc13> put def
				/PaintType 0 def
				/ct_ShowCharString /ct_Type4ShowCharString load def
				}
			ifelse
			/ct_str1 1 string def
			currentdict
			end def
		/BaseFontDictSize BaseFontTemplate length 5 add def
		/ct_matrixeq
			{
			true 0 1 5
				{
				dup 4 index exch get exch 3 index exch get eq and
				dup not
					{ exit }
				if
				}
			for
			exch pop exch pop
			} bind def
		/ct_makeocf
			{
			15 dict
				begin
				exch /WMode exch def
				exch /FontName exch def
				/FontType 0 def
				/FMapType 2 def
			dup /FontMatrix known
				{ dup /FontMatrix get /FontMatrix exch def }
				{ /FontMatrix matrix def }
			ifelse
				/bfCount 1 index /CIDCount get 256 idiv 1 add
					dup 256 gt { pop 256} if def
				/Encoding
					256 array 0 1 bfCount 1 sub { 2 copy dup put pop } for
					bfCount 1 255 { 2 copy bfCount put pop } for
					def
				/FDepVector bfCount dup 256 lt { 1 add } if array def
				BaseFontTemplate BaseFontDictSize dict copy
					begin
					/CIDFont exch def
					CIDFont /FontBBox known
						{ CIDFont /FontBBox get /FontBBox exch def }
					if
					CIDFont /CDevProc known
						{ CIDFont /CDevProc get /CDevProc exch def }
					if
					currentdict
					end
				BaseFontNameStr 3 (0) putinterval
				0 1 bfCount dup 256 eq { 1 sub } if
					{
					FDepVector exch
					2 index BaseFontDictSize dict copy
						begin
						dup /CIDFirstByte exch 256 mul def
						FontType 3 eq
							{ /ct_FDDict 2 dict def }
						if
						currentdict
						end
					1 index  16
					BaseFontNameStr  2 2 getinterval cvrs pop
					BaseFontNameStr exch definefont
					put
					}
				for
				ct_Clone?
					{ /Widths 1 index /CIDFont get /GlyphDirectory get length dict def }
				if
				FontName
				currentdict
				end
			definefont
			ct_Clone?
				{
				gsave
				dup 1000 scalefont setfont
				ct_BuildCharDict
					begin
					/usewidths? false def
					currentfont /Widths get
						begin
						exch /CIDFont get /GlyphDirectory get
							{
							pop
							dup charcode exch 1 index 0 2 index 256 idiv put
							1 index exch 1 exch 256 mod put
							stringwidth 2 array astore def
							}
						forall
						end
					/usewidths? true def
					end
				grestore
				}
				{ exch pop }
			ifelse
			} bind def
		/ct_ComposeFont
			{
			ct_UseNativeCapability?
				{
				2 index /CMap ct_resourcestatus
					{ pop pop exch pop }
					{
					/CIDInit /ProcSet findresource
						begin
						12 dict
							begin
							begincmap
							/CMapName 3 index def
							/CMapVersion 1.000 def
							/CMapType 1 def
							exch /WMode exch def
							/CIDSystemInfo 3 dict dup
								begin
								/Registry (Adobe) def
								/Ordering
								CMapName ct_mkocfStr100 cvs
								(Adobe-) search
									{
									pop pop
									(-) search
										{
										dup length string copy
										exch pop exch pop
										}
										{ pop (Identity)}
									ifelse
									}
									{ pop  (Identity)  }
								ifelse
								def
								/Supplement 0 def
								end def
							1 begincodespacerange
							<0000> <FFFF>
							endcodespacerange
							1 begincidrange
							<0000> <FFFF> 0
							endcidrange
							endcmap
							CMapName currentdict /CMap defineresource pop
							end
						end
					}
				ifelse
				composefont
				}
				{
				3 2 roll pop
				0 get /CIDFont findresource
				ct_makeocf
				}
			ifelse
			} bind def
		/ct_MakeIdentity
			{
			ct_UseNativeCapability?
				{
				1 index /CMap ct_resourcestatus
					{ pop pop }
					{
					/CIDInit /ProcSet findresource begin
					12 dict begin
					begincmap
					/CMapName 2 index def
					/CMapVersion 1.000 def
					/CMapType 1 def
					/CIDSystemInfo 3 dict dup
						begin
						/Registry (Adobe) def
						/Ordering
						CMapName ct_mkocfStr100 cvs
						(Adobe-) search
							{
							pop pop
							(-) search
								{ dup length string copy exch pop exch pop }
								{ pop (Identity) }
							ifelse
							}
							{ pop (Identity) }
						ifelse
						def
						/Supplement 0 def
						end def
					1 begincodespacerange
					<0000> <FFFF>
					endcodespacerange
					1 begincidrange
					<0000> <FFFF> 0
					endcidrange
					endcmap
					CMapName currentdict /CMap defineresource pop
					end
					end
					}
				ifelse
				composefont
				}
				{
				exch pop
				0 get /CIDFont findresource
				ct_makeocf
				}
			ifelse
			} bind def
		currentdict readonly pop
		end
	end
%%EndResource
%%BeginFile: MMFauxFont.prc
%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. 
%%All Rights Reserved.
userdict /ct_EuroDict 10 dict put
ct_EuroDict begin
/ct_CopyFont 
{
    { 1 index /FID ne {def} {pop pop} ifelse} forall
} def
/ct_GetGlyphOutline
{
   gsave
   initmatrix newpath
   exch findfont dup 
   length 1 add dict 
   begin 
		ct_CopyFont 
		/Encoding Encoding dup length array copy 
		dup
		4 -1 roll
		0 exch put   
		def
		currentdict
   end
   /ct_EuroFont exch definefont
   1000 scalefont setfont
   0 0 moveto
   [
       <00> stringwidth 
       <00> false charpath
       pathbbox
       [
       {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall
   grestore
   counttomark 8 add
}
def
/ct_MakeGlyphProc
{
   ] cvx
   /ct_PSBuildGlyph cvx
   ] cvx
} def
/ct_PSBuildGlyph 
{ 
 	gsave 
	8 -1 roll pop 
	7 1 roll 
        6 -2 roll ct_FontMatrix transform 6 2 roll
        4 -2 roll ct_FontMatrix transform 4 2 roll
        ct_FontMatrix transform 
	currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse  
	dup  9 1 roll 
	{  
		currentdict /StrokeWidth 2 copy known  
		{   
			get 2 div   
			0 ct_FontMatrix dtransform pop
			5 1 roll  
			4 -1 roll 4 index sub   
			4 1 roll   
			3 -1 roll 4 index sub  
			3 1 roll   
			exch 4 index add exch  
			4 index add  
			5 -1 roll pop  
		}  
		{	 
			pop pop 
		}  
		ifelse  
	}       
    if  
	setcachedevice  
        ct_FontMatrix concat
        ct_PSPathOps begin 
		exec 
	end 
	{  
		currentdict /StrokeWidth 2 copy known  
			{ get }  
			{ pop pop 0 }  
  	    ifelse  
		setlinewidth stroke  
	}  
	{   
	    fill  
	}  
	ifelse  
    grestore
} def 
/ct_PSPathOps 4 dict dup begin 
	/m {moveto} def 
	/l {lineto} def 
	/c {curveto} def 
	/cp {closepath} def 
end 
def 
/ct_matrix1000 [1000 0 0 1000 0 0] def
/ct_AddGlyphProc  
{
   2 index findfont dup length 4 add dict 
   begin 
	ct_CopyFont 
	/CharStrings CharStrings dup length 1 add dict copy
      begin
         3 1 roll def  
         currentdict 
      end 
      def
      /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def
      /ct_PSBuildGlyph /ct_PSBuildGlyph load def
      /ct_PSPathOps /ct_PSPathOps load def
      currentdict
   end
   definefont pop
}
def
systemdict /languagelevel known
{
	/ct_AddGlyphToPrinterFont {
		2 copy
		ct_GetGlyphOutline 3 add -1 roll restore 
		ct_MakeGlyphProc 
		ct_AddGlyphProc
	} def
}
{
	/ct_AddGlyphToPrinterFont {
	    pop pop restore
		Adobe_CTFauxDict /$$$FONTNAME get
		/Euro
		Adobe_CTFauxDict /$$$SUBSTITUTEBASE get
		ct_EuroDict exch get
		ct_AddGlyphProc
	} def
} ifelse
/AdobeSansMM 
{ 
556 0 24 -19 541 703 
	{ 
	541 628 m 
	510 669 442 703 354 703 c 
	201 703 117 607 101 444 c 
	50 444 l 
	25 372 l 
	97 372 l 
	97 301 l 
	49 301 l 
	24 229 l 
	103 229 l 
	124 67 209 -19 350 -19 c 
	435 -19 501 25 509 32 c 
	509 131 l 
	492 105 417 60 343 60 c 
	267 60 204 127 197 229 c 
	406 229 l 
	430 301 l 
	191 301 l 
	191 372 l 
	455 372 l 
	479 444 l 
	194 444 l 
	201 531 245 624 348 624 c 
	433 624 484 583 509 534 c 
	cp 
	556 0 m 
	}
ct_PSBuildGlyph
} def
/AdobeSerifMM 
{ 
500 0 10 -12 484 692 
	{ 
	347 298 m 
	171 298 l 
	170 310 170 322 170 335 c 
	170 362 l 
	362 362 l 
	374 403 l 
	172 403 l 
	184 580 244 642 308 642 c 
	380 642 434 574 457 457 c 
	481 462 l 
	474 691 l 
	449 691 l 
	433 670 429 657 410 657 c 
	394 657 360 692 299 692 c 
	204 692 94 604 73 403 c 
	22 403 l 
	10 362 l 
	70 362 l 
	69 352 69 341 69 330 c 
	69 319 69 308 70 298 c 
	22 298 l 
	10 257 l 
	73 257 l 
	97 57 216 -12 295 -12 c 
	364 -12 427 25 484 123 c 
	458 142 l 
	425 101 384 37 316 37 c 
	256 37 189 84 173 257 c 
	335 257 l 
	cp 
	500 0 m 
	} 
ct_PSBuildGlyph 
} def 
end		
%%EndFile
/currentpacking where{pop currentpacking true setpacking}if
%%BeginResource: procset pdfvars 6.0 1
%%Copyright: Copyright 1987-2002 Adobe Systems Incorporated. All Rights Reserved.
%%Title: definition of dictionary of variables used by PDF & PDFText procsets
userdict /PDF 162 dict put
userdict /PDFVars 89 dict dup begin put
/docSetupDone false def
/InitAll 0 def
/TermAll 0 def
/DocInitAll 0 def
/DocTermAll 0 def
/_pdfEncodings 2 array def
/_pdf_str1 1 string def
/_pdf_i 0 def
/_pdf_na 0 def
/_pdf_showproc 0 def
/_italMtx [1 0 .212557 1 0 0] def
/_italMtx_WMode1 [1 -.212557 0 1 0 0] def
/_italMtxType0 [1 0 .1062785 1 0 0] def
/_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
/_basefont 0 def
/_basefonto 0 def
/_pdf_oldCIDInit null def
/_pdf_FontDirectory 30 dict def
/_categories 10 dict def
/_sa? true def
/_ColorSep5044? false def
/nulldict 0 dict def
/_processColors 0 def
/overprintstack null def
/_defaulttransfer currenttransfer def
/_defaultflatness currentflat def
/_defaulthalftone null def
/_defaultcolortransfer null def
/_defaultblackgeneration null def
/_defaultundercolorremoval null def
/_defaultcolortransfer null def
PDF begin
[/c/cs/cm/d/d0/f/h/i/j/J/l/m/M/n/q/Q/re/ri/S/sc/sh/Tf/w/W
/applyInterpFunc/applystitchFunc/domainClip/encodeInput
/initgs/int/limit/rangeClip
/defineRes/undefineRes/findRes/setSA/pl
/? /! /| /: /+ /GetGlyphDirectory
/pdf_flushFilters /pdf_readstring /pdf_dictOp /pdf_image /pdf_maskedImage
/pdf_shfill /pdf_sethalftone
] {null def} bind forall
end
end
%%EndResource
PDFVars begin PDF begin
%%BeginResource: procset pdfutil 6.0 1
%%Copyright: Copyright 1993-2001 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Basic utilities used by other PDF procsets
/bd {bind def} bind def
/ld {load def} bd
/bld {
dup length dict begin
{ null def } forall
bind
end
def
} bd
/dd { PDFVars 3 1 roll put } bd
/xdd { exch dd } bd
/Level2?
systemdict /languagelevel known
{ systemdict /languagelevel get 2 ge } { false } ifelse
def
/Level1? Level2? not def
/Level3?
systemdict /languagelevel known
{systemdict /languagelevel get 3 eq } { false } ifelse
def
/getifknown {
2 copy known { get true } { pop pop false } ifelse
} bd
/here {
currentdict exch getifknown
} bd
/isdefined? { where { pop true } { false } ifelse } bd
%%EndResource
%%BeginResource: procset pdf 6.0 1
%%Copyright: Copyright 1998-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: General operators for PDF, common to all Language Levels.
/cm { matrix astore concat } bd
/d /setdash ld
/f /fill ld
/h /closepath ld
/i {dup 0 eq {pop _defaultflatness} if setflat} bd
/j /setlinejoin ld
/J /setlinecap ld
/M /setmiterlimit ld
/n /newpath ld
/S /stroke ld
/w /setlinewidth ld
/W /clip ld
/sg /setgray ld
/initgs {
0 setgray
[] 0 d
0 j
0 J
10 M
1 w
false setSA
/_defaulttransfer load settransfer
0 i
/RelativeColorimetric ri
newpath
} bd
/int {
dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
exch pop add exch pop
} bd
/limit {
dup 2 index le { exch } if pop
dup 2 index ge { exch } if pop
} bd
/domainClip {
Domain aload pop 3 2 roll
limit
} [/Domain] bld
/applyInterpFunc {
0 1 DimOut 1 sub
{
dup C0 exch get exch
dup C1 exch get exch
3 1 roll
1 index sub
3 index
N exp mul add
exch
currentdict /Range_lo known
{
dup Range_lo exch get exch
Range_hi exch get
3 2 roll limit
}
{
pop
}
ifelse
exch
} for
pop
} [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
/encodeInput {
NumParts 1 sub
0 1 2 index
{
dup Bounds exch get
2 index gt
{ exit }
{ dup
3 index eq
{ exit }
{ pop } ifelse
} ifelse
} for
3 2 roll pop
dup Bounds exch get exch
dup 1 add Bounds exch get exch
2 mul
dup Encode exch get exch
1 add Encode exch get
int
} [/NumParts /Bounds /Encode] bld
/rangeClip {
exch dup Range_lo exch get
exch Range_hi exch get
3 2 roll
limit
} [/Range_lo /Range_hi] bld
/applyStitchFunc {
Functions exch get exec
currentdict /Range_lo known {
0 1 DimOut 1 sub {
DimOut 1 add -1 roll
rangeClip
} for
} if
} [/Functions /Range_lo /DimOut] bld
/pdf_flushfilters
{
aload length
{ dup status
1 index currentfile ne and
{ dup flushfile closefile }
{ pop }
ifelse
} repeat
} bd
/pdf_readstring
{
1 index dup length 1 sub get
exch readstring pop
exch pdf_flushfilters
} bind def
/pdf_dictOp
{
3 2 roll
10 dict copy
begin
_Filters dup length 1 sub get def
currentdict exch exec
_Filters pdf_flushfilters
end
} [/_Filters] bld
/pdf_imagemask {{imagemask} /DataSource pdf_dictOp} bd
/pdf_shfill {{sh} /DataSource pdf_dictOp} bd
/pdf_sethalftone {{sethalftone} /Thresholds pdf_dictOp} bd
/masks [ 2#10000000
2#11000000
2#11100000
2#11110000
2#11111000
2#11111100
2#11111110
2#11111111 ] def
/addNBits
{
/numBits exch def
/byte exch def
OutBitOffset numBits add 8 gt
{
byte OutBitOffset 8 sub bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutByteIndex OutByteIndex 1 add def
/bitsDoneSoFar OutBitOffset def
/OutBitOffset numBits 8 OutBitOffset sub sub def
OutBitOffset 0 gt
{
byte bitsDoneSoFar bitshift
masks numBits bitsDoneSoFar sub get and
OutBuffer OutByteIndex 3 -1 roll put
} if
}
{
byte masks numBits 1 sub get and
OutBitOffset neg bitshift
OutBuffer OutByteIndex get or
OutBuffer OutByteIndex 3 -1 roll put
/OutBitOffset OutBitOffset numBits add def
OutBitOffset 8 eq
{
/OutBitOffset 0 def
/OutByteIndex OutByteIndex 1 add def
} if
} ifelse
} bind def
/DevNNFilter
{
/InBuffer Width NumComps mul BitsPerComponent mul 7 add 8 idiv string def
AllSource InBuffer readstring pop pop
/outlen Width NewNumComps mul BitsPerComponent mul 7 add 8 idiv def
/OutBuffer outlen string def
0 1 outlen 1 sub { OutBuffer exch 0 put } for
/InByteIndex 0 def
/InBitOffset 0 def
/OutByteIndex 0 def
/OutBitOffset 0 def
/KeepArray NumComps array def
0 1 NumComps 1 sub { KeepArray exch true put } for
DevNNones { KeepArray exch false put } forall
Width {
KeepArray
{
{
/bitsLeft BitsPerComponent def
{
bitsLeft 0 le { exit } if
/bitsToDo 8 InBitOffset sub dup bitsLeft gt { pop bitsLeft } if def
InBuffer InByteIndex get
InBitOffset bitshift
bitsToDo addNBits
/bitsLeft bitsLeft bitsToDo sub def
InBitOffset bitsToDo add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
} loop
}
{
InBitOffset BitsPerComponent add
dup 8 mod /InBitOffset exch def
8 idiv InByteIndex add /InByteIndex exch def
}
ifelse
}
forall
} repeat
OutBuffer
} bd
/pdf_image
{
20 dict copy
begin
/UnusedNones where { /UnusedNones get}{false} ifelse
{
/NumComps Decode length 2 div cvi def
/OrigDecode Decode def
/NumNones DevNNones length def
/NewNumComps NumComps NumNones sub def
/Decode NewNumComps 2 mul cvi array def
/devNNindx 0 def
/decIndx 0 def
/cmpIndx 0 def
NumComps {
cmpIndx DevNNones devNNindx get eq
{
/devNNindx devNNindx 1 add dup NumNones eq {pop 0} if def
}
{
Decode decIndx OrigDecode cmpIndx 2 mul get put
Decode decIndx 1 add OrigDecode cmpIndx 2 mul 1 add get put
/decIndx decIndx 2 add def
} ifelse
/cmpIndx cmpIndx 1 add def
} repeat
_Filters dup length 1 sub get /AllSource exch def
/DataSource { DevNNFilter } def
}
{ _Filters dup length 1 sub get /DataSource exch def }
ifelse
currentdict image
_Filters pdf_flushfilters
end
} bd
/pdf_maskedImage
{
10 dict copy begin
/miDict currentdict def
/DataDict DataDict 10 dict copy def
DataDict begin
/DataSource
_Filters dup length 1 sub get
def
miDict image
_Filters pdf_flushfilters
end
miDict /InterleaveType get 3 eq
{ MaskDict /DataSource get dup type /filetype eq { closefile } { pop } ifelse }
if
end
} [/miDict /DataDict /_Filters] bld
/RadialShade {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
AA -1 eq
{ /theta 89.99 def}
{ /theta AA 1 AA dup mul sub sqrt div 1 atan def}
ifelse
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bd
/GenStrips {
40 dict begin
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bd
/currentdistillerparams where { pop currentdistillerparams /CoreDistVersion get 5000 lt}{true}ifelse
{
/PDFMark5 {cleartomark} bd
}
{
/PDFMark5 {pdfmark} bd
}ifelse
/ReadByPDFMark5
{
2 dict begin
/makerString exch def string /tmpString exch def
{
currentfile tmpString readline pop
makerString anchorsearch
{
pop pop cleartomark exit
}
{
3 copy /PUT PDFMark5 pop 2 copy (\n) /PUT PDFMark5
} ifelse
}loop
end
}bd
%%EndResource
%%BeginResource: procset pdflev2 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: PDF operators, with code specific for Level 2
/docinitialize {
PDF begin
/_defaulthalftone currenthalftone dd
/_defaultblackgeneration currentblackgeneration dd
/_defaultundercolorremoval currentundercolorremoval dd
/_defaultcolortransfer [currentcolortransfer] dd
/_defaulttransfer currenttransfer dd
end
PDFVars /docSetupDone true put
} bd
/initialize {
PDFVars /docSetupDone get {
_defaulthalftone sethalftone
/_defaultblackgeneration load setblackgeneration
/_defaultundercolorremoval load setundercolorremoval
_defaultcolortransfer aload pop setcolortransfer
} if
false setoverprint
} bd
/terminate { } bd
/c /curveto ld
/cs /setcolorspace ld
/l /lineto ld
/m /moveto ld
/q /gsave ld
/Q /grestore ld
/sc /setcolor ld
/setSA/setstrokeadjust ld
/re {
4 2 roll m
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
h
} bd
/concattransferfuncs {
[ 3 1 roll /exec load exch /exec load ] cvx
} bd
/concatandsettransfer {
/_defaulttransfer load concattransferfuncs settransfer
} bd
/concatandsetcolortransfer {
_defaultcolortransfer aload pop
8 -1 roll 5 -1 roll concattransferfuncs 7 1 roll
6 -1 roll 4 -1 roll concattransferfuncs 5 1 roll
4 -1 roll 3 -1 roll concattransferfuncs 3 1 roll
concattransferfuncs
setcolortransfer
} bd
/defineRes/defineresource ld
/undefineRes/undefineresource ld
/findRes/findresource ld
currentglobal
true systemdict /setglobal get exec
[/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource /Image]
{ /Generic /Category findresource dup length dict copy /Category defineresource pop }
forall
systemdict /setglobal get exec
/ri
{
/findcolorrendering isdefined?
{
mark exch
findcolorrendering
counttomark 2 eq
{ type /booleantype eq
{ dup type /nametype eq
{ dup /ColorRendering resourcestatus
{ pop pop
dup /DefaultColorRendering ne
{
/ColorRendering findresource
setcolorrendering
} if
} if
} if
} if
} if
cleartomark
}
{ pop
} ifelse
} bd
/knownColorants? {
pop false
} bd
/getrampcolor {
cvi
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
setcolor
} bd
/sssetbackground { aload pop setcolor } bd
%%EndResource
%%BeginResource: procset pdftext 6.0 1
%%Copyright: Copyright 1987-2001,2003 Adobe Systems Incorporated. All Rights Reserved.
%%Title: Text operators for PDF
PDF /PDFText 78 dict dup begin put
/docinitialize
{
/resourcestatus where {
pop
/CIDParams /ProcSet resourcestatus {
pop pop
false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
} if
} if
PDF begin
PDFText /_pdfDefineIdentity-H known
{ PDFText /_pdfDefineIdentity-H get exec}
if
end
} bd
/initialize {
PDFText begin
} bd
/terminate { end } bd
Level2?
{
/_safeput
{
3 -1 roll load 3 1 roll put
}
bd
}
{
/_safeput
{
2 index load dup dup length exch maxlength ge
{ dup length 5 add dict copy
3 index xdd
}
{ pop }
ifelse
3 -1 roll load 3 1 roll put
}
bd
}
ifelse
/pdf_has_composefont? systemdict /composefont known def
/CopyFont {
{
1 index /FID ne 2 index /UniqueID ne and
{ def } { pop pop } ifelse
} forall
} bd
/Type0CopyFont
{
exch
dup length dict
begin
CopyFont
[
exch
FDepVector
{
dup /FontType get 0 eq
{
1 index Type0CopyFont
/_pdfType0 exch definefont
}
{
/_pdfBaseFont exch
2 index exec
}
ifelse
exch
}
forall
pop
]
/FDepVector exch def
currentdict
end
} bd
Level2? {currentglobal true setglobal} if
/cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
Level2? {setglobal} if
/modEnc {
/_enc xdd
/_icode 0 dd
counttomark 1 sub -1 0
{
index
dup type /nametype eq
{
_enc _icode 3 -1 roll put
_icode 1 add
}
if
/_icode xdd
} for
cleartomark
_enc
} bd
/trEnc {
/_enc xdd
255 -1 0 {
exch dup -1 eq
{ pop /.notdef }
{ Encoding exch get }
ifelse
_enc 3 1 roll put
} for
pop
_enc
} bd
/TE {
/_i xdd
StandardEncoding 256 array copy modEnc
_pdfEncodings exch _i exch put
} bd
Level2?
{
/pdfPatchCStrings
{
currentdict /CharStrings known currentdict /FontType known and
{
FontType 1 eq CharStrings type /dicttype eq and
{
CharStrings /mu known CharStrings /mu1 known not and CharStrings wcheck and
{
CharStrings /mu get
type /stringtype eq
{
currentglobal
CharStrings /mu1
CharStrings /mu get
dup gcheck setglobal
dup length string copy
put
setglobal
} if
} if
} if
} if
} bd
}
{ /pdfPatchCStrings {} bd }
ifelse
/TZ
{
/_usePDFEncoding xdd
findfont
dup length 6 add dict
begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
/pdf_origFontName FontName def
/FontName exch def
currentdict /PaintType known
{ PaintType 2 eq {/PaintType 0 def} if }
if
_usePDFEncoding 0 ge
{
/Encoding _pdfEncodings _usePDFEncoding get def
pop
}
{
_usePDFEncoding -1 eq
{
counttomark 0 eq
{ pop }
{
Encoding 256 array copy
modEnc /Encoding exch def
}
ifelse
}
{
256 array
trEnc /Encoding exch def
}
ifelse
}
ifelse
pdf_EuroProcSet pdf_origFontName known
{
pdf_origFontName pdf_AddEuroGlyphProc
} if
Level2?
{
currentdict /pdf_origFontName undef
} if
FontName currentdict
end
definefont pop
}
bd
Level2?
{
/TZG
{
currentglobal true setglobal
2 index _pdfFontStatus
{
2 index findfont
false setglobal
3 index findfont
true setglobal
ne
{
2 index findfont dup rcheck
{
dup length dict begin
{
1 index /FID ne { def } { pop pop } ifelse
} forall
pdfPatchCStrings
currentdict end
}
if
3 index exch definefont pop
}
if
} if
setglobal
TZ
} bd
}
{
/TZG {TZ} bd
} ifelse
Level2?
{
currentglobal false setglobal
userdict /pdftext_data 5 dict put
pdftext_data
begin
/saveStacks
{
pdftext_data
begin
/vmmode currentglobal def
false setglobal
count array astore /os exch def
end
countdictstack array dictstack pdftext_data exch /ds exch put
cleardictstack pdftext_data /dscount countdictstack put
pdftext_data /vmmode get setglobal
} bind def
/restoreStacks
{
pdftext_data /vmmode currentglobal put false setglobal
clear cleardictstack
pdftext_data /ds get dup
pdftext_data /dscount get 1 2 index length 1 sub
{ get begin dup } for
pop pop
pdftext_data /os get aload pop
pdftext_data /vmmode get setglobal
} bind def
/testForClonePrinterBug
{
currentglobal true setglobal
/undefinedCategory /Generic /Category findresource
dup length dict copy /Category defineresource pop
setglobal
pdftext_data /saveStacks get exec
pdftext_data /vmmode currentglobal put false setglobal
/undefined /undefinedCategory { resourcestatus } stopped
pdftext_data exch /bugFound exch put
pdftext_data /vmmode get setglobal
pdftext_data /restoreStacks get exec
pdftext_data /bugFound get
} bind def
end
setglobal
/pdf_resourcestatus
pdftext_data /testForClonePrinterBug get exec
{
{
pdftext_data /saveStacks get exec
pdftext_data /os get dup dup length 1 sub
dup 1 sub dup 0 lt { pop 0 } if
exch 1 exch { get exch dup } for
pop pop
{ resourcestatus }
stopped
{
clear cleardictstack pdftext_data /restoreStacks get exec
{ pop pop } stopped pop false
}
{
count array astore pdftext_data exch /results exch put
pdftext_data /restoreStacks get exec pop pop
pdftext_data /results get aload pop
}
ifelse
}
}
{ { resourcestatus } }
ifelse
bd
}
if
Level2?
{
/_pdfUndefineResource
{
currentglobal 3 1 roll
_pdf_FontDirectory 2 index 2 copy known
{undef}
{pop pop}
ifelse
1 index (pdf) exch _pdfConcatNames 1 index
1 index 1 _pdfConcatNames 1 index
5 index 1 _pdfConcatNames 1 index
4
{
2 copy pdf_resourcestatus
{
pop 2 lt
{2 copy findresource gcheck setglobal undefineresource}
{pop pop}
ifelse
}
{ pop pop}
ifelse
} repeat
setglobal
} bd
}
{
/_pdfUndefineResource { pop pop} bd
}
ifelse
Level2?
{
/_pdfFontStatus
{
currentglobal exch
/Font pdf_resourcestatus
{pop pop true}
{false}
ifelse
exch setglobal
} bd
}
{
/_pdfFontStatusString 50 string def
_pdfFontStatusString 0 (fonts/) putinterval
/_pdfFontStatus
{
FontDirectory 1 index known
{ pop true }
{
_pdfFontStatusString 6 42 getinterval
cvs length 6 add
_pdfFontStatusString exch 0 exch getinterval
{ status } stopped
{pop false}
{
{ pop pop pop pop true}
{ false }
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
Level2?
{
/_pdfCIDFontStatus
{
/CIDFont /Category pdf_resourcestatus
{
pop pop
/CIDFont pdf_resourcestatus
{pop pop true}
{false}
ifelse
}
{ pop false }
ifelse
} bd
}
if
/_pdfString100 100 string def
/_pdfComposeFontName
{
dup length 1 eq
{
0 get
1 index
type /nametype eq
{
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
2 index exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
exch pop
true
}
{
pop pop
false
}
ifelse
}
{
false
}
ifelse
dup {exch cvn exch} if
} bd
/_pdfConcatNames
{
exch
_pdfString100 cvs
length dup dup _pdfString100 exch (-) putinterval
_pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
3 -1 roll exch cvs length
add 1 add _pdfString100 exch 0 exch getinterval
cvn
} bind def
/_pdfTextTempString 50 string def
/_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
/_pdf_CheckCIDSystemInfo
{
1 index _pdfTextTempString cvs
(Identity) anchorsearch
{
pop pop pop pop true
}
{
false
_pdfRegOrderingArray
{
2 index exch
anchorsearch
{ pop pop pop true exit}
{ pop }
ifelse
}
forall
exch pop
exch /CIDFont findresource
/CIDSystemInfo get
3 -1 roll /CMap findresource
/CIDSystemInfo get
exch
3 -1 roll
{
2 copy
/Supplement get
exch
dup type /dicttype eq
{/Supplement get}
{pop 0 }
ifelse
ge
}
{ true }
ifelse
{
dup /Registry get
2 index /Registry get eq
{
/Ordering get
exch /Ordering get
dup type /arraytype eq
{
1 index type /arraytype eq
{
true
1 index length 1 sub -1 0
{
dup 2 index exch get exch 3 index exch get ne
{ pop false exit}
if
} for
exch pop exch pop
}
{ pop pop false }
ifelse
}
{
eq
}
ifelse
}
{ pop pop false }
ifelse
}
{ pop pop false }
ifelse
}
ifelse
} bind def
pdf_has_composefont?
{
/_pdfComposeFont
{
2 copy _pdfComposeFontName not
{
2 index
}
if
(pdf) exch _pdfConcatNames
dup _pdfFontStatus
{ dup findfont 5 2 roll pop pop pop true}
{
4 1 roll
1 index /CMap pdf_resourcestatus
{
pop pop
true
}
{false}
ifelse
1 index true exch
{
_pdfCIDFontStatus not
{pop false exit}
if
}
forall
and
{
1 index 1 index 0 get _pdf_CheckCIDSystemInfo
{
3 -1 roll pop
2 index 3 1 roll
composefont true
}
{
pop pop exch pop false
}
ifelse
}
{
_pdfComposeFontName
{
dup _pdfFontStatus
{
exch pop
1 index exch
findfont definefont true
}
{
pop exch pop
false
}
ifelse
}
{
exch pop
false
}
ifelse
}
ifelse
{ true }
{
dup _pdfFontStatus
{ dup findfont true }
{ pop false }
ifelse
}
ifelse
}
ifelse
} bd
}
{
/_pdfComposeFont
{
_pdfComposeFontName not
{
dup
}
if
dup
_pdfFontStatus
{exch pop dup findfont true}
{
1 index
dup type /nametype eq
{pop}
{cvn}
ifelse
eq
{pop false}
{
dup _pdfFontStatus
{dup findfont true}
{pop false}
ifelse
}
ifelse
}
ifelse
} bd
}
ifelse
/_pdfStyleDicts 4 dict dup begin
/Adobe-Japan1 4 dict dup begin
Level2?
{
/Serif
/HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMin-W3}
{
/HeiseiMin-W3 _pdfCIDFontStatus
{/HeiseiMin-W3}
{/Ryumin-Light}
ifelse
}
ifelse
def
/SansSerif
/HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
{/HeiseiKakuGo-W5}
{
/HeiseiKakuGo-W5 _pdfCIDFontStatus
{/HeiseiKakuGo-W5}
{/GothicBBB-Medium}
ifelse
}
ifelse
def
/HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
{/HeiseiMaruGo-W4}
{
/HeiseiMaruGo-W4 _pdfCIDFontStatus
{/HeiseiMaruGo-W4}
{
/Jun101-Light-RKSJ-H _pdfFontStatus
{ /Jun101-Light }
{ SansSerif }
ifelse
}
ifelse
}
ifelse
/RoundSansSerif exch def
/Default Serif def
}
{
/Serif /Ryumin-Light def
/SansSerif /GothicBBB-Medium def
{
(fonts/Jun101-Light-83pv-RKSJ-H) status
}stopped
{pop}{
{ pop pop pop pop /Jun101-Light }
{ SansSerif }
ifelse
/RoundSansSerif exch def
}ifelse
/Default Serif def
}
ifelse
end
def
/Adobe-Korea1 4 dict dup begin
/Serif /HYSMyeongJo-Medium def
/SansSerif /HYGoThic-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-GB1 4 dict dup begin
/Serif /STSong-Light def
/SansSerif /STHeiti-Regular def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
/Adobe-CNS1 4 dict dup begin
/Serif /MKai-Medium def
/SansSerif /MHei-Medium def
/RoundSansSerif SansSerif def
/Default Serif def
end
def
end
def
/TZzero
{
/_wmode xdd
/_styleArr xdd
/_regOrdering xdd
3 copy
_pdfComposeFont
{
5 2 roll pop pop pop
}
{
[
0 1 _styleArr length 1 sub
{
_styleArr exch get
_pdfStyleDicts _regOrdering 2 copy known
{
get
exch 2 copy known not
{ pop /Default }
if
get
}
{
pop pop pop /Unknown
}
ifelse
}
for
]
exch pop
2 index 3 1 roll
_pdfComposeFont
{3 -1 roll pop}
{
findfont dup /FontName get exch
}
ifelse
}
ifelse
dup /WMode 2 copy known
{ get _wmode ne }
{ pop pop _wmode 1 eq}
ifelse
{
exch _wmode _pdfConcatNames
dup _pdfFontStatus
{ exch pop dup findfont false}
{ exch true }
ifelse
}
{
dup /FontType get 0 ne
}
ifelse
{
dup /FontType get 3 eq _wmode 1 eq and
{
_pdfVerticalRomanT3Font dup length 10 add dict copy
begin
/_basefont exch
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
if
def
FontName
currentdict
end
definefont
def
/Encoding _basefont /Encoding get def
/_fauxfont true def
}
{
dup length 3 add dict
begin
{1 index /FID ne {def}{pop pop} ifelse }
forall
FontType 0 ne
{
/Encoding Encoding dup length array copy
dup 16#27 /quotesingle put
dup 16#60 /grave put
_regOrdering /Adobe-Japan1 eq
{dup 16#5c /yen put}
if
def
/_fauxfont true def
} if
} ifelse
/WMode _wmode def
dup dup /FontName exch def
currentdict
end
definefont pop
}
{
pop
}
ifelse
/_pdf_FontDirectory 3 1 roll _safeput
}
bd
Level2?
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
selectfont
} bd
}
{
/Tf {
_pdf_FontDirectory 2 index 2 copy known
{get exch 3 -1 roll pop}
{pop pop}
ifelse
exch findfont exch
dup type /arraytype eq
{makefont}
{scalefont}
ifelse
setfont
} bd
}
ifelse
/cshow where
{
pop /pdf_cshow /cshow load dd
/pdf_remove2 {pop pop} dd
}
{
/pdf_cshow {exch forall} dd
/pdf_remove2 {} dd
} ifelse
/pdf_xshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_yshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
_pdf_x _pdf_y moveto
0 exch
rmoveto
}
ifelse
_pdf_i 1 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdf_xyshow
{
/_pdf_na xdd
/_pdf_i 0 dd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 /_pdf_showproc load exec
{_pdf_na _pdf_i get} stopped
{ pop pop }
{
1 pop
{_pdf_na _pdf_i 1 add get} stopped
{ pop pop pop}
{
_pdf_x _pdf_y moveto
rmoveto
}
ifelse
}
ifelse
_pdf_i 2 add /_pdf_i xdd
currentpoint
/_pdf_y xdd
/_pdf_x xdd
}
exch
pdf_cshow
} bd
/pdfl1xs {/_pdf_showproc /show load dd pdf_xshow} bd
/pdfl1ys {/_pdf_showproc /show load dd pdf_yshow} bd
/pdfl1xys {/_pdf_showproc /show load dd pdf_xyshow} bd
Level2? _ColorSep5044? not and
{
/pdfxs {{xshow} stopped {pdfl1xs} if} bd
/pdfys {{yshow} stopped {pdfl1ys} if} bd
/pdfxys {{xyshow} stopped {pdfl1xys} if} bd
}
{
/pdfxs /pdfl1xs load dd
/pdfys /pdfl1ys load dd
/pdfxys /pdfl1xys load dd
} ifelse
/pdf_charpath {false charpath} bd
/pdf_xcharpath {/_pdf_showproc /pdf_charpath load dd pdf_xshow} bd
/pdf_ycharpath {/_pdf_showproc /pdf_charpath load dd pdf_yshow} bd
/pdf_xycharpath {/_pdf_showproc /pdf_charpath load dd pdf_xyshow} bd
/pdf_strokepath
{
{
pdf_remove2
_pdf_str1 exch 0 exch put
_pdf_str1 false charpath
currentpoint S moveto
} bind
exch pdf_cshow
} bd
/pdf_xstrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xshow} bd
/pdf_ystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_yshow} bd
/pdf_xystrokepath {/_pdf_showproc {pdf_charpath S} dd pdf_xyshow} bd
Level2? {currentglobal true setglobal} if
/d0/setcharwidth ld
/nND {{/.notdef} repeat} bd
/T3Defs {
/BuildChar
{
1 index /Encoding get exch get
1 index /BuildGlyph get exec
}
def
/BuildGlyph {
exch begin
GlyphProcs exch get exec
end
} def
/_pdfT3Font true def
} bd
/_pdfBoldRomanWidthProc
{
stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
0 0
} bd
/_pdfType0WidthProc
{
dup stringwidth 0 0 moveto
2 index true charpath pathbbox
0 -1
7 index 2 div .88
setcachedevice2
pop
0 0
} bd
/_pdfType0WMode1WidthProc
{
dup stringwidth
pop 2 div neg -0.88
2 copy
moveto
0 -1
5 -1 roll true charpath pathbbox
setcachedevice
} bd
/_pdfBoldBaseFont
11 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/Encoding cHexEncoding def
/_setwidthProc /_pdfBoldRomanWidthProc load def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
pdf_has_composefont?
{
/_pdfBoldBaseCIDFont
11 dict begin
/CIDFontType 1 def
/CIDFontName /_pdfBoldBaseCIDFont def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_setwidthProc /_pdfType0WidthProc load def
/_bcstr2 2 string def
/BuildGlyph
{
exch begin
_basefont setfont
_bcstr2 1 2 index 256 mod put
_bcstr2 0 3 -1 roll 256 idiv put
_bcstr2 dup _setwidthProc
3 copy
moveto
show
_basefonto setfont
moveto
show
end
}bd
currentdict
end
def
/_pdfDefineIdentity-H
{
/Identity-H /CMap PDFText /pdf_resourcestatus get exec
{
pop pop
}
{
/CIDInit/ProcSet findresource begin 12 dict begin
begincmap
/CIDSystemInfo
3 dict begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
currentdict
end
def
/CMapName /Identity-H def
/CMapVersion 1 def
/CMapType 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
CMapName currentdict/CMap defineresource pop
end
end
} ifelse
} def
} if
/_pdfVerticalRomanT3Font
10 dict begin
/FontType 3 def
/FontMatrix[1 0 0 1 0 0]def
/FontBBox[0 0 1 1]def
/_bcstr1 1 string def
/BuildChar
{
exch begin
_basefont setfont
_bcstr1 dup 0 4 -1 roll put
dup
_pdfType0WidthProc
moveto
show
end
}bd
currentdict
end
def
Level2? {setglobal} if
/MakeBoldFont
{
dup /ct_SyntheticBold known
{
dup length 3 add dict begin
CopyFont
/ct_StrokeWidth .03 0 FontMatrix idtransform pop def
/ct_SyntheticBold true def
currentdict
end
definefont
}
{
dup dup length 3 add dict
begin
CopyFont
/PaintType 2 def
/StrokeWidth .03 0 FontMatrix idtransform pop def
/dummybold currentdict
end
definefont
dup /FontType get dup 9 ge exch 11 le and
{
_pdfBoldBaseCIDFont
dup length 3 add dict copy begin
dup /CIDSystemInfo get /CIDSystemInfo exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefont exch def
/_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
/_basefonto exch def
currentdict
end
/CIDFont defineresource
}
{
_pdfBoldBaseFont
dup length 3 add dict copy begin
/_basefont exch def
/_basefonto exch def
currentdict
end
definefont
}
ifelse
}
ifelse
} bd
/MakeBold {
1 index
_pdf_FontDirectory 2 index 2 copy known
{get}
{exch pop}
ifelse
findfont
dup
/FontType get 0 eq
{
dup /WMode known {dup /WMode get 1 eq }{false} ifelse
version length 4 ge
and
{version 0 4 getinterval cvi 2015 ge }
{true}
ifelse
{/_pdfType0WidthProc}
{/_pdfType0WMode1WidthProc}
ifelse
_pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
{MakeBoldFont} Type0CopyFont definefont
}
{
dup /_fauxfont known not 1 index /SubstMaster known not and
{
_pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
MakeBoldFont
}
{
2 index 2 index eq
{ exch pop }
{
dup length dict begin
CopyFont
currentdict
end
definefont
}
ifelse
}
ifelse
}
ifelse
pop pop
dup /dummybold ne
{/_pdf_FontDirectory exch dup _safeput }
{ pop }
ifelse
}bd
/MakeItalic {
_pdf_FontDirectory exch 2 copy known
{get}
{exch pop}
ifelse
dup findfont
dup /FontInfo 2 copy known
{
get
/ItalicAngle 2 copy known
{get 0 eq }
{ pop pop true}
ifelse
}
{ pop pop true}
ifelse
{
exch pop
dup /FontType get 0 eq Level2? not and
{ dup /FMapType get 6 eq }
{ false }
ifelse
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1Type0 }
{ _italMtxType0 }
ifelse
}
{ pop pop _italMtxType0 }
ifelse
}
{
dup /WMode 2 copy known
{
get 1 eq
{ _italMtx_WMode1 }
{ _italMtx }
ifelse
}
{ pop pop _italMtx }
ifelse
}
ifelse
makefont
dup /FontType get 42 eq Level2? not or
{
dup length dict begin
CopyFont
currentdict
end
}
if
1 index exch
definefont pop
/_pdf_FontDirectory exch dup _safeput
}
{
pop
2 copy ne
{
/_pdf_FontDirectory 3 1 roll _safeput
}
{ pop pop }
ifelse
}
ifelse
}bd
/MakeBoldItalic {
/dummybold exch
MakeBold
/dummybold
MakeItalic
}bd
Level2?
{
/pdf_CopyDict
{1 index length add dict copy}
def
}
{
/pdf_CopyDict
{
1 index length add dict
1 index wcheck
{ copy }
{ begin
{def} forall
currentdict
end
}
ifelse
}
def
}
ifelse
/pdf_AddEuroGlyphProc
{
currentdict /CharStrings known
{
CharStrings /Euro known not
{
dup
/CharStrings
CharStrings 1 pdf_CopyDict
begin
/Euro pdf_EuroProcSet 4 -1 roll get def
currentdict
end
def
/pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
/pdf_PathOps /pdf_PathOps load def
/Symbol eq Encoding 160 get /.notdef eq and
{
/Encoding Encoding dup length array copy
dup 160 /Euro put def
}
if
}
{ pop
}
ifelse
}
{ pop
}
ifelse
}
def
Level2? {currentglobal true setglobal} if
/pdf_PathOps 4 dict dup begin
/m {moveto} def
/l {lineto} def
/c {curveto} def
/cp {closepath} def
end
def
/pdf_PSBuildGlyph
{
gsave
8 -1 roll pop
7 1 roll
currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
dup 9 1 roll
{
currentdict /StrokeWidth 2 copy known
{
get 2 div
5 1 roll
4 -1 roll 4 index sub
4 1 roll
3 -1 roll 4 index sub
3 1 roll
exch 4 index add exch
4 index add
5 -1 roll pop
}
{
pop pop
}
ifelse
}
if
setcachedevice
pdf_PathOps begin
exec
end
{
currentdict /StrokeWidth 2 copy known
{ get }
{ pop pop 0 }
ifelse
setlinewidth stroke
}
{
fill
}
ifelse
grestore
} def
/pdf_EuroProcSet 13 dict def
pdf_EuroProcSet
begin
/Courier-Bold
{
600 0 6 -12 585 612
{
385 274 m
180 274 l
179 283 179 293 179 303 c
179 310 179 316 180 323 c
398 323 l
423 404 l
197 404 l
219 477 273 520 357 520 c
409 520 466 490 487 454 c
487 389 l
579 389 l
579 612 l
487 612 l
487 560 l
449 595 394 612 349 612 c
222 612 130 529 98 404 c
31 404 l
6 323 l
86 323 l
86 304 l
86 294 86 284 87 274 c
31 274 l
6 193 l
99 193 l
129 77 211 -12 359 -12 c
398 -12 509 8 585 77 c
529 145 l
497 123 436 80 356 80 c
285 80 227 122 198 193 c
360 193 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-BoldOblique /Courier-Bold load def
/Courier
{
600 0 17 -12 578 584
{
17 204 m
97 204 l
126 81 214 -12 361 -12 c
440 -12 517 17 578 62 c
554 109 l
501 70 434 43 366 43 c
266 43 184 101 154 204 c
380 204 l
400 259 l
144 259 l
144 270 143 281 143 292 c
143 299 143 307 144 314 c
418 314 l
438 369 l
153 369 l
177 464 249 529 345 529 c
415 529 484 503 522 463 c
522 391 l
576 391 l
576 584 l
522 584 l
522 531 l
473 566 420 584 348 584 c
216 584 122 490 95 369 c
37 369 l
17 314 l
87 314 l
87 297 l
87 284 88 272 89 259 c
37 259 l
cp
600 0 m
}
pdf_PSBuildGlyph
} def
/Courier-Oblique /Courier load def
/Helvetica
{
556 0 24 -19 541 703
{
541 628 m
510 669 442 703 354 703 c
201 703 117 607 101 444 c
50 444 l
25 372 l
97 372 l
97 301 l
49 301 l
24 229 l
103 229 l
124 67 209 -19 350 -19 c
435 -19 501 25 509 32 c
509 131 l
492 105 417 60 343 60 c
267 60 204 127 197 229 c
406 229 l
430 301 l
191 301 l
191 372 l
455 372 l
479 444 l
194 444 l
201 531 245 624 348 624 c
433 624 484 583 509 534 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-Oblique /Helvetica load def
/Helvetica-Bold
{
556 0 12 -19 563 710
{
563 621 m
537 659 463 710 363 710 c
216 710 125 620 101 462 c
51 462 l
12 367 l
92 367 l
92 346 l
92 337 93 328 93 319 c
52 319 l
12 224 l
102 224 l
131 58 228 -19 363 -19 c
417 -19 471 -12 517 18 c
517 146 l
481 115 426 93 363 93 c
283 93 254 166 246 224 c
398 224 l
438 319 l
236 319 l
236 367 l
457 367 l
497 462 l
244 462 l
259 552 298 598 363 598 c
425 598 464 570 486 547 c
507 526 513 517 517 509 c
cp
556 0 m
}
pdf_PSBuildGlyph
} def
/Helvetica-BoldOblique /Helvetica-Bold load def
/Symbol
{
750 0 20 -12 714 685
{
714 581 m
650 645 560 685 465 685 c
304 685 165 580 128 432 c
50 432 l
20 369 l
116 369 l
115 356 115 347 115 337 c
115 328 115 319 116 306 c
50 306 l
20 243 l
128 243 l
165 97 300 -12 465 -12 c
560 -12 635 25 685 65 c
685 155 l
633 91 551 51 465 51 c
340 51 238 131 199 243 c
555 243 l
585 306 l
184 306 l
183 317 182 326 182 336 c
182 346 183 356 184 369 c
614 369 l 644 432 l
199 432 l
233 540 340 622 465 622 c
555 622 636 580 685 520 c
cp
750 0 m
}
pdf_PSBuildGlyph
} def
/Times-Bold
{
500 0 16 -14 478 700
{
367 308 m
224 308 l
224 368 l
375 368 l
380 414 l
225 414 l
230 589 257 653 315 653 c
402 653 431 521 444 457 c
473 457 l
473 698 l
444 697 l
441 679 437 662 418 662 c
393 662 365 700 310 700 c
211 700 97 597 73 414 c
21 414 l
16 368 l
69 368 l
69 359 68 350 68 341 c
68 330 68 319 69 308 c
21 308 l
16 262 l
73 262 l
91 119 161 -14 301 -14 c
380 -14 443 50 478 116 c
448 136 l
415 84 382 40 323 40 c
262 40 231 77 225 262 c
362 262 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-BoldItalic
{
500 0 9 -20 542 686
{
542 686 m
518 686 l
513 673 507 660 495 660 c
475 660 457 683 384 683 c
285 683 170 584 122 430 c
58 430 l
34 369 l
105 369 l
101 354 92 328 90 312 c
34 312 l
9 251 l
86 251 l
85 238 84 223 84 207 c
84 112 117 -14 272 -14 c
326 -14 349 9 381 9 c
393 9 393 -10 394 -20 c
420 -20 l
461 148 l
429 148 l
416 109 362 15 292 15 c
227 15 197 55 197 128 c
197 162 204 203 216 251 c
378 251 l
402 312 l
227 312 l
229 325 236 356 241 369 c
425 369 l
450 430 l
255 430 l
257 435 264 458 274 488 c
298 561 337 654 394 654 c
437 654 484 621 484 530 c
484 516 l
516 516 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Italic
{
500 0 23 -10 595 692
{
399 317 m
196 317 l
199 340 203 363 209 386 c
429 386 l
444 424 l
219 424 l
246 514 307 648 418 648 c
448 648 471 638 492 616 c
529 576 524 529 527 479 c
549 475 l
595 687 l
570 687 l
562 674 558 664 542 664 c
518 664 474 692 423 692 c
275 692 162 551 116 424 c
67 424 l
53 386 l
104 386 l
98 363 93 340 90 317 c
37 317 l
23 279 l
86 279 l
85 266 85 253 85 240 c
85 118 137 -10 277 -10 c
370 -10 436 58 488 128 c
466 149 l
424 101 375 48 307 48 c
212 48 190 160 190 234 c
190 249 191 264 192 279 c
384 279 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
/Times-Roman
{
500 0 10 -12 484 692
{
347 298 m
171 298 l
170 310 170 322 170 335 c
170 362 l
362 362 l
374 403 l
172 403 l
184 580 244 642 308 642 c
380 642 434 574 457 457 c
481 462 l
474 691 l
449 691 l
433 670 429 657 410 657 c
394 657 360 692 299 692 c
204 692 94 604 73 403 c
22 403 l
10 362 l
70 362 l
69 352 69 341 69 330 c
69 319 69 308 70 298 c
22 298 l
10 257 l
73 257 l
97 57 216 -12 295 -12 c
364 -12 427 25 484 123 c
458 142 l
425 101 384 37 316 37 c
256 37 189 84 173 257 c
335 257 l
cp
500 0 m
}
pdf_PSBuildGlyph
} def
end
Level2? {setglobal} if
currentdict readonly pop end
%%EndResource
PDFText begin
[39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
/hungarumlaut/ogonek/caron
0 TE
[1/dotlessi/caron 39/quotesingle 96/grave 
127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
/quotedblright/bullet/endash/emdash/tilde/trademark/scaron
/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
/ucircumflex/udieresis/yacute/thorn/ydieresis
1 TE
end
%%BeginResource: procset pdfasc.prc 6.0 1
%%Copyright: Copyright 1992-2003 Adobe Systems Incorporated. All Rights Reserved.
/ASR {
13 dict begin
/mirV? exch def
/mirH? exch def
/center? exch def
/autorotate? exch def
/angle exch def
/shrink exch def
/Pury exch def
/Purx exch def
/Plly exch def
/Pllx exch def
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury 0 eq Durx 0 eq and Dlly 0 eq Dllx 0 eq and and
{ shrink 0 gt { GClipBBox } { GPageBBox } ifelse }
{ ITransDBBox }
ifelse
/PHt Pury Plly sub def
/PW Purx Pllx sub def
/DHt Dury Dlly sub def
/DW Durx Dllx sub def
angle 90 eq angle 270 eq or
{
PHt /PHt PW def /PW exch def
} if
autorotate? PHt PW ne and DHt DW ne and
{
DHt DW ge
PHt PW ge
ne
{ /angle angle 90 add def
PHt /PHt PW def /PW exch def
}
if
} if
angle 0 ne
{
/angle angle 360 mod def
angle rotate
angle 90 eq
{ 0 DW neg translate }
if
angle 180 eq
{ DW neg DHt neg translate }
if
angle 270 eq
{ DHt neg 0 translate }
if
} if
center?
{
ITransBBox
Durx Dllx add 2 div Dury Dlly add 2 div
Purx Pllx add -2 div Pury Plly add -2 div
3 -1 roll add exch
3 -1 roll add exch
translate
}
{
ITransBBox
angle 0 eq
{Dllx Pllx sub Dury Pury sub}
if
angle 90 eq
{Durx Purx sub Dury Pury sub}
if
angle 180 eq
{Durx Purx sub Dlly Plly sub}
if
angle 270 eq
{Dllx Pllx sub Dlly Plly sub}
if
translate
}
ifelse
mirH? mirV? or
{
ITransBBox
mirH?
{
-1 1 scale
Durx Dllx add neg 0 translate
} if
mirV?
{
1 -1 scale
0 Dury Dlly add neg translate
} if
} if
shrink 0 ne
{
ITransBBox
Dury Dlly sub Pury Plly sub div
Durx Dllx sub Purx Pllx sub div
2 copy gt { exch } if pop
shrink 1 eq
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{
shrink 2 eq 1 index 1.0 lt and
{
Durx Dllx add 2 div Dury Dlly add 2 div translate
dup scale
Purx Pllx add -2 div Pury Plly add -2 div translate
}
{ pop }
ifelse
}
ifelse
} if
end
} [/autorotate? /shrink? /mirH? /mirV? /angle /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly /PW /PHt /DW /DHt
/Devurx /Devury /Devllx /Devlly /pdfHt /pdfW]
bld
/GClipBBox
{
gsave newpath clippath pathbbox newpath grestore
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
ITransDBBox
} [/Durx /Dury /Dllx /Dlly]
bld
/GPageBBox
{
{
currentpagedevice /PageSize get aload pop
/Devury exch def /Devurx exch def
/Devllx 0 def /Devlly 0 def
ITransBBox
}
stopped
{ GClipBBox }
if
} [/Devurx /Devury /Devllx /Devlly ]
bld
/ITransDBBox
{
Durx Dury transform matrix defaultmatrix itransform
/Devury exch def
/Devurx exch def
Dllx Dlly transform matrix defaultmatrix itransform
/Devlly exch def
/Devllx exch def
Devury Devlly lt {/Devlly Devury /Devury Devlly def def} if
Devurx Devllx lt {/Devllx Devurx /Devurx Devllx def def} if
} [/Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
/ITransBBox
{
/um matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix def
Devllx Devlly um itransform
Devurx Devury um itransform
/Dury exch def
/Durx exch def
/Dlly exch def
/Dllx exch def
Dury Dlly lt {/Dlly Dury /Dury Dlly def def} if
Durx Dllx lt {/Dllx Durx /Durx Dllx def def} if
} [ /um /Durx /Dury /Dllx /Dlly /Devurx /Devury /Devllx /Devlly ]
bld
%%EndResource
currentdict readonly pop
end end
/currentpacking where {pop setpacking}if
PDFVars/DocInitAll{[PDF PDFText]{/docinitialize get exec}forall }put
+PDFVars/InitAll{[PDF PDFText]{/initialize get exec}forall initgs}put
+PDFVars/TermAll{[PDFText PDF]{/terminate get exec}forall}put
+PDFVars begin PDF begin
PDFVars/DocInitAll get exec PDFVars/InitAll get exec

[/NamespacePush PDFMark5
[/_objdef {Metadata_In_EPS} /type /stream /OBJ PDFMark5
[{Metadata_In_EPS} 3385 (% &end XMP packet& %) ReadByPDFMark5
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
+   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+      <rdf:Description rdf:about=""
+            xmlns:xap="http://ns.adobe.com/xap/1.0/">
+         <xap:CreateDate>2006-10-26T22:12:35+02:00</xap:CreateDate>
+         <xap:ModifyDate>2006-10-26T22:12:35+02:00</xap:ModifyDate>
+         <xap:MetadataDate>2006-10-26T22:12:35+02:00</xap:MetadataDate>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
+         <xapMM:DocumentID>uuid:69FDC66D66D111DB80A0F3E4B52BCBBC</xapMM:DocumentID>
+         <xapMM:InstanceID>uuid:69FDC66D66D111DB80A0F3E4B52BCBBC</xapMM:InstanceID>
+         <xapMM:DerivedFrom rdf:parseType="Resource">
+         </xapMM:DerivedFrom>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">
+         <pdfx:PTEX.Fullbanner>This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4</pdfx:PTEX.Fullbanner>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:dc="http://purl.org/dc/elements/1.1/">
+         <dc:format>application/eps</dc:format>
+      </rdf:Description>
+   </rdf:RDF>
+</x:xmpmeta>
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                           
+<?xpacket end="w"?>

% &end XMP packet& %

[{Metadata_In_EPS} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT PDFMark5
[/Document 1 dict begin /Metadata {Metadata_In_EPS} def currentdict end /BDC PDFMark5
[/NamespacePop PDFMark5

PDFVars/TermAll get exec end end
 PDF /docinitialize get exec
+
%%EndSetup
PDFVars begin PDF begin PDFVars/InitAll get exec
0.0 0.0 345.0 326.0 rectclip
q
0.0 0.0 m
345.0 0.0 l
345.0 326.0 l
0.0 326.0 l
h
W
n
q
1.0 0.0 0.0 1.0 -12.0 -26.0 cm
q
12.0 26.0 345.0 326.0 re
W
n
q
1.0 0.0 0.0 -1.0 0.0 0.0 cm
n
12.2451 -26.7217 m
12.2451 -26.7217 356.245 -26.7217 356.245 -26.7217 c
356.245 -26.7217 356.245 -351.722 356.245 -351.722 c
356.245 -351.722 12.2451 -351.722 12.2451 -351.722 c
12.2451 -351.722 12.2451 -26.7217 12.2451 -26.7217 c
h
W
n
q
n
0.0 0.0 m
0.0 0.0 368.5 0.0 368.5 0.0 c
368.5 0.0 368.5 -368.5 368.5 -368.5 c
368.5 -368.5 0.0 -368.5 0.0 -368.5 c
0.0 -368.5 0.0 0.0 0.0 0.0 c
h
W
n
0.216 w
2.6131 M
true setSA
n
341.75 -142.05 m
341.75 -142.05 26.7539 -226.453 26.7539 -226.453 c
26.7529 -142.05 m
26.7529 -142.05 341.751 -226.453 341.751 -226.453 c
184.252 -26.7529 m
184.252 -26.7529 184.252 -341.75 184.252 -341.75 c
[/DeviceRGB] cs 0.0 0.0 0.0 sc
S
n
183.908 -274.625 m
233.479 -274.625 273.907 -234.196 273.907 -184.626 c
273.907 -135.056 233.479 -94.6279 183.908 -94.6279 c
134.339 -94.6279 93.9092 -135.056 93.9092 -184.626 c
93.9092 -234.196 134.339 -274.625 183.908 -274.625 c
183.908 -274.625 183.908 -274.625 183.908 -274.625 c
h
1.0 1.0 1.0 sc
eofill
n
184.252 -274.25 m
233.822 -274.25 274.251 -233.821 274.251 -184.251 c
274.251 -134.681 233.822 -94.2529 184.252 -94.2529 c
134.683 -94.2529 94.2529 -134.681 94.2529 -184.251 c
94.2529 -233.821 134.683 -274.25 184.252 -274.25 c
184.252 -274.25 184.252 -274.25 184.252 -274.25 c
h
0.0 0.0 0.0 sc
S
0.5 w
n
203.322 -211.889 m
198.992 -223.866 191.714 -231.42 184.252 -231.42 c
S
0.216 w
[4.536 4.32001 ] 0.0 d
n
184.252 -94.2529 m
159.467 -94.2529 139.253 -134.681 139.253 -184.251 c
139.253 -233.821 159.467 -274.25 184.252 -274.25 c
S
[] 0.0 d
n
274.251 -184.251 m
274.251 -171.858 233.822 -161.751 184.252 -161.751 c
134.683 -161.751 94.2529 -171.858 94.2529 -184.251 c
S
[4.536 4.32001 ] 0.0 d
n
245.714 -167.862 m
245.714 -167.862 97.3701 -207.534 97.3701 -207.534 c
274.251 -184.251 m
274.251 -196.643 233.822 -206.751 184.252 -206.751 c
134.683 -206.751 94.2529 -196.643 94.2529 -184.251 c
S
n
341.75 -142.05 m
341.75 -142.05 334.991 -140.667 334.991 -140.667 c
334.991 -140.667 336.588 -146.628 336.588 -146.628 c
336.588 -146.628 341.75 -142.05 341.75 -142.05 c
341.75 -142.05 341.75 -142.05 341.75 -142.05 c
h
eofill
n
122.901 -167.8 m
122.901 -167.8 271.245 -207.388 271.245 -207.388 c
S
n
26.7539 -142.05 m
26.7539 -142.05 31.916 -146.626 31.916 -146.626 c
31.916 -146.626 33.5137 -140.665 33.5137 -140.665 c
33.5137 -140.665 26.7539 -142.05 26.7539 -142.05 c
26.7539 -142.05 26.7539 -142.05 26.7539 -142.05 c
h
eofill
0.5 w
[] 0.0 d
n
184.252 -184.251 m
184.252 -184.251 220.78 -236.75 220.78 -236.75 c
S
n
219.2 -237.85 m
219.806 -238.72 221.008 -238.938 221.88 -238.332 c
222.752 -237.724 222.966 -236.521 222.361 -235.651 c
221.756 -234.781 220.553 -234.563 219.681 -235.17 c
218.809 -235.777 218.595 -236.98 219.2 -237.85 c
219.2 -237.85 219.2 -237.85 219.2 -237.85 c
h
eofill
n
207.463 -173.769 m
200.537 -172.833 192.301 -172.271 184.252 -172.271 c
172.271 -172.271 160.104 -173.487 151.494 -175.501 c
228.156 -164.612 m
228.156 -164.612 184.252 -184.251 184.252 -184.251 c
S
0.216 w
n
184.252 -94.2529 m
209.037 -94.2529 229.252 -134.681 229.252 -184.251 c
229.252 -233.821 209.037 -274.25 184.252 -274.25 c
S
[4.536 4.32001 ] 0.0 d
n
184.252 -94.2529 m
184.252 -94.2529 184.252 -274.25 184.252 -274.25 c
S
n
184.252 -341.75 m
184.252 -341.75 181.168 -335.579 181.168 -335.579 c
181.168 -335.579 187.339 -335.579 187.339 -335.579 c
187.339 -335.579 184.252 -341.75 184.252 -341.75 c
184.252 -341.75 184.252 -341.75 184.252 -341.75 c
h
eofill
Q
1.0 0.0 0.0 -1.0 0.0 0.0 cm
true setSA
[/DeviceRGB] cs 0.0 0.0 0.0 sc
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H Initial
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_saveCIDInit
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CIDFont (STFBAA+CMMI12)
%%Title: (STFBAA+CMMI12 Adobe Identity 0)
%%Version: 0
/CIDInit /ProcSet findresource begin
14 dict begin
/CIDFontName /STFBAA+CMMI12 def
/CIDFontType 0 def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/FontBBox {-31 -250 1026 750} def
/FontInfo 5 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/FSType 4 def
end def
/CIDMapOffset 57 def
/FDBytes 1 def
/GDBytes 1 def
/CIDCount 121 def
/CDevProc {pop pop pop pop pop 0 -1000 7 index 2 div 880} def
/FDArray 1 array
dup 0
%ADOBeginFontDict
4 dict dup begin
/FontType 1 def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
%ADOBeginPrivateDict
/Private 12 dict dup begin
/BlueValues [-21 -0 431 441 452 463 683 704] def
/OtherBlues [-204 -194] def
/BlueScale 0.04379 def
/StdHW [22] def
/StdVW [65] def
/StemSnapH [22 29] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
/SubrMapOffset 0 def
/SDBytes 1 def
/SubrCount 5 def
end def
%ADOEndPrivateDict
end put
%ADOEndFontDict
def
/GlyphDirectory 1 dict def
ct_GlyphDirProcs begin
GlyphDirectory
+
0 <001C60D8A8C9B81F2CC3> |
!
end
ct_AddStdCIDMap
%%EndResource
ct_restoreCIDInit /STFBAA+CMMI12-Identity-H /Identity-H 0 [/STFBAA+CMMI12] ct_ComposeFont pop end end
+%ADOEndSubsetFont
+%%BeginResource: encoding
% Identity-H
%PDF_BeginEncoding: N8 (STFBAA+CMMI12-Identity-H)
+/N8 (STFBAA+CMMI12-Identity-H) /Identity-H [ (STFBAA+CMMI12) ]
+ /NoSubstitution [ /Serif ] 0 TZzero
+%%EndResource
214.132 215.992 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
114 <001C60D8A8C9B7628037FFC34225CDB51C16B6280E0517770F69131E099
966F689816DBB94E394FAC1DD9A7C1A14C9636A7D2A8B72705C22612EFEFFA6E
5264FF4EBF61CD9C4DD8B27578E011E8DDEBF419CAC1F6A2F1FE994DF5C901FD
0BEA9E7C62177556CCE084E3BECB95D975A4D2F2A65A78E12C3AB4ACCE568AEB
738452E5B0C6CD2019C0B9AA154E192BB18B0CE92FA48AF13577432A54DCB746
56A4A13E51A965BFC9D023FADEC3106AF414E85A814E3E3249DD8D208FADB8DC
3FB27> |
!
end
end end
+%ADOEndSubsetFont
+/N8 11.955 Tf
(\000r) show
345.669 136.324 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
120 <001C60D8A8C9B7EF325DF88715F012E085EB64F0A4FE8713D04CDEA9CB2
0E9B15249D56AC8A0C2E0E12761B3B972D802D5F8B18F4F576C2666702361F5C
2B48D78C52532223071C01FA681430DA735F1A7AE51C80B9138D3695956A62D9
B460B17A4E36DAB726D8A63568FAB7BE160BEDB176EF49099F6F41A5863B069F
194EE62B71BD3B36F4A3FC9946AAB077F14F50A9438F7F58BFD49954B5720AE5
7E171B43DB3AF9DBD54119DEA2A7A1C00079C808029D90A7EF0A91CB3EF0628D
6A42D1F0CCEC95B876569E8B0C44DA543AE071E278458104AF4D774998DBD764
C7F96602C> |
!
end
end end
+%ADOEndSubsetFont
+(\000x) show
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H Initial
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_saveCIDInit
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CIDFont (EUOAAA+CMR8)
%%Title: (EUOAAA+CMR8 Adobe Identity 0)
%%Version: 0
/CIDInit /ProcSet findresource begin
14 dict begin
/CIDFontName /EUOAAA+CMR8 def
/CIDFontType 0 def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/FontBBox {-36 -250 1070 750} def
/FontInfo 5 dict dup begin
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) def
/FSType 4 def
end def
/CIDMapOffset 57 def
/FDBytes 1 def
/GDBytes 1 def
/CIDCount 52 def
/CDevProc {pop pop pop pop pop 0 -1000 7 index 2 div 880} def
/FDArray 1 array
dup 0
%ADOBeginFontDict
4 dict dup begin
/FontType 1 def
/PaintType 0 def
/FontMatrix [0.001 0 0 0.001 0 0] def
%ADOBeginPrivateDict
/Private 13 dict dup begin
/BlueValues [-21 -0 431 446 665 675 683 704] def
/OtherBlues [-205 -194] def
/BlueScale 0.04379 def
/StdHW [28] def
/StdVW [76] def
/StemSnapH [28 33] def
/StemSnapV [76 92] def
/password 5839 def
/MinFeature {16 16} def
/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def
/SubrMapOffset 0 def
/SDBytes 1 def
/SubrCount 5 def
end def
%ADOEndPrivateDict
end put
%ADOEndFontDict
def
/GlyphDirectory 1 dict def
ct_GlyphDirProcs begin
GlyphDirectory
+
0 <001C60D8A8C9B808980A> |
!
end
ct_AddStdCIDMap
%%EndResource
ct_restoreCIDInit /EUOAAA+CMR8-Identity-H /Identity-H 0 [/EUOAAA+CMR8] ct_ComposeFont pop end end
+%ADOEndSubsetFont
+%%BeginResource: encoding
% Identity-H
%PDF_BeginEncoding: N9 (EUOAAA+CMR8-Identity-H)
+/N9 (EUOAAA+CMR8-Identity-H) /Identity-H [ (EUOAAA+CMR8) ]
+ /NoSubstitution [ /Serif ] 0 TZzero
+%%EndResource
352.321 134.531 m
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/EUOAAA+CMR8 1 GetGlyphDirectory
50 <001C60D8A8C9B7883C479819BD474E9964F6BF369AAF487ABFE629F8A563
37D176F7C9556B1CAAE607CA6285C927013D8BDE6137B6739AFDAF8D7D8B1E86
BAFBB9D834592D58F996DFF88B929F1FABA7347C2BBDB5519BE210DDE834DD1D
CB9A84AA77E585DFD5A86708901622F6AC3CFFFF626D8C5FD08A157C4A8F19F7
F5FA2E61175441FDD6> |
!
end
end end
+%ADOEndSubsetFont
+/N9 7.96999 Tf
(\0002) show
12.6611 136.324 m
/N8 11.955 Tf
(\000x) show
19.313 134.531 m
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/EUOAAA+CMR8 1 GetGlyphDirectory
49 <001C60D8A8C9B7883C47E9695A643EC7CDC9D492AB150D29B838BCDE5298
51B4F36139BB3C5556B7F7E4934494C8CA669B61323ACA68A6240E429D123FC3
10871A43C3C2B8652E724507A70C99EC1FF6EE1EA351C2BAEF> |
!
end
end end
+%ADOEndSubsetFont
+/N9 7.96999 Tf
(\0001) show
180.665 346.329 m
/N8 11.955 Tf
(\000x) show
187.317 344.536 m
%ADOBeginSubsetFont: EUOAAA+CMR8-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/EUOAAA+CMR8 1 GetGlyphDirectory
51 <001C60D8A8C9B7883CBAA92B92A60ED97CC7706D34A36348BC2B93805C7C
1833580FAA27E95855649C4EE0492E1681D62AEDB7EC0D4D44FE91FF7AD4665F
D8D6994E56FB00B47353D8538086D2C46021ADFB3F80264F6C2EF23799D21E81
ACDE63FE62C97F7BE27D7DCE3B9BAF5B096FE9F9E10574C4FE3C149B03DD0A59
DE10D784DCCBFDFC6D3C5399775DC28DB91A04691B5B8F3D1C009DFAB49BB818
D90EA7C1> |
!
end
end end
+%ADOEndSubsetFont
+/N9 7.96999 Tf
(\0003) show
Q
1.0 0.0 0.0 -1.0 0.0 0.0 cm
0.216 w
2.6131 M
true setSA
n
84.2622 -157.449 m
84.2622 -157.449 122.901 -167.8 122.901 -167.8 c
[/DeviceRGB] cs 0.0 0.0 0.0 sc
S
4.0 M
n
282.892 -157.826 m
282.892 -157.826 245.092 -167.955 245.092 -167.955 c
S
1.0 0.0 0.0 -1.0 0.0 0.0 cm
188.661 211.324 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
35 <001C60D8A8C9B7FA1301BE6180781D244B43F2F97D795A8C67AF297570B2
5D011F7553AE87DA67246C75A123D38A7E2A9E73C089D0155659C213520B6BF3
708CF9E463A551165DF528979C5D29939E4C663B7CB9ACD2D34590AACA015370
E594274B63269C8F1CFCDE8C91D720B13F6B93C2E0C4CB325FAAA90199F590A1
AC543010663224FE9AA5C2BA7CFE5A136E95946849176A836312B7F034FCF4D6
AC1AC7238CDCD1DE8CE95FDACABE12915BD7468460A9C53C13689C62E4957EFA
9AD8D18B2997483879F7A346270DF44C1AE41B892E443E6FAAAFC0E03E3402EC
ABE2B7246DA1D5670AD7110BF40E94066EA9490675CB0A81BEFFC608EFE8EB9C> |
!
end
end end
+%ADOEndSubsetFont
+/N8 11.955 Tf
(\000#) show
175.161 175.824 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
39 <001C60D8A8C9B6747BB73B43E39C205190D75AB2FA80068C30CFF75B781B
8EF25B40D3CE1F8BF1235B5920904D98C1751ACD1ECE66AA5D36E6C1B0A82706
3C26C16EF05F21A86369CC9EEB5C4FBFDD1B1033971034EB6BB92D726AF889E8
FAEBC642112085AE58F32148895EE95BF45DBD1651424FB17E02ED87E805BC12
A8D7FC6BBCEE3EDEE61F46B81CD695594BD8913AA6E31AFF96FA2BC0EB511234
DC983CFE742ECE43A47058200D1BD7CA0237343381C2D71B3385B4C3D1> |
!
end
end end
+%ADOEndSubsetFont
+(\000') show
225.161 241.324 m
%ADOBeginSubsetFont: STFBAA+CMMI12-Identity-H AddGlyphs
+Adobe_CoolType_Utility begin ct_MakeOCF begin ct_GlyphDirProcs begin
+%ADOt1write: (1.0.24)
%%Copyright: Copyright 2006 Adobe System Incorporated. All rights reserved.
/STFBAA+CMMI12 1 GetGlyphDirectory
24 <001C60D8A8C9B71063258B553F1B532EC10F40E30216C77B3F0B5660F268
1931B66B80D025CB05EB0F48CA6066E901D78AA8BDBA0138C54FFF8BC2753E84
22BAE3AE8CA07E859A4B65B4D5BD4727F3F9107AA32A4A57EB21B5630206288D
D3BEEDDAA3A69061629F0A34376B6E16CE06067FD5361A33C8D6231C3893FBC2
7DA84816540B60AC54A3B46F95C2017D13E3D6A05441ECC1CCFCC0E271B2EB89
2AA15AB9593923D3AFC1719CB0C359E9F3496DECE857F42C607298AB3F002EE3
10452C9265BCFBD8D84E2C48799C08153602DF1797D52F8C67BDFAEBA64E17B0
DD653E1C5FDC09B8B1BE444DD31C2CCE33B522DE3589EF9276F4E8BDDA185B4D
FFD3F802509F0BBF017DBB660603BE2B25606F1B38D53804373299EC38C0556E
CA9B2D754890C919EA4C2FFA9F42AAF4905ECF7BF321854AD8259B94818A6467
EBBE549BDD6FDF0210134D> |
!
end
end end
+%ADOEndSubsetFont
+(\000\030) show
Q
Q
Q
/STFBAA+CMMI12 /CIDFont _pdfUndefineResource
/STFBAA+CMMI12-Identity-H /Font _pdfUndefineResource
/N8 /Font _pdfUndefineResource
/EUOAAA+CMR8 /CIDFont _pdfUndefineResource
/EUOAAA+CMR8-Identity-H /Font _pdfUndefineResource
/N9 /Font _pdfUndefineResource
[/EMC PDFMark5
PDFVars/TermAll get exec end end
%%PageTrailer
%%Trailer
%%EOF
\ No newline at end of file
diff --git a/doc/api/latex/images/sphere.pdf b/doc/api/latex/images/sphere.pdf
new file mode 100755
index 0000000..ee88c7d
Binary files /dev/null and b/doc/api/latex/images/sphere.pdf differ
diff --git a/doc/logo/nfft_logo.tif b/doc/logo/nfft_logo.tif
new file mode 100644
index 0000000..76c053e
Binary files /dev/null and b/doc/logo/nfft_logo.tif differ
diff --git a/doxygen.dox b/doxygen.dox
index 93d3027..9b869bb 100644
--- a/doxygen.dox
+++ b/doxygen.dox
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/doxygen/Makefile.in b/doxygen/Makefile.in
deleted file mode 100644
index fd63545..0000000
--- a/doxygen/Makefile.in
+++ /dev/null
@@ -1,426 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = doxygen
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(srcdir)/doxygen.Doxyfile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES = doxygen.Doxyfile
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-EXTRA_DIST = doxygen.css doxygen.Doxyfile doxygen.Doxyfile.in footer.html header.html
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doxygen/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu doxygen/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-doxygen.Doxyfile: $(top_builddir)/config.status $(srcdir)/doxygen.Doxyfile.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-cscope cscopelist:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/doxygen/doxygen.Doxyfile b/doxygen/doxygen.Doxyfile
deleted file mode 100644
index 07a5abc..0000000
--- a/doxygen/doxygen.Doxyfile
+++ /dev/null
@@ -1,1143 +0,0 @@
-# Doxyfile 1.3.7
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
-
-PROJECT_NAME = NFFT
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER = 3.2.3
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/../doc/api
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 2 levels of 10 sub-directories under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of source
-# files, where putting all generated files in the same directory would otherwise
-# cause performance problems for the file system.
-
-CREATE_SUBDIRS = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
-# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
-# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese,
-# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE = English
-
-# This tag can be used to specify the encoding used in the generated output.
-# The encoding is not always determined by the language that is chosen,
-# but also whether or not the output is meant for Windows or non-Windows users.
-# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
-# forces the Windows encoding (this is the default for the Windows binary),
-# whereas setting the tag to NO uses a Unix-style encoding (the default for
-# all platforms other than Windows).
-
-USE_WINDOWS_ENCODING = NO
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is used
-# as the annotated text. Otherwise, the brief description is used as-is. If left
-# blank, the following values are used ("$name" is automatically replaced with the
-# name of the entity): "The $name class" "The $name widget" "The $name file"
-# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
-# members of a class in the documentation of that class as if those members were
-# ordinary class members. Constructors, destructors and assignment operators of
-# the base classes will not be shown.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
-STRIP_FROM_PATH =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explicit @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF = YES
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
-DETAILS_AT_TOP = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
-INHERIT_DOCS = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE = 2
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
-# only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
-SUBGROUPING = YES
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS = YES
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS = YES
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# users are advised to set this option to NO.
-
-CASE_SENSE_NAMES = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS = NO
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
-SORT_BRIEF_DOCS = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME = YES
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST = NO
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST = NO
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST = NO
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST = NO
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text.
-
-WARN_FORMAT = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT = doxygen.c include kernel util examples applications
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
-# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
-
-FILE_PATTERNS = *.h *.c *.dox
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE = 3rdparty applications/texture
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
-# that are symbolic links (a Unix filesystem feature) are excluded from the input.
-
-EXCLUDE_SYMLINKS = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-
-EXCLUDE_PATTERNS =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH = doc/api/html
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH = doc/api/html/images doc/api/latex/images
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.
-
-INPUT_FILTER =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER = YES
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION = YES
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX =
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
-HTML_HEADER = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/header.html
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/footer.html
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET = /LOCAL/tovo/build-nfft-3.2.3/nfft-3.2/doxygen/doxygen.css
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES = amsmath amssymb
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS = YES
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
-GENERATE_XML = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_PERLMOD = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.  This is useful
-# if you want to understand what is going on.  On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_PREDEFINED tags.
-
-EXPAND_ONLY_PREDEF = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed.
-
-PREDEFINED =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED = MACRO_MV_PLAN
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse the
-# parser if not removed.
-
-SKIP_FUNCTION_MACROS = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-#   TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-#   TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
-EXTERNAL_GROUPS = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
-# super classes. Setting the tag to NO turns the diagrams off. Note that this
-# option is superseded by the HAVE_DOT option below. This is only a fallback. It is
-# recommended to install and use dot, since it yields more powerful graphs.
-
-CLASS_DIAGRAMS = YES
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
-UML_LOOK = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH = YES
-
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-
-CALL_GRAPH = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found on the path.
-
-DOT_PATH =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS =
-
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
-
-MAX_DOT_GRAPH_WIDTH = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
-
-MAX_DOT_GRAPH_HEIGHT = 1024
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes that
-# lay further from the root node will be omitted. Note that setting this option to
-# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that a graph may be further truncated if the graph's image dimensions are
-# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
-# If 0 is used for the depth value (the default), the graph is not depth-constrained.
-
-MAX_DOT_GRAPH_DEPTH = 0
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE = NO
-
diff --git a/doxygen/doxygen.Doxyfile.in b/doxygen/doxygen.Doxyfile.in
index c2e28ea..d2426d6 100644
--- a/doxygen/doxygen.Doxyfile.in
+++ b/doxygen/doxygen.Doxyfile.in
@@ -416,7 +416,7 @@ WARN_LOGFILE =
 # directories like "/usr/src/myproject". Separate the files or directories
 # with spaces.
 
-INPUT = doxygen.c include kernel util examples applications
+INPUT = doxygen.c include kernel examples applications
 
 # If the value of the INPUT tag contains directories, you can use the
 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
diff --git a/examples/Makefile.in b/examples/Makefile.in
deleted file mode 100644
index ce371a8..0000000
--- a/examples/Makefile.in
+++ /dev/null
@@ -1,656 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = examples
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = fpt mri nfct nfft nfsft nfsoft nfst nnfft nsfft solver
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
- at HAVE_NFCT_TRUE@DIR_NFCT = nfct
- at HAVE_NFCT_FALSE@LIB_NFCT = 
- at HAVE_NFST_FALSE@DIR_NFST = 
- at HAVE_NFST_TRUE@DIR_NFST = nfst
- at HAVE_NFSFT_FALSE@DIR_NFSFT = 
- at HAVE_NFSFT_TRUE@DIR_NFSFT = nfsft
- at HAVE_NFSOFT_FALSE@DIR_NFSOFT = 
- at HAVE_NFSOFT_TRUE@DIR_NFSOFT = nfsoft
- at HAVE_NNFFT_FALSE@DIR_NNFFT = 
- at HAVE_NNFFT_TRUE@DIR_NNFFT = nnfft
- at HAVE_NSFFT_FALSE@DIR_NSFFT = 
- at HAVE_NSFFT_TRUE@DIR_NSFFT = nsfft
- at HAVE_MRI_FALSE@DIR_MRI = 
- at HAVE_MRI_TRUE@DIR_MRI = mri
- at HAVE_FPT_FALSE@DIR_FPT = 
- at HAVE_FPT_TRUE@DIR_FPT = fpt
-SUBDIRS = $(DIR_FPT) $(DIR_MRI) $(DIR_NFCT) nfft $(DIR_NFSFT) $(DIR_NFSOFT) $(DIR_NFST) \
-  $(DIR_NNFFT) $(DIR_NSFFT) solver
-
-EXTRA_DIST = doxygen.c
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
-	cscopelist-recursive ctags-recursive install-am install-strip \
-	tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	cscopelist cscopelist-recursive ctags ctags-recursive \
-	distclean distclean-generic distclean-libtool distclean-tags \
-	distdir dvi dvi-am html html-am info info-am install \
-	install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags tags-recursive uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/doxygen.c b/examples/doxygen.c
index f10e24e..f2962ff 100644
--- a/examples/doxygen.c
+++ b/examples/doxygen.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id$ */
 
 /**
  * \defgroup examples Examples
diff --git a/examples/fpt/Makefile.am b/examples/fpt/Makefile.am
index caf41a8..0944eb6 100644
--- a/examples/fpt/Makefile.am
+++ b/examples/fpt/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/examples/fpt/Makefile.in b/examples/fpt/Makefile.in
deleted file mode 100644
index 449a27e..0000000
--- a/examples/fpt/Makefile.in
+++ /dev/null
@@ -1,556 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = simple_test$(EXEEXT)
-subdir = examples/fpt
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_simple_test_OBJECTS = simple_test.$(OBJEXT)
-simple_test_OBJECTS = $(am_simple_test_OBJECTS)
-simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(simple_test_SOURCES)
-DIST_SOURCES = $(simple_test_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-
-# sources
-simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/fpt/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/fpt/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
-	@rm -f simple_test$(EXEEXT)
-	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/fpt/simple_test.c b/examples/fpt/simple_test.c
index e883896..f335100 100644
--- a/examples/fpt/simple_test.c
+++ b/examples/fpt/simple_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 #include "config.h"
 
@@ -34,10 +34,7 @@
 
 /* NFFT3 header */
 #include "nfft3.h"
-#include "nfft3util.h"
-
-/* Two times Pi */
-#define KPI2 6.2831853071795864769252867665590057683943387987502
+#include "infft.h"
 
 int main(void)
 {
@@ -116,7 +113,7 @@ int main(void)
       printf("\n2) Random Fourier coefficients a_k, k=0,1,...,N:\n");
       for (k = 0; k <= N; k++)
       {
-        a[k] = 2.0*nfft_drand48() - 1.0; /* for debugging: use k+1 */
+        a[k] = 2.0*X(drand48)() - 1.0; /* for debugging: use k+1 */
         printf("   a_%-2d = %+5.3lE\n",k,creal(a[k]));
       }
     }
diff --git a/examples/fpt/simple_test.nb b/examples/fpt/simple_test.nb
new file mode 100644
index 0000000..0867e1a
--- /dev/null
+++ b/examples/fpt/simple_test.nb
@@ -0,0 +1,79 @@
+(* Content-type: application/mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 7.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       145,          7]
+NotebookDataLength[      2035,         70]
+NotebookOptionsPosition[      1786,         57]
+NotebookOutlinePosition[      2124,         72]
+CellTagsIndexPosition[      2081,         69]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{"Clear", "[", 
+   RowBox[{"NN", ",", "f"}], "]"}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"NN", "=", "8"}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"f", "[", "x_", "]"}], ":=", 
+   RowBox[{"Sum", "[", 
+    RowBox[{
+     RowBox[{
+      RowBox[{"(", 
+       RowBox[{"k", "+", "1"}], ")"}], "*", 
+      RowBox[{"LegendreP", "[", 
+       RowBox[{"k", ",", "x"}], "]"}]}], ",", 
+     RowBox[{"{", 
+      RowBox[{"k", ",", "0", ",", "NN"}], "}"}]}], "]"}]}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{"N", "[", 
+  RowBox[{
+   RowBox[{"Map", "[", 
+    RowBox[{"f", ",", 
+     RowBox[{"Table", "[", 
+      RowBox[{
+       RowBox[{"Cos", "[", 
+        RowBox[{"j", "*", 
+         RowBox[{"Pi", "/", "NN"}]}], "]"}], ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "0", ",", "NN"}], "}"}]}], "]"}]}], "]"}], ",", 
+   "16"}], "]"}], "\[IndentingNewLine]"}], "Input",
+ CellChangeTimes->{{3.445947118090195*^9, 3.44594719342006*^9}, {
+  3.445947226052888*^9, 3.445947257035718*^9}, {3.445947304953729*^9, 
+  3.445947316400078*^9}, {3.445947379545209*^9, 3.445947414151949*^9}, {
+  3.445947444347465*^9, 3.445947492044079*^9}, {3.448086407121559*^9, 
+  3.44808645639408*^9}}]
+},
+WindowSize->{640, 750},
+WindowMargins->{{Automatic, 118}, {62, Automatic}},
+FrontEndVersion->"7.0 for Linux x86 (32-bit) (November 10, 2008)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[545, 20, 1237, 35, 126, "Input"]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/examples/mri/Makefile.am b/examples/mri/Makefile.am
index 454ceff..02b5f16 100644
--- a/examples/mri/Makefile.am
+++ b/examples/mri/Makefile.am
@@ -1,2 +1,2 @@
-# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+# $Id$
 
diff --git a/examples/mri/Makefile.in b/examples/mri/Makefile.in
deleted file mode 100644
index 834407d..0000000
--- a/examples/mri/Makefile.in
+++ /dev/null
@@ -1,422 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = examples/mri
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/mri/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/mri/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-cscope cscopelist:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/nfct/Makefile.am b/examples/nfct/Makefile.am
index fc85794..26ec994 100644
--- a/examples/nfct/Makefile.am
+++ b/examples/nfct/Makefile.am
@@ -1,10 +1,10 @@
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
 noinst_PROGRAMS = simple_test
 
 simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+simple_test_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 EXTRA_DIST = README
diff --git a/examples/nfct/Makefile.in b/examples/nfct/Makefile.in
deleted file mode 100644
index 16a715d..0000000
--- a/examples/nfct/Makefile.in
+++ /dev/null
@@ -1,555 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = simple_test$(EXEEXT)
-subdir = examples/nfct
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_simple_test_OBJECTS = simple_test.$(OBJEXT)
-simple_test_OBJECTS = $(am_simple_test_OBJECTS)
-simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(simple_test_SOURCES)
-DIST_SOURCES = $(simple_test_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfct/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/nfct/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
-	@rm -f simple_test$(EXEEXT)
-	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/nfct/simple_test.c b/examples/nfct/simple_test.c
index aba4dbf..3b738da 100644
--- a/examples/nfct/simple_test.c
+++ b/examples/nfct/simple_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,67 +16,62 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 #include <stdio.h>
 #include <math.h>
 #include <string.h>
 #include <stdlib.h>
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 static void simple_test_nfct_1d(void)
 {
-  int j,k;
-  nfct_plan p;
+  NFCT(plan) p;
 
-  int N=14;
-  int M=19;
+  int N = 14;
+  int M = 19;
 
   /** init an one dimensional plan */
-  nfct_init_1d(&p,N,M);
+  NFCT(init_1d)(&p,N,M);
 
   /** init pseudo random nodes */
-  for(j = 0; j < p.d*p.M_total; j++)
-    p.x[j] = 0.5 * ((double)rand()) / RAND_MAX;
+  NFFT(vrand_real)(p.x, p.M_total, K(0.0), K(0.5));
 
   /** precompute psi, the entries of the matrix B */
-  if( p.nfct_flags & PRE_PSI)
-    nfct_precompute_psi( &p);
+  if( p.flags & PRE_ONE_PSI)
+    NFCT(precompute_one_psi)(&p);
 
   /** init pseudo random Fourier coefficients and show them */
-  for(k = 0; k < p.N_total; k++)
-    p.f_hat[k] = (double)rand() / RAND_MAX;
-
-  nfft_vpr_double(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
+  NFFT(vrand_real)(p.f_hat, p.N_total, K(0.0), K(1.0));
+  NFFT(vpr_double)(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
 
   /** direct trafo and show the result */
-  nfct_trafo_direct(&p);
-  nfft_vpr_double(p.f,p.M_total,"ndct, vector f");
+  NFCT(trafo_direct)(&p);
+  NFFT(vpr_double)(p.f,p.M_total,"ndct, vector f");
 
   /** approx. trafo and show the result */
-  nfct_trafo(&p);
-  nfft_vpr_double(p.f,p.M_total,"nfct, vector f");
+  NFCT(trafo)(&p);
+  NFFT(vpr_double)(p.f,p.M_total,"nfct, vector f");
 
   /** approx. adjoint and show the result */
-  nfct_adjoint(&p);
-  nfft_vpr_double(p.f_hat,p.N_total,"adjoint ndct, vector f_hat");
+  NFCT(adjoint_direct)(&p);
+  NFFT(vpr_double)(p.f_hat,p.N_total,"adjoint ndct, vector f_hat");
 
   /** approx. adjoint and show the result */
-  nfct_adjoint_direct(&p);
-  nfft_vpr_double(p.f_hat,p.N_total,"adjoint nfct, vector f_hat");
+  NFCT(adjoint)(&p);
+  NFFT(vpr_double)(p.f_hat,p.N_total,"adjoint nfct, vector f_hat");
 
   /** finalise the one dimensional plan */
-  nfct_finalize(&p);
+  NFCT(finalize)(&p);
 }
 
 int main(void)
 {
-  system("clear");
-  printf("computing one dimensional ndct, nfct and adjoint ndct, nfct\n\n");
+  printf("Computing one dimensional ndct, nfct, adjoint ndct, and adjoint nfct...\n\n");
   simple_test_nfct_1d();
   printf("\n\n");
 
-  return 1;
+  return EXIT_SUCCESS;
 }
diff --git a/examples/nfft/Makefile.am b/examples/nfft/Makefile.am
index dc1c490..835dd18 100644
--- a/examples/nfft/Makefile.am
+++ b/examples/nfft/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
@@ -22,38 +22,38 @@ noinst_PROGRAMS = simple_test $(SIMPLE_TEST_THREADS) ndft_fast taylor_nfft flags
 
 if HAVE_THREADS
   simple_test_threads_SOURCES = simple_test_threads.c
-  simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  simple_test_threads_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
 endif
 
 simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+simple_test_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 ndft_fast_SOURCES = ndft_fast.c
-ndft_fast_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+ndft_fast_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 taylor_nfft_SOURCES = taylor_nfft.c
-taylor_nfft_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+taylor_nfft_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 flags_SOURCES = flags.c
-flags_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+flags_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 nfft_times_SOURCES = nfft_times.c
-nfft_times_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+nfft_times_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 if HAVE_THREADS
 if HAVE_OPENMP
   nfft_benchomp_SOURCES = nfft_benchomp.c
-  nfft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  nfft_benchomp_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
   nfft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
 
   nfft_benchomp_createdataset_SOURCES = nfft_benchomp_createdataset.c
-  nfft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+  nfft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
   nfft_benchomp_detail_single_SOURCES = nfft_benchomp_detail.c
-  nfft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+  nfft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
   nfft_benchomp_detail_threads_SOURCES = nfft_benchomp_detail.c
-  nfft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
+  nfft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
   nfft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
 endif
 endif
diff --git a/examples/nfft/Makefile.in b/examples/nfft/Makefile.in
deleted file mode 100644
index d9bb05f..0000000
--- a/examples/nfft/Makefile.in
+++ /dev/null
@@ -1,710 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = simple_test$(EXEEXT) $(am__EXEEXT_1) \
-	ndft_fast$(EXEEXT) taylor_nfft$(EXEEXT) flags$(EXEEXT) \
-	nfft_times$(EXEEXT) $(am__EXEEXT_2)
-subdir = examples/nfft
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
- at HAVE_THREADS_TRUE@am__EXEEXT_1 = simple_test_threads$(EXEEXT)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am__EXEEXT_2 =  \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfft_benchomp$(EXEEXT) \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfft_benchomp_createdataset$(EXEEXT) \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfft_benchomp_detail_single$(EXEEXT) \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfft_benchomp_detail_threads$(EXEEXT)
-PROGRAMS = $(noinst_PROGRAMS)
-am_flags_OBJECTS = flags.$(OBJEXT)
-flags_OBJECTS = $(am_flags_OBJECTS)
-flags_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_ndft_fast_OBJECTS = ndft_fast.$(OBJEXT)
-ndft_fast_OBJECTS = $(am_ndft_fast_OBJECTS)
-ndft_fast_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am__nfft_benchomp_SOURCES_DIST = nfft_benchomp.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_OBJECTS = nfft_benchomp-nfft_benchomp.$(OBJEXT)
-nfft_benchomp_OBJECTS = $(am_nfft_benchomp_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
-nfft_benchomp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(nfft_benchomp_CFLAGS) \
-	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am__nfft_benchomp_createdataset_SOURCES_DIST =  \
-	nfft_benchomp_createdataset.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_createdataset_OBJECTS = nfft_benchomp_createdataset.$(OBJEXT)
-nfft_benchomp_createdataset_OBJECTS =  \
-	$(am_nfft_benchomp_createdataset_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_createdataset_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am__nfft_benchomp_detail_single_SOURCES_DIST = nfft_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_detail_single_OBJECTS = nfft_benchomp_detail.$(OBJEXT)
-nfft_benchomp_detail_single_OBJECTS =  \
-	$(am_nfft_benchomp_detail_single_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_single_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am__nfft_benchomp_detail_threads_SOURCES_DIST =  \
-	nfft_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfft_benchomp_detail_threads_OBJECTS = nfft_benchomp_detail_threads-nfft_benchomp_detail.$(OBJEXT)
-nfft_benchomp_detail_threads_OBJECTS =  \
-	$(am_nfft_benchomp_detail_threads_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
-nfft_benchomp_detail_threads_LINK = $(LIBTOOL) --tag=CC \
-	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-am_nfft_times_OBJECTS = nfft_times.$(OBJEXT)
-nfft_times_OBJECTS = $(am_nfft_times_OBJECTS)
-nfft_times_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_simple_test_OBJECTS = simple_test.$(OBJEXT)
-simple_test_OBJECTS = $(am_simple_test_OBJECTS)
-simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am__simple_test_threads_SOURCES_DIST = simple_test_threads.c
- at HAVE_THREADS_TRUE@am_simple_test_threads_OBJECTS =  \
- at HAVE_THREADS_TRUE@	simple_test_threads.$(OBJEXT)
-simple_test_threads_OBJECTS = $(am_simple_test_threads_OBJECTS)
- at HAVE_THREADS_TRUE@simple_test_threads_DEPENDENCIES =  \
- at HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3_threads.la
-am_taylor_nfft_OBJECTS = taylor_nfft.$(OBJEXT)
-taylor_nfft_OBJECTS = $(am_taylor_nfft_OBJECTS)
-taylor_nfft_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(flags_SOURCES) $(ndft_fast_SOURCES) \
-	$(nfft_benchomp_SOURCES) \
-	$(nfft_benchomp_createdataset_SOURCES) \
-	$(nfft_benchomp_detail_single_SOURCES) \
-	$(nfft_benchomp_detail_threads_SOURCES) $(nfft_times_SOURCES) \
-	$(simple_test_SOURCES) $(simple_test_threads_SOURCES) \
-	$(taylor_nfft_SOURCES)
-DIST_SOURCES = $(flags_SOURCES) $(ndft_fast_SOURCES) \
-	$(am__nfft_benchomp_SOURCES_DIST) \
-	$(am__nfft_benchomp_createdataset_SOURCES_DIST) \
-	$(am__nfft_benchomp_detail_single_SOURCES_DIST) \
-	$(am__nfft_benchomp_detail_threads_SOURCES_DIST) \
-	$(nfft_times_SOURCES) $(simple_test_SOURCES) \
-	$(am__simple_test_threads_SOURCES_DIST) $(taylor_nfft_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
- at HAVE_THREADS_FALSE@SIMPLE_TEST_THREADS = 
- at HAVE_THREADS_TRUE@SIMPLE_TEST_THREADS = simple_test_threads
- at HAVE_OPENMP_FALSE@@HAVE_THREADS_TRUE at NFFT_BENCHOMP_PROGS = 
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at NFFT_BENCHOMP_PROGS = nfft_benchomp nfft_benchomp_createdataset nfft_benchomp_detail_single nfft_benchomp_detail_threads
- at HAVE_THREADS_FALSE@NFFT_BENCHOMP_PROGS = 
- at HAVE_THREADS_TRUE@simple_test_threads_SOURCES = simple_test_threads.c
- at HAVE_THREADS_TRUE@simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
-simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-ndft_fast_SOURCES = ndft_fast.c
-ndft_fast_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-taylor_nfft_SOURCES = taylor_nfft.c
-taylor_nfft_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-flags_SOURCES = flags.c
-flags_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-nfft_times_SOURCES = nfft_times.c
-nfft_times_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_SOURCES = nfft_benchomp.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_createdataset_SOURCES = nfft_benchomp_createdataset.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_single_SOURCES = nfft_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_SOURCES = nfft_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
-EXTRA_DIST = flags.m ndft_fast.m taylor_nfft.m README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/nfft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-flags$(EXEEXT): $(flags_OBJECTS) $(flags_DEPENDENCIES) $(EXTRA_flags_DEPENDENCIES) 
-	@rm -f flags$(EXEEXT)
-	$(LINK) $(flags_OBJECTS) $(flags_LDADD) $(LIBS)
-ndft_fast$(EXEEXT): $(ndft_fast_OBJECTS) $(ndft_fast_DEPENDENCIES) $(EXTRA_ndft_fast_DEPENDENCIES) 
-	@rm -f ndft_fast$(EXEEXT)
-	$(LINK) $(ndft_fast_OBJECTS) $(ndft_fast_LDADD) $(LIBS)
-nfft_benchomp$(EXEEXT): $(nfft_benchomp_OBJECTS) $(nfft_benchomp_DEPENDENCIES) $(EXTRA_nfft_benchomp_DEPENDENCIES) 
-	@rm -f nfft_benchomp$(EXEEXT)
-	$(nfft_benchomp_LINK) $(nfft_benchomp_OBJECTS) $(nfft_benchomp_LDADD) $(LIBS)
-nfft_benchomp_createdataset$(EXEEXT): $(nfft_benchomp_createdataset_OBJECTS) $(nfft_benchomp_createdataset_DEPENDENCIES) $(EXTRA_nfft_benchomp_createdataset_DEPENDENCIES) 
-	@rm -f nfft_benchomp_createdataset$(EXEEXT)
-	$(LINK) $(nfft_benchomp_createdataset_OBJECTS) $(nfft_benchomp_createdataset_LDADD) $(LIBS)
-nfft_benchomp_detail_single$(EXEEXT): $(nfft_benchomp_detail_single_OBJECTS) $(nfft_benchomp_detail_single_DEPENDENCIES) $(EXTRA_nfft_benchomp_detail_single_DEPENDENCIES) 
-	@rm -f nfft_benchomp_detail_single$(EXEEXT)
-	$(LINK) $(nfft_benchomp_detail_single_OBJECTS) $(nfft_benchomp_detail_single_LDADD) $(LIBS)
-nfft_benchomp_detail_threads$(EXEEXT): $(nfft_benchomp_detail_threads_OBJECTS) $(nfft_benchomp_detail_threads_DEPENDENCIES) $(EXTRA_nfft_benchomp_detail_threads_DEPENDENCIES) 
-	@rm -f nfft_benchomp_detail_threads$(EXEEXT)
-	$(nfft_benchomp_detail_threads_LINK) $(nfft_benchomp_detail_threads_OBJECTS) $(nfft_benchomp_detail_threads_LDADD) $(LIBS)
-nfft_times$(EXEEXT): $(nfft_times_OBJECTS) $(nfft_times_DEPENDENCIES) $(EXTRA_nfft_times_DEPENDENCIES) 
-	@rm -f nfft_times$(EXEEXT)
-	$(LINK) $(nfft_times_OBJECTS) $(nfft_times_LDADD) $(LIBS)
-simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
-	@rm -f simple_test$(EXEEXT)
-	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
-simple_test_threads$(EXEEXT): $(simple_test_threads_OBJECTS) $(simple_test_threads_DEPENDENCIES) $(EXTRA_simple_test_threads_DEPENDENCIES) 
-	@rm -f simple_test_threads$(EXEEXT)
-	$(LINK) $(simple_test_threads_OBJECTS) $(simple_test_threads_LDADD) $(LIBS)
-taylor_nfft$(EXEEXT): $(taylor_nfft_OBJECTS) $(taylor_nfft_DEPENDENCIES) $(EXTRA_taylor_nfft_DEPENDENCIES) 
-	@rm -f taylor_nfft$(EXEEXT)
-	$(LINK) $(taylor_nfft_OBJECTS) $(taylor_nfft_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flags.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ndft_fast.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp-nfft_benchomp.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp_createdataset.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp_detail.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft_times.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test_threads.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/taylor_nfft.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-nfft_benchomp-nfft_benchomp.o: nfft_benchomp.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -MT nfft_benchomp-nfft_benchomp.o -MD -MP -MF $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo -c -o nfft_benchomp-nfft_benchomp.o `test -f 'nfft_benchomp.c' || echo '$(srcdir)/'`nfft_benchomp.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo $(DEPDIR)/nfft_benchomp-nfft_benchomp.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfft_benchomp.c' object='nfft_benchomp-nfft_benchomp.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -c -o nfft_benchomp-nfft_benchomp.o `test -f 'nfft_benchomp.c' || echo '$(srcdir)/'`nfft_benchomp.c
-
-nfft_benchomp-nfft_benchomp.obj: nfft_benchomp.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -MT nfft_benchomp-nfft_benchomp.obj -MD -MP -MF $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo -c -o nfft_benchomp-nfft_benchomp.obj `if test -f 'nfft_benchomp.c'; then $(CYGPATH_W) 'nfft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp.c'; fi`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfft_benchomp-nfft_benchomp.Tpo $(DEPDIR)/nfft_benchomp-nfft_benchomp.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfft_benchomp.c' object='nfft_benchomp-nfft_benchomp.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_CFLAGS) $(CFLAGS) -c -o nfft_benchomp-nfft_benchomp.obj `if test -f 'nfft_benchomp.c'; then $(CYGPATH_W) 'nfft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp.c'; fi`
-
-nfft_benchomp_detail_threads-nfft_benchomp_detail.o: nfft_benchomp_detail.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfft_benchomp_detail_threads-nfft_benchomp_detail.o -MD -MP -MF $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.o `test -f 'nfft_benchomp_detail.c' || echo '$(srcdir)/'`nfft_benchomp_detail.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfft_benchomp_detail.c' object='nfft_benchomp_detail_threads-nfft_benchomp_detail.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.o `test -f 'nfft_benchomp_detail.c' || echo '$(srcdir)/'`nfft_benchomp_detail.c
-
-nfft_benchomp_detail_threads-nfft_benchomp_detail.obj: nfft_benchomp_detail.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfft_benchomp_detail_threads-nfft_benchomp_detail.obj -MD -MP -MF $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.obj `if test -f 'nfft_benchomp_detail.c'; then $(CYGPATH_W) 'nfft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp_detail.c'; fi`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Tpo $(DEPDIR)/nfft_benchomp_detail_threads-nfft_benchomp_detail.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfft_benchomp_detail.c' object='nfft_benchomp_detail_threads-nfft_benchomp_detail.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfft_benchomp_detail_threads-nfft_benchomp_detail.obj `if test -f 'nfft_benchomp_detail.c'; then $(CYGPATH_W) 'nfft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfft_benchomp_detail.c'; fi`
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/nfft/flags.c b/examples/nfft/flags.c
index 8c21691..7e6a02a 100644
--- a/examples/nfft/flags.c
+++ b/examples/nfft/flags.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: flags.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /*! \file flags.c
  *
@@ -36,7 +36,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -58,292 +57,297 @@
   unsigned test=0;
 #endif
 
-static void flags_cp(nfft_plan *dst, nfft_plan *src)
+static void flags_cp(NFFT(plan) *dst, NFFT(plan) *src)
 {
-  dst->x=src->x;
-  dst->f_hat=src->f_hat;
-  dst->f=src->f;
-  dst->g1=src->g1;
-  dst->g2=src->g2;
-  dst->my_fftw_plan1=src->my_fftw_plan1;
-  dst->my_fftw_plan2=src->my_fftw_plan2;
+  dst->x = src->x;
+  dst->f_hat = src->f_hat;
+  dst->f = src->f;
+  dst->g1 = src->g1;
+  dst->g2 = src->g2;
+  dst->my_fftw_plan1 = src->my_fftw_plan1;
+  dst->my_fftw_plan2 = src->my_fftw_plan2;
 }
 
 static void time_accuracy(int d, int N, int M, int n, int m, unsigned test_ndft,
-                   unsigned test_pre_full_psi)
+    unsigned test_pre_full_psi)
 {
   int r, NN[d], nn[d];
-  double t_ndft, t, e;
-  double _Complex *swapndft = NULL;
+  R t_ndft, t, e;
+  C *swapndft = NULL;
   ticks t0, t1;
 
-  nfft_plan p;
-  nfft_plan p_pre_phi_hut;
-  nfft_plan p_fg_psi;
-  nfft_plan p_pre_lin_psi;
-  nfft_plan p_pre_fg_psi;
-  nfft_plan p_pre_psi;
-  nfft_plan p_pre_full_psi;
+  NFFT(plan) p;
+  NFFT(plan) p_pre_phi_hut;
+  NFFT(plan) p_fg_psi;
+  NFFT(plan) p_pre_lin_psi;
+  NFFT(plan) p_pre_fg_psi;
+  NFFT(plan) p_pre_psi;
+  NFFT(plan) p_pre_full_psi;
 
   printf("%d\t%d\t", d, N);
 
-  for(r=0; r<d; r++)
-    {
-      NN[r]=N;
-      nn[r]=n;
-    }
+  for (r = 0; r < d; r++)
+  {
+    NN[r] = N;
+    nn[r] = n;
+  }
 
-  /** output vector ndft */
-  if(test_ndft)
-    swapndft=(double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+  /* output vector ndft */
+  if (test_ndft)
+    swapndft = (C*) NFFT(malloc)((size_t)(M) * sizeof(C));
 
-  nfft_init_guru(&p, d, NN, M, nn, m,
-                 MALLOC_X| MALLOC_F_HAT| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&p, d, NN, M, nn, m,
+  MALLOC_X | MALLOC_F_HAT | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.d * p.M_total);
 
-  nfft_init_guru(&p_pre_phi_hut, d, NN, M, nn, m, PRE_PHI_HUT,0);
+  NFFT(init_guru)(&p_pre_phi_hut, d, NN, M, nn, m, PRE_PHI_HUT, 0);
   flags_cp(&p_pre_phi_hut, &p);
-  nfft_precompute_one_psi(&p_pre_phi_hut);
+  NFFT(precompute_one_psi)(&p_pre_phi_hut);
 
-  if(test_fg)
-    {
-      nfft_init_guru(&p_fg_psi, d, NN, M, nn, m, FG_PSI,0);
-      flags_cp(&p_fg_psi, &p);
-      nfft_precompute_one_psi(&p_fg_psi);
-    }
+  if (test_fg)
+  {
+    NFFT(init_guru)(&p_fg_psi, d, NN, M, nn, m, FG_PSI, 0);
+    flags_cp(&p_fg_psi, &p);
+    NFFT(precompute_one_psi)(&p_fg_psi);
+  }
 
-  nfft_init_guru(&p_pre_lin_psi, d, NN, M, nn, m, PRE_LIN_PSI,0);
+  NFFT(init_guru)(&p_pre_lin_psi, d, NN, M, nn, m, PRE_LIN_PSI, 0);
   flags_cp(&p_pre_lin_psi, &p);
-  nfft_precompute_one_psi(&p_pre_lin_psi);
+  NFFT(precompute_one_psi)(&p_pre_lin_psi);
 
-  if(test_fg)
-    {
-      nfft_init_guru(&p_pre_fg_psi, d, NN, M, nn, m, PRE_FG_PSI,0);
-      flags_cp(&p_pre_fg_psi, &p);
-      nfft_precompute_one_psi(&p_pre_fg_psi);
-    }
+  if (test_fg)
+  {
+    NFFT(init_guru)(&p_pre_fg_psi, d, NN, M, nn, m, PRE_FG_PSI, 0);
+    flags_cp(&p_pre_fg_psi, &p);
+    NFFT(precompute_one_psi)(&p_pre_fg_psi);
+  }
 
-  nfft_init_guru(&p_pre_psi, d, NN, M, nn, m, PRE_PSI,0);
+  NFFT(init_guru)(&p_pre_psi, d, NN, M, nn, m, PRE_PSI, 0);
   flags_cp(&p_pre_psi, &p);
-  nfft_precompute_one_psi(&p_pre_psi);
-
-  if(test_pre_full_psi)
+  NFFT(precompute_one_psi)(&p_pre_psi);
+
+  if (test_pre_full_psi)
+  {
+    NFFT(init_guru)(&p_pre_full_psi, d, NN, M, nn, m, PRE_FULL_PSI, 0);
+    flags_cp(&p_pre_full_psi, &p);
+    NFFT(precompute_one_psi)(&p_pre_full_psi);
+  }
+
+  /* init pseudo random Fourier coefficients */
+  NFFT(vrand_unit_complex)(p.f_hat, p.N_total);
+
+  /* NDFT */
+  if (test_ndft)
+  {
+    CSWAP(p.f, swapndft);
+
+    t_ndft = K(0.0);
+    r = 0;
+    while (t_ndft < K(0.01))
     {
-      nfft_init_guru(&p_pre_full_psi, d, NN, M, nn, m, PRE_FULL_PSI,0);
-      flags_cp(&p_pre_full_psi, &p);
-      nfft_precompute_one_psi(&p_pre_full_psi);
+      r++;
+      t0 = getticks();
+      NFFT(trafo_direct)(&p);
+      t1 = getticks();
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_ndft += t;
     }
+    t_ndft /= (R)(r);
 
-  /** init pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(p.f_hat, p.N_total);
-
-  /** NDFT */
-  if(test_ndft)
-    {
-      NFFT_SWAP_complex(p.f,swapndft);
-
-      t_ndft=0;
-      r=0;
-      while(t_ndft<0.01)
-        {
-          r++;
-          t0 = getticks();
-          nfft_trafo_direct(&p);
-          t1 = getticks();
-          t = nfft_elapsed_seconds(t1,t0);
-          t_ndft+=t;
-        }
-      t_ndft/=r;
-
-      NFFT_SWAP_complex(p.f,swapndft);
-    }
+    CSWAP(p.f, swapndft);
+  }
   else
-    t_ndft=nan("");
+    t_ndft = MKNAN("");
 
-  /** NFFTs */
-  nfft_trafo(&p);
-  nfft_trafo(&p_pre_phi_hut);
-  if(test_fg)
-    nfft_trafo(&p_fg_psi);
+  /* NFFTs */
+  NFFT(trafo)(&p);
+  NFFT(trafo)(&p_pre_phi_hut);
+  if (test_fg)
+    NFFT(trafo)(&p_fg_psi);
   else
-    p_fg_psi.MEASURE_TIME_t[2]=nan("");
-  nfft_trafo(&p_pre_lin_psi);
-  if(test_fg)
-    nfft_trafo(&p_pre_fg_psi);
+    p_fg_psi.MEASURE_TIME_t[2] = MKNAN("");
+  NFFT(trafo)(&p_pre_lin_psi);
+  if (test_fg)
+    NFFT(trafo)(&p_pre_fg_psi);
   else
-    p_pre_fg_psi.MEASURE_TIME_t[2]=nan("");
-  nfft_trafo(&p_pre_psi);
-  if(test_pre_full_psi)
-    nfft_trafo(&p_pre_full_psi);
+    p_pre_fg_psi.MEASURE_TIME_t[2] = MKNAN("");
+  NFFT(trafo)(&p_pre_psi);
+  if (test_pre_full_psi)
+    NFFT(trafo)(&p_pre_full_psi);
   else
-    p_pre_full_psi.MEASURE_TIME_t[2]=nan("");
+    p_pre_full_psi.MEASURE_TIME_t[2] = MKNAN("");
 
-  if(test_fftw==0)
-    p.MEASURE_TIME_t[1]=nan("");
+  if (test_fftw == 0)
+    p.MEASURE_TIME_t[1] = MKNAN("");
 
-  if(test_ndft)
-    e=X(error_l_2_complex)(swapndft, p.f, p.M_total);
+  if (test_ndft)
+    e = NFFT(error_l_2_complex)(swapndft, p.f, p.M_total);
   else
-    e=nan("");
+    e = MKNAN("");
 
-  printf("%.2e\t%d\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\n",
-         t_ndft,
-         m,
-         e,
-         p.MEASURE_TIME_t[0],
-         p_pre_phi_hut.MEASURE_TIME_t[0],
-
-         p.MEASURE_TIME_t[1],
-
-         p.MEASURE_TIME_t[2],
-         p_fg_psi.MEASURE_TIME_t[2],
-         p_pre_lin_psi.MEASURE_TIME_t[2],
-         p_pre_fg_psi.MEASURE_TIME_t[2],
-         p_pre_psi.MEASURE_TIME_t[2],
-         p_pre_full_psi.MEASURE_TIME_t[2]);
+  printf(
+      "%.2" __FES__ "\t%d\t%.2" __FES__ "\t%.2" __FES__ "\t%.2" __FES__ "\t%.2" __FES__ "\t%.2" __FES__ "\t%.2" __FES__ "\t%.2" __FES__ "\t%.2" __FES__ "\t%.2" __FES__ "\t%.2" __FES__ "\n",
+      t_ndft, m, e, p.MEASURE_TIME_t[0], p_pre_phi_hut.MEASURE_TIME_t[0],
+      p.MEASURE_TIME_t[1], p.MEASURE_TIME_t[2], p_fg_psi.MEASURE_TIME_t[2],
+      p_pre_lin_psi.MEASURE_TIME_t[2], p_pre_fg_psi.MEASURE_TIME_t[2],
+      p_pre_psi.MEASURE_TIME_t[2], p_pre_full_psi.MEASURE_TIME_t[2]);
 
   fflush(stdout);
 
   /** finalise */
-  if(test_pre_full_psi)
-    nfft_finalize(&p_pre_full_psi);
-  nfft_finalize(&p_pre_psi);
-  if(test_fg)
-    nfft_finalize(&p_pre_fg_psi);
-  nfft_finalize(&p_pre_lin_psi);
-  if(test_fg)
-    nfft_finalize(&p_fg_psi);
-  nfft_finalize(&p_pre_phi_hut);
-  nfft_finalize(&p);
-
-  if(test_ndft)
-    nfft_free(swapndft);
+  if (test_pre_full_psi)
+    NFFT(finalize)(&p_pre_full_psi);
+  NFFT(finalize)(&p_pre_psi);
+  if (test_fg)
+    NFFT(finalize)(&p_pre_fg_psi);
+  NFFT(finalize)(&p_pre_lin_psi);
+  if (test_fg)
+    NFFT(finalize)(&p_fg_psi);
+  NFFT(finalize)(&p_pre_phi_hut);
+  NFFT(finalize)(&p);
+
+  if (test_ndft)
+    NFFT(free)(swapndft);
 }
 
 static void accuracy_pre_lin_psi(int d, int N, int M, int n, int m, int K)
 {
   int r, NN[d], nn[d];
-  double e;
-  double _Complex *swapndft;
+  R e;
+  C *swapndft;
 
-  nfft_plan p;
+  NFFT(plan) p;
 
-  for(r=0; r<d; r++)
-    {
-      NN[r]=N;
-      nn[r]=n;
-    }
+  for (r = 0; r < d; r++)
+  {
+    NN[r] = N;
+    nn[r] = n;
+  }
 
-  /** output vector ndft */
-  swapndft=(double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+  /* output vector ndft */
+  swapndft = (C*) NFFT(malloc)((size_t)(M) * sizeof(C));
 
-  nfft_init_guru(&p, d, NN, M, nn, m,
-                 MALLOC_X| MALLOC_F_HAT| MALLOC_F|
-                 PRE_PHI_HUT| PRE_LIN_PSI|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&p, d, NN, M, nn, m,
+  MALLOC_X | MALLOC_F_HAT | MALLOC_F |
+  PRE_PHI_HUT | PRE_LIN_PSI |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /** realloc psi */
-  nfft_free(p.psi);
-  p.K=K;
-  p.psi=(double*) nfft_malloc((p.K+1)*p.d*sizeof(double));
+  NFFT(free)(p.psi);
+  p.K = K;
+  p.psi = (R*) NFFT(malloc)((size_t)((p.K + 1) * p.d) * sizeof(R));
 
   /** precomputation can be done before the nodes are initialised */
-  nfft_precompute_one_psi(&p);
+  NFFT(precompute_one_psi)(&p);
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.d * p.M_total);
 
   /** init pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+  NFFT(vrand_unit_complex)(p.f_hat, p.N_total);
 
   /** compute exact result */
-  NFFT_SWAP_complex(p.f,swapndft);
-  nfft_trafo_direct(&p);
-  NFFT_SWAP_complex(p.f,swapndft);
+  CSWAP(p.f, swapndft);
+  NFFT(trafo_direct)(&p);
+  CSWAP(p.f, swapndft);
 
   /** NFFT */
-  nfft_trafo(&p);
-  e=X(error_l_2_complex)(swapndft, p.f, p.M_total);
+  NFFT(trafo)(&p);
+  e = NFFT(error_l_2_complex)(swapndft, p.f, p.M_total);
 
   //  printf("%d\t%d\t%d\t%d\t%.2e\n",d,N,m,K,e);
-  printf("$%.1e$&\t",e);
+  printf("$%.1" __FES__ "$&\t", e);
 
   fflush(stdout);
 
   /** finalise */
-  nfft_finalize(&p);
-  nfft_free(swapndft);
+  NFFT(finalize)(&p);
+  NFFT(free)(swapndft);
 }
 
-
-int main(int argc,char **argv)
+int main(int argc, char **argv)
 {
-  int l,m,d,trial,N;
+  int l, trial;
 
-  if(argc<=2)
-    {
-      fprintf(stderr,"flags type first last trials d m\n");
-      return -1;
-    }
+  if (argc <= 2)
+  {
+    fprintf(stderr, "flags type first last trials d m\n");
+    return EXIT_FAILURE;
+  }
 
-  if((test==0)&&(atoi(argv[1])<2))
-    {
-      fprintf(stderr,"MEASURE_TIME in nfft3util.h not set\n");
-      return -1;
-    }
+  if ((test == 0) && (atoi(argv[1]) < 2))
+  {
+    fprintf(stderr, "MEASURE_TIME in infft.h not set\n");
+    return EXIT_FAILURE;
+  }
 
-  fprintf(stderr,"Testing different precomputation schemes for the nfft.\n");
-  fprintf(stderr,"Columns: d, N=M, t_ndft, e_nfft, t_D, t_pre_phi_hut, ");
-  fprintf(stderr,"t_fftw, t_B, t_fg_psi, t_pre_lin_psi, t_pre_fg_psi, ");
-  fprintf(stderr,"t_pre_psi, t_pre_full_psi\n\n");
+  fprintf(stderr, "Testing different precomputation schemes for the nfft.\n");
+  fprintf(stderr, "Columns: d, N=M, t_ndft, e_nfft, t_D, t_pre_phi_hut, ");
+  fprintf(stderr, "t_fftw, t_B, t_fg_psi, t_pre_lin_psi, t_pre_fg_psi, ");
+  fprintf(stderr, "t_pre_psi, t_pre_full_psi\n\n");
 
-  d=atoi(argv[5]);
-  m=atoi(argv[6]);
+  int arg2 = atoi(argv[2]);
+  int arg3 = atoi(argv[3]);
+  int arg4 = atoi(argv[4]);
 
   /* time vs. N=M */
-  if(atoi(argv[1])==0)
-    for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
-      for(trial=0; trial<atoi(argv[4]); trial++)
-	{
-	  if(l<=20)
-	    time_accuracy(d, (1U<< l), (1U<< (d*l)), (1U<< (l+1)), m, 0, 0);
-	  else
-	    time_accuracy(d, (1U<< l), (1U<< (d*l)), (1U<< (l+1)), m, 0, 0);
-	}
-
-  d=atoi(argv[5]);
-  N=atoi(argv[6]);
-
-  /* accuracy vs. time */
-  if(atoi(argv[1])==1)
-    for(m=atoi(argv[2]); m<=atoi(argv[3]); m++)
-      for(trial=0; trial<atoi(argv[4]); trial++)
-        time_accuracy(d, N, (int)pow(N,d), 2*N, m, 1, 1);
-
-  d=atoi(argv[5]);
-  N=atoi(argv[6]);
-  m=atoi(argv[7]);
-
-  /* accuracy vs. K for linear interpolation, assumes (m+1)|K */
-  if(atoi(argv[1])==2)
+  if (atoi(argv[1]) == 0)
+  {
+    int d = atoi(argv[5]);
+    int m = atoi(argv[6]);
+
+    for (l = arg2; l <= arg3; l++)
     {
-      printf("$\\log_2(K/(m+1))$&\t");
-      for(l=atoi(argv[2]); l<atoi(argv[3]); l++)
-	printf("$%d$&\t",l);
+      int N = (int)(1U << l);
+      int M = (int)(1U << (d * l));
+      for (trial = 0; trial < arg4; trial++)
+      {
+        time_accuracy(d, N, M, 2 * N, m, 0, 0);
+      }
+    }
+  }
+  else if (atoi(argv[1]) == 1) /* accuracy vs. time */
+  {
+    int d = atoi(argv[5]);
+    int N = atoi(argv[6]);
+    int m;
+
+    for (m = arg2; m <= arg3; m++)
+    {
+      for (trial = 0; trial < arg4; trial++)
+      {
+        time_accuracy(d, N, (int)(LRINT(POW((R)(N), (R)(d)))), 2 * N, m, 1, 1);
+      }
+    }
+  }
+  else if (atoi(argv[1]) == 2) /* accuracy vs. K for linear interpolation, assumes (m+1)|K */
+  {
+    int d = atoi(argv[5]);
+    int N = atoi(argv[6]);
+    int m = atoi(argv[7]);
+
+    printf("$\\log_2(K/(m+1))$&\t");
 
-      printf("$%d$\\\\\n",atoi(argv[3]));
+    for (l = arg2; l < arg3; l++)
+      printf("$%d$&\t", l);
 
-      printf("$\\tilde E_2$&\t");
-      for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
-	accuracy_pre_lin_psi(d, N, (int)pow(N,d), 2*N, m, (m+1)*(1U<< l));
+    printf("$%d$\\\\\n", arg3);
 
-      printf("\n");
+    printf("$\\tilde E_2$&\t");
+    for (l = arg2; l <= arg3; l++)
+    {
+      int x = (m + 1) * (int)(1U << l);
+      accuracy_pre_lin_psi(d, N, (int)(LRINT(POW((R)(N), (R)(d)))), 2 * N, m, x);
     }
 
-  return 1;
+    printf("\n");
+  }
+
+
+  return EXIT_SUCCESS;
 }
diff --git a/examples/nfft/flags.m b/examples/nfft/flags.m
index ca67140..ae5c7a5 100644
--- a/examples/nfft/flags.m
+++ b/examples/nfft/flags.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: flags.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 
 %% File: flags1.m
 %%
diff --git a/examples/nfft/ndft_fast.c b/examples/nfft/ndft_fast.c
index dbe3320..3cc17a2 100644
--- a/examples/nfft/ndft_fast.c
+++ b/examples/nfft/ndft_fast.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: ndft_fast.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /*! \file ndft_fast.c
  *
@@ -34,188 +34,193 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
-static void ndft_horner_trafo(nfft_plan *ths)
+static void ndft_horner_trafo(NFFT(plan) *ths)
 {
-  int j,k;
-  double _Complex *f_hat_k, *f_j;
-  double _Complex exp_omega_0;
+  INT j, k;
+  C *f_hat_k, *f_j;
+  C exp_omega_0;
 
-  for(j=0, f_j=ths->f; j<ths->M_total; j++, f_j++)
-    (*f_j) =0;
+  for (j = 0, f_j = ths->f; j < ths->M_total; j++, f_j++)
+    (*f_j) = K(0.0);
 
-  for(j=0, f_j=ths->f; j<ths->M_total; j++, f_j++)
+  for (j = 0, f_j = ths->f; j < ths->M_total; j++, f_j++)
+  {
+    exp_omega_0 = CEXP(+K2PI * II * ths->x[j]);
+    for (k = 0, f_hat_k = ths->f_hat; k < ths->N[0]; k++, f_hat_k++)
     {
-      exp_omega_0 = cexp(+2*PI*_Complex_I*ths->x[j]);
-      for(k=0, f_hat_k= ths->f_hat; k<ths->N[0]; k++, f_hat_k++)
-        {
-          (*f_j)+=(*f_hat_k);
-          (*f_j)*=exp_omega_0;
-	}
-      (*f_j)*=cexp(-PI*_Complex_I*ths->N[0]*ths->x[j]);
+      (*f_j) += (*f_hat_k);
+      (*f_j) *= exp_omega_0;
     }
+    (*f_j) *= CEXP(-KPI * II * (R)(ths->N[0]) * ths->x[j]);
+  }
 } /* ndft_horner_trafo */
 
-static void ndft_pre_full_trafo(nfft_plan *ths, double _Complex *A)
+static void ndft_pre_full_trafo(NFFT(plan) *ths, C *A)
 {
-  int j,k;
-  double _Complex *f_hat_k, *f_j;
-  double _Complex *A_local;
+  INT j, k;
+  C *f_hat_k, *f_j;
+  C *A_local;
 
-  for(j=0, f_j=ths->f; j<ths->M_total; j++, f_j++)
-    (*f_j) =0;
+  for (j = 0, f_j = ths->f; j < ths->M_total; j++, f_j++)
+    (*f_j) = K(0.0);
 
-  for(j=0, f_j=ths->f, A_local=A; j<ths->M_total; j++, f_j++)
-    for(k=0, f_hat_k= ths->f_hat; k<ths->N[0]; k++, f_hat_k++, A_local++)
-      (*f_j) += (*f_hat_k)*(*A_local);
+  for (j = 0, f_j = ths->f, A_local = A; j < ths->M_total; j++, f_j++)
+    for (k = 0, f_hat_k = ths->f_hat; k < ths->N[0]; k++, f_hat_k++, A_local++)
+      (*f_j) += (*f_hat_k) * (*A_local);
 } /* ndft_pre_full_trafo */
 
-static void ndft_pre_full_init(nfft_plan *ths, double _Complex *A)
+static void ndft_pre_full_init(NFFT(plan) *ths, C *A)
 {
-  int j,k;
-  double _Complex *f_hat_k, *f_j, *A_local;
+  INT j, k;
+  C *f_hat_k, *f_j, *A_local;
 
-  for(j=0, f_j=ths->f, A_local=A; j<ths->M_total; j++, f_j++)
-    for(k=0, f_hat_k= ths->f_hat; k<ths->N[0]; k++, f_hat_k++, A_local++)
-      (*A_local) = cexp(-2*PI*_Complex_I*(k-ths->N[0]/2)*ths->x[j]);
+  for (j = 0, f_j = ths->f, A_local = A; j < ths->M_total; j++, f_j++)
+    for (k = 0, f_hat_k = ths->f_hat; k < ths->N[0]; k++, f_hat_k++, A_local++)
+      (*A_local) = CEXP(
+          -K2PI * II * ((R) (k) - (R) (ths->N[0]) / K(2.0)) * ths->x[j]);
 
 } /* ndft_pre_full_init */
 
 static void ndft_time(int N, int M, unsigned test_ndft, unsigned test_pre_full)
 {
   int r;
-  double t, t_ndft, t_horner, t_pre_full, t_nfft;
-  double _Complex *A = NULL;
+  R t, t_ndft, t_horner, t_pre_full, t_nfft;
+  C *A = NULL;
   ticks t0, t1;
 
-  nfft_plan np;
-
-  printf("%d\t%d\t",N, M);
-
-  nfft_init_1d(&np, N, M);
+  NFFT(plan) np;
 
-  /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(np.x, np.M_total);
+  printf("%d\t%d\t", N, M);
 
-  if(test_pre_full)
-   {
-     A=(double _Complex*)nfft_malloc(N*M*sizeof(double _Complex));
-     ndft_pre_full_init(&np, A);
-   }
+  NFFT(init_1d)(&np, N, M);
 
-  /** init pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(np.f_hat, np.N_total);
+  /* Initialize pseudo random nodes. */
+  NFFT(vrand_shifted_unit_double)(np.x, np.M_total);
 
-  /** NDFT */
-  if(test_ndft)
-    {
-      t_ndft=0;
-      r=0;
-      while(t_ndft<0.1)
-        {
-          r++;
-          t0 = getticks();
-          nfft_trafo_direct(&np);
-          t1 = getticks();
-          t = nfft_elapsed_seconds(t1,t0);
-          t_ndft+=t;
-        }
-      t_ndft/=r;
+  if (test_pre_full)
+  {
+    A = (C*) NFFT(malloc)((size_t)(N * M) * sizeof(R));
+    ndft_pre_full_init(&np, A);
+  }
 
-      printf("%.2e\t",t_ndft);
-    }
-  else
-    printf("nan\t\t");
+  /* Initialize pseudo random Fourier coefficients. */
+  NFFT(vrand_unit_complex)(np.f_hat, np.N_total);
 
-  /** Horner NDFT */
-  t_horner=0;
-  r=0;
-  while(t_horner<0.1)
+  /* NDFT */
+  if (test_ndft)
+  {
+    t_ndft = K(0.0);
+    r = 0;
+    while (t_ndft < K(0.1))
     {
       r++;
       t0 = getticks();
-      ndft_horner_trafo(&np);
+      NFFT(trafo_direct)(&np);
       t1 = getticks();
-      t = nfft_elapsed_seconds(t1,t0);
-      t_horner+=t;
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_ndft += t;
     }
-  t_horner/=r;
-
-  printf("%.2e\t", t_horner);
+    t_ndft /= (R) (r);
 
-  /** Fully precomputed NDFT */
-  if(test_pre_full)
-    {
-      t_pre_full=0;
-      r=0;
-      while(t_pre_full<0.1)
-        {
-          r++;
-          t0 = getticks();
-          ndft_pre_full_trafo(&np,A);
-          t1 = getticks();
-          t = nfft_elapsed_seconds(t1,t0);
-          t_pre_full+=t;
-        }
-      t_pre_full/=r;
-
-      printf("%.2e\t", t_pre_full);
-    }
+    printf("%.2" __FES__ "\t", t_ndft);
+  }
   else
-    printf("nan\t\t");
-
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
+    printf("N/A\t\t");
+
+  /* Horner NDFT */
+  t_horner = K(0.0);
+  r = 0;
+  while (t_horner < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    ndft_horner_trafo(&np);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_horner += t;
+  }
+  t_horner /= (R)(r);
+
+  printf("%.2" __FES__ "\t", t_horner);
+
+  /* Fully precomputed NDFT */
+  if (test_pre_full)
+  {
+    t_pre_full = K(0.0);
+    r = 0;
+    while (t_pre_full < K(0.1))
     {
       r++;
       t0 = getticks();
-      nfft_trafo(&np);
+      ndft_pre_full_trafo(&np, A);
       t1 = getticks();
-      t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_pre_full += t;
     }
-  t_nfft/=r;
+    t_pre_full /= (R)(r);
 
-  printf("%.2e\n", t_nfft);
+    printf("%.2" __FES__ "\t", t_pre_full);
+  }
+  else
+    printf("N/A\t\t");
+
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(trafo)(&np);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+
+  printf("%.2" __FES__ "\n", t_nfft);
 
   fflush(stdout);
 
-  if(test_pre_full)
-    nfft_free(A);
+  if (test_pre_full)
+    NFFT(free)(A);
 
-  nfft_finalize(&np);
+  NFFT(finalize)(&np);
 }
 
-int main(int argc,char **argv)
+int main(int argc, char **argv)
 {
-  int l,trial;
+  int l, trial;
 
-  if(argc<=2)
-    {
-      fprintf(stderr,"ndft_fast type first last trials\n");
-      return -1;
-    }
-
-  fprintf(stderr,"Testing ndft, Horner-like ndft, fully precomputed ndft.\n");
-  fprintf(stderr,"Columns: N, M, t_ndft, t_horner, t_pre_full, t_nfft\n\n");
-
-  /* time vs. N=M */
-  if(atoi(argv[1])==0)
+  if (argc < 4)
+  {
+    fprintf(stderr, "ndft_fast type first last trials\n");
+    return EXIT_FAILURE;
+  }
+  else
+  {
+    int arg2 = (atoi(argv[2]));
+    int arg3 = (atoi(argv[3]));
+    int arg4 = (atoi(argv[4]));
+    fprintf(stderr, "Testing ndft, Horner-like ndft, fully precomputed ndft.\n");
+    fprintf(stderr, "Columns: N, M, t_ndft, t_horner, t_pre_full, t_nfft\n\n");
+
+    /* time vs. N=M */
+    if (atoi(argv[1]) == 0)
     {
-      for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
-        for(trial=0; trial<atoi(argv[4]); trial++)
-          if(l<=13)
-            ndft_time((1U<< l), (1U<< l), 1, 1);
-          else
-            if(l<=15)
-              ndft_time((1U<< l), (1U<< l), 1, 0);
-            else
-              ndft_time((1U<< l), (1U<< l), 0, 0);
+      for (l = arg2; l <= arg3; l++)
+      {
+        for (trial = 0; trial < arg4; trial++)
+        {
+          int N = (int)(1U << l);
+          int M = (int)(1U << l);
+          ndft_time(N, M, l <= 15 ? 1 : 0, l <= 13 ? 1 : 0);
+        }
+      }
     }
+  }
 
-  return 1;
+  return EXIT_SUCCESS;
 }
diff --git a/examples/nfft/ndft_fast.m b/examples/nfft/ndft_fast.m
index 4003bb9..846ce8d 100644
--- a/examples/nfft/ndft_fast.m
+++ b/examples/nfft/ndft_fast.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: ndft_fast.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 
 %% File: ndft_fast.m
 %%
diff --git a/examples/nfft/nfft_benchomp.c b/examples/nfft/nfft_benchomp.c
index 2c85d7d..825e154 100644
--- a/examples/nfft/nfft_benchomp.c
+++ b/examples/nfft/nfft_benchomp.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -22,8 +22,8 @@
 
 #include "config.h"
 
-#include <nfft3.h>
-#include <nfft3util.h>
+#include "nfft3.h"
+#include "infft.h"
 
 #define NREPEAT 5
 
@@ -31,7 +31,7 @@ static FILE* file_out_tex = NULL;
 
 int get_nthreads_array(int **arr)
 {
-  int max_threads = nfft_get_omp_num_threads();
+  int max_threads = NFFT(get_num_threads)();
   int alloc_num = 2;
   int k;
   int ret_number = 0;
@@ -561,6 +561,99 @@ void test1(int *nthreads_array, int n_threads_array_size, int m)
 
 }
 
+void test2(int *nthreads_array, int n_threads_array_size, int m)
+{
+  s_testset testsets[15];
+
+  run_testset(&testsets[0], 1, 0, 16777216, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[0]);
+#endif
+
+  run_testset(&testsets[1], 1, 0, 16777216, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[1]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets, 2);
+
+  run_testset(&testsets[2], 1, 1, 16777216, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[2]);
+#endif
+
+  run_testset(&testsets[3], 1, 1, 16777216, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[3]);
+#endif
+
+  run_testset(&testsets[4], 1, 1, 16777216, 2097152, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[4]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+2, 3);
+
+  run_testset(&testsets[5], 2, 0, 4096, 1048576, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[5]);
+#endif
+
+  run_testset(&testsets[6], 2, 0, 4096, 1048576, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[6]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+5, 2);
+
+  run_testset(&testsets[7], 2, 1, 4096, 1048576, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[7]);
+#endif
+
+  run_testset(&testsets[8], 2, 1, 4096, 1048576, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[8]);
+#endif
+
+  run_testset(&testsets[9], 2, 1, 4096, 1048576, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[9]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+7, 3);
+
+  run_testset(&testsets[10], 3, 0, 256, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[10]);
+#endif
+
+  run_testset(&testsets[11], 3, 0, 256, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[11]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+10, 2);
+
+  run_testset(&testsets[12], 3, 1, 256, 2097152, 2.0, m, 0, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[12]);
+#endif
+
+  run_testset(&testsets[13], 3, 1, 256, 2097152, 2.0, m, NFFT_SORT_NODES, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[13]);
+#endif
+
+  run_testset(&testsets[14], 3, 1, 256, 2097152, 2.0, m, NFFT_SORT_NODES | NFFT_OMP_BLOCKWISE_ADJOINT, nthreads_array, n_threads_array_size);
+#if defined MEASURE_TIME && defined MEASURE_TIME_FFTW
+  print_output_histo_DFBRT(file_out_tex, testsets[14]);
+#endif
+
+  print_output_speedup_total(file_out_tex, testsets+12, 3);
+
+}
+
 int main(int argc, char** argv)
 {
   int *nthreads_array;
@@ -583,6 +676,7 @@ int main(int argc, char** argv)
   test1(nthreads_array, n_threads_array_size, 2);
   test1(nthreads_array, n_threads_array_size, 4);
   test1(nthreads_array, n_threads_array_size, 6);
+//  test2(nthreads_array, n_threads_array_size, 2);
 
   fclose(file_out_tex);
 
diff --git a/examples/nfft/nfft_benchomp_createdataset.c b/examples/nfft/nfft_benchomp_createdataset.c
index 8edc466..eb768bb 100644
--- a/examples/nfft/nfft_benchomp_createdataset.c
+++ b/examples/nfft/nfft_benchomp_createdataset.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -26,7 +26,6 @@
 
 #include "config.h"
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -41,23 +40,23 @@ void nfft_benchomp_createdataset(unsigned int d, unsigned int trafo_adjoint, int
   for (t = 0; t < d; t++)
     N_total *= N[t];
 
-  x = (R*) nfft_malloc(d*M*sizeof(R));
-  f = (C*) nfft_malloc(M*sizeof(C));
-  f_hat = (C*) nfft_malloc(N_total*sizeof(C));
+  x = (R*) NFFT(malloc)(d*M*sizeof(R));
+  f = (C*) NFFT(malloc)(M*sizeof(C));
+  f_hat = (C*) NFFT(malloc)(N_total*sizeof(C));
 
   for (t=0; t<d; t++)
-    n[t] = sigma*nfft_next_power_of_2(N[t]);
+    n[t] = sigma*NFFT(next_power_of_2)(N[t]);
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(x,d*M);
+  NFFT(vrand_shifted_unit_double)(x,d*M);
  
   if (trafo_adjoint==0)
   {
-    nfft_vrand_unit_complex(f_hat,N_total);
+    NFFT(vrand_unit_complex)(f_hat,N_total);
   }
   else
   {
-    nfft_vrand_unit_complex(f,M);
+    NFFT(vrand_unit_complex)(f,M);
   }
 
   printf("%d %d ", d, trafo_adjoint);
@@ -88,9 +87,9 @@ void nfft_benchomp_createdataset(unsigned int d, unsigned int trafo_adjoint, int
       printf("%.16e %.16e\n", creal(f[j]), cimag(f[j]));
   }
 
-  nfft_free(x);
-  nfft_free(f);
-  nfft_free(f_hat);
+  NFFT(free)(x);
+  NFFT(free)(f);
+  NFFT(free)(f_hat);
 }
 
 int main(int argc, char **argv)
diff --git a/examples/nfft/nfft_benchomp_detail.c b/examples/nfft/nfft_benchomp_detail.c
index 7818550..6aa8b84 100644
--- a/examples/nfft/nfft_benchomp_detail.c
+++ b/examples/nfft/nfft_benchomp_detail.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -24,7 +24,6 @@
 #include <stdlib.h>
 #include <complex.h>
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 #ifdef _OPENMP
@@ -33,7 +32,7 @@
 
 void bench_openmp(FILE *infile, int m, int psi_flag)
 {
-  nfft_plan p;
+  NFFT(plan) p;
   int *N;
   int *n;
   int M, d, trafo_adjoint;
@@ -56,20 +55,20 @@ void bench_openmp(FILE *infile, int m, int psi_flag)
   fscanf(infile, "%d", &M);
 
 #ifdef _OPENMP
-  fftw_import_wisdom_from_filename("nfft_benchomp_detail_threads.plan");
+  FFTW(import_wisdom_from_filename)("nfft_benchomp_detail_threads.plan");
 #else
-  fftw_import_wisdom_from_filename("nfft_benchomp_detail_single.plan");
+  FFTW(import_wisdom_from_filename)("nfft_benchomp_detail_single.plan");
 #endif
 
   /** init an d-dimensional plan */
-  nfft_init_guru(&p, d, N, M, n, m,
+  NFFT(init_guru)(&p, d, N, M, n, m,
                    PRE_PHI_HUT| psi_flag | MALLOC_X | MALLOC_F_HAT| MALLOC_F| FFTW_INIT | FFT_OUT_OF_PLACE,
                    FFTW_MEASURE| FFTW_DESTROY_INPUT);
 
 #ifdef _OPENMP
-  fftw_export_wisdom_to_filename("nfft_benchomp_detail_threads.plan");
+  FFTW(export_wisdom_to_filename)("nfft_benchomp_detail_threads.plan");
 #else
-  fftw_export_wisdom_to_filename("nfft_benchomp_detail_single.plan");
+  FFTW(export_wisdom_to_filename)("nfft_benchomp_detail_single.plan");
 #endif
 
   for (j=0; j < p.M_total; j++)
@@ -97,17 +96,17 @@ void bench_openmp(FILE *infile, int m, int psi_flag)
 
   t0 = getticks();
   /** precompute psi, the entries of the matrix B */
-  if(p.nfft_flags & PRE_ONE_PSI)
-      nfft_precompute_one_psi(&p);
+  if(p.flags & PRE_ONE_PSI)
+      NFFT(precompute_one_psi)(&p);
   t1 = getticks();
-  tt_preonepsi = nfft_elapsed_seconds(t1,t0);
+  tt_preonepsi = NFFT(elapsed_seconds)(t1,t0);
 
   if (trafo_adjoint==0)
-    nfft_trafo(&p);
+    NFFT(trafo)(&p);
   else
-    nfft_adjoint(&p);
+    NFFT(adjoint)(&p);
   t1 = getticks();
-  tt_total = nfft_elapsed_seconds(t1,t0);
+  tt_total = NFFT(elapsed_seconds)(t1,t0);
 
 #ifndef MEASURE_TIME
   p.MEASURE_TIME_t[0] = 0.0;
@@ -125,7 +124,7 @@ void bench_openmp(FILE *infile, int m, int psi_flag)
   free(n);
 
   /** finalise the one dimensional plan */
-  nfft_finalize(&p);
+  NFFT(finalize)(&p);
 }
 
 int main(int argc, char **argv)
@@ -138,7 +137,7 @@ int main(int argc, char **argv)
     return 1;
 
   nthreads = atoi(argv[3]);
-  fftw_init_threads();
+  FFTW(init_threads)();
   omp_set_num_threads(nthreads);
 #else
   if (argc != 3)
diff --git a/examples/nfft/nfft_times.c b/examples/nfft/nfft_times.c
index 18a1496..766f902 100644
--- a/examples/nfft/nfft_times.c
+++ b/examples/nfft/nfft_times.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nfft_times.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdio.h>
@@ -27,447 +27,470 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
 int global_n;
 int global_d;
 
-static int comp1(const void *x,const void *y)
+static int comp1(const void *x, const void *y)
 {
-  return ((* (double*) x)<(* (double*) y)?-1:1);
+  return ((*(const R*) x) < (*(const R*) y) ? -1 : 1);
 }
 
-static int comp2(const void *x,const void *y)
+static int comp2(const void *x, const void *y)
 {
-  int nx0,nx1,ny0,ny1;
-  nx0=global_n*(* ((double*)x+0));
-  nx1=global_n*(* ((double*)x+1));
-  ny0=global_n*(* ((double*)y+0));
-  ny1=global_n*(* ((double*)y+1));
+  int nx0, nx1, ny0, ny1;
+  nx0 = global_n * (int)LRINT(*((const R*) x + 0));
+  nx1 = global_n * (int)LRINT(*((const R*) x + 1));
+  ny0 = global_n * (int)LRINT(*((const R*) y + 0));
+  ny1 = global_n * (int)LRINT(*((const R*) y + 1));
 
-  if(nx0<ny0)
+  if (nx0 < ny0)
     return -1;
-  else
-    if(nx0==ny0)
-      if(nx1<ny1)
-	return -1;
-      else
-	return 1;
+  else if (nx0 == ny0)
+    if (nx1 < ny1)
+      return -1;
     else
       return 1;
+  else
+    return 1;
 }
 
-static int comp3(const void *x,const void *y)
+static int comp3(const void *x, const void *y)
 {
-  int nx0,nx1,nx2,ny0,ny1,ny2;
-  nx0=global_n*(* ((double*)x+0));
-  nx1=global_n*(* ((double*)x+1));
-  nx2=global_n*(* ((double*)x+2));
-  ny0=global_n*(* ((double*)y+0));
-  ny1=global_n*(* ((double*)y+1));
-  ny2=global_n*(* ((double*)y+2));
-
-  if(nx0<ny0)
+  int nx0, nx1, nx2, ny0, ny1, ny2;
+  nx0 = global_n * (int)LRINT(*((const R*) x + 0));
+  nx1 = global_n * (int)LRINT(*((const R*) x + 1));
+  nx2 = global_n * (int)LRINT(*((const R*) x + 2));
+  ny0 = global_n * (int)LRINT(*((const R*) y + 0));
+  ny1 = global_n * (int)LRINT(*((const R*) y + 1));
+  ny2 = global_n * (int)LRINT(*((const R*) y + 2));
+
+  if (nx0 < ny0)
     return -1;
-  else
-    if(nx0==ny0)
-      if(nx1<ny1)
-	return -1;
+  else if (nx0 == ny0)
+    if (nx1 < ny1)
+      return -1;
+    else if (nx1 == ny1)
+      if (nx2 < ny2)
+        return -1;
       else
-	if(nx1==ny1)
-	  if(nx2<ny2)
-	    return -1;
-	  else
-	    return 1;
-	else
-	  return 1;
+        return 1;
     else
       return 1;
+  else
+    return 1;
 }
 
-void measure_time_nfft(int d, int N, unsigned test_ndft)
+static void measure_time_nfft(int d, int N, unsigned test_ndft)
 {
   int r, M, NN[d], nn[d];
-  double t, t_fft, t_ndft, t_nfft;
+  R t, t_fft, t_ndft, t_nfft;
   ticks t0, t1;
 
-  nfft_plan p;
-  fftw_plan p_fft;
+  NFFT(plan) p;
+  FFTW(plan) p_fft;
 
-  printf("\\verb+%d+&\t",(int)(log(N)/log(2)*d+0.5));
+  printf("\\verb+%ld+&\t", LRINT(LOG((R)(N)) / LOG((R)(2)) * (R)(d) + K(0.5)));
 
-  for(r=0,M=1;r<d;r++)
-    {
-      M=N*M;
-      NN[r]=N;
-      nn[r]=2*N;
-    }
+  for (r = 0, M = 1; r < d; r++)
+  {
+    M = N * M;
+    NN[r] = N;
+    nn[r] = 2 * N;
+  }
 
-  nfft_init_guru(&p, d, NN, M, nn, 2,
-		 PRE_PHI_HUT|
-		 PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&p, d, NN, M, nn, 2,
+  PRE_PHI_HUT |
+  PRE_FULL_PSI | MALLOC_F_HAT | MALLOC_X | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
-  p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+  p_fft = FFTW(plan_dft)(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.d * p.M_total);
+
+  global_n = nn[0];
+  global_d = d;
 
-  global_n=nn[0];
-  global_d=d;
-  switch(d)
+  switch (d)
+  {
+    case 1:
+    {
+      qsort(p.x, (size_t)(p.M_total), (size_t)(d) * sizeof(R), comp1);
+      break;
+    }
+    case 2:
+    {
+      qsort(p.x, (size_t)(p.M_total), (size_t)(d) * sizeof(R), comp2);
+      break;
+    }
+    case 3:
     {
-      case 1: { qsort(p.x,p.M_total,d*sizeof(double),comp1); break; }
-      case 2: { qsort(p.x,p.M_total,d*sizeof(double),comp2); break; }
-      case 3: { qsort(p.x,p.M_total,d*sizeof(double),comp3); break; }
+      qsort(p.x, (size_t)(p.M_total), (size_t)(d) * sizeof(R), comp3);
+      break;
     }
+  }
 
-  nfft_precompute_one_psi(&p);
+  NFFT(precompute_one_psi)(&p);
 
-  /** init pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+  /* init pseudo random Fourier coefficients */
+  NFFT(vrand_unit_complex)(p.f_hat, p.N_total);
 
   /** FFT */
-  t_fft=0;
-  r=0;
-  while(t_fft<1)
+  t_fft = K(0.0);
+  r = 0;
+
+  while (t_fft < K(1.0))
+  {
+    r++;
+    t0 = getticks();
+    FFTW(execute)(p_fft);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_fft += t;
+  }
+  t_fft /= (R)(r);
+
+  //  printf("\\verb+%.1" __FES__ "+ & \\verb+(%.1f)+ &\t",t_fft,t_fft/(p.N_total*(log(N)/log(2)*d))*auxC);
+  printf("\\verb+%.1" __FES__ "+ &\t", t_fft);
+
+  /** NDFT */
+  if (test_ndft)
+  {
+    t_ndft = K(0.0);
+    r = 0;
+    while (t_ndft < K(1.0))
     {
       r++;
       t0 = getticks();
-      fftw_execute(p_fft);
+      NFFT(trafo_direct)(&p);
       t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_fft+=t;
-    }
-  t_fft/=r;
-
-  //  printf("\\verb+%.1e+ & \\verb+(%.1f)+ &\t",t_fft,t_fft/(p.N_total*(log(N)/log(2)*d))*auxC);
-  printf("\\verb+%.1e+ &\t",t_fft);
-
-  /** NDFT */
-  if(test_ndft)
-    {
-      t_ndft=0;
-      r=0;
-      while(t_ndft<1)
-        {
-          r++;
-          t0 = getticks();
-          nfft_trafo_direct(&p);
-          t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-          t_ndft+=t;
-        }
-      t_ndft/=r;
-      //printf("\\verb+%.1e+ & \\verb+(%d)+&\t",t_ndft,(int)round(t_ndft/(p.N_total*p.N_total)*auxC));
-      printf("\\verb+%.1e+ &\t",t_ndft);
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_ndft += t;
     }
+    t_ndft /= (R)(r);
+    //printf("\\verb+%.1" __FES__ "+ & \\verb+(%d)+&\t",t_ndft,(int)round(t_ndft/(p.N_total*p.N_total)*auxC));
+    printf("\\verb+%.1" __FES__ "+ &\t", t_ndft);
+  }
   else
     //    printf("\\verb+*+\t&\t&\t");
     printf("\\verb+*+\t&\t");
 
   /** NFFT */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<1)
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(1.0))
+  {
+    r++;
+    t0 = getticks();
+    switch (d)
     {
-      r++;
-      t0 = getticks();
-      switch(d)
-	{
-	  case 1: { nfft_trafo_1d(&p); break; }
-	  case 2: { nfft_trafo_2d(&p); break; }
-	  case 3: { nfft_trafo_3d(&p); break; }
-          default: nfft_trafo(&p);
-	}
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
+      case 1:
+      {
+        NFFT(trafo_1d)(&p);
+        break;
+      }
+      case 2:
+      {
+        NFFT(trafo_2d)(&p);
+        break;
+      }
+      case 3:
+      {
+        NFFT(trafo_3d)(&p);
+        break;
+      }
+      default:
+        NFFT(trafo)(&p);
     }
-  t_nfft/=r;
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
 
-  //  printf("\\verb+%.1e+ & \\verb+(%d)+ & \\verb+(%.1e)+\\\\\n",t_nfft,(int)round(t_nfft/(p.N_total*(log(N)/log(2)*d))*auxC),t_nfft/t_fft);
-  printf("\\verb+%.1e+ & \\verb+(%3.1f)+\\\\\n",t_nfft,t_nfft/t_fft);
+  //  printf("\\verb+%.1" __FES__ "+ & \\verb+(%d)+ & \\verb+(%.1" __FES__ ")+\\\\\n",t_nfft,(int)round(t_nfft/(p.N_total*(log(N)/log(2)*d))*auxC),t_nfft/t_fft);
+  printf("\\verb+%.1" __FES__ "+ & \\verb+(%3.1" __FIS__ ")+\\\\\n", t_nfft, t_nfft / t_fft);
 
-  fftw_destroy_plan(p_fft);
-  nfft_finalize(&p);
+  FFTW(destroy_plan)(p_fft);
+  NFFT(finalize)(&p);
 }
 
-void measure_time_nfft_XXX2(int d, int N, unsigned test_ndft)
+static void measure_time_nfft_XXX2(int d, int N, unsigned test_ndft)
 {
   int r, M, NN[d], nn[d];
-  double t, t_fft, t_ndft, t_nfft;
+  R t, t_fft, t_ndft, t_nfft;
   ticks t0, t1;
 
-  nfft_plan p;
-  fftw_plan p_fft;
+  NFFT(plan) p;
+  FFTW(plan) p_fft;
 
-  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+  printf("%ld\t", LRINT(LOG((R)(N)) / LOG((R)(2)) * (R)(d) + K(0.5)));
+  fflush(stdout);
 
-  for(r=0,M=1;r<d;r++)
-    {
-      M=N*M;
-      NN[r]=N;
-      nn[r]=2*N;
-    }
+  for (r = 0, M = 1; r < d; r++)
+  {
+    M = N * M;
+    NN[r] = N;
+    nn[r] = 2 * N;
+  }
 
-  nfft_init_guru(&p, d, NN, M, nn, 2,
-		 PRE_PHI_HUT|
-		 PRE_PSI|
-		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&p, d, NN, M, nn, 2,
+  PRE_PHI_HUT |
+  PRE_PSI |
+  MALLOC_F_HAT | MALLOC_X | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
-  p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+  p_fft = FFTW(plan_dft)(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
 
-  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.M_total*sizeof(double _Complex));
+  C *swapndft = (C*) NFFT(malloc)((size_t)(p.M_total) * sizeof(C));
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.d * p.M_total);
 
-  qsort(p.x,p.M_total,d*sizeof(double),comp1);
+  qsort(p.x, (size_t)(p.M_total), (size_t)(d) * sizeof(R), comp1);
   //nfft_vpr_double(p.x,p.M_total,"nodes x");
 
-  nfft_precompute_one_psi(&p);
+  NFFT(precompute_one_psi)(&p);
 
   /** init pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+  NFFT(vrand_unit_complex)(p.f_hat, p.N_total);
 
   /** FFT */
-  t_fft=0;
-  r=0;
-  while(t_fft<0.1)
+  t_fft = K(0.0);
+  r = 0;
+  while (t_fft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    FFTW(execute)(p_fft);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_fft += t;
+  }
+  t_fft /= (R)(r);
+
+  printf("%.1" __FES__ "\t", t_fft);
+
+  /** NDFT */
+  if (test_ndft)
+  {
+    CSWAP(p.f, swapndft);
+    t_ndft = K(0.0);
+    r = 0;
+    while (t_ndft < K(0.1))
     {
       r++;
       t0 = getticks();
-      fftw_execute(p_fft);
+      NFFT(trafo_direct)(&p);
       t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_fft+=t;
-    }
-  t_fft/=r;
-
-  printf("%.1e\t",t_fft);
-
-  /** NDFT */
-  if(test_ndft)
-    {
-      NFFT_SWAP_complex(p.f,swapndft);
-      t_ndft=0;
-      r=0;
-      while(t_ndft<0.1)
-        {
-          r++;
-          t0 = getticks();
-          nfft_trafo_direct(&p);
-          t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-          t_ndft+=t;
-        }
-      t_ndft/=r;
-      printf("%.1e\t",t_ndft);
-      NFFT_SWAP_complex(p.f,swapndft);
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_ndft += t;
     }
+    t_ndft /= (R)(r);
+    printf("%.1" __FES__ "\t", t_ndft);
+    CSWAP(p.f, swapndft);
+  }
   else
     printf("\t");
 
   /** NFFT */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_trafo(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(trafo)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f, p.M_total));
 
   /** NFFT_1d */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_trafo_1d(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(trafo_1d)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f, p.M_total));
 
   printf("\n");
 
-  nfft_free(swapndft);
-  fftw_destroy_plan(p_fft);
-  nfft_finalize(&p);
+  NFFT(free)(swapndft);
+  FFTW(destroy_plan)(p_fft);
+  NFFT(finalize)(&p);
 }
 
-void measure_time_nfft_XXX3(int d, int N, unsigned test_ndft)
+static void measure_time_nfft_XXX3(int d, int N, unsigned test_ndft)
 {
   int r, M, NN[d], nn[d];
-  double t, t_fft, t_ndft, t_nfft;
+  R t, t_fft, t_ndft, t_nfft;
   ticks t0, t1;
 
-  nfft_plan p;
-  fftw_plan p_fft;
+  NFFT(plan) p;
+  FFTW(plan) p_fft;
 
-  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+  printf("%ld\t", LRINT(LOG((R)(N)) / LOG((R)(2)) * (R)(d) + K(0.5)));
+  fflush(stdout);
 
-  for(r=0,M=1;r<d;r++)
-    {
-      M=N*M;
-      NN[r]=N;
-      nn[r]=2*N;
-    }
+  for (r = 0, M = 1; r < d; r++)
+  {
+    M = N * M;
+    NN[r] = N;
+    nn[r] = 2 * N;
+  }
 
-  nfft_init_guru(&p, d, NN, M, nn, 2,
-		 PRE_PHI_HUT|
-		 PRE_PSI|
-		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&p, d, NN, M, nn, 2,
+  PRE_PHI_HUT |
+  PRE_PSI |
+  MALLOC_F_HAT | MALLOC_X | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
-  p_fft=fftw_plan_dft(d, NN, p.f, p.f_hat, FFTW_BACKWARD, FFTW_MEASURE);
+  p_fft = FFTW(plan_dft)(d, NN, p.f, p.f_hat, FFTW_BACKWARD, FFTW_MEASURE);
 
-  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.N_total*sizeof(double _Complex));
+  C *swapndft = (C*) NFFT(malloc)((size_t)(p.N_total) * sizeof(C));
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.d * p.M_total);
 
-  qsort(p.x,p.M_total,d*sizeof(double),comp1);
+  qsort(p.x, (size_t)(p.M_total), (size_t)(d) * sizeof(R), comp1);
   //nfft_vpr_double(p.x,p.M_total,"nodes x");
 
-  nfft_precompute_one_psi(&p);
+  NFFT(precompute_one_psi)(&p);
 
   /** init pseudo random samples */
-  nfft_vrand_unit_complex(p.f, p.N_total);
+  NFFT(vrand_unit_complex)(p.f, p.N_total);
 
   /** FFT */
-  t_fft=0;
-  r=0;
-  while(t_fft<0.1)
+  t_fft = K(0.0);
+  r = 0;
+  while (t_fft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    FFTW(execute)(p_fft);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_fft += t;
+  }
+  t_fft /= (R)(r);
+
+  printf("%.1" __FES__ "\t", t_fft);
+
+  /** NDFT */
+  if (test_ndft)
+  {
+    CSWAP(p.f_hat, swapndft);
+    t_ndft = K(0.0);
+    r = 0;
+    while (t_ndft < K(0.1))
     {
       r++;
       t0 = getticks();
-      fftw_execute(p_fft);
+      NFFT(adjoint_direct)(&p);
       t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_fft+=t;
-    }
-  t_fft/=r;
-
-  printf("%.1e\t",t_fft);
-
-  /** NDFT */
-  if(test_ndft)
-    {
-      NFFT_SWAP_complex(p.f_hat,swapndft);
-      t_ndft=0;
-      r=0;
-      while(t_ndft<0.1)
-        {
-          r++;
-          t0 = getticks();
-          nfft_adjoint_direct(&p);
-          t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-          t_ndft+=t;
-        }
-      t_ndft/=r;
-      printf("%.1e\t",t_ndft);
-      NFFT_SWAP_complex(p.f_hat,swapndft);
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_ndft += t;
     }
+    t_ndft /= (R)(r);
+    printf("%.1" __FES__ "\t", t_ndft);
+    CSWAP(p.f_hat, swapndft);
+  }
   else
     printf("\t");
 
   /** NFFT */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_adjoint(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(adjoint)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
 
   /** NFFT_1d */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_adjoint_1d(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(adjoint_1d)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
 
   printf("\n");
 
-  nfft_free(swapndft);
-  fftw_destroy_plan(p_fft);
-  nfft_finalize(&p);
+  NFFT(free)(swapndft);
+  FFTW(destroy_plan)(p_fft);
+  NFFT(finalize)(&p);
 }
 
-
-
-
-void measure_time_nfft_XXX4(int d, int N, unsigned test_ndft)
+static void measure_time_nfft_XXX4(int d, int N, unsigned test_ndft)
 {
   int r, M, NN[d], nn[d];
-  double t, t_fft, t_ndft, t_nfft;
+  R t, t_fft, t_ndft, t_nfft;
   ticks t0, t1;
 
-  nfft_plan p;
-  fftw_plan p_fft;
+  NFFT(plan) p;
+  FFTW(plan) p_fft;
 
-  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+  printf("%ld\t", LRINT(LOG((R)(N)) / LOG((R)(2)) * (R)(d) + K(0.5)));
+  fflush(stdout);
 
-  for(r=0,M=1;r<d;r++)
-    {
-      M=N*M;
-      NN[r]=N;
-      nn[r]=2*N;
-    }
+  for (r = 0, M = 1; r < d; r++)
+  {
+    M = N * M;
+    NN[r] = N;
+    nn[r] = 2 * N;
+  }
 
-  nfft_init_guru(&p, d, NN, M, nn, 4,
-		 PRE_PHI_HUT|
-		 PRE_PSI|
-		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&p, d, NN, M, nn, 4,
+  PRE_PHI_HUT |
+  PRE_PSI |
+  MALLOC_F_HAT | MALLOC_X | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
-  p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+  p_fft = FFTW(plan_dft)(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
 
-  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.M_total*sizeof(double _Complex));
+  C *swapndft = (C*) NFFT(malloc)((size_t)(p.M_total) * sizeof(C));
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.d * p.M_total);
 
   //for(j=0;j<2*M;j+=2)
   //   p.x[j]=0.5*p.x[j]+0.25*(p.x[j]>=0?1:-1);
@@ -475,591 +498,566 @@ void measure_time_nfft_XXX4(int d, int N, unsigned test_ndft)
   //qsort(p.x,p.M_total,d*sizeof(double),comp1);
   //nfft_vpr_double(p.x,p.M_total,"nodes x");
 
-  nfft_precompute_one_psi(&p);
+  NFFT(precompute_one_psi)(&p);
 
   /** init pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+  NFFT(vrand_unit_complex)(p.f_hat, p.N_total);
 
   /** FFT */
-  t_fft=0;
-  r=0;
-  while(t_fft<0.1)
+  t_fft = K(0.0);
+  r = 0;
+  while (t_fft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    FFTW(execute)(p_fft);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_fft += t;
+  }
+  t_fft /= (R)(r);
+
+  printf("%.1" __FES__ "\t", t_fft);
+
+  /** init pseudo random Fourier coefficients */
+  NFFT(vrand_unit_complex)(p.f_hat, p.N_total);
+
+  /** NDFT */
+  if (test_ndft)
+  {
+    CSWAP(p.f, swapndft);
+    t_ndft = K(0.0);
+    r = 0;
+    while (t_ndft < K(0.1))
     {
       r++;
       t0 = getticks();
-      fftw_execute(p_fft);
+      NFFT(trafo_direct)(&p);
       t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_fft+=t;
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_ndft += t;
     }
-  t_fft/=r;
-
-  printf("%.1e\t",t_fft);
+    t_ndft /= (R)(r);
+    printf("%.1" __FES__ "\t", t_ndft);
 
-  /** init pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+    //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
 
-  /** NDFT */
-  if(test_ndft)
-    {
-      NFFT_SWAP_complex(p.f,swapndft);
-      t_ndft=0;
-      r=0;
-      while(t_ndft<0.1)
-        {
-          r++;
-          t0 = getticks();
-          nfft_trafo_direct(&p);
-          t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-          t_ndft+=t;
-        }
-      t_ndft/=r;
-      printf("%.1e\t",t_ndft);
-
-      //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
-
-      NFFT_SWAP_complex(p.f,swapndft);
-    }
+    CSWAP(p.f, swapndft);
+  }
   else
     printf("\t");
 
   /** NFFT */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_trafo(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(trafo)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f, p.M_total));
 
   //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
 
   /** NFFT_2d */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_trafo_2d(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(trafo_2d)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f, p.M_total));
 
   //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
 
   printf("\n");
 
-  nfft_free(swapndft);
-  fftw_destroy_plan(p_fft);
-  nfft_finalize(&p);
+  NFFT(free)(swapndft);
+  FFTW(destroy_plan)(p_fft);
+  NFFT(finalize)(&p);
 }
 
-
-void measure_time_nfft_XXX5(int d, int N, unsigned test_ndft)
+static void measure_time_nfft_XXX5(int d, int N, unsigned test_ndft)
 {
   int r, M, NN[d], nn[d];
-  double t, t_fft, t_ndft, t_nfft;
+  R t, t_fft, t_ndft, t_nfft;
   ticks t0, t1;
 
-  nfft_plan p;
-  fftw_plan p_fft;
+  NFFT(plan) p;
+  FFTW(plan) p_fft;
 
-  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+  printf("%ld\t", LRINT(LOG((R)(N)) / LOG((R)(2)) * (R)(d) + K(0.5)));
+  fflush(stdout);
 
-  for(r=0,M=1;r<d;r++)
-    {
-      M=N*M;
-      NN[r]=N;
-      nn[r]=2*N;
-    }
+  for (r = 0, M = 1; r < d; r++)
+  {
+    M = N * M;
+    NN[r] = N;
+    nn[r] = 2 * N;
+  }
 
-  nfft_init_guru(&p, d, NN, M, nn, 4,
-		 PRE_PHI_HUT|
-		 PRE_PSI|
-		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&p, d, NN, M, nn, 4,
+  PRE_PHI_HUT |
+  PRE_PSI |
+  MALLOC_F_HAT | MALLOC_X | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
-  p_fft=fftw_plan_dft(d, NN, p.f, p.f_hat, FFTW_FORWARD, FFTW_MEASURE);
+  p_fft = FFTW(plan_dft)(d, NN, p.f, p.f_hat, FFTW_FORWARD, FFTW_MEASURE);
 
-  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.N_total*sizeof(double _Complex));
+  C *swapndft = (C*) NFFT(malloc)((size_t)(p.N_total) * sizeof(C));
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.d * p.M_total);
 
   //sort_nodes(p.x,p.d,p.M_total,
 
-  nfft_precompute_one_psi(&p);
+  NFFT(precompute_one_psi)(&p);
 
   /** init pseudo random samples */
-  nfft_vrand_unit_complex(p.f, p.M_total);
+  NFFT(vrand_unit_complex)(p.f, p.M_total);
 
   /** FFT */
-  t_fft=0;
-  r=0;
-  while(t_fft<0.1)
+  t_fft = K(0.0);
+  r = 0;
+  while (t_fft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    FFTW(execute)(p_fft);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_fft += t;
+  }
+  t_fft /= (R)(r);
+
+  printf("%.1" __FES__ "\t", t_fft);
+
+  /** init pseudo random samples */
+  NFFT(vrand_unit_complex)(p.f, p.M_total);
+
+  /** NDFT */
+  if (test_ndft)
+  {
+    CSWAP(p.f_hat, swapndft);
+    t_ndft = K(0.0);
+    r = 0;
+    while (t_ndft < K(0.1))
     {
       r++;
       t0 = getticks();
-      fftw_execute(p_fft);
+      NFFT(adjoint_direct)(&p);
       t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_fft+=t;
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_ndft += t;
     }
-  t_fft/=r;
-
-  printf("%.1e\t",t_fft);
+    t_ndft /= (R)(r);
+    printf("%.1" __FES__ "\t", t_ndft);
 
-  /** init pseudo random samples */
-  nfft_vrand_unit_complex(p.f, p.M_total);
+    //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
 
-  /** NDFT */
-  if(test_ndft)
-    {
-      NFFT_SWAP_complex(p.f_hat,swapndft);
-      t_ndft=0;
-      r=0;
-      while(t_ndft<0.1)
-        {
-          r++;
-          t0 = getticks();
-          nfft_adjoint_direct(&p);
-          t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-          t_ndft+=t;
-        }
-      t_ndft/=r;
-      printf("%.1e\t",t_ndft);
-
-      //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
-
-      NFFT_SWAP_complex(p.f_hat,swapndft);
-    }
+    CSWAP(p.f_hat, swapndft);
+  }
   else
     printf("\t");
 
   /** NFFT */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_adjoint(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(adjoint)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
 
   //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
 
   /** NFFT_2d */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_adjoint_2d(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(adjoint_2d)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
 
   //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
 
   printf("\n");
 
-  nfft_free(swapndft);
-  fftw_destroy_plan(p_fft);
-  nfft_finalize(&p);
+  NFFT(free)(swapndft);
+  FFTW(destroy_plan)(p_fft);
+  NFFT(finalize)(&p);
 }
 
-
-void measure_time_nfft_XXX6(int d, int N, unsigned test_ndft)
+static void measure_time_nfft_XXX6(int d, int N, unsigned test_ndft)
 {
   int r, M, NN[d], nn[d];
-  double t, t_fft, t_ndft, t_nfft;
+  R t, t_fft, t_ndft, t_nfft;
   ticks t0, t1;
 
-  nfft_plan p;
-  fftw_plan p_fft;
+  NFFT(plan) p;
+  FFTW(plan) p_fft;
 
-  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+  printf("%ld\t", LRINT(LOG((R)(N)) / LOG((R)(2)) * (R)(d) + K(0.5)));
+  fflush(stdout);
 
-  for(r=0,M=1;r<d;r++)
-    {
-      M=N*M;
-      NN[r]=N;
-      nn[r]=2*N;
-    }
+  for (r = 0, M = 1; r < d; r++)
+  {
+    M = N * M;
+    NN[r] = N;
+    nn[r] = 2 * N;
+  }
 
-  nfft_init_guru(&p, d, NN, M, nn, 2,
-		 PRE_PHI_HUT|
-		 FG_PSI|
-		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&p, d, NN, M, nn, 2,
+  PRE_PHI_HUT |
+  FG_PSI |
+  MALLOC_F_HAT | MALLOC_X | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
-  p_fft=fftw_plan_dft(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
+  p_fft = FFTW(plan_dft)(d, NN, p.f_hat, p.f, FFTW_FORWARD, FFTW_MEASURE);
 
-  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.M_total*sizeof(double _Complex));
+  C *swapndft = (C*) NFFT(malloc)((size_t)(p.M_total) * sizeof(C));
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.d * p.M_total);
 
   //qsort(p.x,p.M_total,d*sizeof(double),comp1);
   //nfft_vpr_double(p.x,p.M_total,"nodes x");
 
-  nfft_precompute_one_psi(&p);
+  NFFT(precompute_one_psi)(&p);
 
   /** init pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+  NFFT(vrand_unit_complex)(p.f_hat, p.N_total);
 
   /** FFT */
-  t_fft=0;
-  r=0;
-  while(t_fft<0.1)
+  t_fft = K(0.0);
+  r = 0;
+  while (t_fft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    FFTW(execute)(p_fft);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_fft += t;
+  }
+  t_fft /= (R)(r);
+
+  printf("%.1" __FES__ "\t", t_fft);
+
+  /** init pseudo random Fourier coefficients */
+  NFFT(vrand_unit_complex)(p.f_hat, p.N_total);
+
+  /** NDFT */
+  if (test_ndft)
+  {
+    CSWAP(p.f, swapndft);
+    t_ndft = K(0.0);
+    r = 0;
+    while (t_ndft < K(0.1))
     {
       r++;
       t0 = getticks();
-      fftw_execute(p_fft);
+      NFFT(trafo_direct)(&p);
       t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_fft+=t;
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_ndft += t;
     }
-  t_fft/=r;
-
-  printf("%.1e\t",t_fft);
+    t_ndft /= (R)(r);
+    printf("%.1" __FES__ "\t", t_ndft);
 
-  /** init pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(p.f_hat, p.N_total);
+    //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
 
-  /** NDFT */
-  if(test_ndft)
-    {
-      NFFT_SWAP_complex(p.f,swapndft);
-      t_ndft=0;
-      r=0;
-      while(t_ndft<0.1)
-        {
-          r++;
-          t0 = getticks();
-          nfft_trafo_direct(&p);
-          t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-          t_ndft+=t;
-        }
-      t_ndft/=r;
-      printf("%.1e\t",t_ndft);
-
-      //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
-
-      NFFT_SWAP_complex(p.f,swapndft);
-    }
+    CSWAP(p.f, swapndft);
+  }
   else
     printf("\t");
 
   /** NFFT */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_trafo(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(trafo)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f, p.M_total));
 
   //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
 
   /** NFFT_3d */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_trafo_3d(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f, p.M_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(trafo_3d)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f, p.M_total));
 
   //printf("f=%e+i%e\t",creal(p.f[0]),cimag(p.f[0]));
 
   printf("\n");
 
-  nfft_free(swapndft);
-  fftw_destroy_plan(p_fft);
-  nfft_finalize(&p);
+  NFFT(free)(swapndft);
+  FFTW(destroy_plan)(p_fft);
+  NFFT(finalize)(&p);
 }
 
-
-void measure_time_nfft_XXX7(int d, int N, unsigned test_ndft)
+static void measure_time_nfft_XXX7(int d, int N, unsigned test_ndft)
 {
   int r, M, NN[d], nn[d];
-  double t, t_fft, t_ndft, t_nfft;
+  R t, t_fft, t_ndft, t_nfft;
   ticks t0, t1;
 
-  nfft_plan p;
-  fftw_plan p_fft;
+  NFFT(plan) p;
+  FFTW(plan) p_fft;
 
-  printf("%d\t",(int)(log(N)/log(2)*d+0.5)); fflush(stdout);
+  printf("%ld\t", LRINT(LOG((R)(N)) / LOG((R)(2)) * (R)(d) + K(0.5)));
+  fflush(stdout);
 
-  for(r=0,M=1;r<d;r++)
-    {
-      M=N*M;
-      NN[r]=N;
-      nn[r]=2*N;
-    }
+  for (r = 0, M = 1; r < d; r++)
+  {
+    M = N * M;
+    NN[r] = N;
+    nn[r] = 2 * N;
+  }
 
-  nfft_init_guru(&p, d, NN, M, nn, 2,
-		 PRE_PHI_HUT|
-		 FG_PSI|
-		 MALLOC_F_HAT| MALLOC_X| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&p, d, NN, M, nn, 2,
+  PRE_PHI_HUT |
+  FG_PSI |
+  MALLOC_F_HAT | MALLOC_X | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
-  p_fft=fftw_plan_dft(d, NN, p.f, p.f_hat, FFTW_FORWARD, FFTW_MEASURE);
+  p_fft = FFTW(plan_dft)(d, NN, p.f, p.f_hat, FFTW_FORWARD, FFTW_MEASURE);
 
-  double _Complex *swapndft=(double _Complex*)nfft_malloc(p.N_total*sizeof(double _Complex));
+  C *swapndft = (C*) NFFT(malloc)((size_t)(p.N_total) * sizeof(C));
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x, p.d*p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.d * p.M_total);
 
   //sort_nodes(p.x,p.d,p.M_total,
 
-  nfft_precompute_one_psi(&p);
+  NFFT(precompute_one_psi)(&p);
 
   /** init pseudo random samples */
-  nfft_vrand_unit_complex(p.f, p.M_total);
+  NFFT(vrand_unit_complex)(p.f, p.M_total);
 
   /** FFT */
-  t_fft=0;
-  r=0;
-  while(t_fft<0.1)
+  t_fft = K(0.0);
+  r = 0;
+  while (t_fft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    FFTW(execute)(p_fft);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_fft += t;
+  }
+  t_fft /= (R)(r);
+
+  printf("%.1" __FES__ "\t", t_fft);
+
+  /** init pseudo random samples */
+  NFFT(vrand_unit_complex)(p.f, p.M_total);
+
+  /** NDFT */
+  if (test_ndft)
+  {
+    CSWAP(p.f_hat, swapndft);
+    t_ndft = K(0.0);
+    r = 0;
+    while (t_ndft < K(0.1))
     {
       r++;
       t0 = getticks();
-      fftw_execute(p_fft);
+      NFFT(adjoint_direct)(&p);
       t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_fft+=t;
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_ndft += t;
     }
-  t_fft/=r;
-
-  printf("%.1e\t",t_fft);
+    t_ndft /= (R)(r);
+    printf("%.1" __FES__ "\t", t_ndft);
 
-  /** init pseudo random samples */
-  nfft_vrand_unit_complex(p.f, p.M_total);
+    //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
 
-  /** NDFT */
-  if(test_ndft)
-    {
-      NFFT_SWAP_complex(p.f_hat,swapndft);
-      t_ndft=0;
-      r=0;
-      while(t_ndft<0.1)
-        {
-          r++;
-          t0 = getticks();
-          nfft_adjoint_direct(&p);
-          t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-          t_ndft+=t;
-        }
-      t_ndft/=r;
-      printf("%.1e\t",t_ndft);
-
-      //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
-
-      NFFT_SWAP_complex(p.f_hat,swapndft);
-    }
+    CSWAP(p.f_hat, swapndft);
+  }
   else
     printf("\t");
 
   /** NFFT */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_adjoint(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(adjoint)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
 
   //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
 
   /** NFFT_3d */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.1)
-    {
-      r++;
-      t0 = getticks();
-      nfft_adjoint_3d(&p);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
-    }
-  t_nfft/=r;
-  printf("%.1e\t",t_nfft);
-  if(test_ndft)
-    printf("(%.1e)\t",X(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.1))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(adjoint_3d)(&p);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+  printf("%.1" __FES__ "\t", t_nfft);
+  if (test_ndft)
+    printf("(%.1" __FES__ ")\t", NFFT(error_l_2_complex)(swapndft, p.f_hat, p.N_total));
 
   //printf("\nf_hat=%e+i%e\t",creal(p.f_hat[0]),cimag(p.f_hat[0]));
 
   printf("\n");
 
-  nfft_free(swapndft);
-  fftw_destroy_plan(p_fft);
-  nfft_finalize(&p);
+  NFFT(free)(swapndft);
+  FFTW(destroy_plan)(p_fft);
+  NFFT(finalize)(&p);
 }
 
-int main2(void)
-{
-  int l,d,logIN;
-
-  for(l=3;l<=6;l++)
-    {
-      d=3;
-      logIN=d*l;
-      if(logIN<=15)
-	{
-	  measure_time_nfft_XXX6(d,(1U<< (logIN/d)),1);
-	  measure_time_nfft_XXX7(d,(1U<< (logIN/d)),1);
-	}
-      else
-	{
-	  measure_time_nfft_XXX6(d,(1U<< (logIN/d)),0);
-	  measure_time_nfft_XXX7(d,(1U<< (logIN/d)),0);
-	}
-    }
-
-  exit(-1);
-
-
-  for(l=7;l<=12;l++)
-    {
-      d=2;
-      logIN=d*l;
-      if(logIN<=15)
-	{
-	  measure_time_nfft_XXX4(d,(1U<< (logIN/d)),1);
-	  measure_time_nfft_XXX5(d,(1U<< (logIN/d)),1);
-	}
-      else
-	{
-	  measure_time_nfft_XXX4(d,(1U<< (logIN/d)),0);
-	  measure_time_nfft_XXX5(d,(1U<< (logIN/d)),0);
-	}
-    }
-
-  exit(-1);
-
-  for(l=3;l<=12;l++)
-    {
-      logIN=l;
-      if(logIN<=15)
-	{
-	  measure_time_nfft_XXX2(1,(1U<< (logIN)),1);
-	  measure_time_nfft_XXX3(1,(1U<< (logIN)),1);
-	}
-      else
-	{
-	  measure_time_nfft_XXX2(1,(1U<< (logIN)),0);
-	  measure_time_nfft_XXX3(1,(1U<< (logIN)),0);
-	}
-    }
-
-  exit(-1);
-}
+//static int main(void)
+//{
+//  int l, d, logIN;
+//
+//  for (l = 3; l <= 6; l++)
+//  {
+//    d = 3;
+//    logIN = d * l;
+//    int N = (int)(1U << (logIN / d));
+//    measure_time_nfft_XXX6(d, N, logIN <= 15 ? 1 : 0);
+//    measure_time_nfft_XXX7(d, N, logIN <= 15 ? 1 : 0);
+//  }
+//
+//  for (l = 7; l <= 12; l++)
+//  {
+//    d = 2;
+//    logIN = d * l;
+//    int N = (int)(1U << (logIN / d));
+//    measure_time_nfft_XXX4(d, N, logIN <= 15 ? 1 : 0);
+//    measure_time_nfft_XXX5(d, N, logIN <= 15 ? 1 : 0);
+//  }
+//
+//  for (l = 3; l <= 12; l++)
+//  {
+//    logIN = l;
+//    int N = (int)(1U << (logIN));
+//    measure_time_nfft_XXX2(1, N, logIN <= 15 ? 1 : 0);
+//    measure_time_nfft_XXX3(1, N, logIN <= 15 ? 1 : 0);
+//  }
+//
+//  return EXIT_SUCCESS;
+//}
 
 int main(void)
 {
-  int l,d,logIN;
+  int l, d, logIN;
+
+  UNUSED(measure_time_nfft_XXX2);
+  UNUSED(measure_time_nfft_XXX3);
+  UNUSED(measure_time_nfft_XXX4);
+  UNUSED(measure_time_nfft_XXX5);
+  UNUSED(measure_time_nfft_XXX6);
+  UNUSED(measure_time_nfft_XXX7);
 
   printf("\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n");
   printf("\\hline \\hline \\multicolumn{5}{|c|}{$d=1$} \\\\ \\hline\n");
-  for(l=3;l<=22;l++)
-    {
-      d=1;
-      logIN=l;
-      if(logIN<=15)
-	measure_time_nfft(d,(1U<< (logIN/d)),1);
-      else
-	measure_time_nfft(d,(1U<< (logIN/d)),0);
+  for (l = 3; l <= 22; l++)
+  {
+    d = 1;
+    logIN = l;
+    int N = (int)(1U << (logIN / d));
+    measure_time_nfft(d, N, logIN <= 15 ? 1 : 0);
 
-      fflush(stdout);
-    }
+    fflush(stdout);
+  }
 
   printf("\\hline $l_N$ & FFT & NDFT & NFFT & NFFT/FFT\\\\\n");
   printf("\\hline \\hline \\multicolumn{5}{|c|}{$d=2$} \\\\ \\hline\n");
-  for(l=3;l<=11;l++)
-    {
-      d=2;
-      logIN=d*l;
-      if(logIN<=15)
-	measure_time_nfft(d,(1U<< (logIN/d)),1);
-      else
-	measure_time_nfft(d,(1U<< (logIN/d)),0);
+  for (l = 3; l <= 11; l++)
+  {
+    d = 2;
+    logIN = d * l;
+    int N = (int)(1U << (logIN / d));
+    measure_time_nfft(d, N, logIN <= 15 ? 1 : 0);
 
-      fflush(stdout);
-    }
+    fflush(stdout);
+  }
 
   printf("\\hline \\hline \\multicolumn{5}{|c|}{$d=3$} \\\\ \\hline\n");
-  for(l=3;l<=7;l++)
-    {
-      d=3;
-      logIN=d*l;
-      if(logIN<=15)
-	measure_time_nfft(d,(1U<< (logIN/d)),1);
-      else
-	measure_time_nfft(d,(1U<< (logIN/d)),0);
-
-      fflush(stdout);
-    }
+  for (l = 3; l <= 7; l++)
+  {
+    d = 3;
+    logIN = d * l;
+    int N = (int)(1U << (logIN / d));
+    measure_time_nfft(d, N, logIN <= 15 ? 1 : 0);
+
+    fflush(stdout);
+  }
 
   return 1;
 }
diff --git a/examples/nfft/simple_test.c b/examples/nfft/simple_test.c
index 90053a7..f5b61a0 100644
--- a/examples/nfft/simple_test.c
+++ b/examples/nfft/simple_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdio.h>
@@ -27,127 +27,119 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
 static void simple_test_nfft_1d(void)
 {
-  nfft_plan p;
-  double t;
+  NFFT(plan) p;
 
-  int N=14;
-  int M=19;
-  ticks t0, t1;
+  int N = 14;
+  int M = 19;
 
   /** init an one dimensional plan */
-  nfft_init_1d(&p,N,M);
+  NFFT(init_1d)(&p, N, M);
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x,p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.M_total);
  
   /** precompute psi, the entries of the matrix B */
-  if(p.nfft_flags & PRE_ONE_PSI)
-      nfft_precompute_one_psi(&p);
+  if (p.flags & PRE_ONE_PSI)
+      NFFT(precompute_one_psi)(&p);
 
   /** init pseudo random Fourier coefficients and show them */
-  nfft_vrand_unit_complex(p.f_hat,p.N_total);
-  nfft_vpr_complex(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
+  NFFT(vrand_unit_complex)(p.f_hat,p.N_total);
+  NFFT(vpr_complex)(p.f_hat, p.N_total, "given Fourier coefficients, vector f_hat");
 
   /** direct trafo and show the result */
-  t0 = getticks();
-  nfft_trafo_direct(&p);
-  t1 = getticks();
-  t = nfft_elapsed_seconds(t1,t0);
-  nfft_vpr_complex(p.f,p.M_total,"ndft, vector f");
-  printf(" took %e seconds.\n",t);
+  NFFT(trafo_direct)(&p);
+  NFFT(vpr_complex)(p.f,p.M_total,"ndft, vector f");
 
   /** approx. trafo and show the result */
-  nfft_trafo(&p);
-  nfft_vpr_complex(p.f,p.M_total,"nfft, vector f");
+  NFFT(trafo)(&p);
+  NFFT(vpr_complex)(p.f,p.M_total,"nfft, vector f");
 
   /** approx. adjoint and show the result */
-  nfft_adjoint_direct(&p);
-  nfft_vpr_complex(p.f_hat,p.N_total,"adjoint ndft, vector f_hat");
+  NFFT(adjoint_direct)(&p);
+  NFFT(vpr_complex)(p.f_hat,p.N_total,"adjoint ndft, vector f_hat");
 
   /** approx. adjoint and show the result */
-  nfft_adjoint(&p);
-  nfft_vpr_complex(p.f_hat,p.N_total,"adjoint nfft, vector f_hat");
+  NFFT(adjoint)(&p);
+  NFFT(vpr_complex)(p.f_hat,p.N_total,"adjoint nfft, vector f_hat");
 
   /** finalise the one dimensional plan */
-  nfft_finalize(&p);
+  NFFT(finalize)(&p);
 }
 
 static void simple_test_nfft_2d(void)
 {
-  int K,N[2],n[2],M;
-  double t;
+  int K, N[2], n[2], M;
+  R t;
   ticks t0, t1;
 
-  nfft_plan p;
+  NFFT(plan) p;
 
-  N[0]=32; n[0]=64;
-  N[1]=14; n[1]=32;
-  M=N[0]*N[1];
-  K=16;
+  N[0] = 32; n[0] = 64;
+  N[1] = 14; n[1] = 32;
+  M = N[0] * N[1];
+  K = 16;
 
   t0 = getticks();
   /** init a two dimensional plan */
-  nfft_init_guru(&p, 2, N, M, n, 7,
-		 PRE_PHI_HUT| PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F |
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_ESTIMATE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&p, 2, N, M, n, 7,
+     PRE_PHI_HUT| PRE_FULL_PSI| MALLOC_F_HAT| MALLOC_X| MALLOC_F |
+     FFTW_INIT| FFT_OUT_OF_PLACE,
+     FFTW_ESTIMATE| FFTW_DESTROY_INPUT);
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x,p.d*p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.d * p.M_total);
 
   /** precompute psi, the entries of the matrix B */
-  if(p.nfft_flags & PRE_ONE_PSI)
-    nfft_precompute_one_psi(&p);
+  if(p.flags & PRE_ONE_PSI)
+    NFFT(precompute_one_psi)(&p);
 
   /** init pseudo random Fourier coefficients and show them */
-  nfft_vrand_unit_complex(p.f_hat,p.N_total);
+  NFFT(vrand_unit_complex)(p.f_hat, p.N_total);
 
   t1 = getticks();
-  t = nfft_elapsed_seconds(t1,t0);
-  nfft_vpr_complex(p.f_hat,K,
-              "given Fourier coefficients, vector f_hat (first few entries)");
-  printf(" ... initialisation took %e seconds.\n",t);
+  t = NFFT(elapsed_seconds)(t1, t0);
+  NFFT(vpr_complex)(p.f_hat,K, "given Fourier coefficients, vector f_hat (first few entries)");
+  printf(" ... initialisation took %.2" __FES__ " seconds.\n",t);
 
   /** direct trafo and show the result */
   t0 = getticks();
-  nfft_trafo_direct(&p);
+  NFFT(trafo_direct)(&p);
   t1 = getticks();
-  t = nfft_elapsed_seconds(t1,t0);
-  nfft_vpr_complex(p.f,K,"ndft, vector f (first few entries)");
-  printf(" took %e seconds.\n",t);
+  t = NFFT(elapsed_seconds)(t1, t0);
+  NFFT(vpr_complex)(p.f, K, "ndft, vector f (first few entries)");
+  printf(" took %.2" __FES__ " seconds.\n",t);
 
   /** approx. trafo and show the result */
   t0 = getticks();
-  nfft_trafo(&p);
+  NFFT(trafo)(&p);
   t1 = getticks();
-  t = nfft_elapsed_seconds(t1,t0);
-  nfft_vpr_complex(p.f,K,"nfft, vector f (first few entries)");
-  printf(" took %e seconds.\n",t);
+  t = NFFT(elapsed_seconds)(t1, t0);
+  NFFT(vpr_complex)(p.f, K, "nfft, vector f (first few entries)");
+  printf(" took %.2" __FES__ " seconds.\n",t);
 
   /** direct adjoint and show the result */
   t0 = getticks();
-  nfft_adjoint_direct(&p);
+  NFFT(adjoint_direct)(&p);
   t1 = getticks();
-  t = nfft_elapsed_seconds(t1,t0);
-  nfft_vpr_complex(p.f_hat,K,"adjoint ndft, vector f_hat (first few entries)");
-  printf(" took %e seconds.\n",t);
+  t = NFFT(elapsed_seconds)(t1, t0);
+  NFFT(vpr_complex)(p.f_hat, K, "adjoint ndft, vector f_hat (first few entries)");
+  printf(" took %.2" __FES__ " seconds.\n",t);
 
   /** approx. adjoint and show the result */
   t0 = getticks();
-  nfft_adjoint(&p);
+  NFFT(adjoint)(&p);
   t1 = getticks();
-  t = nfft_elapsed_seconds(t1,t0);
-  nfft_vpr_complex(p.f_hat,K,"adjoint nfft, vector f_hat (first few entries)");
-  printf(" took %e seconds.\n",t);
+  t = NFFT(elapsed_seconds)(t1, t0);
+  NFFT(vpr_complex)(p.f_hat, K, "adjoint nfft, vector f_hat (first few entries)");
+  printf(" took %.2" __FES__ " seconds.\n",t);
 
   /** finalise the two dimensional plan */
-  nfft_finalize(&p);
+  NFFT(finalize)(&p);
 }
 
 int main(void)
@@ -160,5 +152,5 @@ int main(void)
   printf("2) computing a two dimensional ndft, nfft and an adjoint nfft\n\n");
   simple_test_nfft_2d();
 
-  return 1;
+  return EXIT_SUCCESS;
 }
diff --git a/examples/nfft/simple_test_threads.c b/examples/nfft/simple_test_threads.c
index 3939db2..c7ad6b6 100644
--- a/examples/nfft/simple_test_threads.c
+++ b/examples/nfft/simple_test_threads.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -28,51 +28,50 @@
 #endif
 #include <omp.h>
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 //#include <time.h>
 
 int main(void)
 {
-  nfft_plan p;
+  NFFT(plan) p;
   const int N = 1000000;
   const int M = 1000000;
   ticks t0, t1;
   double t;
 
-  printf("nthreads = %d\n", nfft_get_num_threads());
+  printf("nthreads = %d\n", NFFT(get_num_threads)());
 
   /* init */
-  fftw_init_threads();
-  nfft_init_1d(&p,N,M);
+  FFTW(init_threads)();
+  NFFT(init_1d)(&p,N,M);
 
   /* pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x,p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x,p.M_total);
 
   /* precompute psi, that is, the entries of the matrix B */
   t0 = getticks();
-  if(p.nfft_flags & PRE_ONE_PSI)
-      nfft_precompute_one_psi(&p);
+  if(p.flags & PRE_ONE_PSI)
+      NFFT(precompute_one_psi)(&p);
   t1 = getticks();
-  t = nfft_elapsed_seconds(t1,t0);
+  t = NFFT(elapsed_seconds(t1,t0));
   fprintf(stderr,"precompute elapsed time: %.3f seconds\n",t);
 
   /* pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(p.f_hat,p.N_total);
+  NFFT(vrand_unit_complex)(p.f_hat,p.N_total);
 
   /* transformation */
   t0 = getticks();
-  nfft_trafo(&p);
+  NFFT(trafo)(&p);
   t1 = getticks();
-  t = nfft_elapsed_seconds(t1,t0);
+  t = NFFT(elapsed_seconds)(t1,t0);
   fprintf(stderr,"compute    elapsed time: %.3f seconds\n",t);
   fflush(stderr);
-//  nfft_vpr_complex(p.f,p.M_total,"ndft, vector f");
+//  NFFT(vpr_complex)(p.f,p.M_total,"ndft, vector f");
 
   /* cleanup */
-  nfft_finalize(&p);
-  fftw_cleanup_threads();
+  NFFT(finalize)(&p);
+  FFTW(cleanup_threads)();
 
   return EXIT_SUCCESS;
 }
diff --git a/examples/nfft/taylor_nfft.c b/examples/nfft/taylor_nfft.c
index 4849982..64e06fa 100644
--- a/examples/nfft/taylor_nfft.c
+++ b/examples/nfft/taylor_nfft.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: taylor_nfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /*! \file taylor_nfft.c
  *
@@ -37,17 +37,14 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
 typedef struct
 {
-  nfft_plan p;                          /**< used for fftw and data          */
-
-  int *idx0;                            /**< index of next neighbour of x_j
-                                             on the oversampled regular grid */
-  double *deltax0;                      /**< distance to the grid point      */
+  NFFT(plan) p; /* used for fftw and data */
+  INT *idx0; /* index of next neighbour of x_j on the oversampled regular grid */
+  R *deltax0; /* distance to the grid point */
 } taylor_plan;
 
 /**
@@ -64,13 +61,12 @@ typedef struct
 static void taylor_init(taylor_plan *ths, int N, int M, int n, int m)
 {
   /* Note: no nfft precomputation! */
-  nfft_init_guru((nfft_plan*)ths, 1, &N, M, &n, m,
-                 MALLOC_X| MALLOC_F_HAT| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_ESTIMATE| FFTW_PRESERVE_INPUT);
+  NFFT(init_guru)((NFFT(plan)*) ths, 1, &N, M, &n, m,
+      MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE,
+      FFTW_ESTIMATE | FFTW_PRESERVE_INPUT);
 
-  ths->idx0=(int*)nfft_malloc(M*sizeof(int));
-  ths->deltax0=(double*)nfft_malloc(M*sizeof(double));
+  ths->idx0 = (INT*) NFFT(malloc)((size_t)(M) * sizeof(INT));
+  ths->deltax0 = (R*) NFFT(malloc)((size_t)(M) * sizeof(R));
 }
 
 /**
@@ -82,17 +78,17 @@ static void taylor_init(taylor_plan *ths, int N, int M, int n, int m)
  */
 static void taylor_precompute(taylor_plan *ths)
 {
-  int j;
+  INT j;
 
-  nfft_plan* cths=(nfft_plan*)ths;
+  NFFT(plan)* cths = (NFFT(plan)*) ths;
 
-  for(j=0;j<cths->M_total;j++)
-    {
-      ths->idx0[j] = ((int)round((cths->x[j]+0.5)*cths->n[0]) +
-                                 cths->n[0]/2)%cths->n[0];
-      ths->deltax0[j] = cths->x[j] - (round((cths->x[j]+0.5)*cths->n[0]) /
-                                      cths->n[0] - 0.5);
-    }
+  for (j = 0; j < cths->M_total; j++)
+  {
+    ths->idx0[j] = (LRINT(ROUND((cths->x[j] + K(0.5)) * (R)(cths->n[0])))
+        + cths->n[0] / 2) % cths->n[0];
+    ths->deltax0[j] = cths->x[j]
+        - (ROUND((cths->x[j] + K(0.5)) * (R)(cths->n[0])) / (R)(cths->n[0]) - K(0.5));
+  }
 }
 
 /**
@@ -104,10 +100,10 @@ static void taylor_precompute(taylor_plan *ths)
  */
 static void taylor_finalize(taylor_plan *ths)
 {
-  nfft_free(ths->deltax0);
-  nfft_free(ths->idx0);
+  NFFT(free)(ths->deltax0);
+  NFFT(free)(ths->idx0);
 
-  nfft_finalize((nfft_plan*)ths);
+  NFFT(finalize)((NFFT(plan)*) ths);
 }
 
 /**
@@ -122,45 +118,46 @@ static void taylor_finalize(taylor_plan *ths)
  */
 static void taylor_trafo(taylor_plan *ths)
 {
-  int j,k,l,ll;
-  double _Complex *f, *f_hat, *g1;
-  double *deltax;
-  int *idx;
+  INT j, k, l, ll;
+  C *f, *f_hat, *g1;
+  R *deltax;
+  INT *idx;
 
-  nfft_plan *cths=(nfft_plan*)ths;
+  NFFT(plan) *cths = (NFFT(plan)*) ths;
 
-  for(j=0, f=cths->f; j<cths->M_total; j++)
-    *f++ = 0;
+  for (j = 0, f = cths->f; j < cths->M_total; j++)
+    *f++ = K(0.0);
 
-  for(k=0; k<cths->n_total; k++)
-    cths->g1[k]=0;
+  for (k = 0; k < cths->n_total; k++)
+    cths->g1[k] = K(0.0);
 
-  for(k=-cths->N_total/2, g1=cths->g1+cths->n_total-cths->N_total/2,
-      f_hat=cths->f_hat; k<0; k++)
-    (*g1++)=cpow( - 2*PI*_Complex_I*k,cths->m)* (*f_hat++);
+  for (k = -cths->N_total / 2, g1 = cths->g1 + cths->n_total
+      - cths->N_total / 2, f_hat = cths->f_hat; k < 0; k++)
+    (*g1++) = CPOW(-K2PI * II * (R)(k), (R)(cths->m)) * (*f_hat++);
 
-  cths->g1[0]=cths->f_hat[cths->N_total/2];
+  cths->g1[0] = cths->f_hat[cths->N_total / 2];
 
-  for(k=1, g1=cths->g1+1, f_hat=cths->f_hat+cths->N_total/2+1;
-      k<cths->N_total/2; k++)
-    (*g1++)=cpow( - 2*PI*_Complex_I*k,cths->m)* (*f_hat++);
+  for (k = 1, g1 = cths->g1 + 1, f_hat = cths->f_hat + cths->N_total / 2 + 1;
+      k < cths->N_total / 2; k++)
+    (*g1++) = CPOW(-K2PI * II * (R)(k), (R)(cths->m)) * (*f_hat++);
 
-  for(l=cths->m-1; l>=0; l--)
-    {
-      for(k=-cths->N_total/2, g1=cths->g1+cths->n_total-cths->N_total/2;
-          k<0; k++)
-        (*g1++) /= (-2*PI*_Complex_I*k);
+  for (l = cths->m - 1; l >= 0; l--)
+  {
+    for (k = -cths->N_total / 2, g1 = cths->g1 + cths->n_total
+        - cths->N_total / 2; k < 0; k++)
+      (*g1++) /= (-K2PI * II * (R)(k));
 
-      for(k=1, g1=cths->g1+1; k<cths->N_total/2; k++)
-        (*g1++) /= (-2*PI*_Complex_I*k);
+    for (k = 1, g1 = cths->g1 + 1; k < cths->N_total / 2; k++)
+      (*g1++) /= (-K2PI * II * (R)(k));
 
-      fftw_execute(cths->my_fftw_plan1);
+    FFTW(execute)(cths->my_fftw_plan1);
 
-      ll=(l==0?1:l);
-      for(j=0, f=cths->f, deltax=ths->deltax0, idx=ths->idx0; j<cths->M_total;
-          j++, f++)
-	(*f) = ((*f) * (*deltax++) + cths->g2[*idx++]) /ll;
-    }
+    ll = (l == 0 ? 1 : l);
+
+    for (j = 0, f = cths->f, deltax = ths->deltax0, idx = ths->idx0;
+        j < cths->M_total; j++, f++)
+      (*f) = ((*f) * (*deltax++) + cths->g2[*idx++]) / (R)(ll);
+  }
 }
 
 /**
@@ -177,164 +174,175 @@ static void taylor_trafo(taylor_plan *ths)
  * \author Stefan Kunis
  */
 static void taylor_time_accuracy(int N, int M, int n, int m, int n_taylor,
-                          int m_taylor, unsigned test_accuracy)
+    int m_taylor, unsigned test_accuracy)
 {
   int r;
-  double t_ndft, t_nfft, t_taylor, t;
-  double _Complex *swapndft = NULL;
+  R t_ndft, t_nfft, t_taylor, t;
+  C *swapndft = NULL;
   ticks t0, t1;
 
   taylor_plan tp;
-  nfft_plan np;
+  NFFT(plan) np;
 
-  printf("%d\t%d\t",N, M);
+  printf("%d\t%d\t", N, M);
 
-  taylor_init(&tp,N,M,n_taylor,m_taylor);
+  taylor_init(&tp, N, M, n_taylor, m_taylor);
 
-  nfft_init_guru(&np, 1, &N, M, &n, m,
-                 PRE_PHI_HUT| PRE_FG_PSI|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_ESTIMATE| FFTW_DESTROY_INPUT);
+  NFFT(init_guru)(&np, 1, &N, M, &n, m,
+      PRE_PHI_HUT | PRE_FG_PSI | FFTW_INIT | FFT_OUT_OF_PLACE,
+      FFTW_ESTIMATE | FFTW_DESTROY_INPUT);
 
-  /** share nodes, input, and output vectors */
-  np.x=tp.p.x;
-  np.f_hat=tp.p.f_hat;
-  np.f=tp.p.f;
+  /* share nodes, input, and output vectors */
+  np.x = tp.p.x;
+  np.f_hat = tp.p.f_hat;
+  np.f = tp.p.f;
 
-  /** output vector ndft */
-  if(test_accuracy)
-    swapndft=(double _Complex*)nfft_malloc(M*sizeof(double _Complex));
+  /* output vector ndft */
+  if (test_accuracy)
+    swapndft = (C*) NFFT(malloc)((size_t)(M) * sizeof(C));
 
-  /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(np.x, np.M_total);
+  /* init pseudo random nodes */
+  NFFT(vrand_shifted_unit_double)(np.x, np.M_total);
 
-  /** nfft precomputation */
+  /* nfft precomputation */
   taylor_precompute(&tp);
 
-  /** nfft precomputation */
-  if(np.nfft_flags & PRE_ONE_PSI)
-    nfft_precompute_one_psi(&np);
+  /* nfft precomputation */
+  if (np.flags & PRE_ONE_PSI)
+    NFFT(precompute_one_psi)(&np);
 
-  /** init pseudo random Fourier coefficients */
-  nfft_vrand_unit_complex(np.f_hat, np.N_total);
+  /* init pseudo random Fourier coefficients */
+  NFFT(vrand_unit_complex)(np.f_hat, np.N_total);
 
-  /** NDFT */
-  if(test_accuracy)
-    {
-      NFFT_SWAP_complex(np.f,swapndft);
-
-      t_ndft=0;
-      r=0;
-      while(t_ndft<0.01)
-        {
-          r++;
-          t0 = getticks();
-          nfft_trafo_direct(&np);
-          t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-          t_ndft+=t;
-        }
-      t_ndft/=r;
-
-      NFFT_SWAP_complex(np.f,swapndft);
-      printf("%.2e\t",t_ndft);
-    }
-  else
-    printf("nan\t\t");
+  /* NDFT */
+  if (test_accuracy)
+  {
+    CSWAP(np.f, swapndft);
 
-  /** NFFT */
-  t_nfft=0;
-  r=0;
-  while(t_nfft<0.01)
+    t_ndft = K(0.0);
+    r = 0;
+    while (t_ndft < K(0.01))
     {
       r++;
       t0 = getticks();
-      nfft_trafo(&np);
+      NFFT(trafo_direct)(&np);
       t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_nfft+=t;
+      t = NFFT(elapsed_seconds)(t1, t0);
+      t_ndft += t;
     }
-  t_nfft/=r;
+    t_ndft /= (R)(r);
 
-  printf("%.2f\t%d\t%.2e\t",((double)n)/N, m, t_nfft);
-
-  if(test_accuracy)
-    printf("%.2e\t",X(error_l_infty_complex)(swapndft, np.f, np.M_total));
+    CSWAP(np.f, swapndft);
+    printf("%.2" __FES__ "\t", t_ndft);
+  }
+  else
+    printf("N/A\t\t");
+
+  /* NFFT */
+  t_nfft = K(0.0);
+  r = 0;
+  while (t_nfft < K(0.01))
+  {
+    r++;
+    t0 = getticks();
+    NFFT(trafo)(&np);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_nfft += t;
+  }
+  t_nfft /= (R)(r);
+
+  printf("%.2" __FES__ "\t%d\t%.2" __FES__ "\t", ((R)(n)) / ((R)(N)), m, t_nfft);
+
+  if (test_accuracy)
+    printf("%.2" __FES__ "\t", NFFT(error_l_infty_complex)(swapndft, np.f, np.M_total));
   else
-    printf("nan\t\t");
+    printf("N/A\t\t");
 
   /** TAYLOR NFFT */
-  t_taylor=0;
-  r=0;
-  while(t_taylor<0.01)
-    {
-      r++;
-      t0 = getticks();
-      taylor_trafo(&tp);
-      t1 = getticks();
-t = nfft_elapsed_seconds(t1,t0);
-      t_taylor+=t;
-    }
-  t_taylor/=r;
-
-
-  printf("%.2f\t%d\t%.2e\t",((double)n_taylor)/N,m_taylor,t_taylor);
-
-  if(test_accuracy)
-    printf("%.2e\n",X(error_l_infty_complex)(swapndft, np.f, np.M_total));
+  t_taylor = K(0.0);
+  r = 0;
+  while (t_taylor < K(0.01))
+  {
+    r++;
+    t0 = getticks();
+    taylor_trafo(&tp);
+    t1 = getticks();
+    t = NFFT(elapsed_seconds)(t1, t0);
+    t_taylor += t;
+  }
+  t_taylor /= (R)(r);
+
+  printf("%.2" __FES__ "\t%d\t%.2" __FES__ "\t", ((R)(n_taylor)) / ((R)(N)), m_taylor, t_taylor);
+
+  if (test_accuracy)
+    printf("%.2" __FES__ "\n", NFFT(error_l_infty_complex)(swapndft, np.f, np.M_total));
   else
-    printf("nan\t\n");
+    printf("N/A\t\n");
 
   fflush(stdout);
 
-  /** finalise */
-  if(test_accuracy)
-    nfft_free(swapndft);
+  /* finalise */
+  if (test_accuracy)
+    NFFT(free)(swapndft);
 
-  nfft_finalize(&np);
+  NFFT(finalize)(&np);
   taylor_finalize(&tp);
 }
 
-int main(int argc,char **argv)
+int main(int argc, char **argv)
 {
-  int l,m,trial,N;
-
-  if(argc<=2)
-    {
-      fprintf(stderr,"taylor_nfft type first last trials sigma_nfft sigma_taylor.\n");
-      return -1;
-    }
-
-  fprintf(stderr,"Testing the Nfft & a Taylor expansion based version.\n\n");
-  fprintf(stderr,"Columns: N, M, t_ndft, sigma_nfft, m_nfft, t_nfft, e_nfft");
-  fprintf(stderr,", sigma_taylor, m_taylor, t_taylor, e_taylor\n");
-
-  /* time vs. N=M */
-  if(atoi(argv[1])==0)
+  int l, m, trial;
+
+  if (argc <= 2)
+  {
+    fprintf(stderr,
+        "taylor_nfft type first last trials sigma_nfft sigma_taylor.\n");
+    return EXIT_FAILURE;
+  }
+
+  fprintf(stderr, "Testing the Nfft & a Taylor expansion based version.\n\n");
+  fprintf(stderr, "Columns: N, M, t_ndft, sigma_nfft, m_nfft, t_nfft, e_nfft");
+  fprintf(stderr, ", sigma_taylor, m_taylor, t_taylor, e_taylor\n");
+
+  /* time vs. N = M */
+  if (atoi(argv[1]) == 0)
+  {
+    fprintf(stderr, "Fixed target accuracy, timings.\n\n");
+    int arg2 = atoi(argv[2]);
+    int arg3 = atoi(argv[3]);
+    int arg4 = atoi(argv[4]);
+    for (l = arg2; l <= arg3; l++)
     {
-      fprintf(stderr,"Fixed target accuracy, timings.\n\n");
-      for(l=atoi(argv[2]); l<=atoi(argv[3]); l++)
-        for(trial=0; trial<atoi(argv[4]); trial++)
-          if(l<=10)
-            taylor_time_accuracy((1U<< l), (1U<< l), (int)(atof(argv[5])*
-                                 (1U<< l)), 6, (int)(atof(argv[6])*(1U<< l)),
-                                 6, 1);
-          else
-            taylor_time_accuracy((1U<< l), (1U<< l), (int)(atof(argv[5])*
-                                 (1U<< l)), 6, (int)(atof(argv[6])*(1U<< l)),
-                                 6, 0);
+      int N = (int)(1U << l);
+      int M = (int)(1U << l);
+      int arg5 = (int)(atof(argv[5]) * N);
+      int arg6 = (int)(atof(argv[6]) * N);
+      for (trial = 0; trial < arg4; trial++)
+      {
+        taylor_time_accuracy(N, M, arg5, 6, arg6, 6, l <= 10 ? 1 : 0);
+      }
     }
+  }
 
   /* error vs. m */
-  if(atoi(argv[1])==1)
+  if (atoi(argv[1]) == 1)
+  {
+    int arg2 = atoi(argv[2]);
+    int arg3 = atoi(argv[3]);
+    int arg4 = atoi(argv[4]);
+    int N = atoi(argv[7]);
+    int arg5 = (int) (atof(argv[5]) * N);
+    int arg6 = (int) (atof(argv[6]) * N);
+    fprintf(stderr, "Fixed N=M=%d, error vs. m.\n\n", N);
+    for (m = arg2; m <= arg3; m++)
     {
-      N=atoi(argv[7]);
-      fprintf(stderr,"Fixed N=M=%d, error vs. m.\n\n",N);
-      for(m=atoi(argv[2]); m<=atoi(argv[3]); m++)
-        for(trial=0; trial<atoi(argv[4]); trial++)
-          taylor_time_accuracy(N,N, (int)(atof(argv[5])*N), m,
-                                    (int)(atof(argv[6])*N), m, 1);
+      for (trial = 0; trial < arg4; trial++)
+      {
+        taylor_time_accuracy(N, N, arg5, m, arg6, m, 1);
+      }
     }
+  }
 
-  return 1;
+  return EXIT_SUCCESS;
 }
diff --git a/examples/nfft/taylor_nfft.m b/examples/nfft/taylor_nfft.m
index 266a1f0..6956815 100644
--- a/examples/nfft/taylor_nfft.m
+++ b/examples/nfft/taylor_nfft.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: taylor_nfft.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 %% File: taylor_nfft.m
 %%
 %% Testing the nfft againt a Taylor expansion based version.
diff --git a/examples/nfsft/Makefile.am b/examples/nfsft/Makefile.am
index 152e0fe..27aa893 100644
--- a/examples/nfsft/Makefile.am
+++ b/examples/nfsft/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/examples/nfsft/Makefile.in b/examples/nfsft/Makefile.in
deleted file mode 100644
index b1f3636..0000000
--- a/examples/nfsft/Makefile.in
+++ /dev/null
@@ -1,686 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = simple_test$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2)
-subdir = examples/nfsft
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
- at HAVE_THREADS_TRUE@am__EXEEXT_1 = simple_test_threads$(EXEEXT)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am__EXEEXT_2 =  \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfsft_benchomp$(EXEEXT) \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfsft_benchomp_createdataset$(EXEEXT) \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfsft_benchomp_detail_single$(EXEEXT) \
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE@	nfsft_benchomp_detail_threads$(EXEEXT)
-PROGRAMS = $(noinst_PROGRAMS)
-am__nfsft_benchomp_SOURCES_DIST = nfsft_benchomp.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_OBJECTS = nfsft_benchomp-nfsft_benchomp.$(OBJEXT)
-nfsft_benchomp_OBJECTS = $(am_nfsft_benchomp_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
-nfsft_benchomp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(nfsft_benchomp_CFLAGS) \
-	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am__nfsft_benchomp_createdataset_SOURCES_DIST =  \
-	nfsft_benchomp_createdataset.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_createdataset_OBJECTS = nfsft_benchomp_createdataset.$(OBJEXT)
-nfsft_benchomp_createdataset_OBJECTS =  \
-	$(am_nfsft_benchomp_createdataset_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_createdataset_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am__nfsft_benchomp_detail_single_SOURCES_DIST =  \
-	nfsft_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_detail_single_OBJECTS = nfsft_benchomp_detail.$(OBJEXT)
-nfsft_benchomp_detail_single_OBJECTS =  \
-	$(am_nfsft_benchomp_detail_single_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_single_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am__nfsft_benchomp_detail_threads_SOURCES_DIST =  \
-	nfsft_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at am_nfsft_benchomp_detail_threads_OBJECTS = nfsft_benchomp_detail_threads-nfsft_benchomp_detail.$(OBJEXT)
-nfsft_benchomp_detail_threads_OBJECTS =  \
-	$(am_nfsft_benchomp_detail_threads_OBJECTS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_DEPENDENCIES = $(top_builddir)/libnfft3_threads.la
-nfsft_benchomp_detail_threads_LINK = $(LIBTOOL) --tag=CC \
-	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) \
-	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_simple_test_OBJECTS = simple_test.$(OBJEXT)
-simple_test_OBJECTS = $(am_simple_test_OBJECTS)
-simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am__simple_test_threads_SOURCES_DIST = simple_test_threads.c
- at HAVE_THREADS_TRUE@am_simple_test_threads_OBJECTS = simple_test_threads-simple_test_threads.$(OBJEXT)
-simple_test_threads_OBJECTS = $(am_simple_test_threads_OBJECTS)
- at HAVE_THREADS_TRUE@simple_test_threads_DEPENDENCIES =  \
- at HAVE_THREADS_TRUE@	$(top_builddir)/libnfft3_threads.la
-simple_test_threads_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(simple_test_threads_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(nfsft_benchomp_SOURCES) \
-	$(nfsft_benchomp_createdataset_SOURCES) \
-	$(nfsft_benchomp_detail_single_SOURCES) \
-	$(nfsft_benchomp_detail_threads_SOURCES) \
-	$(simple_test_SOURCES) $(simple_test_threads_SOURCES)
-DIST_SOURCES = $(am__nfsft_benchomp_SOURCES_DIST) \
-	$(am__nfsft_benchomp_createdataset_SOURCES_DIST) \
-	$(am__nfsft_benchomp_detail_single_SOURCES_DIST) \
-	$(am__nfsft_benchomp_detail_threads_SOURCES_DIST) \
-	$(simple_test_SOURCES) $(am__simple_test_threads_SOURCES_DIST)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
- at HAVE_THREADS_FALSE@SIMPLE_TEST_THREADS = 
- at HAVE_THREADS_TRUE@SIMPLE_TEST_THREADS = simple_test_threads
- at HAVE_OPENMP_FALSE@@HAVE_THREADS_TRUE at NFSFT_BENCHOMP_PROGS = 
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at NFSFT_BENCHOMP_PROGS = nfsft_benchomp nfsft_benchomp_createdataset nfsft_benchomp_detail_single nfsft_benchomp_detail_threads
- at HAVE_THREADS_FALSE@NFSFT_BENCHOMP_PROGS = 
-simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
- at HAVE_THREADS_TRUE@simple_test_threads_SOURCES = simple_test_threads.c
- at HAVE_THREADS_TRUE@simple_test_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at simple_test_threads_CFLAGS = $(OPENMP_CFLAGS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_SOURCES = nfsft_benchomp.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_CFLAGS = $(OPENMP_CFLAGS)
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_createdataset_SOURCES = nfsft_benchomp_createdataset.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_createdataset_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_single_SOURCES = nfsft_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_single_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_SOURCES = nfsft_benchomp_detail.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_LDADD = $(top_builddir)/libnfft3_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at nfsft_benchomp_detail_threads_CFLAGS = $(OPENMP_CFLAGS)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfsft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/nfsft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-nfsft_benchomp$(EXEEXT): $(nfsft_benchomp_OBJECTS) $(nfsft_benchomp_DEPENDENCIES) $(EXTRA_nfsft_benchomp_DEPENDENCIES) 
-	@rm -f nfsft_benchomp$(EXEEXT)
-	$(nfsft_benchomp_LINK) $(nfsft_benchomp_OBJECTS) $(nfsft_benchomp_LDADD) $(LIBS)
-nfsft_benchomp_createdataset$(EXEEXT): $(nfsft_benchomp_createdataset_OBJECTS) $(nfsft_benchomp_createdataset_DEPENDENCIES) $(EXTRA_nfsft_benchomp_createdataset_DEPENDENCIES) 
-	@rm -f nfsft_benchomp_createdataset$(EXEEXT)
-	$(LINK) $(nfsft_benchomp_createdataset_OBJECTS) $(nfsft_benchomp_createdataset_LDADD) $(LIBS)
-nfsft_benchomp_detail_single$(EXEEXT): $(nfsft_benchomp_detail_single_OBJECTS) $(nfsft_benchomp_detail_single_DEPENDENCIES) $(EXTRA_nfsft_benchomp_detail_single_DEPENDENCIES) 
-	@rm -f nfsft_benchomp_detail_single$(EXEEXT)
-	$(LINK) $(nfsft_benchomp_detail_single_OBJECTS) $(nfsft_benchomp_detail_single_LDADD) $(LIBS)
-nfsft_benchomp_detail_threads$(EXEEXT): $(nfsft_benchomp_detail_threads_OBJECTS) $(nfsft_benchomp_detail_threads_DEPENDENCIES) $(EXTRA_nfsft_benchomp_detail_threads_DEPENDENCIES) 
-	@rm -f nfsft_benchomp_detail_threads$(EXEEXT)
-	$(nfsft_benchomp_detail_threads_LINK) $(nfsft_benchomp_detail_threads_OBJECTS) $(nfsft_benchomp_detail_threads_LDADD) $(LIBS)
-simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
-	@rm -f simple_test$(EXEEXT)
-	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
-simple_test_threads$(EXEEXT): $(simple_test_threads_OBJECTS) $(simple_test_threads_DEPENDENCIES) $(EXTRA_simple_test_threads_DEPENDENCIES) 
-	@rm -f simple_test_threads$(EXEEXT)
-	$(simple_test_threads_LINK) $(simple_test_threads_OBJECTS) $(simple_test_threads_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp_createdataset.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp_detail.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test_threads-simple_test_threads.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-nfsft_benchomp-nfsft_benchomp.o: nfsft_benchomp.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -MT nfsft_benchomp-nfsft_benchomp.o -MD -MP -MF $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo -c -o nfsft_benchomp-nfsft_benchomp.o `test -f 'nfsft_benchomp.c' || echo '$(srcdir)/'`nfsft_benchomp.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsft_benchomp.c' object='nfsft_benchomp-nfsft_benchomp.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp-nfsft_benchomp.o `test -f 'nfsft_benchomp.c' || echo '$(srcdir)/'`nfsft_benchomp.c
-
-nfsft_benchomp-nfsft_benchomp.obj: nfsft_benchomp.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -MT nfsft_benchomp-nfsft_benchomp.obj -MD -MP -MF $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo -c -o nfsft_benchomp-nfsft_benchomp.obj `if test -f 'nfsft_benchomp.c'; then $(CYGPATH_W) 'nfsft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp.c'; fi`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Tpo $(DEPDIR)/nfsft_benchomp-nfsft_benchomp.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsft_benchomp.c' object='nfsft_benchomp-nfsft_benchomp.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp-nfsft_benchomp.obj `if test -f 'nfsft_benchomp.c'; then $(CYGPATH_W) 'nfsft_benchomp.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp.c'; fi`
-
-nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o: nfsft_benchomp_detail.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o -MD -MP -MF $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o `test -f 'nfsft_benchomp_detail.c' || echo '$(srcdir)/'`nfsft_benchomp_detail.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsft_benchomp_detail.c' object='nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.o `test -f 'nfsft_benchomp_detail.c' || echo '$(srcdir)/'`nfsft_benchomp_detail.c
-
-nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj: nfsft_benchomp_detail.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -MT nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj -MD -MP -MF $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj `if test -f 'nfsft_benchomp_detail.c'; then $(CYGPATH_W) 'nfsft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp_detail.c'; fi`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Tpo $(DEPDIR)/nfsft_benchomp_detail_threads-nfsft_benchomp_detail.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsft_benchomp_detail.c' object='nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nfsft_benchomp_detail_threads_CFLAGS) $(CFLAGS) -c -o nfsft_benchomp_detail_threads-nfsft_benchomp_detail.obj `if test -f 'nfsft_benchomp_detail.c'; then $(CYGPATH_W) 'nfsft_benchomp_detail.c'; else $(CYGPATH_W) '$(srcdir)/nfsft_benchomp_detail.c'; fi`
-
-simple_test_threads-simple_test_threads.o: simple_test_threads.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -MT simple_test_threads-simple_test_threads.o -MD -MP -MF $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo -c -o simple_test_threads-simple_test_threads.o `test -f 'simple_test_threads.c' || echo '$(srcdir)/'`simple_test_threads.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo $(DEPDIR)/simple_test_threads-simple_test_threads.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='simple_test_threads.c' object='simple_test_threads-simple_test_threads.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -c -o simple_test_threads-simple_test_threads.o `test -f 'simple_test_threads.c' || echo '$(srcdir)/'`simple_test_threads.c
-
-simple_test_threads-simple_test_threads.obj: simple_test_threads.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -MT simple_test_threads-simple_test_threads.obj -MD -MP -MF $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo -c -o simple_test_threads-simple_test_threads.obj `if test -f 'simple_test_threads.c'; then $(CYGPATH_W) 'simple_test_threads.c'; else $(CYGPATH_W) '$(srcdir)/simple_test_threads.c'; fi`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/simple_test_threads-simple_test_threads.Tpo $(DEPDIR)/simple_test_threads-simple_test_threads.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='simple_test_threads.c' object='simple_test_threads-simple_test_threads.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(simple_test_threads_CFLAGS) $(CFLAGS) -c -o simple_test_threads-simple_test_threads.obj `if test -f 'simple_test_threads.c'; then $(CYGPATH_W) 'simple_test_threads.c'; else $(CYGPATH_W) '$(srcdir)/simple_test_threads.c'; fi`
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/nfsft/nfsft_benchomp.c b/examples/nfsft/nfsft_benchomp.c
index abb3408..559bd2c 100644
--- a/examples/nfsft/nfsft_benchomp.c
+++ b/examples/nfsft/nfsft_benchomp.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -22,8 +22,8 @@
 
 #include "config.h"
 
-#include <nfft3.h>
-#include <nfft3util.h>
+#include "nfft3.h"
+#include "infft.h"
 
 #define NREPEAT 5
 
@@ -31,7 +31,7 @@ static FILE* file_out_tex = NULL;
 
 int get_nthreads_array(int **arr)
 {
-  int max_threads = nfft_get_omp_num_threads();
+  int max_threads = X(get_num_threads)();
   int alloc_num = 2;
   int k;
   int ret_number = 0;
diff --git a/examples/nfsft/nfsft_benchomp_createdataset.c b/examples/nfsft/nfsft_benchomp_createdataset.c
index 72f7643..14d80bd 100644
--- a/examples/nfsft/nfsft_benchomp_createdataset.c
+++ b/examples/nfsft/nfsft_benchomp_createdataset.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -26,7 +26,6 @@
 
 #include "config.h"
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -49,8 +48,8 @@ void nfsft_benchomp_createdataset(unsigned int trafo_adjoint, int N, int M)
   /* init pseudo-random nodes */
   for (j = 0; j < M; j++)
   {
-    x[2*j]= nfft_drand48() - K(0.5);
-    x[2*j+1]= K(0.5) * nfft_drand48();
+    x[2*j]= X(drand48)() - K(0.5);
+    x[2*j+1]= K(0.5) * X(drand48)();
   }
  
   if (trafo_adjoint==0)
diff --git a/examples/nfsft/nfsft_benchomp_detail.c b/examples/nfsft/nfsft_benchomp_detail.c
index dad50d1..2b94fbe 100644
--- a/examples/nfsft/nfsft_benchomp_detail.c
+++ b/examples/nfsft/nfsft_benchomp_detail.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -24,7 +24,6 @@
 #include <stdlib.h>
 #include <complex.h>
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 #ifdef _OPENMP
diff --git a/examples/nfsft/simple_test.c b/examples/nfsft/simple_test.c
index 96856be..339f442 100644
--- a/examples/nfsft/simple_test.c
+++ b/examples/nfsft/simple_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: simple_test.c 3902 2012-10-16 14:02:31Z tovo $ */
+/* $Id$ */
 
 #include "config.h"
 
@@ -31,7 +31,6 @@
 #endif
 
 #include "nfft3.h" /* NFFT3 header */
-#include "nfft3util.h" /* NFFT3 utilities header*/
 #include "infft.h" /* NFFT3 internal header */
 
 static void simple_test_nfsft(void)
@@ -57,8 +56,8 @@ static void simple_test_nfsft(void)
   /* pseudo-random nodes */
   for (j = 0; j < plan.M_total; j++)
   {
-    plan.x[2*j]= nfft_drand48() - K(0.5);
-    plan.x[2*j+1]= K(0.5) * nfft_drand48();
+    plan.x[2*j]= X(drand48)() - K(0.5);
+    plan.x[2*j+1]= K(0.5) * X(drand48)();
   }
 
   /* precomputation (for NFFT, node-dependent) */
@@ -68,13 +67,13 @@ static void simple_test_nfsft(void)
   for (k = 0; k <= plan.N; k++)
     for (n = -k; n <= k; n++)
       plan.f_hat[NFSFT_INDEX(k,n,&plan)] =
-          nfft_drand48() - K(0.5) + _Complex_I*(nfft_drand48() - K(0.5));
+          X(drand48)() - K(0.5) + _Complex_I*(X(drand48)() - K(0.5));
 
   /* Direct transformation, display result. */
   nfsft_trafo_direct(&plan);
   printf("Vector f (NDSFT):\n");
   for (j = 0; j < plan.M_total; j++)
-    printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+    printf("f[%+2d] = %+5.3" __FES__ " %+5.3" __FES__ "*I\n",j,
       creal(plan.f[j]), cimag(plan.f[j]));
 
   printf("\n");
@@ -83,7 +82,7 @@ static void simple_test_nfsft(void)
   nfsft_trafo(&plan);
   printf("Vector f (NFSFT):\n");
   for (j = 0; j < plan.M_total; j++)
-    printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+    printf("f[%+2d] = %+5.3" __FES__ " %+5.3" __FES__ "*I\n",j,
       creal(plan.f[j]), cimag(plan.f[j]));
 
   printf("\n");
@@ -93,7 +92,7 @@ static void simple_test_nfsft(void)
   printf("Vector f_hat (NDSFT):\n");
   for (k = 0; k <= plan.N; k++)
     for (n = -k; n <= k; n++)
-      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" __FES__ " %+5.3" __FES__ "*I\n",k,n,
         creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
         cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
 
@@ -106,7 +105,7 @@ static void simple_test_nfsft(void)
   {
     for (n = -k; n <= k; n++)
     {
-      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" __FES__ " %+5.3" __FES__ "*I\n",k,n,
         creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
         cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
     }
diff --git a/examples/nfsft/simple_test_threads.c b/examples/nfsft/simple_test_threads.c
index 7864358..7a32178 100644
--- a/examples/nfsft/simple_test_threads.c
+++ b/examples/nfsft/simple_test_threads.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -32,7 +32,6 @@
 #include <omp.h>
 
 #include "nfft3.h" /* NFFT3 header */
-#include "nfft3util.h" /* NFFT3 utilities header*/
 #include "infft.h" /* NFFT3 internal header */
 
 static void simple_test_nfsft(void)
@@ -58,8 +57,8 @@ static void simple_test_nfsft(void)
   /* pseudo-random nodes */
   for (j = 0; j < plan.M_total; j++)
   {
-    plan.x[2*j]= nfft_drand48() - K(0.5);
-    plan.x[2*j+1]= K(0.5) * nfft_drand48();
+    plan.x[2*j]= X(drand48)() - K(0.5);
+    plan.x[2*j+1]= K(0.5) * X(drand48)();
   }
 
   /* precomputation (for NFFT, node-dependent) */
@@ -69,13 +68,13 @@ static void simple_test_nfsft(void)
   for (k = 0; k <= plan.N; k++)
     for (n = -k; n <= k; n++)
       plan.f_hat[NFSFT_INDEX(k,n,&plan)] =
-          nfft_drand48() - K(0.5) + _Complex_I*(nfft_drand48() - K(0.5));
+          X(drand48)() - K(0.5) + _Complex_I*(X(drand48)() - K(0.5));
 
   /* Direct transformation, display result. */
   nfsft_trafo_direct(&plan);
   printf("Vector f (NDSFT):\n");
   for (j = 0; j < plan.M_total; j++)
-    printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+    printf("f[%+2d] = %+5.3" __FES__ " %+5.3" __FES__ "*I\n",j,
       creal(plan.f[j]), cimag(plan.f[j]));
 
   printf("\n");
@@ -83,7 +82,7 @@ static void simple_test_nfsft(void)
   /* Fast approximate transformation, display result. */
   printf("Vector f (NDSFT):\n");
   for (j = 0; j < plan.M_total; j++)
-    printf("f[%+2d] = %+5.3" FE " %+5.3" FE "*I\n",j,
+    printf("f[%+2d] = %+5.3" __FES__ " %+5.3" __FES__ "*I\n",j,
       creal(plan.f[j]), cimag(plan.f[j]));
 
   printf("\n");
@@ -93,7 +92,7 @@ static void simple_test_nfsft(void)
   printf("Vector f_hat (NDSFT):\n");
   for (k = 0; k <= plan.N; k++)
     for (n = -k; n <= k; n++)
-      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" __FES__ " %+5.3" __FES__ "*I\n",k,n,
         creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
         cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
 
@@ -106,7 +105,7 @@ static void simple_test_nfsft(void)
   {
     for (n = -k; n <= k; n++)
     {
-      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" FE " %+5.3" FE "*I\n",k,n,
+      fprintf(stdout,"f_hat[%+2d,%+2d] = %+5.3" __FES__ " %+5.3" __FES__ "*I\n",k,n,
         creal(plan.f_hat[NFSFT_INDEX(k,n,&plan)]),
         cimag(plan.f_hat[NFSFT_INDEX(k,n,&plan)]));
     }
@@ -121,7 +120,7 @@ static void simple_test_nfsft(void)
 
 int main(void)
 {
-  printf("nthreads = %d\n", nfft_get_omp_num_threads());
+  printf("nthreads = %d\n", X(get_num_threads)());
 
   /* init */
   fftw_init_threads();
diff --git a/examples/nfsoft/Makefile.am b/examples/nfsoft/Makefile.am
index 7aa9ece..5d536da 100644
--- a/examples/nfsoft/Makefile.am
+++ b/examples/nfsoft/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/examples/nfsoft/Makefile.in b/examples/nfsoft/Makefile.in
deleted file mode 100644
index 811f39b..0000000
--- a/examples/nfsoft/Makefile.in
+++ /dev/null
@@ -1,555 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = simple_test$(EXEEXT)
-subdir = examples/nfsoft
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_simple_test_OBJECTS = simple_test.$(OBJEXT)
-simple_test_OBJECTS = $(am_simple_test_OBJECTS)
-simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(simple_test_SOURCES)
-DIST_SOURCES = $(simple_test_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfsoft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/nfsoft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
-	@rm -f simple_test$(EXEEXT)
-	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/nfsoft/simple_test.c b/examples/nfsoft/simple_test.c
index dcc0035..f9a31c9 100644
--- a/examples/nfsoft/simple_test.c
+++ b/examples/nfsoft/simple_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 #include "config.h"
 
@@ -30,7 +30,6 @@
 #endif
 
 /* Include NFFT 3 utilities headers. */
-#include "nfft3util.h"
 /* Include NFFT3 library header. */
 #include "nfft3.h"
 #include "infft.h"
diff --git a/examples/nfst/Makefile.am b/examples/nfst/Makefile.am
index fc85794..26ec994 100644
--- a/examples/nfst/Makefile.am
+++ b/examples/nfst/Makefile.am
@@ -1,10 +1,10 @@
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
 noinst_PROGRAMS = simple_test
 
 simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+simple_test_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 EXTRA_DIST = README
diff --git a/examples/nfst/Makefile.in b/examples/nfst/Makefile.in
deleted file mode 100644
index 49f37ad..0000000
--- a/examples/nfst/Makefile.in
+++ /dev/null
@@ -1,555 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = simple_test$(EXEEXT)
-subdir = examples/nfst
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_simple_test_OBJECTS = simple_test.$(OBJEXT)
-simple_test_OBJECTS = $(am_simple_test_OBJECTS)
-simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(simple_test_SOURCES)
-DIST_SOURCES = $(simple_test_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nfst/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/nfst/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
-	@rm -f simple_test$(EXEEXT)
-	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/nfst/simple_test.c b/examples/nfst/simple_test.c
index 1abb4a7..286e166 100644
--- a/examples/nfst/simple_test.c
+++ b/examples/nfst/simple_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,67 +16,62 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 #include <stdio.h>
 #include <math.h>
 #include <string.h>
 #include <stdlib.h>
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 static void simple_test_nfst_1d(void)
 {
-  int j,k;
-  nfst_plan p;
+  NFST(plan) p;
 
-  int N=14;
-  int M=19;
+  int N = 14;
+  int M = 19;
 
   /** init an one dimensional plan */
-  nfst_init_1d(&p,N,M);
+  NFST(init_1d)(&p,N,M);
 
   /** init pseudo random nodes */
-  for(j = 0; j < p.d*p.M_total; j++)
-    p.x[j] = 0.5 * ((double)rand()) / RAND_MAX;
+  NFFT(vrand_real)(p.x, p.M_total, K(0.0), K(0.5));
 
   /** precompute psi, the entries of the matrix B */
-  if( p.nfst_flags & PRE_PSI)
-    nfst_precompute_psi( &p);
+  if( p.flags & PRE_ONE_PSI)
+    NFST(precompute_one_psi)(&p);
 
   /** init pseudo random Fourier coefficients and show them */
-  for(k = 0; k < p.N_total; k++)
-    p.f_hat[k] = (double)rand() / RAND_MAX;
-
-  nfft_vpr_double(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
+  NFFT(vrand_real)(p.f_hat, p.N_total, K(0.0), K(1.0));
+  NFFT(vpr_double)(p.f_hat,p.N_total,"given Fourier coefficients, vector f_hat");
 
   /** direct trafo and show the result */
-  nfst_trafo_direct(&p);
-  nfft_vpr_double(p.f,p.M_total,"ndst, vector f");
+  NFST(trafo_direct)(&p);
+  NFFT(vpr_double)(p.f,p.M_total,"ndst, vector f");
 
   /** approx. trafo and show the result */
-  nfst_trafo(&p);
-  nfft_vpr_double(p.f,p.M_total,"nfst, vector f");
+  NFST(trafo)(&p);
+  NFFT(vpr_double)(p.f,p.M_total,"nfst, vector f");
 
   /** approx. adjoint and show the result */
-  nfst_adjoint_direct(&p);
-  nfft_vpr_double(p.f_hat,p.N_total,"adjoint ndst, vector f_hat");
+  NFST(adjoint_direct)(&p);
+  NFFT(vpr_double)(p.f_hat,p.N_total,"adjoint ndst, vector f_hat");
 
   /** approx. adjoint and show the result */
-  nfst_adjoint(&p);
-  nfft_vpr_double(p.f_hat,p.N_total,"adjoint nfst, vector f_hat");
+  NFST(adjoint)(&p);
+  NFFT(vpr_double)(p.f_hat,p.N_total,"adjoint nfst, vector f_hat");
 
   /** finalise the one dimensional plan */
-  nfst_finalize(&p);
+  NFST(finalize)(&p);
 }
 
 int main(void)
 {
-  system("clear");
-  printf("computing one dimensional ndst, nfst and adjoint ndst, nfst\n\n");
+  printf("Computing one dimensional ndct, nfct, adjoint ndct, and adjoint nfct...\n\n");
   simple_test_nfst_1d();
   printf("\n\n");
 
-  return 1;
+  return EXIT_SUCCESS;
 }
diff --git a/examples/nnfft/Makefile.am b/examples/nnfft/Makefile.am
index 08f5ae0..f1c4ec7 100644
--- a/examples/nnfft/Makefile.am
+++ b/examples/nnfft/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/examples/nnfft/Makefile.in b/examples/nnfft/Makefile.in
deleted file mode 100644
index d9dc7c9..0000000
--- a/examples/nnfft/Makefile.in
+++ /dev/null
@@ -1,564 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = simple_test$(EXEEXT) accuracy$(EXEEXT)
-subdir = examples/nnfft
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_accuracy_OBJECTS = accuracy.$(OBJEXT)
-accuracy_OBJECTS = $(am_accuracy_OBJECTS)
-accuracy_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_simple_test_OBJECTS = simple_test.$(OBJEXT)
-simple_test_OBJECTS = $(am_simple_test_OBJECTS)
-simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(accuracy_SOURCES) $(simple_test_SOURCES)
-DIST_SOURCES = $(accuracy_SOURCES) $(simple_test_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-accuracy_SOURCES = accuracy.c
-accuracy_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = accuracy.m README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nnfft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/nnfft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-accuracy$(EXEEXT): $(accuracy_OBJECTS) $(accuracy_DEPENDENCIES) $(EXTRA_accuracy_DEPENDENCIES) 
-	@rm -f accuracy$(EXEEXT)
-	$(LINK) $(accuracy_OBJECTS) $(accuracy_LDADD) $(LIBS)
-simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
-	@rm -f simple_test$(EXEEXT)
-	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/accuracy.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/nnfft/accuracy.c b/examples/nnfft/accuracy.c
index 3409be4..8fecb04 100644
--- a/examples/nnfft/accuracy.c
+++ b/examples/nnfft/accuracy.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: accuracy.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 #include "config.h"
 
@@ -26,7 +26,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -81,7 +80,7 @@ void accuracy(int d)
       /** direct trafo and show the result */
       nnfft_trafo_direct(&my_plan);
 
-      NFFT_SWAP_complex(my_plan.f,slow);
+      CSWAP(my_plan.f,slow);
 
       /** approx. trafo and show the result */
       nnfft_trafo(&my_plan);
diff --git a/examples/nnfft/accuracy.m b/examples/nnfft/accuracy.m
index 6d7bd0c..df43db3 100644
--- a/examples/nnfft/accuracy.m
+++ b/examples/nnfft/accuracy.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: accuracy.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 m=0:14;
 load kaiser_bessel.dat
 load sinc_power.dat
diff --git a/examples/nnfft/simple_test.c b/examples/nnfft/simple_test.c
index fcf3ac0..900910c 100644
--- a/examples/nnfft/simple_test.c
+++ b/examples/nnfft/simple_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdlib.h>
@@ -25,7 +25,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -35,7 +34,7 @@ void simple_test_nnfft_1d(void)
   nnfft_plan my_plan;                    /**< plan for the nfft                */
 
   int N[1];
-  N[0]=12;
+  N[0]=10;
 
   /** init an one dimensional plan */
   nnfft_init(&my_plan, 1, 3, 19, N);
@@ -52,18 +51,20 @@ void simple_test_nnfft_1d(void)
   }
 
   /** precompute psi, the entries of the matrix B */
-  if(my_plan.nnfft_flags & PRE_PSI)
-    nnfft_precompute_psi(&my_plan);
+/*  if(my_plan.nnfft_flags & PRE_PSI)
+        nnfft_precompute_psi(&my_plan);
 
   if(my_plan.nnfft_flags & PRE_FULL_PSI)
-    nnfft_precompute_full_psi(&my_plan);
-
+ 	nnfft_precompute_full_psi(&my_plan);
   if(my_plan.nnfft_flags & PRE_LIN_PSI)
-    nnfft_precompute_lin_psi(&my_plan);
-
+	 nnfft_precompute_lin_psi(&my_plan);
   /** precompute phi_hut, the entries of the matrix D */
-  if(my_plan.nnfft_flags & PRE_PHI_HUT)
-    nnfft_precompute_phi_hut(&my_plan);
+/*  if(my_plan.nnfft_flags & PRE_PHI_HUT)
+	  nnfft_precompute_phi_hut(&my_plan);
+*/
+
+nnfft_precompute_one_psi(&my_plan);
+
 
   /** init pseudo random Fourier coefficients and show them */
   for(k=0;k<my_plan.N_total;k++)
@@ -250,10 +251,10 @@ static void simple_test_innfft_1d(void)
     nfft_vpr_complex(my_iplan.f_hat_iter,my_plan.N_total,
           "approximate solution, vector f_hat_iter");
 
-    NFFT_SWAP_complex(my_iplan.f_hat_iter,my_plan.f_hat);
+    CSWAP(my_iplan.f_hat_iter,my_plan.f_hat);
     nnfft_trafo(&my_plan);
     nfft_vpr_complex(my_plan.f,my_plan.M_total,"fitting the data, vector f");
-    NFFT_SWAP_complex(my_iplan.f_hat_iter,my_plan.f_hat);
+    CSWAP(my_iplan.f_hat_iter,my_plan.f_hat);
   }
 
   solver_finalize_complex(&my_iplan);
@@ -311,10 +312,10 @@ static void measure_time_nnfft_1d(void)
 int main(void)
 {
   system("clear");
-  printf("1) computing a one dimensional nndft, nnfft\n\n");
+  printf("1) computing a one dimensional nndft, nnfft SUSE\n\n");
   simple_test_nnfft_1d();
 
-  getc(stdin);
+  /*getc(stdin);
 
   system("clear");
   printf("1a) computing a one dimensional adjoint nndft, nnfft\n\n");
@@ -337,6 +338,6 @@ int main(void)
   system("clear");
   printf("4) computing times for one dimensional nnfft\n\n");
   measure_time_nnfft_1d();
-
+*/
   return 1;
 }
diff --git a/examples/nsfft/Makefile.am b/examples/nsfft/Makefile.am
index 370c617..84dfefc 100644
--- a/examples/nsfft/Makefile.am
+++ b/examples/nsfft/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/examples/nsfft/Makefile.in b/examples/nsfft/Makefile.in
deleted file mode 100644
index c024b65..0000000
--- a/examples/nsfft/Makefile.in
+++ /dev/null
@@ -1,564 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = simple_test$(EXEEXT) nsfft_test$(EXEEXT)
-subdir = examples/nsfft
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_nsfft_test_OBJECTS = nsfft_test.$(OBJEXT)
-nsfft_test_OBJECTS = $(am_nsfft_test_OBJECTS)
-nsfft_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_simple_test_OBJECTS = simple_test.$(OBJEXT)
-simple_test_OBJECTS = $(am_simple_test_OBJECTS)
-simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(nsfft_test_SOURCES) $(simple_test_SOURCES)
-DIST_SOURCES = $(nsfft_test_SOURCES) $(simple_test_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-nsfft_test_SOURCES = nsfft_test.c
-nsfft_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/nsfft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/nsfft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-nsfft_test$(EXEEXT): $(nsfft_test_OBJECTS) $(nsfft_test_DEPENDENCIES) $(EXTRA_nsfft_test_DEPENDENCIES) 
-	@rm -f nsfft_test$(EXEEXT)
-	$(LINK) $(nsfft_test_OBJECTS) $(nsfft_test_LDADD) $(LIBS)
-simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
-	@rm -f simple_test$(EXEEXT)
-	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nsfft_test.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/nsfft/nsfft_test.c b/examples/nsfft/nsfft_test.c
index 7d01c9a..1cab619 100644
--- a/examples/nsfft/nsfft_test.c
+++ b/examples/nsfft/nsfft_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nsfft_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdio.h>
@@ -27,7 +27,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -48,7 +47,7 @@ static void accuracy_nsfft(int d, int J, int M, int m)
   /** direct trafo */
   nsfft_trafo_direct(&p);
 
-  NFFT_SWAP_complex(swap_sndft_trafo,p.f);
+  CSWAP(swap_sndft_trafo,p.f);
 
   /** approx. trafo */
   nsfft_trafo(&p);
@@ -63,7 +62,7 @@ static void accuracy_nsfft(int d, int J, int M, int m)
   /** direct adjoint */
   nsfft_adjoint_direct(&p);
 
-  NFFT_SWAP_complex(swap_sndft_adjoint,p.f_hat);
+  CSWAP(swap_sndft_adjoint,p.f_hat);
 
   /** approx. adjoint */
   nsfft_adjoint(&p);
@@ -125,7 +124,7 @@ static void time_nsfft(int d, int J, int M, unsigned test_nsdft, unsigned test_n
     nfft_init_guru(&np,d,N,M,n,6, FG_PSI| MALLOC_F_HAT| MALLOC_F| FFTW_INIT,
       FFTW_MEASURE);
     np.x=p.act_nfft_plan->x;
-    if(np.nfft_flags & PRE_ONE_PSI)
+    if(np.flags & PRE_ONE_PSI)
       nfft_precompute_one_psi(&np);
     nsfft_cp(&p, &np);
 
diff --git a/examples/nsfft/simple_test.c b/examples/nsfft/simple_test.c
index 9f4e356..74658e2 100644
--- a/examples/nsfft/simple_test.c
+++ b/examples/nsfft/simple_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdio.h>
@@ -27,7 +27,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
diff --git a/examples/solver/Makefile.am b/examples/solver/Makefile.am
index af6159c..d5a7aba 100644
--- a/examples/solver/Makefile.am
+++ b/examples/solver/Makefile.am
@@ -1,13 +1,13 @@
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
 noinst_PROGRAMS = simple_test glacier
 
 simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+simple_test_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 glacier_SOURCES = glacier.c doxygen.h
-glacier_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
+glacier_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la @fftw3_LDFLAGS@ @fftw3_LIBS@
 
 EXTRA_DIST = glacier.m glacier_cv.m vol87.dat README
diff --git a/examples/solver/Makefile.in b/examples/solver/Makefile.in
deleted file mode 100644
index cd17ab1..0000000
--- a/examples/solver/Makefile.in
+++ /dev/null
@@ -1,564 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3654 2011-10-13 12:02:47Z rahi $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-noinst_PROGRAMS = simple_test$(EXEEXT) glacier$(EXEEXT)
-subdir = examples/solver
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am_glacier_OBJECTS = glacier.$(OBJEXT)
-glacier_OBJECTS = $(am_glacier_OBJECTS)
-glacier_DEPENDENCIES = $(top_builddir)/libnfft3.la
-am_simple_test_OBJECTS = simple_test.$(OBJEXT)
-simple_test_OBJECTS = $(am_simple_test_OBJECTS)
-simple_test_DEPENDENCIES = $(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(glacier_SOURCES) $(simple_test_SOURCES)
-DIST_SOURCES = $(glacier_SOURCES) $(simple_test_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-simple_test_SOURCES = simple_test.c
-simple_test_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-glacier_SOURCES = glacier.c doxygen.h
-glacier_LDADD = $(top_builddir)/libnfft3.la @fftw3_LDFLAGS@ @fftw3_LIBS@
-EXTRA_DIST = glacier.m glacier_cv.m vol87.dat README
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/solver/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/solver/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-glacier$(EXEEXT): $(glacier_OBJECTS) $(glacier_DEPENDENCIES) $(EXTRA_glacier_DEPENDENCIES) 
-	@rm -f glacier$(EXEEXT)
-	$(LINK) $(glacier_OBJECTS) $(glacier_LDADD) $(LIBS)
-simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) $(EXTRA_simple_test_DEPENDENCIES) 
-	@rm -f simple_test$(EXEEXT)
-	$(LINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/glacier.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simple_test.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/solver/doxygen.h b/examples/solver/doxygen.h
index 1ee7bf5..edddb57 100644
--- a/examples/solver/doxygen.h
+++ b/examples/solver/doxygen.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/examples/solver/glacier.c b/examples/solver/glacier.c
index feb86e7..0a7de73 100644
--- a/examples/solver/glacier.c
+++ b/examples/solver/glacier.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: glacier.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdio.h>
@@ -27,7 +27,6 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -39,203 +38,207 @@
  */
 
 /** Generalised Sobolev weight */
-static double my_weight(double z,double a,double b,double c)
+static R my_weight(R z, R a, R b, R c)
 {
-    return pow(0.25-z*z,b)/(c+pow(fabs(z),2*a));
+  return POW(K(0.25) - z * z, b) / (c + POW(FABS(z), K(2.0) * a));
 }
 
 /** Reconstruction routine */
-static void glacier(int N,int M)
+static void glacier(int N, int M)
 {
-  int j,k,k0,k1,l,my_N[2],my_n[2];
-  double tmp_y;
-  nfft_plan p;
-  solver_plan_complex ip;
+  int j, k, k0, k1, l, my_N[2], my_n[2];
+  R tmp_y;
+  NFFT(plan) p;
+  SOLVER(plan_complex) ip;
   FILE* fp;
 
   /* initialise p */
-  my_N[0]=N; my_n[0]=X(next_power_of_2)(N);
-  my_N[1]=N; my_n[1]=X(next_power_of_2)(N);
-  nfft_init_guru(&p, 2, my_N, M, my_n, 6,
-		 PRE_PHI_HUT| PRE_FULL_PSI|
-		 MALLOC_X| MALLOC_F_HAT| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  my_N[0] = N;
+  my_n[0] = (int)NFFT(next_power_of_2)(N);
+  my_N[1] = N;
+  my_n[1] = (int)NFFT(next_power_of_2)(N);
+  NFFT(init_guru)(&p, 2, my_N, M, my_n, 6,
+  PRE_PHI_HUT | PRE_FULL_PSI |
+  MALLOC_X | MALLOC_F_HAT | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /* initialise ip, specific */
-  solver_init_advanced_complex(&ip,(nfft_mv_plan_complex*)(&p), CGNE| PRECOMPUTE_DAMP);
-  fprintf(stderr,"Using the generic solver!");
+  SOLVER(init_advanced_complex)(&ip, (NFFT(mv_plan_complex)*) (&p),
+      CGNE | PRECOMPUTE_DAMP);
+  fprintf(stderr, "Using the generic solver!");
 
   /* init nodes */
-  fp=fopen("input_data.dat","r");
-  for(j=0;j<p.M_total;j++)
+  fp = fopen("input_data.dat", "r");
+  for (j = 0; j < p.M_total; j++)
   {
-      fscanf(fp,"%le %le %le",&p.x[2*j+0],&p.x[2*j+1],&tmp_y);
-      ip.y[j]=tmp_y;
+    fscanf(fp, "%" __FES__ " %" __FES__ " %" __FES__, &p.x[2 * j + 0], &p.x[2 * j + 1], &tmp_y);
+    ip.y[j] = tmp_y;
   }
   fclose(fp);
 
   /* precompute psi */
-  if(p.nfft_flags & PRE_ONE_PSI)
-      nfft_precompute_one_psi(&p);
+  if (p.flags & PRE_ONE_PSI)
+    NFFT(precompute_one_psi)(&p);
 
   /* initialise damping factors */
-  if(ip.flags & PRECOMPUTE_DAMP)
-    for(k0=0;k0<p.N[0];k0++)
-      for(k1=0;k1<p.N[1];k1++)
-        ip.w_hat[k0*p.N[1]+k1]=
-	    my_weight(((double)(k0-p.N[0]/2))/p.N[0],0.5,3,0.001)*
-	    my_weight(((double)(k1-p.N[1]/2))/p.N[1],0.5,3,0.001);
+  if (ip.flags & PRECOMPUTE_DAMP)
+    for (k0 = 0; k0 < p.N[0]; k0++)
+      for (k1 = 0; k1 < p.N[1]; k1++)
+        ip.w_hat[k0 * p.N[1] + k1] = my_weight(((R) ((R)(k0) - (R)(p.N[0]) / K(2.0))) / ((R)(p.N[0])),
+            K(0.5), K(3.0), K(0.001))
+            * my_weight((((R)(k1) - (R)(p.N[1]) / K(2.0))) / ((R)(p.N[1])), K(0.5), K(3.0), K(0.001));
 
   /* init some guess */
-  for(k=0;k<p.N_total;k++)
-      ip.f_hat_iter[k]=0;
+  for (k = 0; k < p.N_total; k++)
+    ip.f_hat_iter[k] = K(0.0);
 
   /* inverse trafo */
-  solver_before_loop_complex(&ip);
-  for(l=0;l<40;l++)
-    {
-      fprintf(stderr,"Residual ||r||=%e,\n",sqrt(ip.dot_r_iter));
-      solver_loop_one_step_complex(&ip);
-    }
+  SOLVER(before_loop_complex)(&ip);
+
+  for (l = 0; l < 40; l++)
+  {
+    fprintf(stderr, "Residual ||r||=%" __FES__ ",\n", SQRT(ip.dot_r_iter));
+    SOLVER(loop_one_step_complex)(&ip);
+  }
 
-  for(k=0;k<p.N_total;k++)
-    printf("%le %le\n",creal(ip.f_hat_iter[k]),cimag(ip.f_hat_iter[k]));
+  for (k = 0; k < p.N_total; k++)
+    printf("%" __FES__ " %" __FES__ "\n", CREAL(ip.f_hat_iter[k]), CIMAG(ip.f_hat_iter[k]));
 
-  solver_finalize_complex(&ip);
-  nfft_finalize(&p);
+  SOLVER(finalize_complex)(&ip);
+  NFFT(finalize)(&p);
 }
 
 /** Reconstruction routine with cross validation */
-static void glacier_cv(int N,int M,int M_cv,unsigned solver_flags)
+static void glacier_cv(int N, int M, int M_cv, unsigned solver_flags)
 {
-  int j,k,k0,k1,l,my_N[2],my_n[2];
-  double tmp_y,r;
-  nfft_plan p,cp;
-  solver_plan_complex ip;
-  double _Complex* cp_y;
+  int j, k, k0, k1, l, my_N[2], my_n[2];
+  R tmp_y, r;
+  NFFT(plan) p, cp;
+  SOLVER(plan_complex) ip;
+  C* cp_y;
   FILE* fp;
-  int M_re=M-M_cv;
+  int M_re = M - M_cv;
 
   /* initialise p for reconstruction */
-  my_N[0]=N; my_n[0]=X(next_power_of_2)(N);
-  my_N[1]=N; my_n[1]=X(next_power_of_2)(N);
-  nfft_init_guru(&p, 2, my_N, M_re, my_n, 6,
-		 PRE_PHI_HUT| PRE_FULL_PSI|
-		 MALLOC_X| MALLOC_F_HAT| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
-
+  my_N[0] = N;
+  my_n[0] = (int)NFFT(next_power_of_2)(N);
+  my_N[1] = N;
+  my_n[1] = (int)NFFT(next_power_of_2)(N);
+  NFFT(init_guru)(&p, 2, my_N, M_re, my_n, 6,
+  PRE_PHI_HUT | PRE_FULL_PSI |
+  MALLOC_X | MALLOC_F_HAT | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
   /* initialise ip, specific */
-  solver_init_advanced_complex(&ip,(nfft_mv_plan_complex*)(&p), solver_flags);
+  SOLVER(init_advanced_complex)(&ip, (NFFT(mv_plan_complex)*) (&p), solver_flags);
 
   /* initialise cp for validation */
-  cp_y = (double _Complex*) nfft_malloc(M*sizeof(double _Complex));
-  nfft_init_guru(&cp, 2, my_N, M, my_n, 6,
-		 PRE_PHI_HUT| PRE_FULL_PSI|
-		 MALLOC_X| MALLOC_F|
-		 FFTW_INIT| FFT_OUT_OF_PLACE,
-		 FFTW_MEASURE| FFTW_DESTROY_INPUT);
+  cp_y = (C*) NFFT(malloc)((size_t)(M) * sizeof(C));
+  NFFT(init_guru)(&cp, 2, my_N, M, my_n, 6,
+  PRE_PHI_HUT | PRE_FULL_PSI |
+  MALLOC_X | MALLOC_F |
+  FFTW_INIT | FFT_OUT_OF_PLACE,
+  FFTW_MEASURE | FFTW_DESTROY_INPUT);
 
-  cp.f_hat=ip.f_hat_iter;
+  cp.f_hat = ip.f_hat_iter;
 
   /* set up data in cp and cp_y */
-  fp=fopen("input_data.dat","r");
-  for(j=0;j<cp.M_total;j++)
-    {
-      fscanf(fp,"%le %le %le",&cp.x[2*j+0],&cp.x[2*j+1],&tmp_y);
-      cp_y[j]=tmp_y;
-    }
+  fp = fopen("input_data.dat", "r");
+  for (j = 0; j < cp.M_total; j++)
+  {
+    fscanf(fp, "%" __FES__ " %" __FES__ " %" __FES__, &cp.x[2 * j + 0], &cp.x[2 * j + 1], &tmp_y);
+    cp_y[j] = tmp_y;
+  }
   fclose(fp);
 
   /* copy part of the data to p and ip */
-  for(j=0;j<p.M_total;j++)
+  for (j = 0; j < p.M_total; j++)
   {
-      p.x[2*j+0]=cp.x[2*j+0];
-      p.x[2*j+1]=cp.x[2*j+1];
-      ip.y[j]=tmp_y;
+    p.x[2 * j + 0] = cp.x[2 * j + 0];
+    p.x[2 * j + 1] = cp.x[2 * j + 1];
+    ip.y[j] = tmp_y;
   }
 
   /* precompute psi */
-  if(p.nfft_flags & PRE_ONE_PSI)
-    nfft_precompute_one_psi(&p);
+  if (p.flags & PRE_ONE_PSI)
+    NFFT(precompute_one_psi)(&p);
 
   /* precompute psi */
-  if(cp.nfft_flags & PRE_ONE_PSI)
-    nfft_precompute_one_psi(&cp);
+  if (cp.flags & PRE_ONE_PSI)
+    NFFT(precompute_one_psi)(&cp);
 
   /* initialise damping factors */
-  if(ip.flags & PRECOMPUTE_DAMP)
-    for(k0=0;k0<p.N[0];k0++)
-      for(k1=0;k1<p.N[1];k1++)
-        ip.w_hat[k0*p.N[1]+k1]=
-	    my_weight(((double)(k0-p.N[0]/2))/p.N[0],0.5,3,0.001)*
-	    my_weight(((double)(k1-p.N[1]/2))/p.N[1],0.5,3,0.001);
+  if (ip.flags & PRECOMPUTE_DAMP)
+    for (k0 = 0; k0 < p.N[0]; k0++)
+      for (k1 = 0; k1 < p.N[1]; k1++)
+        ip.w_hat[k0 * p.N[1] + k1] = my_weight((((R)(k0) - (R)(p.N[0]) / K(2.0))) / ((R)(p.N[0])),
+            K(0.5), K(3.0), K(0.001))
+            * my_weight((((R)(k1) - (R)(p.N[1]) / K(2.0))) / ((R)(p.N[1])), K(0.5), K(3.0), K(0.001));
 
   /* init some guess */
-  for(k=0;k<p.N_total;k++)
-      ip.f_hat_iter[k]=0;
+  for (k = 0; k < p.N_total; k++)
+    ip.f_hat_iter[k] = K(0.0);
 
   /* inverse trafo */
-  solver_before_loop_complex(&ip);
+  SOLVER(before_loop_complex)(&ip);
   //  fprintf(stderr,"iteration starts,\t");
-  for(l=0;l<40;l++)
-    solver_loop_one_step_complex(&ip);
+  for (l = 0; l < 40; l++)
+    SOLVER(loop_one_step_complex)(&ip);
 
   //fprintf(stderr,"r=%1.2e, ",sqrt(ip.dot_r_iter)/M_re);
 
-  NFFT_SWAP_complex(p.f_hat,ip.f_hat_iter);
-  nfft_trafo(&p);
-  NFFT_SWAP_complex(p.f_hat,ip.f_hat_iter);
-  nfft_upd_axpy_complex(p.f,-1,ip.y,M_re);
-  r=sqrt(nfft_dot_complex(p.f,M_re)/nfft_dot_complex(cp_y,M));
-  fprintf(stderr,"r=%1.2e, ",r);
-  printf("$%1.1e$ & ",r);
-
-  nfft_trafo(&cp);
-  nfft_upd_axpy_complex(&cp.f[M_re],-1,&cp_y[M_re],M_cv);
-  r=sqrt(nfft_dot_complex(&cp.f[M_re],M_cv)/nfft_dot_complex(cp_y,M));
-  fprintf(stderr,"r_1=%1.2e\t",r);
-  printf("$%1.1e$ & ",r);
-
-  nfft_finalize(&cp);
-  solver_finalize_complex(&ip);
-  nfft_finalize(&p);
+  CSWAP(p.f_hat, ip.f_hat_iter);
+  NFFT(trafo)(&p);
+  CSWAP(p.f_hat, ip.f_hat_iter);
+  NFFT(upd_axpy_complex)(p.f, -1, ip.y, M_re);
+  r = SQRT(NFFT(dot_complex)(p.f, M_re) / NFFT(dot_complex)(cp_y, M));
+  fprintf(stderr, "r=%1.2" __FES__ ", ", r);
+  printf("$%1.1" __FES__ "$ & ", r);
+
+  NFFT(trafo)(&cp);
+  NFFT(upd_axpy_complex)(&cp.f[M_re], -1, &cp_y[M_re], M_cv);
+  r = SQRT(NFFT(dot_complex)(&cp.f[M_re], M_cv) / NFFT(dot_complex)(cp_y, M));
+  fprintf(stderr, "r_1=%1.2" __FES__ "\t", r);
+  printf("$%1.1" __FES__ "$ & ", r);
+
+  NFFT(finalize)(&cp);
+  SOLVER(finalize_complex)(&ip);
+  NFFT(finalize)(&p);
 }
 
-
 /** Main routine */
 int main(int argc, char **argv)
 {
   int M_cv;
 
-  if(argc<3)
+  if (argc < 3)
+  {
+    fprintf(stderr, "Call this program from the Matlab script glacier.m!");
+    return EXIT_FAILURE;
+  }
+
+  if (argc == 3)
+    glacier(atoi(argv[1]), atoi(argv[2]));
+  else
+    for (M_cv = atoi(argv[3]); M_cv <= atoi(argv[5]); M_cv += atoi(argv[4]))
     {
-      fprintf(stderr,"Call this program from the Matlab script glacier.m!");
-      exit(-1);
+      fprintf(stderr, "\nM_cv=%d,\t", M_cv);
+      printf("$%d$ & ", M_cv);
+      fprintf(stderr, "cgne+damp: ");
+      glacier_cv(atoi(argv[1]), atoi(argv[2]), M_cv, CGNE | PRECOMPUTE_DAMP);
+      //fprintf(stderr,"cgne: ");
+      //glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE);
+      fprintf(stderr, "cgnr: ");
+      glacier_cv(atoi(argv[1]), atoi(argv[2]), M_cv, CGNR);
+      fprintf(stderr, "cgnr: ");
+      glacier_cv(atoi(argv[1]) / 4, atoi(argv[2]), M_cv, CGNR);
+      printf("XXX \\\\\n");
     }
 
-  if(argc==3)
-    glacier(atoi(argv[1]),atoi(argv[2]));
-  else
-    for(M_cv=atoi(argv[3]);M_cv<=atoi(argv[5]);M_cv+=atoi(argv[4]))
-      {
-	fprintf(stderr,"\nM_cv=%d,\t",M_cv);
-	printf("$%d$ & ",M_cv);
-	fprintf(stderr,"cgne+damp: ");
-	glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE| PRECOMPUTE_DAMP);
-	//fprintf(stderr,"cgne: ");
-	//glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNE);
-	fprintf(stderr,"cgnr: ");
-	glacier_cv(atoi(argv[1]),atoi(argv[2]),M_cv,CGNR);
-	fprintf(stderr,"cgnr: ");
-	glacier_cv(atoi(argv[1])/4,atoi(argv[2]),M_cv,CGNR);
-	printf("XXX \\\\\n");
-      }
-
-  fprintf(stderr,"\n");
-
-  return 1;
+  fprintf(stderr, "\n");
+
+  return EXIT_SUCCESS;
 }
 /* \} */
diff --git a/examples/solver/glacier.m b/examples/solver/glacier.m
index c55e702..e37168b 100644
--- a/examples/solver/glacier.m
+++ b/examples/solver/glacier.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: glacier.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 N=256;
 border_eps=0.1;
 
diff --git a/examples/solver/glacier_cv.m b/examples/solver/glacier_cv.m
index de7716d..a8b92bb 100644
--- a/examples/solver/glacier_cv.m
+++ b/examples/solver/glacier_cv.m
@@ -1,4 +1,4 @@
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -14,7 +14,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: glacier_cv.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 N=256;
 border_eps=0.1;
 
diff --git a/examples/solver/simple_test.c b/examples/solver/simple_test.c
index 995a78b..8162090 100644
--- a/examples/solver/simple_test.c
+++ b/examples/solver/simple_test.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: simple_test.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdio.h>
@@ -27,8 +27,8 @@
 #include <complex.h>
 #endif
 
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
 
 /* void simple_test_infft_1d(int N, int M, int iter) */
 /* { */
@@ -43,7 +43,7 @@
 /*   nfft_vrand_shifted_unit_double(p.x,p.M_total); */
 
 /*   /\** precompute psi, the entries of the matrix B *\/ */
-/*   if(p.nfft_flags & PRE_ONE_PSI) */
+/*   if(p.flags & PRE_ONE_PSI) */
 /*     nfft_precompute_one_psi(&p); */
 
 /*   /\** initialise inverse plan *\/ */
@@ -59,10 +59,10 @@
 
 /*   nfft_vpr_complex(ip.f_hat_iter,p.N_total,"Initial guess, vector f_hat_iter"); */
 
-/*   NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+/*   CSWAP(ip.f_hat_iter,p.f_hat); */
 /*   nfft_trafo(&p); */
 /*   nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f"); */
-/*   NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+/*   CSWAP(ip.f_hat_iter,p.f_hat); */
 
 /*   infft_before_loop(&ip); */
 /*   printf("\n Residual r=%e\n",ip.dot_r_iter); */
@@ -74,10 +74,10 @@
 /*       nfft_vpr_complex(ip.f_hat_iter,p.N_total, */
 /* 		  "Approximate solution, vector f_hat_iter"); */
 
-/*       NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+/*       CSWAP(ip.f_hat_iter,p.f_hat); */
 /*       nfft_trafo(&p); */
 /*       nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f"); */
-/*       NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat); */
+/*       CSWAP(ip.f_hat_iter,p.f_hat); */
 
 /*       printf("\n Residual r=%e\n",ip.dot_r_iter); */
 /*     } */
@@ -89,58 +89,59 @@
 /** Simple test routine for the inverse nfft */
 static void simple_test_solver_nfft_1d(int N, int M, int iter)
 {
-  int k,l;                            /**< index for nodes, freqencies,iter*/
-  nfft_plan p;                          /**< plan for the nfft               */
-  solver_plan_complex ip;                        /**< plan for the inverse nfft       */
+  int k, l; /**< index for nodes, freqencies,iter*/
+  NFFT(plan) p; /**< plan for the nfft               */
+  SOLVER(plan_complex) ip; /**< plan for the inverse nfft       */
 
   /** initialise an one dimensional plan */
-  nfft_init_1d(&p, N, M);
+  NFFT(init_1d)(&p, N, M);
 
   /** init pseudo random nodes */
-  nfft_vrand_shifted_unit_double(p.x,p.M_total);
+  NFFT(vrand_shifted_unit_double)(p.x, p.M_total);
 
   /** precompute psi, the entries of the matrix B */
-  if(p.nfft_flags & PRE_ONE_PSI)
-    nfft_precompute_one_psi(&p);
+  if (p.flags & PRE_ONE_PSI)
+    NFFT(precompute_one_psi)(&p);
 
   /** initialise inverse plan */
-  solver_init_complex(&ip,(nfft_mv_plan_complex*)(&p));
+  SOLVER(init_complex)(&ip, (NFFT(mv_plan_complex)*) (&p));
 
   /** init pseudo random samples and show them */
-  nfft_vrand_unit_complex(ip.y,p.M_total);
-  nfft_vpr_complex(ip.y,p.M_total,"Given data, vector y");
+  NFFT(vrand_unit_complex)(ip.y, p.M_total);
+  NFFT(vpr_complex)(ip.y, p.M_total, "Given data, vector y");
 
   /** initialise some guess f_hat_0 and solve */
-  for(k=0;k<p.N_total;k++)
-      ip.f_hat_iter[k]=0;
+  for (k = 0; k < p.N_total; k++)
+    ip.f_hat_iter[k] = K(0.0);
 
-  nfft_vpr_complex(ip.f_hat_iter,p.N_total,"Initial guess, vector f_hat_iter");
+  NFFT(vpr_complex)(ip.f_hat_iter, p.N_total,
+      "Initial guess, vector f_hat_iter");
 
-  NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
-  nfft_trafo(&p);
-  nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f");
-  NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
+  CSWAP(ip.f_hat_iter, p.f_hat);
+  NFFT(trafo)(&p);
+  NFFT(vpr_complex)(p.f, p.M_total, "Data fit, vector f");
+  CSWAP(ip.f_hat_iter, p.f_hat);
 
-  solver_before_loop_complex(&ip);
-  printf("\n Residual r=%e\n",ip.dot_r_iter);
+  SOLVER(before_loop_complex)(&ip);
+  printf("\n Residual r=%" __FES__ "\n", ip.dot_r_iter);
 
-  for(l=0;l<iter;l++)
-    {
-      printf("\n********** Iteration l=%d **********\n",l);
-      solver_loop_one_step_complex(&ip);
-      nfft_vpr_complex(ip.f_hat_iter,p.N_total,
-		  "Approximate solution, vector f_hat_iter");
+  for (l = 0; l < iter; l++)
+  {
+    printf("\n********** Iteration l=%d **********\n", l);
+    SOLVER(loop_one_step_complex)(&ip);
+    NFFT(vpr_complex)(ip.f_hat_iter, p.N_total,
+        "Approximate solution, vector f_hat_iter");
 
-      NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
-      nfft_trafo(&p);
-      nfft_vpr_complex(p.f,p.M_total,"Data fit, vector f");
-      NFFT_SWAP_complex(ip.f_hat_iter,p.f_hat);
+    CSWAP(ip.f_hat_iter, p.f_hat);
+    NFFT(trafo)(&p);
+    NFFT(vpr_complex)(p.f, p.M_total, "Data fit, vector f");
+    CSWAP(ip.f_hat_iter, p.f_hat);
 
-      printf("\n Residual r=%e\n",ip.dot_r_iter);
-    }
+    printf("\n Residual r=%" __FES__ "\n", ip.dot_r_iter);
+  }
 
-  solver_finalize_complex(&ip);
-  nfft_finalize(&p);
+  SOLVER(finalize_complex)(&ip);
+  NFFT(finalize)(&p);
 }
 
 /** Main routine */
@@ -148,8 +149,8 @@ int main(void)
 {
   printf("\n Computing a one dimensional inverse nfft\n");
 
-  simple_test_solver_nfft_1d(8,4,5);
+  simple_test_solver_nfft_1d(8, 4, 5);
 
-  return 1;
+  return EXIT_SUCCESS;
 }
 /* \} */
diff --git a/include/Makefile.am b/include/Makefile.am
index b5fb86b..d580dbf 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1,3 +1,3 @@
-include_HEADERS = nfft3.h nfft3util.h nfft3conf.h
+include_HEADERS = nfft3.h
 
 EXTRA_DIST = infft.h cycle.h api.h
diff --git a/include/Makefile.in b/include/Makefile.in
deleted file mode 100644
index 0ad727d..0000000
--- a/include/Makefile.in
+++ /dev/null
@@ -1,560 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = include
-DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
-	$(srcdir)/nfft3conf.h.in $(srcdir)/ticks.h.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = nfft3conf.h ticks.h
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__installdirs = "$(DESTDIR)$(includedir)"
-HEADERS = $(include_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-include_HEADERS = nfft3.h nfft3util.h nfft3conf.h
-EXTRA_DIST = infft.h cycle.h api.h
-all: config.h
-	$(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu include/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-config.h: stamp-h1
-	@if test ! -f $@; then rm -f stamp-h1; else :; fi
-	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
-
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
-	@rm -f stamp-h1
-	cd $(top_builddir) && $(SHELL) ./config.status include/config.h
-$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
-	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
-	rm -f stamp-h1
-	touch $@
-
-distclean-hdr:
-	-rm -f config.h stamp-h1
-nfft3conf.h: $(top_builddir)/config.status $(srcdir)/nfft3conf.h.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-ticks.h: $(top_builddir)/config.status $(srcdir)/ticks.h.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-install-includeHEADERS: $(include_HEADERS)
-	@$(NORMAL_INSTALL)
-	@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
-	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
-	done
-
-uninstall-includeHEADERS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(HEADERS) config.h
-installdirs:
-	for dir in "$(DESTDIR)$(includedir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-includeHEADERS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-includeHEADERS
-
-.MAKE: all install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool cscopelist ctags distclean distclean-generic \
-	distclean-hdr distclean-libtool distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-includeHEADERS install-info install-info-am \
-	install-man install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/include/api.h b/include/api.h
index 4eb2476..2906ef2 100644
--- a/include/api.h
+++ b/include/api.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/include/config.h.in b/include/config.h.in
deleted file mode 100644
index e02b17d..0000000
--- a/include/config.h.in
+++ /dev/null
@@ -1,2067 +0,0 @@
-/* include/config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to enable Dirac delta window function. */
-#undef B_SPLINE
-
-/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
-   systems. This function is required for `alloca.c' support on those systems.
-   */
-#undef CRAY_STACKSEG_END
-
-/* Define to 1 if using `alloca.c'. */
-#undef C_ALLOCA
-
-/* Define to enable Gaussian window function. */
-#undef GAUSSIAN
-
-/* Define to 1 if you have the `abort' function. */
-#undef HAVE_ABORT
-
-/* Define to 1 if you have the `acos' function. */
-#undef HAVE_ACOS
-
-/* Define to 1 if you have the `acosf' function. */
-#undef HAVE_ACOSF
-
-/* Define to 1 if you have the `acosh' function. */
-#undef HAVE_ACOSH
-
-/* Define to 1 if you have the `acoshf' function. */
-#undef HAVE_ACOSHF
-
-/* Define to 1 if you have the `acoshl' function. */
-#undef HAVE_ACOSHL
-
-/* Define to 1 if you have the `acosl' function. */
-#undef HAVE_ACOSL
-
-/* Define to 1 if you have `alloca', as a function or macro. */
-#undef HAVE_ALLOCA
-
-/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
-   */
-#undef HAVE_ALLOCA_H
-
-/* Define to 1 if you have the `asin' function. */
-#undef HAVE_ASIN
-
-/* Define to 1 if you have the `asinf' function. */
-#undef HAVE_ASINF
-
-/* Define to 1 if you have the `asinh' function. */
-#undef HAVE_ASINH
-
-/* Define to 1 if you have the `asinhf' function. */
-#undef HAVE_ASINHF
-
-/* Define to 1 if you have the `asinhl' function. */
-#undef HAVE_ASINHL
-
-/* Define to 1 if you have the `asinl' function. */
-#undef HAVE_ASINL
-
-/* Define to 1 if you have the `atan' function. */
-#undef HAVE_ATAN
-
-/* Define to 1 if you have the `atan2' function. */
-#undef HAVE_ATAN2
-
-/* Define to 1 if you have the `atan2f' function. */
-#undef HAVE_ATAN2F
-
-/* Define to 1 if you have the `atan2l' function. */
-#undef HAVE_ATAN2L
-
-/* Define to 1 if you have the `atanf' function. */
-#undef HAVE_ATANF
-
-/* Define to 1 if you have the `atanh' function. */
-#undef HAVE_ATANH
-
-/* Define to 1 if you have the `atanhf' function. */
-#undef HAVE_ATANHF
-
-/* Define to 1 if you have the `atanhl' function. */
-#undef HAVE_ATANHL
-
-/* Define to 1 if you have the `atanl' function. */
-#undef HAVE_ATANL
-
-/* Define to 1 if you have the `cabs' function. */
-#undef HAVE_CABS
-
-/* Define to 1 if you have the `cabsf' function. */
-#undef HAVE_CABSF
-
-/* Define to 1 if you have the `cabsl' function. */
-#undef HAVE_CABSL
-
-/* Define to 1 if you have the `cacos' function. */
-#undef HAVE_CACOS
-
-/* Define to 1 if you have the `cacosf' function. */
-#undef HAVE_CACOSF
-
-/* Define to 1 if you have the `cacosh' function. */
-#undef HAVE_CACOSH
-
-/* Define to 1 if you have the `cacoshf' function. */
-#undef HAVE_CACOSHF
-
-/* Define to 1 if you have the `cacoshl' function. */
-#undef HAVE_CACOSHL
-
-/* Define to 1 if you have the `cacosl' function. */
-#undef HAVE_CACOSL
-
-/* Define to 1 if you have the `carg' function. */
-#undef HAVE_CARG
-
-/* Define to 1 if you have the `cargf' function. */
-#undef HAVE_CARGF
-
-/* Define to 1 if you have the `cargl' function. */
-#undef HAVE_CARGL
-
-/* Define to 1 if you have the `casin' function. */
-#undef HAVE_CASIN
-
-/* Define to 1 if you have the `casinf' function. */
-#undef HAVE_CASINF
-
-/* Define to 1 if you have the `casinh' function. */
-#undef HAVE_CASINH
-
-/* Define to 1 if you have the `casinhf' function. */
-#undef HAVE_CASINHF
-
-/* Define to 1 if you have the `casinhl' function. */
-#undef HAVE_CASINHL
-
-/* Define to 1 if you have the `casinl' function. */
-#undef HAVE_CASINL
-
-/* Define to 1 if you have the `catan' function. */
-#undef HAVE_CATAN
-
-/* Define to 1 if you have the `catanf' function. */
-#undef HAVE_CATANF
-
-/* Define to 1 if you have the `catanh' function. */
-#undef HAVE_CATANH
-
-/* Define to 1 if you have the `catanhf' function. */
-#undef HAVE_CATANHF
-
-/* Define to 1 if you have the `catanhl' function. */
-#undef HAVE_CATANHL
-
-/* Define to 1 if you have the `catanl' function. */
-#undef HAVE_CATANL
-
-/* Define to 1 if you have the `cbrt' function. */
-#undef HAVE_CBRT
-
-/* Define to 1 if you have the `cbrtf' function. */
-#undef HAVE_CBRTF
-
-/* Define to 1 if you have the `cbrtl' function. */
-#undef HAVE_CBRTL
-
-/* Define to 1 if you have the `ccos' function. */
-#undef HAVE_CCOS
-
-/* Define to 1 if you have the `ccosf' function. */
-#undef HAVE_CCOSF
-
-/* Define to 1 if you have the `ccosh' function. */
-#undef HAVE_CCOSH
-
-/* Define to 1 if you have the `ccoshf' function. */
-#undef HAVE_CCOSHF
-
-/* Define to 1 if you have the `ccoshl' function. */
-#undef HAVE_CCOSHL
-
-/* Define to 1 if you have the `ccosl' function. */
-#undef HAVE_CCOSL
-
-/* Define to 1 if you have the `ceil' function. */
-#undef HAVE_CEIL
-
-/* Define to 1 if you have the `ceilf' function. */
-#undef HAVE_CEILF
-
-/* Define to 1 if you have the `ceill' function. */
-#undef HAVE_CEILL
-
-/* Define to 1 if you have the `cexp' function. */
-#undef HAVE_CEXP
-
-/* Define to 1 if you have the `cexpf' function. */
-#undef HAVE_CEXPF
-
-/* Define to 1 if you have the `cexpl' function. */
-#undef HAVE_CEXPL
-
-/* Define to 1 if you have the `cimag' function. */
-#undef HAVE_CIMAG
-
-/* Define to 1 if you have the `cimagf' function. */
-#undef HAVE_CIMAGF
-
-/* Define to 1 if you have the `cimagl' function. */
-#undef HAVE_CIMAGL
-
-/* Define to 1 if you have the `clock_gettime' function. */
-#undef HAVE_CLOCK_GETTIME
-
-/* Define to 1 if you have the `clog' function. */
-#undef HAVE_CLOG
-
-/* Define to 1 if you have the `clogf' function. */
-#undef HAVE_CLOGF
-
-/* Define to 1 if you have the `clogl' function. */
-#undef HAVE_CLOGL
-
-/* Define to 1 if you have the <complex.h> header file. */
-#undef HAVE_COMPLEX_H
-
-/* Define to 1 if you have the `conj' function. */
-#undef HAVE_CONJ
-
-/* Define to 1 if you have the `conjf' function. */
-#undef HAVE_CONJF
-
-/* Define to 1 if you have the `conjl' function. */
-#undef HAVE_CONJL
-
-/* Define to 1 if you have the `copysign' function. */
-#undef HAVE_COPYSIGN
-
-/* Define to 1 if you have the `copysignf' function. */
-#undef HAVE_COPYSIGNF
-
-/* Define to 1 if you have the `copysignl' function. */
-#undef HAVE_COPYSIGNL
-
-/* Define to 1 if you have the `cos' function. */
-#undef HAVE_COS
-
-/* Define to 1 if you have the `cosf' function. */
-#undef HAVE_COSF
-
-/* Define to 1 if you have the `cosh' function. */
-#undef HAVE_COSH
-
-/* Define to 1 if you have the `coshf' function. */
-#undef HAVE_COSHF
-
-/* Define to 1 if you have the `coshl' function. */
-#undef HAVE_COSHL
-
-/* Define to 1 if you have the `cosl' function. */
-#undef HAVE_COSL
-
-/* Define to 1 if you have the `cpow' function. */
-#undef HAVE_CPOW
-
-/* Define to 1 if you have the `cpowf' function. */
-#undef HAVE_CPOWF
-
-/* Define to 1 if you have the `cpowl' function. */
-#undef HAVE_CPOWL
-
-/* Define to 1 if you have the `cproj' function. */
-#undef HAVE_CPROJ
-
-/* Define to 1 if you have the `cprojf' function. */
-#undef HAVE_CPROJF
-
-/* Define to 1 if you have the `cprojl' function. */
-#undef HAVE_CPROJL
-
-/* Define to 1 if you have the `creal' function. */
-#undef HAVE_CREAL
-
-/* Define to 1 if you have the `crealf' function. */
-#undef HAVE_CREALF
-
-/* Define to 1 if you have the `creall' function. */
-#undef HAVE_CREALL
-
-/* Define to 1 if you have the `csin' function. */
-#undef HAVE_CSIN
-
-/* Define to 1 if you have the `csinf' function. */
-#undef HAVE_CSINF
-
-/* Define to 1 if you have the `csinh' function. */
-#undef HAVE_CSINH
-
-/* Define to 1 if you have the `csinhf' function. */
-#undef HAVE_CSINHF
-
-/* Define to 1 if you have the `csinhl' function. */
-#undef HAVE_CSINHL
-
-/* Define to 1 if you have the `csinl' function. */
-#undef HAVE_CSINL
-
-/* Define to 1 if you have the `csqrt' function. */
-#undef HAVE_CSQRT
-
-/* Define to 1 if you have the `csqrtf' function. */
-#undef HAVE_CSQRTF
-
-/* Define to 1 if you have the `csqrtl' function. */
-#undef HAVE_CSQRTL
-
-/* Define to 1 if you have the `ctan' function. */
-#undef HAVE_CTAN
-
-/* Define to 1 if you have the `ctanf' function. */
-#undef HAVE_CTANF
-
-/* Define to 1 if you have the `ctanh' function. */
-#undef HAVE_CTANH
-
-/* Define to 1 if you have the `ctanhf' function. */
-#undef HAVE_CTANHF
-
-/* Define to 1 if you have the `ctanhl' function. */
-#undef HAVE_CTANHL
-
-/* Define to 1 if you have the `ctanl' function. */
-#undef HAVE_CTANL
-
-/* Define to 1 if you have the <c_asm.h> header file. */
-#undef HAVE_C_ASM_H
-
-/* Define to 1 if you have the declaration of `acos', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ACOS
-
-/* Define to 1 if you have the declaration of `acosf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ACOSF
-
-/* Define to 1 if you have the declaration of `acosh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ACOSH
-
-/* Define to 1 if you have the declaration of `acoshf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ACOSHF
-
-/* Define to 1 if you have the declaration of `acoshl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ACOSHL
-
-/* Define to 1 if you have the declaration of `acosl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ACOSL
-
-/* Define to 1 if you have the declaration of `asin', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ASIN
-
-/* Define to 1 if you have the declaration of `asinf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ASINF
-
-/* Define to 1 if you have the declaration of `asinh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ASINH
-
-/* Define to 1 if you have the declaration of `asinhf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ASINHF
-
-/* Define to 1 if you have the declaration of `asinhl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ASINHL
-
-/* Define to 1 if you have the declaration of `asinl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ASINL
-
-/* Define to 1 if you have the declaration of `atan', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ATAN
-
-/* Define to 1 if you have the declaration of `atan2', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ATAN2
-
-/* Define to 1 if you have the declaration of `atan2f', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ATAN2F
-
-/* Define to 1 if you have the declaration of `atan2l', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ATAN2L
-
-/* Define to 1 if you have the declaration of `atanf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ATANF
-
-/* Define to 1 if you have the declaration of `atanh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ATANH
-
-/* Define to 1 if you have the declaration of `atanhf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ATANHF
-
-/* Define to 1 if you have the declaration of `atanhl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ATANHL
-
-/* Define to 1 if you have the declaration of `atanl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ATANL
-
-/* Define to 1 if you have the declaration of `cabs', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CABS
-
-/* Define to 1 if you have the declaration of `cabsl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CABSL
-
-/* Define to 1 if you have the declaration of `cacos', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CACOS
-
-/* Define to 1 if you have the declaration of `cacosf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CACOSF
-
-/* Define to 1 if you have the declaration of `cacosh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CACOSH
-
-/* Define to 1 if you have the declaration of `cacoshf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_CACOSHF
-
-/* Define to 1 if you have the declaration of `cacoshl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_CACOSHL
-
-/* Define to 1 if you have the declaration of `cacosl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CACOSL
-
-/* Define to 1 if you have the declaration of `carg', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CARG
-
-/* Define to 1 if you have the declaration of `cargf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CARGF
-
-/* Define to 1 if you have the declaration of `cargl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CARGL
-
-/* Define to 1 if you have the declaration of `casin', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CASIN
-
-/* Define to 1 if you have the declaration of `casinf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CASINF
-
-/* Define to 1 if you have the declaration of `casinh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CASINH
-
-/* Define to 1 if you have the declaration of `casinhf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_CASINHF
-
-/* Define to 1 if you have the declaration of `casinhl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_CASINHL
-
-/* Define to 1 if you have the declaration of `casinl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CASINL
-
-/* Define to 1 if you have the declaration of `catan', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CATAN
-
-/* Define to 1 if you have the declaration of `catanf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CATANF
-
-/* Define to 1 if you have the declaration of `catanh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CATANH
-
-/* Define to 1 if you have the declaration of `catanhf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_CATANHF
-
-/* Define to 1 if you have the declaration of `catanhl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_CATANHL
-
-/* Define to 1 if you have the declaration of `catanl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CATANL
-
-/* Define to 1 if you have the declaration of `cbrt', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CBRT
-
-/* Define to 1 if you have the declaration of `cbrtf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CBRTF
-
-/* Define to 1 if you have the declaration of `cbrtl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CBRTL
-
-/* Define to 1 if you have the declaration of `ccos', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CCOS
-
-/* Define to 1 if you have the declaration of `ccosf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CCOSF
-
-/* Define to 1 if you have the declaration of `ccosh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CCOSH
-
-/* Define to 1 if you have the declaration of `ccoshf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CCOSHF
-
-/* Define to 1 if you have the declaration of `ccoshl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CCOSHL
-
-/* Define to 1 if you have the declaration of `ccosl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CCOSL
-
-/* Define to 1 if you have the declaration of `ceil', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CEIL
-
-/* Define to 1 if you have the declaration of `ceilf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CEILF
-
-/* Define to 1 if you have the declaration of `ceill', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CEILL
-
-/* Define to 1 if you have the declaration of `cexp', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CEXP
-
-/* Define to 1 if you have the declaration of `cexpf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CEXPF
-
-/* Define to 1 if you have the declaration of `cexpl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CEXPL
-
-/* Define to 1 if you have the declaration of `cimag', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CIMAG
-
-/* Define to 1 if you have the declaration of `cimagf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CIMAGF
-
-/* Define to 1 if you have the declaration of `cimagl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CIMAGL
-
-/* Define to 1 if you have the declaration of `clog', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CLOG
-
-/* Define to 1 if you have the declaration of `clogf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CLOGF
-
-/* Define to 1 if you have the declaration of `clogl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CLOGL
-
-/* Define to 1 if you have the declaration of `conj', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CONJ
-
-/* Define to 1 if you have the declaration of `conjf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CONJF
-
-/* Define to 1 if you have the declaration of `conjl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CONJL
-
-/* Define to 1 if you have the declaration of `copysign', and to 0 if you
-   don't. */
-#undef HAVE_DECL_COPYSIGN
-
-/* Define to 1 if you have the declaration of `copysignf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_COPYSIGNF
-
-/* Define to 1 if you have the declaration of `copysignl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_COPYSIGNL
-
-/* Define to 1 if you have the declaration of `cos', and to 0 if you don't. */
-#undef HAVE_DECL_COS
-
-/* Define to 1 if you have the declaration of `cosf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_COSF
-
-/* Define to 1 if you have the declaration of `cosh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_COSH
-
-/* Define to 1 if you have the declaration of `coshf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_COSHF
-
-/* Define to 1 if you have the declaration of `coshl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_COSHL
-
-/* Define to 1 if you have the declaration of `cosl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_COSL
-
-/* Define to 1 if you have the declaration of `cpow', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CPOW
-
-/* Define to 1 if you have the declaration of `cpowf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CPOWF
-
-/* Define to 1 if you have the declaration of `cpowl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CPOWL
-
-/* Define to 1 if you have the declaration of `cproj', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CPROJ
-
-/* Define to 1 if you have the declaration of `cprojf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CPROJF
-
-/* Define to 1 if you have the declaration of `cprojl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CPROJL
-
-/* Define to 1 if you have the declaration of `creal', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CREAL
-
-/* Define to 1 if you have the declaration of `crealf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CREALF
-
-/* Define to 1 if you have the declaration of `creall', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CREALL
-
-/* Define to 1 if you have the declaration of `csin', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CSIN
-
-/* Define to 1 if you have the declaration of `csinf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CSINF
-
-/* Define to 1 if you have the declaration of `csinh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CSINH
-
-/* Define to 1 if you have the declaration of `csinhf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CSINHF
-
-/* Define to 1 if you have the declaration of `csinhl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CSINHL
-
-/* Define to 1 if you have the declaration of `csinl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CSINL
-
-/* Define to 1 if you have the declaration of `csqrt', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CSQRT
-
-/* Define to 1 if you have the declaration of `csqrtf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CSQRTF
-
-/* Define to 1 if you have the declaration of `csqrtl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CSQRTL
-
-/* Define to 1 if you have the declaration of `ctan', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CTAN
-
-/* Define to 1 if you have the declaration of `ctanf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CTANF
-
-/* Define to 1 if you have the declaration of `ctanh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CTANH
-
-/* Define to 1 if you have the declaration of `ctanhf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CTANHF
-
-/* Define to 1 if you have the declaration of `ctanhl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CTANHL
-
-/* Define to 1 if you have the declaration of `ctanl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_CTANL
-
-/* Define to 1 if you have the declaration of `drand48', and to 0 if you
-   don't. */
-#undef HAVE_DECL_DRAND48
-
-/* Define to 1 if you have the declaration of `erf', and to 0 if you don't. */
-#undef HAVE_DECL_ERF
-
-/* Define to 1 if you have the declaration of `erfc', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ERFC
-
-/* Define to 1 if you have the declaration of `erfcf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ERFCF
-
-/* Define to 1 if you have the declaration of `erfcl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ERFCL
-
-/* Define to 1 if you have the declaration of `erff', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ERFF
-
-/* Define to 1 if you have the declaration of `erfl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ERFL
-
-/* Define to 1 if you have the declaration of `exp', and to 0 if you don't. */
-#undef HAVE_DECL_EXP
-
-/* Define to 1 if you have the declaration of `exp2', and to 0 if you don't.
-   */
-#undef HAVE_DECL_EXP2
-
-/* Define to 1 if you have the declaration of `exp2f', and to 0 if you don't.
-   */
-#undef HAVE_DECL_EXP2F
-
-/* Define to 1 if you have the declaration of `exp2l', and to 0 if you don't.
-   */
-#undef HAVE_DECL_EXP2L
-
-/* Define to 1 if you have the declaration of `expf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_EXPF
-
-/* Define to 1 if you have the declaration of `expl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_EXPL
-
-/* Define to 1 if you have the declaration of `expm1', and to 0 if you don't.
-   */
-#undef HAVE_DECL_EXPM1
-
-/* Define to 1 if you have the declaration of `expm1f', and to 0 if you don't.
-   */
-#undef HAVE_DECL_EXPM1F
-
-/* Define to 1 if you have the declaration of `expm1l', and to 0 if you don't.
-   */
-#undef HAVE_DECL_EXPM1L
-
-/* Define to 1 if you have the declaration of `fabs', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FABS
-
-/* Define to 1 if you have the declaration of `fabsf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FABSF
-
-/* Define to 1 if you have the declaration of `fabsl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FABSL
-
-/* Define to 1 if you have the declaration of `fdim', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FDIM
-
-/* Define to 1 if you have the declaration of `fdimf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FDIMF
-
-/* Define to 1 if you have the declaration of `fdiml', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FDIML
-
-/* Define to 1 if you have the declaration of `floor', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FLOOR
-
-/* Define to 1 if you have the declaration of `floorf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FLOORF
-
-/* Define to 1 if you have the declaration of `floorl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FLOORL
-
-/* Define to 1 if you have the declaration of `fma', and to 0 if you don't. */
-#undef HAVE_DECL_FMA
-
-/* Define to 1 if you have the declaration of `fmaf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMAF
-
-/* Define to 1 if you have the declaration of `fmal', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMAL
-
-/* Define to 1 if you have the declaration of `fmax', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMAX
-
-/* Define to 1 if you have the declaration of `fmaxf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMAXF
-
-/* Define to 1 if you have the declaration of `fmaxl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMAXL
-
-/* Define to 1 if you have the declaration of `fmin', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMIN
-
-/* Define to 1 if you have the declaration of `fminf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMINF
-
-/* Define to 1 if you have the declaration of `fminl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMINL
-
-/* Define to 1 if you have the declaration of `fmod', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMOD
-
-/* Define to 1 if you have the declaration of `fmodf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMODF
-
-/* Define to 1 if you have the declaration of `fmodl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FMODL
-
-/* Define to 1 if you have the declaration of `frexp', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FREXP
-
-/* Define to 1 if you have the declaration of `frexpf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FREXPF
-
-/* Define to 1 if you have the declaration of `frexpl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_FREXPL
-
-/* Define to 1 if you have the declaration of `hypot', and to 0 if you don't.
-   */
-#undef HAVE_DECL_HYPOT
-
-/* Define to 1 if you have the declaration of `hypotf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_HYPOTF
-
-/* Define to 1 if you have the declaration of `hypotl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_HYPOTL
-
-/* Define to 1 if you have the declaration of `ilogb', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ILOGB
-
-/* Define to 1 if you have the declaration of `ilogbf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ILOGBF
-
-/* Define to 1 if you have the declaration of `ilogbl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ILOGBL
-
-/* Define to 1 if you have the declaration of `j0', and to 0 if you don't. */
-#undef HAVE_DECL_J0
-
-/* Define to 1 if you have the declaration of `j0f', and to 0 if you don't. */
-#undef HAVE_DECL_J0F
-
-/* Define to 1 if you have the declaration of `j0l', and to 0 if you don't. */
-#undef HAVE_DECL_J0L
-
-/* Define to 1 if you have the declaration of `j1', and to 0 if you don't. */
-#undef HAVE_DECL_J1
-
-/* Define to 1 if you have the declaration of `j1f', and to 0 if you don't. */
-#undef HAVE_DECL_J1F
-
-/* Define to 1 if you have the declaration of `j1l', and to 0 if you don't. */
-#undef HAVE_DECL_J1L
-
-/* Define to 1 if you have the declaration of `jn', and to 0 if you don't. */
-#undef HAVE_DECL_JN
-
-/* Define to 1 if you have the declaration of `jnf', and to 0 if you don't. */
-#undef HAVE_DECL_JNF
-
-/* Define to 1 if you have the declaration of `jnl', and to 0 if you don't. */
-#undef HAVE_DECL_JNL
-
-/* Define to 1 if you have the declaration of `ldexp', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LDEXP
-
-/* Define to 1 if you have the declaration of `ldexpf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LDEXPF
-
-/* Define to 1 if you have the declaration of `ldexpl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LDEXPL
-
-/* Define to 1 if you have the declaration of `lgamma', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LGAMMA
-
-/* Define to 1 if you have the declaration of `lgammaf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_LGAMMAF
-
-/* Define to 1 if you have the declaration of `lgammal', and to 0 if you
-   don't. */
-#undef HAVE_DECL_LGAMMAL
-
-/* Define to 1 if you have the declaration of `llrint', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LLRINT
-
-/* Define to 1 if you have the declaration of `llrintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_LLRINTF
-
-/* Define to 1 if you have the declaration of `llrintl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_LLRINTL
-
-/* Define to 1 if you have the declaration of `llround', and to 0 if you
-   don't. */
-#undef HAVE_DECL_LLROUND
-
-/* Define to 1 if you have the declaration of `llroundf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_LLROUNDF
-
-/* Define to 1 if you have the declaration of `llroundl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_LLROUNDL
-
-/* Define to 1 if you have the declaration of `log', and to 0 if you don't. */
-#undef HAVE_DECL_LOG
-
-/* Define to 1 if you have the declaration of `log10', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOG10
-
-/* Define to 1 if you have the declaration of `log10f', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOG10F
-
-/* Define to 1 if you have the declaration of `log10l', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOG10L
-
-/* Define to 1 if you have the declaration of `log1p', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOG1P
-
-/* Define to 1 if you have the declaration of `log1pf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOG1PF
-
-/* Define to 1 if you have the declaration of `log1pl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOG1PL
-
-/* Define to 1 if you have the declaration of `log2', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOG2
-
-/* Define to 1 if you have the declaration of `log2f', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOG2F
-
-/* Define to 1 if you have the declaration of `log2l', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOG2L
-
-/* Define to 1 if you have the declaration of `logb', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOGB
-
-/* Define to 1 if you have the declaration of `logbf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOGBF
-
-/* Define to 1 if you have the declaration of `logbl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOGBL
-
-/* Define to 1 if you have the declaration of `logf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOGF
-
-/* Define to 1 if you have the declaration of `logl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LOGL
-
-/* Define to 1 if you have the declaration of `lrint', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LRINT
-
-/* Define to 1 if you have the declaration of `lrintf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LRINTF
-
-/* Define to 1 if you have the declaration of `lrintl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LRINTL
-
-/* Define to 1 if you have the declaration of `lround', and to 0 if you don't.
-   */
-#undef HAVE_DECL_LROUND
-
-/* Define to 1 if you have the declaration of `lroundf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_LROUNDF
-
-/* Define to 1 if you have the declaration of `lroundl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_LROUNDL
-
-/* Define to 1 if you have the declaration of `memalign', and to 0 if you
-   don't. */
-#undef HAVE_DECL_MEMALIGN
-
-/* Define to 1 if you have the declaration of `modf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_MODF
-
-/* Define to 1 if you have the declaration of `modff', and to 0 if you don't.
-   */
-#undef HAVE_DECL_MODFF
-
-/* Define to 1 if you have the declaration of `modfl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_MODFL
-
-/* Define to 1 if you have the declaration of `nan', and to 0 if you don't. */
-#undef HAVE_DECL_NAN
-
-/* Define to 1 if you have the declaration of `nanf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_NANF
-
-/* Define to 1 if you have the declaration of `nanl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_NANL
-
-/* Define to 1 if you have the declaration of `nanosleep', and to 0 if you
-   don't. */
-#undef HAVE_DECL_NANOSLEEP
-
-/* Define to 1 if you have the declaration of `nearbyint', and to 0 if you
-   don't. */
-#undef HAVE_DECL_NEARBYINT
-
-/* Define to 1 if you have the declaration of `nearbyintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_NEARBYINTF
-
-/* Define to 1 if you have the declaration of `nearbyintl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_NEARBYINTL
-
-/* Define to 1 if you have the declaration of `nextafter', and to 0 if you
-   don't. */
-#undef HAVE_DECL_NEXTAFTER
-
-/* Define to 1 if you have the declaration of `nextafterf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_NEXTAFTERF
-
-/* Define to 1 if you have the declaration of `nextafterl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_NEXTAFTERL
-
-/* Define to 1 if you have the declaration of `posix_memalign', and to 0 if
-   you don't. */
-#undef HAVE_DECL_POSIX_MEMALIGN
-
-/* Define to 1 if you have the declaration of `pow', and to 0 if you don't. */
-#undef HAVE_DECL_POW
-
-/* Define to 1 if you have the declaration of `powf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_POWF
-
-/* Define to 1 if you have the declaration of `powl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_POWL
-
-/* Define to 1 if you have the declaration of `remainder', and to 0 if you
-   don't. */
-#undef HAVE_DECL_REMAINDER
-
-/* Define to 1 if you have the declaration of `remainderf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_REMAINDERF
-
-/* Define to 1 if you have the declaration of `remainderl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_REMAINDERL
-
-/* Define to 1 if you have the declaration of `remquo', and to 0 if you don't.
-   */
-#undef HAVE_DECL_REMQUO
-
-/* Define to 1 if you have the declaration of `remquof', and to 0 if you
-   don't. */
-#undef HAVE_DECL_REMQUOF
-
-/* Define to 1 if you have the declaration of `remquol', and to 0 if you
-   don't. */
-#undef HAVE_DECL_REMQUOL
-
-/* Define to 1 if you have the declaration of `rint', and to 0 if you don't.
-   */
-#undef HAVE_DECL_RINT
-
-/* Define to 1 if you have the declaration of `rintf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_RINTF
-
-/* Define to 1 if you have the declaration of `rintl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_RINTL
-
-/* Define to 1 if you have the declaration of `round', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ROUND
-
-/* Define to 1 if you have the declaration of `roundf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ROUNDF
-
-/* Define to 1 if you have the declaration of `roundl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_ROUNDL
-
-/* Define to 1 if you have the declaration of `scalbln', and to 0 if you
-   don't. */
-#undef HAVE_DECL_SCALBLN
-
-/* Define to 1 if you have the declaration of `scalblnf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_SCALBLNF
-
-/* Define to 1 if you have the declaration of `scalblnl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_SCALBLNL
-
-/* Define to 1 if you have the declaration of `scalbn', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SCALBN
-
-/* Define to 1 if you have the declaration of `scalbnf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_SCALBNF
-
-/* Define to 1 if you have the declaration of `scalbnl', and to 0 if you
-   don't. */
-#undef HAVE_DECL_SCALBNL
-
-/* Define to 1 if you have the declaration of `sin', and to 0 if you don't. */
-#undef HAVE_DECL_SIN
-
-/* Define to 1 if you have the declaration of `sinf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SINF
-
-/* Define to 1 if you have the declaration of `sinh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SINH
-
-/* Define to 1 if you have the declaration of `sinhf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SINHF
-
-/* Define to 1 if you have the declaration of `sinhl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SINHL
-
-/* Define to 1 if you have the declaration of `sinl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SINL
-
-/* Define to 1 if you have the declaration of `sleep', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SLEEP
-
-/* Define to 1 if you have the declaration of `sqrt', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SQRT
-
-/* Define to 1 if you have the declaration of `sqrtf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SQRTF
-
-/* Define to 1 if you have the declaration of `sqrtl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SQRTL
-
-/* Define to 1 if you have the declaration of `srand48', and to 0 if you
-   don't. */
-#undef HAVE_DECL_SRAND48
-
-/* Define to 1 if you have the declaration of `tan', and to 0 if you don't. */
-#undef HAVE_DECL_TAN
-
-/* Define to 1 if you have the declaration of `tanf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TANF
-
-/* Define to 1 if you have the declaration of `tanh', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TANH
-
-/* Define to 1 if you have the declaration of `tanhf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TANHF
-
-/* Define to 1 if you have the declaration of `tanhl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TANHL
-
-/* Define to 1 if you have the declaration of `tanl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TANL
-
-/* Define to 1 if you have the declaration of `tgamma', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TGAMMA
-
-/* Define to 1 if you have the declaration of `tgammaf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_TGAMMAF
-
-/* Define to 1 if you have the declaration of `tgammal', and to 0 if you
-   don't. */
-#undef HAVE_DECL_TGAMMAL
-
-/* Define to 1 if you have the declaration of `trunc', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TRUNC
-
-/* Define to 1 if you have the declaration of `truncf', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TRUNCF
-
-/* Define to 1 if you have the declaration of `truncl', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TRUNCL
-
-/* Define to 1 if you have the declaration of `y0', and to 0 if you don't. */
-#undef HAVE_DECL_Y0
-
-/* Define to 1 if you have the declaration of `y0f', and to 0 if you don't. */
-#undef HAVE_DECL_Y0F
-
-/* Define to 1 if you have the declaration of `y0l', and to 0 if you don't. */
-#undef HAVE_DECL_Y0L
-
-/* Define to 1 if you have the declaration of `y1', and to 0 if you don't. */
-#undef HAVE_DECL_Y1
-
-/* Define to 1 if you have the declaration of `y1f', and to 0 if you don't. */
-#undef HAVE_DECL_Y1F
-
-/* Define to 1 if you have the declaration of `y1l', and to 0 if you don't. */
-#undef HAVE_DECL_Y1L
-
-/* Define to 1 if you have the declaration of `yn', and to 0 if you don't. */
-#undef HAVE_DECL_YN
-
-/* Define to 1 if you have the declaration of `ynf', and to 0 if you don't. */
-#undef HAVE_DECL_YNF
-
-/* Define to 1 if you have the declaration of `ynl', and to 0 if you don't. */
-#undef HAVE_DECL_YNL
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
-#undef HAVE_DOPRNT
-
-/* Define to 1 if you have the `drand48' function. */
-#undef HAVE_DRAND48
-
-/* Define to 1 if you have the `erf' function. */
-#undef HAVE_ERF
-
-/* Define to 1 if you have the `erfc' function. */
-#undef HAVE_ERFC
-
-/* Define to 1 if you have the `erfcf' function. */
-#undef HAVE_ERFCF
-
-/* Define to 1 if you have the `erfcl' function. */
-#undef HAVE_ERFCL
-
-/* Define to 1 if you have the `erff' function. */
-#undef HAVE_ERFF
-
-/* Define to 1 if you have the `erfl' function. */
-#undef HAVE_ERFL
-
-/* Define to 1 if you have the `exp' function. */
-#undef HAVE_EXP
-
-/* Define to 1 if you have the `exp2' function. */
-#undef HAVE_EXP2
-
-/* Define to 1 if you have the `exp2f' function. */
-#undef HAVE_EXP2F
-
-/* Define to 1 if you have the `exp2l' function. */
-#undef HAVE_EXP2L
-
-/* Define to 1 if you have the `expf' function. */
-#undef HAVE_EXPF
-
-/* Define to 1 if you have the `expl' function. */
-#undef HAVE_EXPL
-
-/* Define to 1 if you have the `expm1' function. */
-#undef HAVE_EXPM1
-
-/* Define to 1 if you have the `expm1f' function. */
-#undef HAVE_EXPM1F
-
-/* Define to 1 if you have the `expm1l' function. */
-#undef HAVE_EXPM1L
-
-/* Define to 1 if you have the `fabs' function. */
-#undef HAVE_FABS
-
-/* Define to 1 if you have the `fabsf' function. */
-#undef HAVE_FABSF
-
-/* Define to 1 if you have the `fabsl' function. */
-#undef HAVE_FABSL
-
-/* Define to 1 if you have the `fdim' function. */
-#undef HAVE_FDIM
-
-/* Define to 1 if you have the `fdimf' function. */
-#undef HAVE_FDIMF
-
-/* Define to 1 if you have the `fdiml' function. */
-#undef HAVE_FDIML
-
-/* Define to 1 if you have the <float.h> header file. */
-#undef HAVE_FLOAT_H
-
-/* Define to 1 if you have the `floor' function. */
-#undef HAVE_FLOOR
-
-/* Define to 1 if you have the `floorf' function. */
-#undef HAVE_FLOORF
-
-/* Define to 1 if you have the `floorl' function. */
-#undef HAVE_FLOORL
-
-/* Define to 1 if you have the `fma' function. */
-#undef HAVE_FMA
-
-/* Define to 1 if you have the `fmaf' function. */
-#undef HAVE_FMAF
-
-/* Define to 1 if you have the `fmal' function. */
-#undef HAVE_FMAL
-
-/* Define to 1 if you have the `fmax' function. */
-#undef HAVE_FMAX
-
-/* Define to 1 if you have the `fmaxf' function. */
-#undef HAVE_FMAXF
-
-/* Define to 1 if you have the `fmaxl' function. */
-#undef HAVE_FMAXL
-
-/* Define to 1 if you have the `fmin' function. */
-#undef HAVE_FMIN
-
-/* Define to 1 if you have the `fminf' function. */
-#undef HAVE_FMINF
-
-/* Define to 1 if you have the `fminl' function. */
-#undef HAVE_FMINL
-
-/* Define to 1 if you have the `fmod' function. */
-#undef HAVE_FMOD
-
-/* Define to 1 if you have the `fmodf' function. */
-#undef HAVE_FMODF
-
-/* Define to 1 if you have the `fmodl' function. */
-#undef HAVE_FMODL
-
-/* Define to 1 if you have the `frexp' function. */
-#undef HAVE_FREXP
-
-/* Define to 1 if you have the `frexpf' function. */
-#undef HAVE_FREXPF
-
-/* Define to 1 if you have the `frexpl' function. */
-#undef HAVE_FREXPL
-
-/* Define to 1 if you have the `gethrtime' function. */
-#undef HAVE_GETHRTIME
-
-/* Define to 1 if hrtime_t is defined in <sys/time.h> */
-#undef HAVE_HRTIME_T
-
-/* Define to 1 if you have the `hypot' function. */
-#undef HAVE_HYPOT
-
-/* Define to 1 if you have the `hypotf' function. */
-#undef HAVE_HYPOTF
-
-/* Define to 1 if you have the `hypotl' function. */
-#undef HAVE_HYPOTL
-
-/* Define to 1 if you have the `ilogb' function. */
-#undef HAVE_ILOGB
-
-/* Define to 1 if you have the `ilogbf' function. */
-#undef HAVE_ILOGBF
-
-/* Define to 1 if you have the `ilogbl' function. */
-#undef HAVE_ILOGBL
-
-/* Define to 1 if you have the <intrinsics.h> header file. */
-#undef HAVE_INTRINSICS_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the `j0' function. */
-#undef HAVE_J0
-
-/* Define to 1 if you have the `j0f' function. */
-#undef HAVE_J0F
-
-/* Define to 1 if you have the `j0l' function. */
-#undef HAVE_J0L
-
-/* Define to 1 if you have the `j1' function. */
-#undef HAVE_J1
-
-/* Define to 1 if you have the `j1f' function. */
-#undef HAVE_J1F
-
-/* Define to 1 if you have the `j1l' function. */
-#undef HAVE_J1L
-
-/* Define to 1 if you have the `jn' function. */
-#undef HAVE_JN
-
-/* Define to 1 if you have the `jnf' function. */
-#undef HAVE_JNF
-
-/* Define to 1 if you have the `jnl' function. */
-#undef HAVE_JNL
-
-/* Define to 1 if you have the `ldexp' function. */
-#undef HAVE_LDEXP
-
-/* Define to 1 if you have the `ldexpf' function. */
-#undef HAVE_LDEXPF
-
-/* Define to 1 if you have the `ldexpl' function. */
-#undef HAVE_LDEXPL
-
-/* Define to 1 if you have the `lgamma' function. */
-#undef HAVE_LGAMMA
-
-/* Define to 1 if you have the `lgammaf' function. */
-#undef HAVE_LGAMMAF
-
-/* Define to 1 if you have the `lgammal' function. */
-#undef HAVE_LGAMMAL
-
-/* Define to 1 if you have the `fftw3' library (-lfftw3). */
-#undef HAVE_LIBFFTW3
-
-/* Define to 1 if you have the `m' library (-lm). */
-#undef HAVE_LIBM
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define to 1 if you have the `llrint' function. */
-#undef HAVE_LLRINT
-
-/* Define to 1 if you have the `llrintf' function. */
-#undef HAVE_LLRINTF
-
-/* Define to 1 if you have the `llrintl' function. */
-#undef HAVE_LLRINTL
-
-/* Define to 1 if you have the `llround' function. */
-#undef HAVE_LLROUND
-
-/* Define to 1 if you have the `llroundf' function. */
-#undef HAVE_LLROUNDF
-
-/* Define to 1 if you have the `llroundl' function. */
-#undef HAVE_LLROUNDL
-
-/* Define to 1 if you have the `log' function. */
-#undef HAVE_LOG
-
-/* Define to 1 if you have the `log10' function. */
-#undef HAVE_LOG10
-
-/* Define to 1 if you have the `log10f' function. */
-#undef HAVE_LOG10F
-
-/* Define to 1 if you have the `log10l' function. */
-#undef HAVE_LOG10L
-
-/* Define to 1 if you have the `log1p' function. */
-#undef HAVE_LOG1P
-
-/* Define to 1 if you have the `log1pf' function. */
-#undef HAVE_LOG1PF
-
-/* Define to 1 if you have the `log1pl' function. */
-#undef HAVE_LOG1PL
-
-/* Define to 1 if you have the `log2' function. */
-#undef HAVE_LOG2
-
-/* Define to 1 if you have the `log2f' function. */
-#undef HAVE_LOG2F
-
-/* Define to 1 if you have the `log2l' function. */
-#undef HAVE_LOG2L
-
-/* Define to 1 if you have the `logb' function. */
-#undef HAVE_LOGB
-
-/* Define to 1 if you have the `logbf' function. */
-#undef HAVE_LOGBF
-
-/* Define to 1 if you have the `logbl' function. */
-#undef HAVE_LOGBL
-
-/* Define to 1 if you have the `logf' function. */
-#undef HAVE_LOGF
-
-/* Define to 1 if you have the `logl' function. */
-#undef HAVE_LOGL
-
-/* Define to 1 if the compiler supports 'long double' */
-#undef HAVE_LONG_DOUBLE
-
-/* Define to 1 if you have the `lrint' function. */
-#undef HAVE_LRINT
-
-/* Define to 1 if you have the `lrintf' function. */
-#undef HAVE_LRINTF
-
-/* Define to 1 if you have the `lrintl' function. */
-#undef HAVE_LRINTL
-
-/* Define to 1 if you have the `lround' function. */
-#undef HAVE_LROUND
-
-/* Define to 1 if you have the `lroundf' function. */
-#undef HAVE_LROUNDF
-
-/* Define to 1 if you have the `lroundl' function. */
-#undef HAVE_LROUNDL
-
-/* Define to 1 if you have the `mach_absolute_time' function. */
-#undef HAVE_MACH_ABSOLUTE_TIME
-
-/* Define to 1 if you have the <mach/mach_time.h> header file. */
-#undef HAVE_MACH_MACH_TIME_H
-
-/* Define to 1 if you have the <malloc.h> header file. */
-#undef HAVE_MALLOC_H
-
-/* Define to 1 if you have the <math.h> header file. */
-#undef HAVE_MATH_H
-
-/* Define to 1 if compilation of Matlab interface only succeeds when macro
-   __STDC_UTF_16__ not defined. */
-#undef HAVE_MATLAB_GCC_REQUIRE_UNDEF_STDC_UTF_16
-
-/* Define to 1 if you have the `memalign' function. */
-#undef HAVE_MEMALIGN
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the `memset' function. */
-#undef HAVE_MEMSET
-
-/* Define to have the file mexversion.c */
-#undef HAVE_MEXVERSION_C
-
-/* Define to enable use of MIPS ZBus cycle-counter. */
-#undef HAVE_MIPS_ZBUS_TIMER
-
-/* Define to 1 if you have the `modf' function. */
-#undef HAVE_MODF
-
-/* Define to 1 if you have the `modff' function. */
-#undef HAVE_MODFF
-
-/* Define to 1 if you have the `modfl' function. */
-#undef HAVE_MODFL
-
-/* Define to 1 if you have the `nan' function. */
-#undef HAVE_NAN
-
-/* Define to 1 if you have the `nanf' function. */
-#undef HAVE_NANF
-
-/* Define to 1 if you have the `nanl' function. */
-#undef HAVE_NANL
-
-/* Define to 1 if you have the `nanosleep' function. */
-#undef HAVE_NANOSLEEP
-
-/* Define to 1 if you have the `nearbyint' function. */
-#undef HAVE_NEARBYINT
-
-/* Define to 1 if you have the `nearbyintf' function. */
-#undef HAVE_NEARBYINTF
-
-/* Define to 1 if you have the `nearbyintl' function. */
-#undef HAVE_NEARBYINTL
-
-/* Define to 1 if you have the `nextafter' function. */
-#undef HAVE_NEXTAFTER
-
-/* Define to 1 if you have the `nextafterf' function. */
-#undef HAVE_NEXTAFTERF
-
-/* Define to 1 if you have the `nextafterl' function. */
-#undef HAVE_NEXTAFTERL
-
-/* Define if OpenMP is enabled */
-#undef HAVE_OPENMP
-
-/* Define to 1 if you have the `posix_memalign' function. */
-#undef HAVE_POSIX_MEMALIGN
-
-/* Define to 1 if you have the `pow' function. */
-#undef HAVE_POW
-
-/* Define to 1 if you have the `powf' function. */
-#undef HAVE_POWF
-
-/* Define to 1 if you have the `powl' function. */
-#undef HAVE_POWL
-
-/* Define to 1 if you have the `read_real_time' function. */
-#undef HAVE_READ_REAL_TIME
-
-/* Define to 1 if you have the `remainder' function. */
-#undef HAVE_REMAINDER
-
-/* Define to 1 if you have the `remainderf' function. */
-#undef HAVE_REMAINDERF
-
-/* Define to 1 if you have the `remainderl' function. */
-#undef HAVE_REMAINDERL
-
-/* Define to 1 if you have the `remquo' function. */
-#undef HAVE_REMQUO
-
-/* Define to 1 if you have the `remquof' function. */
-#undef HAVE_REMQUOF
-
-/* Define to 1 if you have the `remquol' function. */
-#undef HAVE_REMQUOL
-
-/* Define to 1 if you have the `rint' function. */
-#undef HAVE_RINT
-
-/* Define to 1 if you have the `rintf' function. */
-#undef HAVE_RINTF
-
-/* Define to 1 if you have the `rintl' function. */
-#undef HAVE_RINTL
-
-/* Define to 1 if you have the `round' function. */
-#undef HAVE_ROUND
-
-/* Define to 1 if you have the `roundf' function. */
-#undef HAVE_ROUNDF
-
-/* Define to 1 if you have the `roundl' function. */
-#undef HAVE_ROUNDL
-
-/* Define to 1 if you have the `scalbln' function. */
-#undef HAVE_SCALBLN
-
-/* Define to 1 if you have the `scalblnf' function. */
-#undef HAVE_SCALBLNF
-
-/* Define to 1 if you have the `scalblnl' function. */
-#undef HAVE_SCALBLNL
-
-/* Define to 1 if you have the `scalbn' function. */
-#undef HAVE_SCALBN
-
-/* Define to 1 if you have the `scalbnf' function. */
-#undef HAVE_SCALBNF
-
-/* Define to 1 if you have the `scalbnl' function. */
-#undef HAVE_SCALBNL
-
-/* Define to 1 if you have the `sin' function. */
-#undef HAVE_SIN
-
-/* Define to 1 if you have the `sinf' function. */
-#undef HAVE_SINF
-
-/* Define to 1 if you have the `sinh' function. */
-#undef HAVE_SINH
-
-/* Define to 1 if you have the `sinhf' function. */
-#undef HAVE_SINHF
-
-/* Define to 1 if you have the `sinhl' function. */
-#undef HAVE_SINHL
-
-/* Define to 1 if you have the `sinl' function. */
-#undef HAVE_SINL
-
-/* Define to 1 if you have the `sleep' function. */
-#undef HAVE_SLEEP
-
-/* Define to 1 if you have the `snprintf' function. */
-#undef HAVE_SNPRINTF
-
-/* Define to 1 if you have the `sqrt' function. */
-#undef HAVE_SQRT
-
-/* Define to 1 if you have the `sqrtf' function. */
-#undef HAVE_SQRTF
-
-/* Define to 1 if you have the `sqrtl' function. */
-#undef HAVE_SQRTL
-
-/* Define to 1 if you have the `srand48' function. */
-#undef HAVE_SRAND48
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#undef HAVE_STDARG_H
-
-/* Define to 1 if you have the <stdbool.h> header file. */
-#undef HAVE_STDBOOL_H
-
-/* Define to 1 if you have the <stddef.h> header file. */
-#undef HAVE_STDDEF_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdio.h> header file. */
-#undef HAVE_STDIO_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `sysctl' function. */
-#undef HAVE_SYSCTL
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the `tan' function. */
-#undef HAVE_TAN
-
-/* Define to 1 if you have the `tanf' function. */
-#undef HAVE_TANF
-
-/* Define to 1 if you have the `tanh' function. */
-#undef HAVE_TANH
-
-/* Define to 1 if you have the `tanhf' function. */
-#undef HAVE_TANHF
-
-/* Define to 1 if you have the `tanhl' function. */
-#undef HAVE_TANHL
-
-/* Define to 1 if you have the `tanl' function. */
-#undef HAVE_TANL
-
-/* Define to 1 if you have the `tgamma' function. */
-#undef HAVE_TGAMMA
-
-/* Define to 1 if you have the `tgammaf' function. */
-#undef HAVE_TGAMMAF
-
-/* Define to 1 if you have the `tgammal' function. */
-#undef HAVE_TGAMMAL
-
-/* Define to 1 if you have the `time_base_to_time' function. */
-#undef HAVE_TIME_BASE_TO_TIME
-
-/* Define to 1 if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
-/* Define to 1 if you have the `trunc' function. */
-#undef HAVE_TRUNC
-
-/* Define to 1 if you have the `truncf' function. */
-#undef HAVE_TRUNCF
-
-/* Define to 1 if you have the `truncl' function. */
-#undef HAVE_TRUNCL
-
-/* Define to 1 if the system has the type `uintptr_t'. */
-#undef HAVE_UINTPTR_T
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `usleep' function. */
-#undef HAVE_USLEEP
-
-/* Define to 1 if you have the `vprintf' function. */
-#undef HAVE_VPRINTF
-
-/* Define to 1 if you have the `y0' function. */
-#undef HAVE_Y0
-
-/* Define to 1 if you have the `y0f' function. */
-#undef HAVE_Y0F
-
-/* Define to 1 if you have the `y0l' function. */
-#undef HAVE_Y0L
-
-/* Define to 1 if you have the `y1' function. */
-#undef HAVE_Y1
-
-/* Define to 1 if you have the `y1f' function. */
-#undef HAVE_Y1F
-
-/* Define to 1 if you have the `y1l' function. */
-#undef HAVE_Y1L
-
-/* Define to 1 if you have the `yn' function. */
-#undef HAVE_YN
-
-/* Define to 1 if you have the `ynf' function. */
-#undef HAVE_YNF
-
-/* Define to 1 if you have the `ynl' function. */
-#undef HAVE_YNL
-
-/* Define to 1 if you have the `_mm_free' function. */
-#undef HAVE__MM_FREE
-
-/* Define to 1 if you have the `_mm_malloc' function. */
-#undef HAVE__MM_MALLOC
-
-/* Define if you have the UNICOS _rtc() intrinsic. */
-#undef HAVE__RTC
-
-/* Define to enable Kaiser-Bessel window function. */
-#undef KAISER_BESSEL
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#undef LT_OBJDIR
-
-/* Define to enable Matlab argument checks. */
-#undef MATLAB_ARGCHECKS
-
-/* Define to enable runtime time measurements. */
-#undef MEASURE_TIME
-
-/* Define to enable time measurements for FFTW transforms. */
-#undef MEASURE_TIME_FFTW
-
-/* Define to enable extra debugging code. */
-#undef NFFT_DEBUG
-
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-#undef NO_MINUS_C_MINUS_O
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to enable sinc power window function. */
-#undef SINC_POWER
-
-/* The size of `double', as computed by sizeof. */
-#undef SIZEOF_DOUBLE
-
-/* The size of `float', as computed by sizeof. */
-#undef SIZEOF_FLOAT
-
-/* The size of `int', as computed by sizeof. */
-#undef SIZEOF_INT
-
-/* The size of `long', as computed by sizeof. */
-#undef SIZEOF_LONG
-
-/* The size of `long double', as computed by sizeof. */
-#undef SIZEOF_LONG_DOUBLE
-
-/* The size of `long long', as computed by sizeof. */
-#undef SIZEOF_LONG_LONG
-
-/* The size of `ptrdiff_t', as computed by sizeof. */
-#undef SIZEOF_PTRDIFF_T
-
-/* The size of `size_t', as computed by sizeof. */
-#undef SIZEOF_SIZE_T
-
-/* The size of `unsigned int', as computed by sizeof. */
-#undef SIZEOF_UNSIGNED_INT
-
-/* The size of `unsigned long', as computed by sizeof. */
-#undef SIZEOF_UNSIGNED_LONG
-
-/* The size of `unsigned long long', as computed by sizeof. */
-#undef SIZEOF_UNSIGNED_LONG_LONG
-
-/* The size of `void *', as computed by sizeof. */
-#undef SIZEOF_VOID_P
-
-/* If using the C implementation of alloca, define if you know the
-   direction of stack growth for your system; otherwise it will be
-   automatically deduced at runtime.
-	STACK_DIRECTION > 0 => grows toward higher addresses
-	STACK_DIRECTION < 0 => grows toward lower addresses
-	STACK_DIRECTION = 0 => direction of growth unknown */
-#undef STACK_DIRECTION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Version number of package */
-#undef VERSION
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
-   calls it, or to nothing if 'inline' is not supported under any name.  */
-#ifndef __cplusplus
-#undef inline
-#endif
-
-/* Define to the equivalent of the C99 'restrict' keyword, or to
-   nothing if this is not supported.  Do not define if restrict is
-   supported directly.  */
-#undef restrict
-/* Work around a bug in Sun C++: it does not support _Restrict or
-   __restrict__, even though the corresponding Sun C compiler ends up with
-   "#define restrict _Restrict" or "#define restrict __restrict__" in the
-   previous line.  Perhaps some future version of Sun C++ will work with
-   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
-#if defined __SUNPRO_CC && !defined __RESTRICT
-# define _Restrict
-# define __restrict__
-#endif
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
diff --git a/include/cycle.h b/include/cycle.h
index 82867f8..62115b4 100644
--- a/include/cycle.h
+++ b/include/cycle.h
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 2003, 2007-8 Matteo Frigo
- * Copyright (c) 2003, 2007-8 Massachusetts Institute of Technology
+ * Copyright (c) 2003, 2007-14 Matteo Frigo
+ * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files (the
@@ -52,7 +52,7 @@
    defined according to whether the corresponding function/type/header
    is available on your system.  The necessary macros are most
    conveniently defined if you are using GNU autoconf, via the tests:
-   
+
    dnl ---------------------------------------------------------------------
 
    AC_C_INLINE
@@ -90,13 +90,10 @@
 #endif
 
 #define INLINE_ELAPSED(INL) static INL double elapsed(ticks t1, ticks t0) \
-{									  \
-     return (double)t1 - (double)t0;					  \
+{                                     \
+     return (double)t1 - (double)t0;                      \
 }
 
-#if 1 == 0
-#else
-
 /*----------------------------------------------------------------*/
 /* Solaris */
 #if defined(HAVE_GETHRTIME) && defined(HAVE_HRTIME_T) && !defined(HAVE_TICK_COUNTER)
@@ -125,8 +122,8 @@ static __inline double elapsed(ticks t1, ticks t0) /* time in nanoseconds */
 {
      time_base_to_time(&t1, TIMEBASE_SZ);
      time_base_to_time(&t0, TIMEBASE_SZ);
-     return (((double)t1.tb_high - (double)t0.tb_high) * 1.0e9 + 
-	     ((double)t1.tb_low - (double)t0.tb_low));
+     return (((double)t1.tb_high - (double)t0.tb_high) * 1.0e9 +
+         ((double)t1.tb_low - (double)t0.tb_low));
 }
 
 #define HAVE_TICK_COUNTER
@@ -144,9 +141,9 @@ static __inline__ ticks getticks(void)
      unsigned int tbl, tbu0, tbu1;
 
      do {
-	  __asm__ __volatile__ ("mftbu %0" : "=r"(tbu0));
-	  __asm__ __volatile__ ("mftb %0" : "=r"(tbl));
-	  __asm__ __volatile__ ("mftbu %0" : "=r"(tbu1));
+      __asm__ __volatile__ ("mftbu %0" : "=r"(tbu0));
+      __asm__ __volatile__ ("mftb %0" : "=r"(tbl));
+      __asm__ __volatile__ ("mftbu %0" : "=r"(tbu1));
      } while (tbu0 != tbu1);
 
      return (((unsigned long long)tbu0) << 32) | tbl;
@@ -169,7 +166,7 @@ INLINE_ELAPSED(__inline__)
 
 /*----------------------------------------------------------------*/
 /*
- * Pentium cycle counter 
+ * Pentium cycle counter
  */
 #if (defined(__GNUC__) || defined(__ICC)) && defined(__i386__)  && !defined(HAVE_TICK_COUNTER)
 typedef unsigned long long ticks;
@@ -200,17 +197,17 @@ static __inline ticks getticks(void)
      ticks retval;
 
      __asm {
-	  RDTSC
-	  mov retval.HighPart, edx
-	  mov retval.LowPart, eax
+      RDTSC
+      mov retval.HighPart, edx
+      mov retval.LowPart, eax
      }
      return retval;
 }
 
 static __inline double elapsed(ticks t1, ticks t0)
-{  
+{
      return (double)t1.QuadPart - (double)t0.QuadPart;
-}  
+}
 
 #define HAVE_TICK_COUNTER
 #define TIME_MIN 5000.0   /* unreliable pentium IV cycle counter */
@@ -225,20 +222,21 @@ typedef unsigned long long ticks;
 
 static __inline__ ticks getticks(void)
 {
-     unsigned a, d; 
-     asm volatile("rdtsc" : "=a" (a), "=d" (d)); 
-     return ((ticks)a) | (((ticks)d) << 32); 
+     unsigned a, d;
+     asm volatile("rdtsc" : "=a" (a), "=d" (d));
+     return ((ticks)a) | (((ticks)d) << 32);
 }
 
 INLINE_ELAPSED(__inline__)
 
 #define HAVE_TICK_COUNTER
+#define TIME_MIN 5000.0
 #endif
 
 /* PGI compiler, courtesy Cristiano Calonaci, Andrea Tarsi, & Roberto Gori.
    NOTE: this code will fail to link unless you use the -Masmkeyword compiler
    option (grrr). */
-#if defined(__PGI) && defined(__x86_64__) && !defined(HAVE_TICK_COUNTER) 
+#if defined(__PGI) && defined(__x86_64__) && !defined(HAVE_TICK_COUNTER)
 typedef unsigned long long ticks;
 static ticks getticks(void)
 {
@@ -246,6 +244,7 @@ static ticks getticks(void)
 }
 INLINE_ELAPSED(__inline__)
 #define HAVE_TICK_COUNTER
+#define TIME_MIN 5000.0
 #endif
 
 /* Visual C++, courtesy of Dirk Michaelis */
@@ -258,6 +257,7 @@ typedef unsigned __int64 ticks;
 INLINE_ELAPSED(__inline)
 
 #define HAVE_TICK_COUNTER
+#define TIME_MIN 5000.0
 #endif
 
 /*----------------------------------------------------------------*/
@@ -274,9 +274,9 @@ static __inline__ ticks getticks(void)
 {
      return __getReg(_IA64_REG_AR_ITC);
 }
- 
+
 INLINE_ELAPSED(__inline__)
- 
+
 #define HAVE_TICK_COUNTER
 #endif
 
@@ -339,9 +339,9 @@ INLINE_ELAPSED(inline)
 
 /*----------------------------------------------------------------*/
 /*
- * PA-RISC cycle counter 
+ * PA-RISC cycle counter
  */
-#if defined(__hppa__) || defined(__hppa) && !defined(HAVE_TICK_COUNTER)
+#if (defined(__hppa__) || defined(__hppa)) && !defined(HAVE_TICK_COUNTER)
 typedef unsigned long ticks;
 
 #  ifdef __GNUC__
@@ -387,7 +387,7 @@ INLINE_ELAPSED(__inline__)
 /*----------------------------------------------------------------*/
 #if defined(__GNUC__) && defined(__alpha__) && !defined(HAVE_TICK_COUNTER)
 /*
- * The 32-bit cycle counter on alpha overflows pretty quickly, 
+ * The 32-bit cycle counter on alpha overflows pretty quickly,
  * unfortunately.  A 1GHz machine overflows in 4 seconds.
  */
 typedef unsigned int ticks;
@@ -451,7 +451,7 @@ static inline ticks getticks(void)
 static inline double elapsed(ticks t1, ticks t0)
 {
      return ((double)t1.tv_sec - (double)t0.tv_sec) * 1.0E9 +
-	  ((double)t1.tv_nsec - (double)t0.tv_nsec);
+      ((double)t1.tv_nsec - (double)t0.tv_nsec);
 }
 #define HAVE_TICK_COUNTER
 #endif
@@ -515,4 +515,3 @@ INLINE_ELAPSED(inline)
 #endif
 #endif /* HAVE_MIPS_ZBUS_TIMER */
 
-#endif
diff --git a/include/doxygen.dox b/include/doxygen.dox
new file mode 100644
index 0000000..4a3b146
--- /dev/null
+++ b/include/doxygen.dox
@@ -0,0 +1,29 @@
+/*! \file nfft3.h 
+ *  Header file for NFFT3 
+ */
+
+/*! \fn extern void *nfft_malloc(size_t n)
+ *  Our \c malloc function
+ *  \param n The number of bytes to allocate
+ */
+
+/*! \fn extern void nfft_free(void *p)
+ *  Our \c free function
+ *  \param p Pointer to the memory region to free
+ */
+
+/*! \typedef typedef void *(*nfft_malloc_type_function) (size_t n)
+ *  A \c malloc type function
+ */
+
+/*! \typedef typedef void  (*nfft_free_type_function) (void *p)
+ *  A \c free type function
+ */
+
+/*! \var extern nfft_malloc_type_function nfft_malloc_hook
+ *  Hook for \c nfft_malloc
+ */
+
+/*! \var extern nfft_free_type_function nfft_free_hook
+ *  Hook for \c nfft_free
+ */
diff --git a/include/infft.h b/include/infft.h
index 9f298ee..5fb9d37 100644
--- a/include/infft.h
+++ b/include/infft.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,9 +16,11 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: infft.h 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
-/* NFFT internal header file */
+/*! \file infft3.h
+ *  \brief Internal header file for auxiliary definitions and functions.
+ */
 #ifndef __INFFT_H__
 #define __INFFT_H__
 
@@ -52,26 +54,49 @@
 
 #include "ticks.h"
 
+/**
+ * @defgroup nfftutil Util - Auxilliary functions
+ * @{
+ *
+ * This module implements frequently used utility functions.
+ * In particular, this includes simple measurement of resources, evaluation of
+ * window functions, vector routines for basic linear algebra tasks, and
+ * computation of weights for the inverse transforms.
+ *
+ */
+
 /* Determine precision and name-mangling scheme. */
 #define CONCAT(prefix, name) prefix ## name
 #if defined(NFFT_SINGLE)
 typedef float R;
 typedef float _Complex C;
 #define Y(name) CONCAT(nfftf_,name)
-#define Z(name) CONCAT(fftwf_,name)
+#define FFTW(name) CONCAT(fftwf_,name)
+#define NFFT(name) CONCAT(nfftf_,name)
+#define NFCT(name) CONCAT(nfctf_,name)
+#define NFST(name) CONCAT(nfstf_,name)
 #define NFSFT(name) CONCAT(nfsftf_,name)
+#define SOLVER(name) CONCAT(solverf_,name)
 #elif defined(NFFT_LDOUBLE)
 typedef long double R;
 typedef long double _Complex C;
 #define Y(name) CONCAT(nfftl_,name)
-#define Z(name) CONCAT(fftwl_,name)
+#define FFTW(name) CONCAT(fftwl_,name)
+#define NFFT(name) CONCAT(nfftl_,name)
+#define NFCT(name) CONCAT(nfctl_,name)
+#define NFST(name) CONCAT(nfstl_,name)
 #define NFSFT(name) CONCAT(nfsftl_,name)
+#define SOLVER(name) CONCAT(solverl_,name)
 #else
 typedef double R;
 typedef double _Complex C;
 #define Y(name) CONCAT(nfft_,name)
-#define Z(name) CONCAT(fftw_,name)
+#define FFTW(name) CONCAT(fftw_,name)
+#define NFFT(name) CONCAT(nfft_,name)
+#define NFCT(name) CONCAT(nfct_,name)
+#define NFST(name) CONCAT(nfst_,name)
 #define NFSFT(name) CONCAT(nfsft_,name)
+#define SOLVER(name) CONCAT(solver_,name)
 #endif
 #define X(name) Y(name)
 
@@ -85,12 +110,31 @@ typedef double _Complex C;
 #endif
 #define DK(name, value) const R name = K(value)
 
+#if defined __CYGWIN32__ && !defined __CYGWIN__
+   /* For backwards compatibility with Cygwin b19 and
+      earlier, we define __CYGWIN__ here, so that
+      we can rely on checking just for that macro. */
+#  define __CYGWIN__  __CYGWIN32__
+#endif
+
+#if defined _WIN32 && !defined __CYGWIN__
+   /* Use Windows separators on all _WIN32 defining
+      environments, except Cygwin. */
+#  define SEP "\\"
+#endif
+#ifndef SEP
+   /* Assume that not having this is an indicator that all
+      are missing. */
+#  define SEP "/"
+#endif /* !DIR_SEPARATOR_CHAR */
+
 /* Integral type large enough to contain a stride (what ``int'' should have been
  * in the first place) */
 typedef ptrdiff_t INT;
 
 #define KPI K(3.1415926535897932384626433832795028841971693993751)
 #define K2PI K(6.2831853071795864769252867665590057683943387987502)
+#define K4PI K(12.5663706143591729538505735331180115367886775975004)
 #define KE K(2.7182818284590452353602874713526624977572470937000)
 
 #define IF(x,a,b) ((x)?(a):(b))
@@ -101,17 +145,28 @@ typedef ptrdiff_t INT;
 #define SIGN(a) (((a)>=0)?1:-1)
 #define SIGNF(a) IF((a)<K(0.0),K(-1.0),K(1.0))
 
+/* Size of array. */
+#define SIZE(x) sizeof(x)/sizeof(x[0])
+
+/** Swap two vectors. */
+#define CSWAP(x,y) {C* NFFT_SWAP_temp__; \
+  NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;}
+
+/** Swap two vectors. */
+#define RSWAP(x,y) {R* NFFT_SWAP_temp__; NFFT_SWAP_temp__=(x); \
+  (x)=(y); (y)=NFFT_SWAP_temp__;}
+
 /* macros for window functions */
 
 #if defined(DIRAC_DELTA)
-  #define PHI_HUT(k,d) K(1.0)
-  #define PHI(x,d) IF(FABS((x)) < K(10E-8),K(1.0),K(0.0))
+  #define PHI_HUT(n,k,d) K(1.0)
+  #define PHI(n,x,d) IF(FABS((x)) < K(10E-8),K(1.0),K(0.0))
   #define WINDOW_HELP_INIT(d)
   #define WINDOW_HELP_FINALIZE
   #define WINDOW_HELP_ESTIMATE_m 0
 #elif defined(GAUSSIAN)
-  #define PHI_HUT(k,d) ((R)EXP(-(POW(KPI*(k)/ths->n[d],K(2.0))*ths->b[d])))
-  #define PHI(x,d) ((R)EXP(-POW((x)*((R)ths->n[d]),K(2.0)) / \
+  #define PHI_HUT(n,k,d) ((R)EXP(-(POW(KPI*(k)/n,K(2.0))*ths->b[d])))
+  #define PHI(n,x,d) ((R)EXP(-POW((x)*((R)n),K(2.0)) / \
     ths->b[d])/SQRT(KPI*ths->b[d]))
   #define WINDOW_HELP_INIT \
     { \
@@ -122,56 +177,81 @@ typedef ptrdiff_t INT;
           (K(2.0)*ths->sigma[WINDOW_idx] - K(1.0)) * (((R)ths->m) / KPI); \
     }
   #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}
-  #define WINDOW_HELP_ESTIMATE_m 12
+#if defined(NFFT_LDOUBLE)
+  #define WINDOW_HELP_ESTIMATE_m 17
+#elif defined(NFFT_SINGLE)
+  #define WINDOW_HELP_ESTIMATE_m 5
+#else
+  #define WINDOW_HELP_ESTIMATE_m 13
+#endif
 #elif defined(B_SPLINE)
-  #define PHI_HUT(k,d) ((R)(((k) == 0) ? K(1.0) / ths->n[(d)] : \
-    POW(SIN((k) * KPI / ths->n[(d)]) / ((k) * KPI / ths->n[(d)]), \
-      K(2.0) * ths->m)/ths->n[(d)]))
-  #define PHI(x,d) (Y(bspline)(2*ths->m,((x)*ths->n[(d)]) + \
-    (R)ths->m,ths->spline_coeffs) / ths->n[(d)])
+  #define PHI_HUT(n,k,d) ((R)(((k) == 0) ? K(1.0) / n : \
+    POW(SIN((k) * KPI / n) / ((k) * KPI / n), \
+      K(2.0) * ths->m)/n))
+  #define PHI(n,x,d) (Y(bspline)(2*ths->m,((x)*n) + \
+    (R)ths->m,ths->spline_coeffs) / n)
   #define WINDOW_HELP_INIT \
     { \
       ths->spline_coeffs= (R*)Y(malloc)(2*ths->m*sizeof(R)); \
     }
   #define WINDOW_HELP_FINALIZE {Y(free)(ths->spline_coeffs);}
+#if defined(NFFT_LDOUBLE)
+  #define WINDOW_HELP_ESTIMATE_m 11
+#elif defined(NFFT_SINGLE)
   #define WINDOW_HELP_ESTIMATE_m 11
+#else
+  #define WINDOW_HELP_ESTIMATE_m 11
+#endif
 #elif defined(SINC_POWER)
-  #define PHI_HUT(k,d) (Y(bspline)(2 * ths->m, (K(2.0) * ths->m*(k)) / \
-    ((K(2.0) * ths->sigma[(d)] - 1) * ths->n[(d)] / \
+  #define PHI_HUT(n,k,d) (Y(bspline)(2 * ths->m, (K(2.0) * ths->m*(k)) / \
+    ((K(2.0) * ths->sigma[(d)] - 1) * n / \
       ths->sigma[(d)]) + (R)ths->m, ths->spline_coeffs))
-  #define PHI(x,d) ((R)(ths->n[(d)] / ths->sigma[(d)] * \
+  #define PHI(n,x,d) ((R)(n / ths->sigma[(d)] * \
     (K(2.0) * ths->sigma[(d)] - K(1.0))/ (K(2.0)*ths->m) * \
-    POW(Y(sinc)(KPI * ths->n[(d)] / ths->sigma[(d)] * (x) * \
+    POW(Y(sinc)(KPI * n / ths->sigma[(d)] * (x) * \
     (K(2.0) * ths->sigma[(d)] - K(1.0)) / (K(2.0)*ths->m)) , 2*ths->m) / \
-    ths->n[(d)]))
+    n))
   #define WINDOW_HELP_INIT \
     { \
       ths->spline_coeffs= (R*)Y(malloc)(2 * ths->m * sizeof(R)); \
     }
   #define WINDOW_HELP_FINALIZE {Y(free)(ths->spline_coeffs);}
-  #define WINDOW_HELP_ESTIMATE_m 9
+#if defined(NFFT_LDOUBLE)
+  #define WINDOW_HELP_ESTIMATE_m 13
+#elif defined(NFFT_SINGLE)
+  #define WINDOW_HELP_ESTIMATE_m 11
+#else
+  #define WINDOW_HELP_ESTIMATE_m 11
+#endif
 #else /* Kaiser-Bessel is the default. */
-  #define PHI_HUT(k,d) ((R)Y(bessel_i0)(ths->m * SQRT(\
-    POW((R)(ths->b[d]), K(2.0)) - POW(K(2.0) * KPI * (k) / ths->n[d], K(2.0)))))
-  #define PHI(x,d) ((R)((POW((R)(ths->m), K(2.0))\
-    -POW((x)*ths->n[d],K(2.0))) > 0)? \
-    SINH(ths->b[d] * SQRT(POW((R)(ths->m),K(2.0)) - \
-    POW((x)*ths->n[d],K(2.0))))/(KPI*SQRT(POW((R)(ths->m),K(2.0)) - \
-    POW((x)*ths->n[d],K(2.0)))) : (((POW((R)(ths->m),K(2.0)) - \
-    POW((x)*ths->n[d],K(2.0))) < 0)? SIN(ths->b[d] * \
-    SQRT(POW(ths->n[d]*(x),K(2.0)) - POW((R)(ths->m), K(2.0)))) / \
-    (KPI*SQRT(POW(ths->n[d]*(x),K(2.0)) - POW((R)(ths->m),K(2.0)))):K(1.0)))
+  #define PHI_HUT(n,k,d) (Y(bessel_i0)((R)(ths->m) * SQRT(ths->b[d] * ths->b[d] - (K(2.0) * KPI * (R)(k) / (R)(n)) * (K(2.0) * KPI * (R)(k) / (R)(n)))))
+  #define PHI(n,x,d) (  (((R)(ths->m) * (R)(ths->m) - (x) * (R)(n) * (x) * (R)(n)) > K(0.0)) \
+                      ?   SINH(ths->b[d] * SQRT((R)(ths->m) * (R)(ths->m) - (x) * (R)(n) * (x) * (R)(n))) \
+                        / (KPI * SQRT((R)(ths->m) * (R)(ths->m) - (x) * (R)(n) * (x) * (R)(n))) \
+                      :   ((((R)(ths->m) * (R)(ths->m) - (x) * (R)(n) * (x) * (R)(n)) < K(0.0)) \
+                        ?   SIN(ths->b[d] * SQRT((x) * (R)(n) * (x) * (R)(n) - (R)(ths->m) * (R)(ths->m))) \
+                          / (KPI * SQRT((x) * (R)(n) * (x) * (R)(n) - (R)(ths->m) * (R)(ths->m))) \
+                        : ths->b[d] / KPI))
   #define WINDOW_HELP_INIT \
     { \
       int WINDOW_idx; \
-      ths->b = (R*) Y(malloc)(ths->d*sizeof(R)); \
+      ths->b = (R*) Y(malloc)((size_t)(ths->d) * sizeof(R)); \
       for (WINDOW_idx = 0; WINDOW_idx < ths->d; WINDOW_idx++) \
-        ths->b[WINDOW_idx] = ((R)KPI*(K(2.0)-K(1.0) / ths->sigma[WINDOW_idx])); \
+        ths->b[WINDOW_idx] = (KPI * (K(2.0) - K(1.0) / ths->sigma[WINDOW_idx])); \
   }
   #define WINDOW_HELP_FINALIZE {Y(free)(ths->b);}
-  #define WINDOW_HELP_ESTIMATE_m 6
+  #if defined(NFFT_LDOUBLE)
+    #define WINDOW_HELP_ESTIMATE_m 9
+  #elif defined(NFFT_SINGLE)
+    #define WINDOW_HELP_ESTIMATE_m 4
+  #else
+    #define WINDOW_HELP_ESTIMATE_m 8
+  #endif
 #endif
 
+/* window.c */
+INT Y(m2K)(const INT m);
+
 #if defined(NFFT_LDOUBLE)
 #if HAVE_DECL_COPYSIGNL == 0
 extern long double copysignl(long double, long double);
@@ -1223,39 +1303,36 @@ extern double _Complex catanh(double _Complex z);
 
 /* format strings */
 #if defined(NFFT_LDOUBLE)
-#  define FE "LE"
-#  define FE_ "% 36.32LE"
-#  define FFI "%Lf"
+#  define __FGS__ "Lg"
+#  define __FES__ "LE"
+#  define __FE__ "% 36.32LE"
+#  define __FI__ "%Lf"
+#  define __FIS__ "Lf"
+#  define __FR__ "%La"
 #elif defined(NFFT_SINGLE)
-#  define FE "E"
-#  define FE_ "% 12.8E"
-#  define FFI "%f"
+#  define __FGS__ "g"
+#  define __FES__ "E"
+#  define __FE__ "% 12.8E"
+#  define __FI__ "%f"
+#  define __FIS__ "f"
+#  define __FR__ "%a"
 #else
-#  define FE "lE"
-#  define FE_ "% 20.16lE"
-#  define FFI "%lf"
+#  define __FGS__ "lg"
+#  define __FES__ "lE"
+#  define __FE__ "% 20.16lE"
+#  define __FI__ "%lf"
+#  define __FIS__ "lf"
+#  define __FR__ "%la"
 #endif
 
 #define TRUE 1
 #define FALSE 0
 
+#define __D__ "%td"
+
 /** Dummy use of unused parameters to silence compiler warnings */
 #define UNUSED(x) (void)x
 
-extern void nfft_assertion_failed(const char *s, int line, const char *file);
-
-/* always check */
-#define CK(ex) \
-  (void)((ex) || (nfft_assertion_failed(#ex, __LINE__, __FILE__), 0))
-
-#ifdef NFFT_DEBUG
-  /* check only if debug enabled */
-  #define A(ex) \
-    (void)((ex) || (nfft_assertion_failed(#ex, __LINE__, __FILE__), 0))
-#else
-  #define A(ex) /* nothing */
-#endif
-
 #ifdef HAVE_ALLOCA
   /* Use alloca if available. */
   #ifndef alloca
@@ -1295,12 +1372,12 @@ extern void nfft_assertion_failed(const char *s, int line, const char *file);
 #else /* ! HAVE_ALLOCA */
   /* Use malloc instead of alloca. So we allocate memory on the heap instead of
    * on the stack which is slower. */
-  #define STACK_MALLOC(T, p, x) p = (T)nfft_malloc(x)
-  #define STACK_FREE(x) nfft_free(x)
+  #define STACK_MALLOC(T, p, x) p = (T)Y(malloc)(x)
+  #define STACK_FREE(x) Y(free)(x)
 #endif /* ! HAVE_ALLOCA */
 
 /** Return number of elapsed seconds between two time points. */
-double nfft_elapsed_seconds(ticks t1, ticks t0);
+R Y(elapsed_seconds)(ticks t1, ticks t0);
 
 /** Dummy use of unused parameters to silence compiler warnings */
 #define UNUSED(x) (void)x
@@ -1329,7 +1406,7 @@ double nfft_elapsed_seconds(ticks t1, ticks t0);
 
 #define TOC(a)                                                                \
       MEASURE_TIME_t1 = getticks();                                           \
-      MEASURE_TIME_tt = nfft_elapsed_seconds(MEASURE_TIME_t1,MEASURE_TIME_t0);\
+      MEASURE_TIME_tt = Y(elapsed_seconds)(MEASURE_TIME_t1,MEASURE_TIME_t0);\
       ths->MEASURE_TIME_t[(a)]+=MEASURE_TIME_tt;                              \
     }                                                                         \
   ths->MEASURE_TIME_t[(a)]/=MEASURE_TIME_r;                                   \
@@ -1350,40 +1427,157 @@ double nfft_elapsed_seconds(ticks t1, ticks t0);
 /* sinc.c: */
 
 /* Sinus cardinalis. */
-R X(sinc)(R x);
+R Y(sinc)(R x);
 
 /* lambda.c: */
 
 /* lambda(z, eps) = gamma(z + eps) / gamma(z + 1) */
-R X(lambda)(R z, R eps);
+R Y(lambda)(R z, R eps);
 
 /* lambda2(mu, nu) = sqrt(gamma(mu + nu + 1) / (gamma(mu + 1) * gamma(nu + 1))) */
-R X(lambda2)(R mu, R nu);
+R Y(lambda2)(R mu, R nu);
 
 /* bessel_i0.c: */
-R X(bessel_i0)(R x);
+R Y(bessel_i0)(R x);
+
+/* bspline.c: */
+R Y(bspline)(const INT, const R x, R*);
 
 /* float.c: */
-typedef enum {NFFT_EPSILON = 0, NFFT_SAFE_MIN = 1, NFFT_BASE = 2,
+typedef enum {NFFT_EPSILON = 0, NFFT_SAFE__MIN = 1, NFFT_BASE = 2,
   NFFT_PRECISION = 3, NFFT_MANT_DIG = 4, NFFT_FLTROUND = 5, NFFT_E_MIN = 6,
   NFFT_R_MIN = 7, NFFT_E_MAX = 8, NFFT_R_MAX = 9} float_property;
 
-R X(float_property)(float_property);
+R Y(float_property)(float_property);
+R Y(prod_real)(R *vec, INT d);
 
 /* int.c: */
-int X(exp2i)(const int a);
-int X(log2i)(const int m);
-int X(next_power_of_2)(const int N);
-void X(next_power_of_2_exp)(const int N, int *N2, int *t);
+INT Y(exp2i)(const INT a);
+INT Y(log2i)(const INT m);
+INT Y(next_power_of_2)(const INT N);
+void Y(next_power_of_2_exp)(const INT N, INT *N2, INT *t);
 
 /* error.c: */
-R X(error_l_infty_complex)(const C *x, const C *y, const INT n);
-/* not used */ R X(error_l_infty_double)(const R *x, const R *y, const INT n);
-R X(error_l_infty_1_complex)(const C *x, const C *y, const INT n,
+R Y(error_l_infty_complex)(const C *x, const C *y, const INT n);
+/* not used */ R Y(error_l_infty_double)(const R *x, const R *y, const INT n);
+R Y(error_l_infty_1_complex)(const C *x, const C *y, const INT n,
   const C *z, const INT m);
-/* not used */ R X(error_l_infty_1_double)(const R *x, const R *y, const INT n, const R *z,
+/* not used */ R Y(error_l_infty_1_double)(const R *x, const R *y, const INT n, const R *z,
   const INT m);
-R X(error_l_2_complex)(const C *x, const C *y, const INT n);
-/* not used */ R X(error_l_2_double)(const R *x, const R *y, const INT n);
+R Y(error_l_2_complex)(const C *x, const C *y, const INT n);
+/* not used */ R Y(error_l_2_double)(const R *x, const R *y, const INT n);
+
+/* sort.c: */
+void Y(sort_node_indices_radix_msdf)(INT n, INT *keys0, INT *keys1, INT rhigh);
+void Y(sort_node_indices_radix_lsdf)(INT n, INT *keys0, INT *keys1, INT rhigh);
+
+/* assert.c */
+void Y(assertion_failed)(const char *s, int line, const char *file);
+
+/* rand.c */
+R Y(drand48)(void);
+void Y(srand48)(long int seed);
+/** Inits a vector of random complex numbers in \f$[0,1]\times[0,1]{\rm i}\f$.
+ */
+void Y(vrand_unit_complex)(C *x, const INT n);
+/** Inits a vector of random double numbers in \f$[-1/2,1/2]\f$.
+ */
+void Y(vrand_shifted_unit_double)(R *x, const INT n);
+void Y(vrand_real)(R *x, const INT n, const R a, const R b);
+
+/* vector1.c */
+/** Computes the inner/dot product \f$x^H x\f$. */
+R Y(dot_complex)(C *x, INT n);
+/** Computes the inner/dot product \f$x^H x\f$. */
+R Y(dot_double)(R *x, INT n);
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$. */
+R Y(dot_w_complex)(C *x, R *w, INT n);
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$. */
+R Y(dot_w_double)(R *x, R *w, INT n);
+/** Computes the weighted inner/dot product \f$x^H (w\odot w2\odot w2 \odot x)\f$. */
+R Y(dot_w_w2_complex)(C *x, R *w, R *w2, INT n);
+/** Computes the weighted inner/dot product \f$x^H (w2\odot w2 \odot x)\f$. */
+R Y(dot_w2_complex)(C *x, R *w2, INT n);
+
+/* vector2.c */
+/** Copies \f$x \leftarrow y\f$. */
+void Y(cp_complex)(C *x, C *y, INT n);
+/** Copies \f$x \leftarrow y\f$. */
+void Y(cp_double)(R *x, R *y, INT n);
+/** Copies \f$x \leftarrow a y\f$. */
+void Y(cp_a_complex)(C *x, R a, C *y, INT n);
+/** Copies \f$x \leftarrow a y\f$. */
+void Y(cp_a_double)(R *x, R a, R *y, INT n);
+/** Copies \f$x \leftarrow w\odot y\f$. */
+void Y(cp_w_complex)(C *x, R *w, C *y, INT n);
+/** Copies \f$x \leftarrow w\odot y\f$. */
+void Y(cp_w_double)(R *x, R *w, R *y, INT n);
+
+/* vector3.c */
+/** Updates \f$x \leftarrow a x + y\f$. */
+void Y(upd_axpy_complex)(C *x, R a, C *y, INT n);
+/** Updates \f$x \leftarrow a x + y\f$. */
+void Y(upd_axpy_double)(R *x, R a, R *y, INT n);
+/** Updates \f$x \leftarrow x + a y\f$. */
+void Y(upd_xpay_complex)(C *x, R a, C *y, INT n);
+/** Updates \f$x \leftarrow x + a y\f$. */
+void Y(upd_xpay_double)(R *x, R a, R *y, INT n);
+/** Updates \f$x \leftarrow a x + b y\f$. */
+void Y(upd_axpby_complex)(C *x, R a, C *y, R b, INT n);
+/** Updates \f$x \leftarrow a x + b y\f$. */
+void Y(upd_axpby_double)(R *x, R a, R *y, R b, INT n);
+/** Updates \f$x \leftarrow x + a w\odot y\f$. */
+void Y(upd_xpawy_complex)(C *x, R a, R *w, C *y, INT n);
+/** Updates \f$x \leftarrow x + a w\odot y\f$. */
+void Y(upd_xpawy_double)(R *x, R a, R *w, R *y, INT n);
+/** Updates \f$x \leftarrow a x +  w\odot y\f$. */
+void Y(upd_axpwy_complex)(C *x, R a, R *w, C *y, INT n);
+/** Updates \f$x \leftarrow a x +  w\odot y\f$. */
+void Y(upd_axpwy_double)(R *x, R a, R *w, R *y, INT n);
+/** Swaps each half over N[d]/2. */
+void Y(fftshift_complex)(C *x, INT d, INT* N);
+void Y(fftshift_complex_int)(C *x, int d, int* N);
+
+/* print.c */
+/** Print real vector to standard output. */
+void Y(vpr_double)(R *x, const INT n, const char *text);
+/** Print complex vector to standard output. */
+void Y(vpr_complex)(C *x, const INT n, const char *text);
+
+/* voronoi.c */
+void Y(voronoi_weights_1d)(R *w, R *x, const INT M);
+
+/* damp.c */
+/**
+ * Compute damping factor for modified Fejer kernel:
+ * /f$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)/f$
+ */
+R Y(modified_fejer)(const INT N, const INT kk);
+/** Compute damping factor for modified Jackson kernel. */
+R Y(modified_jackson2)(const INT N, const INT kk);
+/** Compute damping factor for modified generalised Jackson kernel. */
+R Y(modified_jackson4)(const INT N, const INT kk);
+/** Compute damping factor for modified Sobolev kernel. */
+R Y(modified_sobolev)(const R mu, const INT kk);
+/** Comput damping factor for modified multiquadric kernel. */
+R Y(modified_multiquadric)(const R mu, const R c, const INT kk);
+
+/* thread.c */
+INT Y(get_num_threads)(void);
+
+/* always check */
+#define CK(ex) \
+  (void)((ex) || (Y(assertion_failed)(#ex, __LINE__, __FILE__), 0))
+
+#ifdef NFFT_DEBUG
+  /* check only if debug enabled */
+  #define A(ex) \
+    (void)((ex) || (Y(assertion_failed)(#ex, __LINE__, __FILE__), 0))
+#else
+  #define A(ex) /* nothing */
+#endif
+
+/** @}
+ */
 
 #endif
diff --git a/include/nfft3.h b/include/nfft3.h
index 713389b..02a4a5a 100644
--- a/include/nfft3.h
+++ b/include/nfft3.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,14 +16,11 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nfft3.h 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 #ifndef __NFFT3_H__
 #define __NFFT3_H__
 
-/* module configuration */
-#include "nfft3conf.h"
-
 /* fftw_complex */
 #include <fftw3.h>
 
@@ -51,42 +48,50 @@ extern "C"
 #  define NFFT_EXTERN extern
 #endif
 
-/* our own memory allocation and exit functions */
-NFFT_EXTERN void *nfft_malloc(size_t n);
-NFFT_EXTERN void nfft_free(void *p);
-NFFT_EXTERN void nfft_die(char *s);
-
-/* You can replace the hooks with your own, functions if necessary. We need this
- * for the Matlab interfaces etc. */
-typedef void *(*nfft_malloc_type_function) (size_t n);
-typedef void  (*nfft_free_type_function) (void *p);
-typedef void  (*nfft_die_type_function) (const char *errString);
-NFFT_EXTERN nfft_malloc_type_function nfft_malloc_hook;
-NFFT_EXTERN nfft_free_type_function nfft_free_hook;
-NFFT_EXTERN nfft_die_type_function nfft_die_hook;
-
-/* members inherited by all plans */
+typedef ptrdiff_t _INT;
+
+/* Members inherited by all plans. */
 #define MACRO_MV_PLAN(RC) \
-  int N_total; /**< Total number of Fourier coefficients */\
-  int M_total; /**< Total number of samples */\
-  RC *f_hat; /**< Vector of Fourier coefficients, size is N_total * sizeof(RC) */\
-  RC *f; /**< Vector of samples, size is M_total * sizeof(RC) */\
-  void (*mv_trafo)(void*); /**< Pointer to the own transform */\
-  void (*mv_adjoint)(void*); /**< Pointer to the own adjoint */
+  _INT N_total; /**< Total number of Fourier coefficients. */\
+  _INT M_total; /**< Total number of samples. */\
+  RC *f_hat; /**< Fourier coefficients. */\
+  RC *f; /**< Samples. */\
+  void (*mv_trafo)(void*); /**< Transform. */\
+  void (*mv_adjoint)(void*); /**< Adjoint transform. */
 
 /* nfft */
 
-/* name mangling macros */
+/* Name mangling macros. */
 #define NFFT_MANGLE_DOUBLE(name) NFFT_CONCAT(nfft_, name)
 #define NFFT_MANGLE_FLOAT(name) NFFT_CONCAT(nfftf_, name)
 #define NFFT_MANGLE_LONG_DOUBLE(name) NFFT_CONCAT(nfftl_, name)
 
-/* huge second-order macro that defines prototypes for all nfft API functions.
+#define NFFT_DEFINE_MALLOC_API(X) \
+/* our own memory allocation and exit functions */ \
+NFFT_EXTERN void *X(malloc)(size_t n); \
+NFFT_EXTERN void X(free)(void *p); \
+NFFT_EXTERN void X(die)(const char *s); \
+\
+/* You can replace the hooks with your own functions, if necessary. We */ \
+/* need this for the Matlab interface. */ \
+typedef void *(*X(malloc_type_function)) (size_t n); \
+typedef void  (*X(free_type_function)) (void *p); \
+typedef void  (*X(die_type_function)) (const char *errString); \
+NFFT_EXTERN X(malloc_type_function) X(malloc_hook); \
+NFFT_EXTERN X(free_type_function) X(free_hook); \
+NFFT_EXTERN X(die_type_function) X(die_hook);
+
+/* Nfft module API. */
+NFFT_DEFINE_MALLOC_API(NFFT_MANGLE_FLOAT)
+NFFT_DEFINE_MALLOC_API(NFFT_MANGLE_DOUBLE)
+NFFT_DEFINE_MALLOC_API(NFFT_MANGLE_LONG_DOUBLE)
+
+/* Macro to define prototypes for all NFFT API functions.
  * We expand this macro for each supported precision.
- *   X: nfft name-mangling macro
- *   Y: fftw name-mangling macro
- *   R: real data type
- *   C: complex data type
+ *   X: NFFT name-mangling macro
+ *   Y: FFTW name-mangling macro
+ *   R: Real float type
+ *   C: Complex float type
  */
 #define NFFT_DEFINE_API(X,Y,R,C) \
 \
@@ -104,44 +109,45 @@ typedef struct\
 {\
   MACRO_MV_PLAN(C)\
 \
-  int d; /**< dimension aka rank */\
-  int *N; /**< multi-bandwidth */\
-  R *sigma; /**< oversampling-factor */\
-  int *n; /**< FFTW length, equal to sigma*N, default is the power of 2 such
-               that \f$2\le\sigma<4\f$ */\
-  int n_total; /**< Total size of FFTW */\
-  int m; /**< Cut-off parameter of the window function, default value is
-               6 (KAISER_BESSEL),
-               9 (SINC_POWER),
-               11 (B_SPLINE),
-               12 (GAUSSIAN) */\
-  R *b; /**< Shape parameter of the window function */\
-  int K; /**< Number of equispaced samples of the window function for \ref
-              PRE_LIN_PSI */\
-\
-  unsigned nfft_flags; /**< Flags for precomputation, (de)allocation, and FFTW
-                            usage, default setting is
-                            PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT |
-                            MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE */\
+  _INT d; /**< Dimension (rank). */\
+  _INT *N; /**< Multi-bandwidth. */\
+  R *sigma; /**< Oversampling factor. */\
+  _INT *n; /**< Length of FFTW transforms. This is equal to sigma*N. The default
+               is to use a power of two that satifies  \f$2\le\sigma<4\f$. */\
+  _INT n_total; /**< Combined total length of FFTW transforms. */\
+  _INT m; /**< Cut-off parameter for window function. Default values for the
+              different window functions are
+              -  6 (KAISER_BESSEL),
+              -  9 (SINC_POWER),
+              - 11 (B_SPLINE),
+              - 12 (GAUSSIAN) */\
+  R *b; /**< Shape parameter for window function */\
+  _INT K; /**< Number of equispaced samples of window function. Used for flag
+             PRE_LIN_PSI. */\
+\
+  unsigned flags; /**< Flags for precomputation, (de)allocation, and FFTW
+                       usage, default setting is PRE_PHI_HUT | PRE_PSI
+                       | MALLOC_X | MALLOC_F_HAT | MALLOC_F | FFTW_INIT
+                       | FFT_OUT_OF_PLACE */\
 \
   unsigned fftw_flags; /**< Flags for the FFTW, default is
                             FFTW_ESTIMATE | FFTW_DESTROY_INPUT */\
 \
   R *x; /**< Nodes in time/spatial domain, size is \f$dM\f$ doubles */\
 \
-  double MEASURE_TIME_t[3]; /**< Measured time for each step if MEASURE_TIME is
+  R MEASURE_TIME_t[3]; /**< Measured time for each step if MEASURE_TIME is
     set */\
 \
   /* internal use only */\
-  Y(plan)  my_fftw_plan1; /**< Forward FFTW plan */\
-  Y(plan)  my_fftw_plan2; /**< Backward FFTW plan */\
+  Y(plan) my_fftw_plan1; /**< Forward FFTW plan */\
+  Y(plan) my_fftw_plan2; /**< Backward FFTW plan */\
 \
   R **c_phi_inv; /**< Precomputed data for the diagonal matrix \f$D\f$, size \
     is \f$N_0+\hdots+N_{d-1}\f$ doubles*/\
   R *psi; /**< Precomputed data for the sparse matrix \f$B\f$, size depends
                     on precomputation scheme */\
-  int *psi_index_g; /**< Indices in source/target vector for \ref PRE_FULL_PSI */\
-  int *psi_index_f; /**< Indices in source/target vector for \ref PRE_FULL_PSI */\
+  _INT *psi_index_g; /**< Indices in source/target vector for \ref PRE_FULL_PSI */\
+  _INT *psi_index_f; /**< Indices in source/target vector for \ref PRE_FULL_PSI */\
 \
   C *g; /**< Oversampled vector of samples, size is \ref n_total double complex */\
   C *g_hat; /**< Zero-padded vector of Fourier coefficients, size is \ref n_total fftw_complex */\
@@ -150,11 +156,11 @@ typedef struct\
 \
   R *spline_coeffs; /**< Input for de Boor algorithm if B_SPLINE or SINC_POWER is defined */\
 \
-  int *index_x; /**< Index array for nodes x used when flag \ref NFFT_SORT_NODES is set */\
+  _INT *index_x; /**< Index array for nodes x used when flag \ref NFFT_SORT_NODES is set. */\
 } X(plan); \
 \
-NFFT_EXTERN void X(trafo_direct)(X(plan) *ths);\
-NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths);\
+NFFT_EXTERN void X(trafo_direct)(const X(plan) *ths);\
+NFFT_EXTERN void X(adjoint_direct)(const X(plan) *ths);\
 NFFT_EXTERN void X(trafo)(X(plan) *ths);\
 NFFT_EXTERN void X(trafo_1d)(X(plan) *ths);\
 NFFT_EXTERN void X(trafo_2d)(X(plan) *ths);\
@@ -168,36 +174,38 @@ NFFT_EXTERN void X(init_2d)(X(plan) *ths, int N1, int N2, int M);\
 NFFT_EXTERN void X(init_3d)(X(plan) *ths, int N1, int N2, int N3, int M);\
 NFFT_EXTERN void X(init)(X(plan) *ths, int d, int *N, int M);\
 NFFT_EXTERN void X(init_guru)(X(plan) *ths, int d, int *N, int M, int *n, \
-  int m, unsigned nfft_flags, unsigned fftw_flags);\
+  int m, unsigned flags, unsigned fftw_flags);\
+NFFT_EXTERN void X(init_lin)(X(plan) *ths, int d, int *N, int M, int *n, \
+  int m, int K, unsigned flags, unsigned fftw_flags); \
 NFFT_EXTERN void X(precompute_one_psi)(X(plan) *ths);\
-NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths);\
 NFFT_EXTERN void X(precompute_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_fg_psi)(X(plan) *ths); \
 NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths);\
 NFFT_EXTERN const char* X(check)(X(plan) *ths);\
 NFFT_EXTERN void X(finalize)(X(plan) *ths);
 
-/* nfft api */
+/* Nfft module API. */
 NFFT_DEFINE_API(NFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
 NFFT_DEFINE_API(NFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
 NFFT_DEFINE_API(NFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
 
-/* flags for init */
-#define PRE_PHI_HUT      (1U<< 0)
-#define FG_PSI           (1U<< 1)
-#define PRE_LIN_PSI      (1U<< 2)
-#define PRE_FG_PSI       (1U<< 3)
-#define PRE_PSI          (1U<< 4)
-#define PRE_FULL_PSI     (1U<< 5)
-#define MALLOC_X         (1U<< 6)
-#define MALLOC_F_HAT     (1U<< 7)
-#define MALLOC_F         (1U<< 8)
-#define FFT_OUT_OF_PLACE (1U<< 9)
-#define FFTW_INIT        (1U<< 10)
-#define NFFT_SORT_NODES  (1U<< 11)
+/* Flags for init routines. */
+#define PRE_PHI_HUT                (1U<<0)
+#define FG_PSI                     (1U<<1)
+#define PRE_LIN_PSI                (1U<<2)
+#define PRE_FG_PSI                 (1U<<3)
+#define PRE_PSI                    (1U<<4)
+#define PRE_FULL_PSI               (1U<<5)
+#define MALLOC_X                   (1U<<6)
+#define MALLOC_F_HAT               (1U<<7)
+#define MALLOC_F                   (1U<<8)
+#define FFT_OUT_OF_PLACE           (1U<<9)
+#define FFTW_INIT                  (1U<<10)
+#define NFFT_SORT_NODES            (1U<<11)
 #define NFFT_OMP_BLOCKWISE_ADJOINT (1U<<12)
 #define PRE_ONE_PSI (PRE_LIN_PSI| PRE_FG_PSI| PRE_PSI| PRE_FULL_PSI)
 
-
 /* nfct */
 
 /* name mangling macros */
@@ -218,16 +226,18 @@ typedef struct\
   /* api */\
   MACRO_MV_PLAN(R)\
 \
-  int d; /**< dimension, rank */\
-  int *N; /**< cut-off-frequencies (kernel) */\
-  int *n; /**< length of DCT-I */\
+  _INT d; /**< dimension, rank */\
+  _INT *N; /**< cut-off-frequencies (kernel) */\
+  _INT *n; /**< length of DCT-I */\
+  _INT n_total; /**< Combined total length of FFTW transforms. */\
   R *sigma; /**< oversampling-factor */\
-  int m; /**< cut-off parameter in time-domain */\
+  _INT m; /**< cut-off parameter in time-domain */\
 \
-  R nfct_full_psi_eps;\
   R *b; /**< shape parameters */\
+  _INT K; /**< Number of equispaced samples of window function. Used for flag
+               PRE_LIN_PSI. */\
 \
-  unsigned nfct_flags; /**< flags for precomputation, malloc */\
+  unsigned flags; /**< flags for precomputation, malloc */\
   unsigned fftw_flags; /**< flags for the fftw */\
 \
   R *x; /**< nodes (in time/spatial domain)   */\
@@ -240,9 +250,9 @@ typedef struct\
 \
   R **c_phi_inv; /**< precomputed data, matrix D */\
   R *psi; /**< precomputed data, matrix B */\
-  int size_psi; /**< only for thin B */\
-  int *psi_index_g; /**< only for thin B */\
-  int *psi_index_f; /**< only for thin B */\
+  _INT size_psi; /**< only for thin B */\
+  _INT *psi_index_g; /**< only for thin B */\
+  _INT *psi_index_f; /**< only for thin B */\
 \
   R *g;\
   R *g_hat;\
@@ -257,22 +267,23 @@ NFFT_EXTERN void X(init_2d)(X(plan) *ths_plan, int N0, int N1, int M_total); \
 NFFT_EXTERN void X(init_3d)(X(plan) *ths_plan, int N0, int N1, int N2, int M_total); \
 NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int *N, int M_total); \
 NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int *N, int M_total, int *n, \
-  int m, unsigned nfct_flags, unsigned fftw_flags); \
-NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \
+  int m, unsigned flags, unsigned fftw_flags); \
+NFFT_EXTERN void X(precompute_one_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_fg_psi)(X(plan) *ths); \
+NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths);\
 NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \
-NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo_direct)(const X(plan) *ths_plan); \
 NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \
-NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint_direct)(const X(plan) *ths_plan); \
+NFFT_EXTERN const char* X(check)(X(plan) *ths);\
 NFFT_EXTERN void X(finalize)(X(plan) *ths_plan); \
-NFFT_EXTERN R X(phi_hut)(X(plan) *ths_plan, int k, int d); \
-NFFT_EXTERN R X(phi)(X(plan) *ths_plan, R x, int d);
 
-#if defined(HAVE_NFCT)
 /* nfct api */
 NFCT_DEFINE_API(NFCT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
 NFCT_DEFINE_API(NFCT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
 NFCT_DEFINE_API(NFCT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
-#endif
 
 /* nfst */
 
@@ -294,16 +305,18 @@ typedef struct\
   /* api */\
   MACRO_MV_PLAN(R)\
 \
-  int d; /**< dimension, rank */\
-  int *N; /**< bandwidth */\
-  int *n; /**< length of DST-1 */\
+  _INT d; /**< dimension, rank */\
+  _INT *N; /**< bandwidth */\
+  _INT *n; /**< length of DST-I */\
+  _INT n_total; /**< Combined total length of FFTW transforms. */\
   R *sigma; /**< oversampling-factor */\
-  int m; /**< cut-off parameter in time-domain */\
+  _INT m; /**< cut-off parameter in time-domain */\
 \
-  R nfst_full_psi_eps;\
   R *b; /**< shape parameters */\
+  _INT K; /**< Number of equispaced samples of window function. Used for flag
+               PRE_LIN_PSI. */\
 \
-  unsigned nfst_flags; /**< flags for precomputation, malloc */\
+  unsigned flags; /**< flags for precomputation, malloc */\
   unsigned fftw_flags; /**< flags for the fftw */\
 \
   R *x; /**< nodes (in time/spatial domain) */\
@@ -316,9 +329,9 @@ typedef struct\
 \
   R **c_phi_inv; /**< precomputed data, matrix D */\
   R *psi; /**< precomputed data, matrix B */\
-  int size_psi; /**< only for thin B */\
-  int *psi_index_g; /**< only for thin B */\
-  int *psi_index_f; /**< only for thin B */\
+  _INT size_psi; /**< only for thin B */\
+  _INT *psi_index_g; /**< only for thin B */\
+  _INT *psi_index_f; /**< only for thin B */\
 \
   R *g;\
   R *g_hat;\
@@ -326,33 +339,32 @@ typedef struct\
   R *g2; /**< output of fftw */\
 \
   R *spline_coeffs; /**< input for de Boor algorithm, if B_SPLINE or SINC_2m is defined */\
+\
+  R X(full_psi_eps);\
 } X(plan);\
 \
 NFFT_EXTERN void X(init_1d)(X(plan) *ths_plan, int N0, int M_total); \
 NFFT_EXTERN void X(init_2d)(X(plan) *ths_plan, int N0, int N1, int M_total); \
 NFFT_EXTERN void X(init_3d)(X(plan) *ths_plan, int N0, int N1, int N2, int M_total); \
 NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int *N, int M_total); \
-NFFT_EXTERN void X(init_m)(X(plan) *ths_plan, int d, int *N, int M_total, int m);\
 NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int *N, int M_total, int *n, \
-  int m, unsigned nfst_flags, unsigned fftw_flags); \
-NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \
+  int m, unsigned flags, unsigned fftw_flags); \
+NFFT_EXTERN void X(precompute_one_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths);\
+NFFT_EXTERN void X(precompute_fg_psi)(X(plan) *ths); \
+NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths);\
 NFFT_EXTERN void X(trafo)(X(plan) *ths_plan); \
-NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(trafo_direct)(const X(plan) *ths_plan); \
 NFFT_EXTERN void X(adjoint)(X(plan) *ths_plan); \
-NFFT_EXTERN void X(adjoint_direct)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(adjoint_direct)(const X(plan) *ths_plan); \
+NFFT_EXTERN const char* X(check)(X(plan) *ths);\
 NFFT_EXTERN void X(finalize)(X(plan) *ths_plan); \
-NFFT_EXTERN void X(full_psi)(X(plan) *ths_plan, R eps); \
-NFFT_EXTERN R X(phi_hut)(X(plan) *ths_plan, int k, int d); \
-NFFT_EXTERN R X(phi)(X(plan) *ths_plan, R x, int d); \
-NFFT_EXTERN int X(fftw_2N)(int n); \
-NFFT_EXTERN int X(fftw_2N_rev)(int n);
 
-#ifdef HAVE_NFST
 /* nfst api */
 NFST_DEFINE_API(NFST_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
 NFST_DEFINE_API(NFST_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
 NFST_DEFINE_API(NFST_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
-#endif
 
 /* nnfft */
 
@@ -400,6 +412,7 @@ typedef struct\
 } X(plan);\
 \
 NFFT_EXTERN void X(init)(X(plan) *ths_plan, int d, int N_total, int M_total, int *N); \
+NFFT_EXTERN void X(init_1d)(X(plan) *ths_plan, int N, int M_total); \
 NFFT_EXTERN void X(init_guru)(X(plan) *ths_plan, int d, int N_total, int M_total, \
   int *N, int *N1, int m, unsigned nnfft_flags); \
 NFFT_EXTERN void X(trafo_direct)(X(plan) *ths_plan); \
@@ -410,14 +423,13 @@ NFFT_EXTERN void X(precompute_lin_psi)(X(plan) *ths_plan); \
 NFFT_EXTERN void X(precompute_psi)(X(plan) *ths_plan); \
 NFFT_EXTERN void X(precompute_full_psi)(X(plan) *ths_plan); \
 NFFT_EXTERN void X(precompute_phi_hut)(X(plan) *ths_plan); \
+NFFT_EXTERN void X(precompute_one_psi)(X(plan) *ths);\
 NFFT_EXTERN void X(finalize)(X(plan) *ths_plan);
 
-#ifdef HAVE_NNFFT
 /* nnfft api */
 NNFFT_DEFINE_API(NNFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
 NNFFT_DEFINE_API(NNFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
 NNFFT_DEFINE_API(NNFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
-#endif
 
 /* additional init flags */
 #define MALLOC_V         (1U<< 11)
@@ -468,12 +480,10 @@ NFFT_EXTERN void X(init_random_nodes_coeffs)(X(plan) *ths); \
 NFFT_EXTERN void X(init)(X(plan) *ths, int d, int J, int M, int m, unsigned flags); \
 NFFT_EXTERN void X(finalize)(X(plan) *ths);
 
-#ifdef HAVE_NSFFT
 /* nsfft api */
 NSFFT_DEFINE_API(NSFFT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
 NSFFT_DEFINE_API(NSFFT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
 NSFFT_DEFINE_API(NSFFT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
-#endif
 
 /* additional init flags */
 #define NSDFT            (1U<< 12)
@@ -524,12 +534,10 @@ void X(inh_3d_init_guru)(X(inh_3d_plan) *ths, int *N, int M, int *n, \
   int m, R sigma, unsigned nfft_flags, unsigned fftw_flags); \
 void X(inh_3d_finalize)(X(inh_3d_plan) *ths);
 
-#ifdef HAVE_MRI
   /* mri api */
 MRI_DEFINE_API(MRI_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
 MRI_DEFINE_API(MRI_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
 MRI_DEFINE_API(MRI_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
-#endif
 
 /* nfsft */
 
@@ -578,12 +586,10 @@ NFFT_EXTERN void X(adjoint)(X(plan)* plan); \
 NFFT_EXTERN void X(finalize)(X(plan) *plan); \
 NFFT_EXTERN void X(precompute_x)(X(plan) *plan);
 
-#ifdef HAVE_NFSFT
 /* nfsft api */
 NFSFT_DEFINE_API(NFSFT_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
 NFSFT_DEFINE_API(NFSFT_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,double,fftw_complex)
 NFSFT_DEFINE_API(NFSFT_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,long double,fftwl_complex)
-#endif
 
 /* init flags */
 #define NFSFT_NORMALIZED     (1U << 0)
@@ -638,7 +644,6 @@ NFFT_EXTERN void X(transposed)(X(set) set, const int m, C *x, \
   C *y, const int k_end, const unsigned int flags); \
 NFFT_EXTERN void X(finalize)(X(set) set);
 
-#ifdef HAVE_FPT
 /* fpt api */
 FPT_DEFINE_API(FPT_MANGLE_FLOAT,FFTW_MANGLE_FLOAT,float,fftwf_complex)
 FPT_DEFINE_API(FPT_MANGLE_DOUBLE,FFTW_MANGLE_DOUBLE,double,fftw_complex)
@@ -653,7 +658,6 @@ FPT_DEFINE_API(FPT_MANGLE_LONG_DOUBLE,FFTW_MANGLE_LONG_DOUBLE,long double,fftwl_
 /* transform flags */
 #define FPT_FUNCTION_VALUES     (1U << 5)
 #define FPT_AL_SYMMETRY         (1U << 6)
-#endif
 
 /* nfsoft*/
 
@@ -700,7 +704,6 @@ NFFT_EXTERN void X(adjoint)(X(plan) *plan_nfsoft); \
 NFFT_EXTERN void X(finalize)(X(plan) *plan); \
 NFFT_EXTERN int X(posN)(int n,int m, int B);
 
-#ifdef HAVE_NFSOFT
 /* nfsoft api */
 NFSOFT_DEFINE_API(NFSOFT_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,FPT_MANGLE_FLOAT,float,fftwf_complex)
 NFSOFT_DEFINE_API(NFSOFT_MANGLE_DOUBLE,NFFT_MANGLE_DOUBLE,FPT_MANGLE_DOUBLE,double,fftw_complex)
@@ -732,8 +735,6 @@ NFSOFT_DEFINE_API(NFSOFT_MANGLE_LONG_DOUBLE,NFFT_MANGLE_LONG_DOUBLE,FPT_MANGLE_L
 #define NFSOFT_INDEX_TWO(m,n,l,B) ((B+1)*(B+1)+(B+1)*(B+1)*(m+B)-((m-1)*m*(2*m-1)+(B+1)*(B+2)*(2*B+3))/6)+(posN(n,m,B))+(l-MAX(ABS(m),ABS(n)))
 #define NFSOFT_F_HAT_SIZE(B) (((B)+1)*(4*((B)+1)*((B)+1)-1)/3)
 
-#endif
-
 /*solver */
 
 /* name mangling macros */
@@ -800,10 +801,10 @@ typedef struct\
 } X(plan_double);\
 \
 NFFT_EXTERN void X(init_advanced_double)(X(plan_double)* ths, Y(mv_plan_double) *mv, unsigned flags);\
-NFFT_EXTERN void X(solver_init_double)(X(plan_double)* ths, Y(mv_plan_double) *mv);\
-NFFT_EXTERN void X(solver_before_loop_double)(X(plan_double)* ths);\
-NFFT_EXTERN void X(solver_loop_one_step_double)(X(plan_double) *ths);\
-NFFT_EXTERN void X(solver_finalize_double)(X(plan_double) *ths);
+NFFT_EXTERN void X(init_double)(X(plan_double)* ths, Y(mv_plan_double) *mv);\
+NFFT_EXTERN void X(before_loop_double)(X(plan_double)* ths);\
+NFFT_EXTERN void X(loop_one_step_double)(X(plan_double) *ths);\
+NFFT_EXTERN void X(finalize_double)(X(plan_double) *ths);
 
 /* solver api */
 SOLVER_DEFINE_API(SOLVER_MANGLE_FLOAT,NFFT_MANGLE_FLOAT,float,fftwf_complex)
diff --git a/include/nfft3conf.h b/include/nfft3conf.h
deleted file mode 100644
index 6eac835..0000000
--- a/include/nfft3conf.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* $Id$ */
-
-/* include/nfftconf.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to enable FPT module. */
-#define HAVE_FPT 1
-
-/* Define to enable MRI module. */
-#define HAVE_MRI 1
-
-/* Define to enable NFCT module. */
-#define HAVE_NFCT 1
-
-/* Define to enable NFSFT module. */
-#define HAVE_NFSFT 1
-
-/* Define to enable NFSOFT module. */
-#define HAVE_NFSOFT 1
-
-/* Define to enable NFST module. */
-#define HAVE_NFST 1
-
-/* Define to enable NNFFT module. */
-#define HAVE_NNFFT 1
-
-/* Define to enable NSFFT module. */
-#define HAVE_NSFFT 1
diff --git a/include/nfft3conf.h.in b/include/nfft3conf.h.in
deleted file mode 100644
index 4522e0a..0000000
--- a/include/nfft3conf.h.in
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* $Id$ */
-
-/* include/nfftconf.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to enable FPT module. */
- at HAVE_FPT@
-
-/* Define to enable MRI module. */
- at HAVE_MRI@
-
-/* Define to enable NFCT module. */
- at HAVE_NFCT@
-
-/* Define to enable NFSFT module. */
- at HAVE_NFSFT@
-
-/* Define to enable NFSOFT module. */
- at HAVE_NFSOFT@
-
-/* Define to enable NFST module. */
- at HAVE_NFST@
-
-/* Define to enable NNFFT module. */
- at HAVE_NNFFT@
-
-/* Define to enable NSFFT module. */
- at HAVE_NSFFT@
diff --git a/include/nfft3util.h b/include/nfft3util.h
deleted file mode 100644
index 4a5855c..0000000
--- a/include/nfft3util.h
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* $Id: nfft3util.h 3896 2012-10-10 12:19:26Z tovo $ */
-
-/*! \file nfft3util.h
- *  \brief Header file for utility functions used by the nfft3 library.
- */
-#ifndef __UTIL_H__
-#define __UTIL_H__
-
-/** Include header for FFTW3 library for its complex type. */
-#include <fftw3.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/*###########################################################################*/
-/*###########################################################################*/
-/*###########################################################################*/
-
-/**
- * @defgroup nfftutil Util - Auxilliary functions
- * @{
- *
- * This module implements frequently used utility functions.
- * In particular, this includes simple measurement of resources, evaluation of
- * window functions, vector routines for basic linear algebra tasks, and
- * computation of weights for the inverse transforms.
- *
- */
-
-/** Swapping of two vectors.
- */
-#define NFFT_SWAP_complex(x,y) {fftw_complex* NFFT_SWAP_temp__; \
-  NFFT_SWAP_temp__=(x); (x)=(y); (y)=NFFT_SWAP_temp__;}
-
-/** Swapping of two vectors.
- */
-#define NFFT_SWAP_double(x,y) {double* NFFT_SWAP_temp__; NFFT_SWAP_temp__=(x); \
-  (x)=(y); (y)=NFFT_SWAP_temp__;}
-
-/** Formerly known to be an irrational number.
- */
-#define PI 3.141592653589793238462643383279502884197169399375105820974944592
-#define PI2 6.283185307179586476925286766559005768394338798750211641949889185
-#define PI4 12.56637061435917295385057353311801153678867759750042328389977837
-
-/** Maximum of its two arguments.
- */
-#define NFFT_MAX(a,b) ((a)>(b)? (a) : (b))
-
-/** Mimimum of its two arguments.
- */
-#define NFFT_MIN(a,b) ((a)<(b)? (a) : (b))
-
-/* ######################################################################### */
-/* ########## Window function related ###################################### */
-/* ######################################################################### */
-
-/** To test the new one
- */
-double nfft_bspline_old(int k,double x,double *A);
-
-/** Computes the B-spline \f$M_{k,0}\left(x\right)\f$,
-    scratch is used for de Boor's scheme
- */
-double nfft_bspline(int k, double x, double *scratch);
-
-/* ######################################################################### */
-/* ########## Vector routines ############################################## */
-/* ######################################################################### */
-
-/** Computes integer \f$\prod_{t=0}^{d-1} v_t\f$.
- */
-int nfft_prod_int(int *vec, int d);
-
-/** Computes integer \f$\prod_{t=0}^{d-1} v_t-a\f$.
- */
-int nfst_prod_minus_a_int(int *vec, int a, int d);
-
-/** Computes \f$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}\f$.
- */
-int nfft_plain_loop(int *idx,int *N,int d);
-
-/** Computes double \f$\prod_{t=0}^{d-1} v_t\f$.
- */
-double nfft_prod_real(double *vec,int d);
-
-/** Computes the inner/dot product \f$x^H x\f$.
- */
-double nfft_dot_complex(fftw_complex* x, int n);
-
-/** Computes the inner/dot product \f$x^H x\f$.
- */
-double nfft_dot_double( double*  x, int n);
-
-/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
- */
-double nfft_dot_w_complex(fftw_complex* x, double* w, int n);
-
-/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
- */
-double nfft_dot_w_double( double*  x, double* w, int n);
-
-/** Computes the weighted inner/dot product
-    \f$x^H (w1\odot w2\odot w2 \odot x)\f$.
-*/
-double nfft_dot_w_w2_complex(fftw_complex* x, double* w, double* w2, int n);
-
-/** Computes the weighted inner/dot product
-    \f$x^H (w2\odot w2 \odot x)\f$.
- */
-double nfft_dot_w2_complex(fftw_complex* x, double* w2, int n);
-
-/** Copies \f$x \leftarrow y\f$.
- */
-void nfft_cp_complex(fftw_complex* x, fftw_complex* y, int n);
-
-/** Copies \f$x \leftarrow y\f$.
- */
-void nfft_cp_double( double*  x, double*  y, int n);
-
-/** Copies \f$x \leftarrow a y\f$.
- */
-void nfft_cp_a_complex(fftw_complex* x, double a, fftw_complex* y, int n);
-
-/** Copies \f$x \leftarrow a y\f$.
- */
-void nfft_cp_a_double(double *x, double a, double *y, int n);
-
-/** Copies \f$x \leftarrow w\odot y\f$.
- */
-void nfft_cp_w_complex(fftw_complex* x, double* w, fftw_complex* y, int n);
-
-/** Copies \f$x \leftarrow w\odot y\f$.
- */
-void nfft_cp_w_double( double*  x, double* w, double*  y, int n);
-
-/** Updates \f$x \leftarrow a x + y\f$.
- */
-void nfft_upd_axpy_complex(fftw_complex* x, double a, fftw_complex* y, int n);
-
-/** Updates \f$x \leftarrow a x + y\f$.
- */
-void nfft_upd_axpy_double( double*  x, double a, double*  y, int n);
-
-/** Updates \f$x \leftarrow x + a y\f$.
- */
-void nfft_upd_xpay_complex(fftw_complex* x, double a, fftw_complex* y, int n);
-
-/** Updates \f$x \leftarrow x + a y\f$.
- */
-void nfft_upd_xpay_double( double*  x, double a, double*  y, int n);
-
-/** Updates \f$x \leftarrow a x + b y\f$.
- */
-void nfft_upd_axpby_complex(fftw_complex* x, double a, fftw_complex* y, double b, int n);
-
-/** Updates \f$x \leftarrow a x + b y\f$.
- */
-void nfft_upd_axpby_double(  double* x, double a, double*  y, double b, int n);
-
-/** Updates \f$x \leftarrow x + a w\odot y\f$.
- */
-void nfft_upd_xpawy_complex(fftw_complex* x, double a, double* w, fftw_complex* y, int n);
-
-/** Updates \f$x \leftarrow x + a w\odot y\f$.
- */
-void nfft_upd_xpawy_double( double*  x, double a, double* w, double*  y, int n);
-
-/** Updates \f$x \leftarrow a x +  w\odot y\f$.
- */
-void nfft_upd_axpwy_complex(fftw_complex* x, double a, double* w, fftw_complex* y, int n);
-
-/** Updates \f$x \leftarrow a x +  w\odot y\f$.
- */
-void nfft_upd_axpwy_double( double*  x, double a, double* w, double*  y, int n);
-
-/** Swaps each half over N[d]/2.
- */
-void nfft_fftshift_complex(fftw_complex *x, int d, int* N);
-
-/** Prints a vector of integer numbers.
- */
-void nfft_vpr_int(int *x, int n, char *text);
-
-/** Prints a vector of doubles numbers.
- */
-void nfft_vpr_double(double *x, int n, const char *text);
-
-/** Prints a vector of complex numbers.
- */
-void nfft_vpr_complex(fftw_complex *x, int n, const char *text);
-
-/** Inits a vector of random complex numbers in \f$[0,1]\times[0,1]{\rm i}\f$.
- */
-void nfft_vrand_unit_complex(fftw_complex *x, int n);
-
-/** Inits a vector of random double numbers in \f$[-1/2,1/2]\f$.
- */
-void nfft_vrand_shifted_unit_double(double *x, int n);
-
-/* ######################################################################### */
-/* ########## Helpers for inverse transforms ############################### */
-/* ######################################################################### */
-
-/** Computes non periodic voronoi weights, assumes ordered nodes \f$x_j\f$ */
-void nfft_voronoi_weights_1d(double *w, double *x, int M);
-
-/** Computes voronoi weights for nodes on the sphere S^2. */
-void nfft_voronoi_weights_S2(double *w, double *xi, int M);
-
-/** Computes the damping factor for the modified Fejer kernel, ie
-    \f$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)\f$
- */
-double nfft_modified_fejer(int N,int kk);
-
-/** Computes the damping factor for the modified Jackson kernel.
- */
-double nfft_modified_jackson2(int N,int kk);
-
-/** Computes the damping factor for the modified generalised Jackson kernel.
- */
-double nfft_modified_jackson4(int N,int kk);
-
-/** Computes the damping factor for the modified Sobolev kernel.
- */
-double nfft_modified_sobolev(double mu,int kk);
-
-/** Computes the damping factor for the modified multiquadric kernel.
- */
-double nfft_modified_multiquadric(double mu,double c,int kk);
-
-int nfft_smbi(const double x, const double alpha, const int nb, const int ize,
-  double *b);
-
-double nfft_drand48(void);
-
-void nfft_srand48(long int seed);
-
-/** Radix sort for node indices.
- */
-void nfft_sort_node_indices_radix_lsdf(int n, int *keys0, int *keys1, int rhigh);
-
-/** Radix sort for node indices.
- */
-void nfft_sort_node_indices_radix_msdf(int n, int *keys0, int *keys1, int rhigh);
-
-int nfft_get_num_threads(void);
-
-#ifdef _OPENMP
-int nfft_get_omp_num_threads(void);
-#endif
-
-#ifdef __cplusplus
-}  /* extern "C" */
-#endif /* __cplusplus */
-
-/** @}
- */
-#endif
diff --git a/include/solver_adjoint.h b/include/solver_adjoint.h
new file mode 100644
index 0000000..6663169
--- /dev/null
+++ b/include/solver_adjoint.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id$ */
+
+/*! \file solver_adjoint.h
+ *  \brief Header file for adjoint solver.
+ */
+#ifndef SOLVER_ADJOINT_H
+#define SOLVER_ADJOINT_H
+
+/** Include NFFT3 header. */
+#include "nfft3.h"
+
+/*
+ * Macro for mangling an adjoint transform.
+ * temporary added 01.2007 by tim becker
+ */
+                                                                               \
+#define MACRO_SOLVER_ADJOINT_PLAN(MV, FLT, FLT_TYPE)                           \
+                                                                               \
+/** Structure for an adjoint transform plan  */                                \
+typedef struct                                                                 \
+{                                                                              \
+  MV ## _plan *mv;                      /**< matrix vector multiplication    */\
+  unsigned flags;                       /**< iteration type                  */\
+                                                                               \
+  double *w;                            /**< weighting factors               */\
+  double *w_hat;                        /**< damping factors                 */\
+                                                                               \
+  FLT_TYPE *y_hat;                      /**< right hand side, samples        */\
+                                                                               \
+  FLT_TYPE *f_iter;                     /**< iterative solution              */\
+  FLT_TYPE *r_hat_iter;                 /**< iterated residual vector        */\
+  FLT_TYPE *z_iter;                     /**< residual of normal equation of    \
+                                             first kind                      */\
+  FLT_TYPE *p_iter;                     /**< search direction                */\
+  FLT_TYPE *v_hat_iter;                 /**< residual vector update          */\
+                                                                               \
+  double alpha_iter;                    /**< step size for search direction  */\
+  double beta_iter;                     /**< step size for search correction */\
+                                                                               \
+  double dot_r_hat_iter;                /**< weighted dotproduct of r_iter   */\
+  double dot_r_hat_iter_old;            /**< previous dot_r_iter             */\
+  double dot_z_iter;                    /**< weighted dotproduct of            \
+                                             z_hat_iter                      */\
+  double dot_z_iter_old;                /**< previous dot_z_hat_iter         */\
+  double dot_p_iter;                    /**< weighted dotproduct of            \
+                                             p_hat_iter                      */\
+  double dot_v_hat_iter;                /**< weighted dotproduct of v_iter   */\
+} i ## MV ## _adjoint_plan;                                                    \
+                                                                               \
+/** Simple initialisation. */                                                  \
+void i ## MV ## _adjoint_init(adjoint ## MV ## _plan *ths, MV ## _plan *mv);   \
+/** Advanced initialisation. */                                               \
+void i ## MV ## _adjoint_init_advanced(adjoint ## MV ## _plan *ths, MV ## _plan,\
+*mv, unsigned adjoint ## MV ## _flags);                                       \
+/** Setting up residuals before the actual iteration.                       */\
+void i ## MV ## _adjoint_before_loop(adjoint ## MV ## _plan *ths);              \
+/** Doing one step in the iteration.                                        */\
+void i ## MV ## _adjoint_loop_one_step(adjoint ## MV ## _plan *ths);            \
+/** Destroys the plan for the adjoint transform.                            */\
+void i ## MV ## _adjoint_finalize(adjoint ## MV ## _plan *ths);                 \
+
+/** TODO: different solvers */
+MACRO_SOLVER_ADJOINT_PLAN(nfsft, complex, double _Complex)
+MACRO_SOLVER_ADJOINT_PLAN(nfft, complex, double _Complex)
+MACRO_SOLVER_ADJOINT_PLAN(nfct, double, double)
+MACRO_SOLVER_ADJOINT_PLAN(nfst, double, double)
+MACRO_SOLVER_ADJOINT_PLAN(nnfft, complex, double _Complex)
+MACRO_SOLVER_ADJOINT_PLAN(mri_inh_2d1d, complex, double _Complex)
+MACRO_SOLVER_ADJOINT_PLAN(mri_inh_3d, complex, double _Complex)
+
+#endif
+/* solver_adjoint.h */
diff --git a/include/ticks.h.in b/include/ticks.h.in
index 292e677..567bbd0 100644
--- a/include/ticks.h.in
+++ b/include/ticks.h.in
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
diff --git a/kernel/Makefile.am b/kernel/Makefile.am
index 6d45fa4..0f94d60 100644
--- a/kernel/Makefile.am
+++ b/kernel/Makefile.am
@@ -94,7 +94,7 @@ libkernel_la_LIBADD = util/libutil.la nfft/libnfft.la $(LIB_NFCT) $(LIB_NFST) \
 if HAVE_THREADS
   libkernel_threads_la_SOURCES =
 
-  libkernel_threads_la_LIBADD = util/libutil.la nfft/libnfft_threads.la $(LIB_NFCT) $(LIB_NFST) \
+  libkernel_threads_la_LIBADD = util/libutil_threads.la nfft/libnfft_threads.la $(LIB_NFCT) $(LIB_NFST) \
     $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT_THREADS) $(LIB_NFSFT_THREADS) $(LIB_NFSOFT) \
     solver/libsolver.la
 
diff --git a/kernel/Makefile.in b/kernel/Makefile.in
deleted file mode 100644
index ca66153..0000000
--- a/kernel/Makefile.in
+++ /dev/null
@@ -1,762 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
- at HAVE_NFCT_TRUE@am__DEPENDENCIES_1 = nfct/libnfct.la
- at HAVE_NFST_TRUE@am__DEPENDENCIES_2 = nfst/libnfst.la
- at HAVE_NNFFT_TRUE@am__DEPENDENCIES_3 = nnfft/libnnfft.la
- at HAVE_NSFFT_TRUE@am__DEPENDENCIES_4 = nsfft/libnsfft.la
- at HAVE_MRI_TRUE@am__DEPENDENCIES_5 = mri/libmri.la
- at HAVE_FPT_TRUE@am__DEPENDENCIES_6 = fpt/libfpt.la
- at HAVE_NFSFT_TRUE@am__DEPENDENCIES_7 = nfsft/libnfsft.la
- at HAVE_NFSOFT_TRUE@am__DEPENDENCIES_8 = nfsoft/libnfsoft.la
-libkernel_la_DEPENDENCIES = util/libutil.la nfft/libnfft.la \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
-	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
-	$(am__DEPENDENCIES_5) $(am__DEPENDENCIES_6) \
-	$(am__DEPENDENCIES_7) $(am__DEPENDENCIES_8) \
-	solver/libsolver.la
-am_libkernel_la_OBJECTS =
-libkernel_la_OBJECTS = $(am_libkernel_la_OBJECTS)
- at HAVE_FPT_TRUE@@HAVE_THREADS_TRUE at am__DEPENDENCIES_9 =  \
- at HAVE_FPT_TRUE@@HAVE_THREADS_TRUE@	fpt/libfpt_threads.la
- at HAVE_NFSFT_TRUE@@HAVE_THREADS_TRUE at am__DEPENDENCIES_10 =  \
- at HAVE_NFSFT_TRUE@@HAVE_THREADS_TRUE@	nfsft/libnfsft_threads.la
- at HAVE_THREADS_TRUE@libkernel_threads_la_DEPENDENCIES =  \
- at HAVE_THREADS_TRUE@	util/libutil.la nfft/libnfft_threads.la \
- at HAVE_THREADS_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
- at HAVE_THREADS_TRUE@	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
- at HAVE_THREADS_TRUE@	$(am__DEPENDENCIES_5) $(am__DEPENDENCIES_9) \
- at HAVE_THREADS_TRUE@	$(am__DEPENDENCIES_10) \
- at HAVE_THREADS_TRUE@	$(am__DEPENDENCIES_8) solver/libsolver.la
-am_libkernel_threads_la_OBJECTS =
-libkernel_threads_la_OBJECTS = $(am_libkernel_threads_la_OBJECTS)
-libkernel_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(libkernel_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
- at HAVE_THREADS_TRUE@am_libkernel_threads_la_rpath =
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libkernel_la_SOURCES) $(libkernel_threads_la_SOURCES)
-DIST_SOURCES = $(libkernel_la_SOURCES) $(libkernel_threads_la_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = util nfft nfct nfst nnfft nsfft mri fpt nfsft nfsoft \
-	solver .
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
- at HAVE_NFCT_FALSE@LIB_NFCT = 
- at HAVE_NFCT_TRUE@LIB_NFCT = nfct/libnfct.la
- at HAVE_NFCT_TRUE@DIR_NFCT = nfct
- at HAVE_NFST_FALSE@LIB_NFST = 
- at HAVE_NFST_TRUE@LIB_NFST = nfst/libnfst.la
- at HAVE_NFST_FALSE@DIR_NFST = 
- at HAVE_NFST_TRUE@DIR_NFST = nfst
- at HAVE_NFSFT_FALSE@LIB_NFSFT = 
- at HAVE_NFSFT_TRUE@LIB_NFSFT = nfsft/libnfsft.la
- at HAVE_NFSFT_FALSE@DIR_NFSFT = 
- at HAVE_NFSFT_TRUE@DIR_NFSFT = nfsft
- at HAVE_NFSFT_FALSE@LIB_NFSFT_THREADS = 
- at HAVE_NFSFT_TRUE@@HAVE_THREADS_FALSE at LIB_NFSFT_THREADS = 
- at HAVE_NFSFT_TRUE@@HAVE_THREADS_TRUE at LIB_NFSFT_THREADS = nfsft/libnfsft_threads.la
- at HAVE_NFSOFT_FALSE@LIB_NFSOFT = 
- at HAVE_NFSOFT_TRUE@LIB_NFSOFT = nfsoft/libnfsoft.la
- at HAVE_NFSOFT_FALSE@DIR_NFSOFT = 
- at HAVE_NFSOFT_TRUE@DIR_NFSOFT = nfsoft
- at HAVE_NNFFT_FALSE@LIB_NNFFT = 
- at HAVE_NNFFT_TRUE@LIB_NNFFT = nnfft/libnnfft.la
- at HAVE_NNFFT_FALSE@DIR_NNFFT = 
- at HAVE_NNFFT_TRUE@DIR_NNFFT = nnfft
- at HAVE_NSFFT_FALSE@LIB_NSFFT = 
- at HAVE_NSFFT_TRUE@LIB_NSFFT = nsfft/libnsfft.la
- at HAVE_NSFFT_FALSE@DIR_NSFFT = 
- at HAVE_NSFFT_TRUE@DIR_NSFFT = nsfft
- at HAVE_MRI_FALSE@LIB_MRI = 
- at HAVE_MRI_TRUE@LIB_MRI = mri/libmri.la
- at HAVE_MRI_FALSE@DIR_MRI = 
- at HAVE_MRI_TRUE@DIR_MRI = mri
- at HAVE_FPT_FALSE@LIB_FPT = 
- at HAVE_FPT_TRUE@LIB_FPT = fpt/libfpt.la
- at HAVE_FPT_FALSE@DIR_FPT = 
- at HAVE_FPT_TRUE@DIR_FPT = fpt
- at HAVE_FPT_FALSE@LIB_FPT_THREADS = 
- at HAVE_FPT_TRUE@@HAVE_THREADS_FALSE at LIB_FPT_THREADS = 
- at HAVE_FPT_TRUE@@HAVE_THREADS_TRUE at LIB_FPT_THREADS = fpt/libfpt_threads.la
-SUBDIRS = util nfft $(DIR_NFCT) $(DIR_NFST) $(DIR_NNFFT) $(DIR_NSFFT) \
-  $(DIR_MRI) $(DIR_FPT) $(DIR_NFSFT) $(DIR_NFSOFT) solver .
-
- at HAVE_THREADS_FALSE@LIBKERNEL_THREADS_LA = 
- at HAVE_THREADS_TRUE@LIBKERNEL_THREADS_LA = libkernel_threads.la
-noinst_LTLIBRARIES = libkernel.la $(LIBKERNEL_THREADS_LA)
-libkernel_la_SOURCES = 
-libkernel_la_LIBADD = util/libutil.la nfft/libnfft.la $(LIB_NFCT) $(LIB_NFST) \
-  $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT) $(LIB_NFSFT) $(LIB_NFSOFT) \
-  solver/libsolver.la
-
- at HAVE_THREADS_TRUE@libkernel_threads_la_SOURCES = 
- at HAVE_THREADS_TRUE@libkernel_threads_la_LIBADD = util/libutil.la nfft/libnfft_threads.la $(LIB_NFCT) $(LIB_NFST) \
- at HAVE_THREADS_TRUE@    $(LIB_NNFFT) $(LIB_NSFFT) $(LIB_MRI) $(LIB_FPT_THREADS) $(LIB_NFSFT_THREADS) $(LIB_NFSOFT) \
- at HAVE_THREADS_TRUE@    solver/libsolver.la
-
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libkernel_threads_la_CFLAGS = $(OPENMP_CFLAGS)
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libkernel.la: $(libkernel_la_OBJECTS) $(libkernel_la_DEPENDENCIES) $(EXTRA_libkernel_la_DEPENDENCIES) 
-	$(LINK)  $(libkernel_la_OBJECTS) $(libkernel_la_LIBADD) $(LIBS)
-libkernel_threads.la: $(libkernel_threads_la_OBJECTS) $(libkernel_threads_la_DEPENDENCIES) $(EXTRA_libkernel_threads_la_DEPENDENCIES) 
-	$(libkernel_threads_la_LINK) $(am_libkernel_threads_la_rpath) $(libkernel_threads_la_OBJECTS) $(libkernel_threads_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(LTLIBRARIES)
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
-	cscopelist-recursive ctags-recursive install-am install-strip \
-	tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \
-	ctags-recursive distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/fpt/Makefile.am b/kernel/fpt/Makefile.am
index e011d08..a613cca 100644
--- a/kernel/fpt/Makefile.am
+++ b/kernel/fpt/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/kernel/fpt/Makefile.in b/kernel/fpt/Makefile.in
deleted file mode 100644
index 0360ca1..0000000
--- a/kernel/fpt/Makefile.in
+++ /dev/null
@@ -1,583 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
-
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/fpt
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libfpt_la_LIBADD =
-am_libfpt_la_OBJECTS = fpt.lo
-libfpt_la_OBJECTS = $(am_libfpt_la_OBJECTS)
-libfpt_threads_la_LIBADD =
-am__libfpt_threads_la_SOURCES_DIST = fpt.c
- at HAVE_THREADS_TRUE@am_libfpt_threads_la_OBJECTS =  \
- at HAVE_THREADS_TRUE@	libfpt_threads_la-fpt.lo
-libfpt_threads_la_OBJECTS = $(am_libfpt_threads_la_OBJECTS)
-libfpt_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(libfpt_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-	-o $@
- at HAVE_THREADS_TRUE@am_libfpt_threads_la_rpath =
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libfpt_la_SOURCES) $(libfpt_threads_la_SOURCES)
-DIST_SOURCES = $(libfpt_la_SOURCES) \
-	$(am__libfpt_threads_la_SOURCES_DIST)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-HEADERS = $(noinst_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
- at HAVE_THREADS_FALSE@LIBFPT_THREADS_LA = 
- at HAVE_THREADS_TRUE@LIBFPT_THREADS_LA = libfpt_threads.la
-noinst_LTLIBRARIES = libfpt.la $(LIBFPT_THREADS_LA)
-libfpt_la_SOURCES = fpt.c
-noinst_HEADERS = fpt.h
- at HAVE_THREADS_TRUE@libfpt_threads_la_SOURCES = fpt.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libfpt_threads_la_CFLAGS = $(OPENMP_CFLAGS)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/fpt/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/fpt/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libfpt.la: $(libfpt_la_OBJECTS) $(libfpt_la_DEPENDENCIES) $(EXTRA_libfpt_la_DEPENDENCIES) 
-	$(LINK)  $(libfpt_la_OBJECTS) $(libfpt_la_LIBADD) $(LIBS)
-libfpt_threads.la: $(libfpt_threads_la_OBJECTS) $(libfpt_threads_la_DEPENDENCIES) $(EXTRA_libfpt_threads_la_DEPENDENCIES) 
-	$(libfpt_threads_la_LINK) $(am_libfpt_threads_la_rpath) $(libfpt_threads_la_OBJECTS) $(libfpt_threads_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fpt.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libfpt_threads_la-fpt.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-libfpt_threads_la-fpt.lo: fpt.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfpt_threads_la_CFLAGS) $(CFLAGS) -MT libfpt_threads_la-fpt.lo -MD -MP -MF $(DEPDIR)/libfpt_threads_la-fpt.Tpo -c -o libfpt_threads_la-fpt.lo `test -f 'fpt.c' || echo '$(srcdir)/'`fpt.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfpt_threads_la-fpt.Tpo $(DEPDIR)/libfpt_threads_la-fpt.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fpt.c' object='libfpt_threads_la-fpt.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfpt_threads_la_CFLAGS) $(CFLAGS) -c -o libfpt_threads_la-fpt.lo `test -f 'fpt.c' || echo '$(srcdir)/'`fpt.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/fpt/fpt.c b/kernel/fpt/fpt.c
index 13d179a..5afdf0a 100644
--- a/kernel/fpt/fpt.c
+++ b/kernel/fpt/fpt.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: fpt.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /**
  * \file fpt.c
@@ -35,16 +35,15 @@
 #endif
 
 #include "nfft3.h"
-#include "nfft3util.h"
 #include "infft.h"
 
 /* Macros for index calculation. */
 
 /** Minimum degree at top of a cascade */
-#define K_START_TILDE(x,y) (NFFT_MAX(NFFT_MIN(x,y-2),0))
+#define K_START_TILDE(x,y) (MAX(MIN(x,y-2),0))
 
 /** Maximum degree at top of a cascade */
-#define K_END_TILDE(x,y) NFFT_MIN(x,y-1)
+#define K_END_TILDE(x,y) MIN(x,y-1)
 
 /** Index of first block of four functions at level */
 #define FIRST_L(x,y) (LRINT(floor((x)/(double)y)))
@@ -765,7 +764,7 @@ fpt_set fpt_init(const int M, const int t, const unsigned int flags)
   int m;
   int k;
 #ifdef _OPENMP
-  int nthreads = nfft_get_omp_num_threads();
+  int nthreads = X(get_num_threads)();
 #endif
 
   /* Allocate memory for new DPT set. */
@@ -803,7 +802,7 @@ fpt_set fpt_init(const int M, const int t, const unsigned int flags)
     set->xcvecs[tau-1] = (double*) nfft_malloc(plength*sizeof(double));
     for (k = 0; k < plength; k++)
     {
-      set->xcvecs[tau-1][k] = cos(((k+0.5)*PI)/plength);
+      set->xcvecs[tau-1][k] = cos(((k+0.5)*KPI)/plength);
     }
     plength = plength << 1;
   }
@@ -1195,7 +1194,7 @@ void fpt_trafo_direct(fpt_set set, const int m, const double _Complex *x, double
     /* Fill array with Chebyshev nodes. */
     for (j = 0; j <= k_end; j++)
     {
-      set->xc_slow[j] = cos((PI*(j+0.5))/(k_end+1));
+      set->xc_slow[j] = cos((KPI*(j+0.5))/(k_end+1));
         //fprintf(stderr, "x[%4d] = %e.\n", j, set->xc_slow[j]);  
     }
 
@@ -1289,7 +1288,7 @@ void fpt_trafo(fpt_set set, const int m, const double _Complex *x, double _Compl
   if (flags & FPT_FUNCTION_VALUES)
   {
 #ifdef _OPENMP
-    int nthreads = nfft_get_omp_num_threads();
+    int nthreads = X(get_num_threads)();
 #pragma omp critical (nfft_omp_critical_fftw_plan)
 {
     fftw_plan_with_nthreads(nthreads);
@@ -1503,7 +1502,9 @@ void fpt_trafo(fpt_set set, const int m, const double _Complex *x, double _Compl
   {
     y[0] *= 2.0;
     fftw_execute_r2r(plan,(double*)y,(double*)y);
-#pragma omp critical (nfft_omp_critical_fftw_plan)
+#ifdef _OPENMP
+    #pragma omp critical (nfft_omp_critical_fftw_plan)
+#endif
     fftw_destroy_plan(plan);
     for (k = 0; k <= k_end; k++)
     {
@@ -1533,7 +1534,7 @@ void fpt_transposed_direct(fpt_set set, const int m, double _Complex *x,
   {
     for (j = 0; j <= k_end; j++)
     {
-      set->xc_slow[j] = cos((PI*(j+0.5))/(k_end+1));
+      set->xc_slow[j] = cos((KPI*(j+0.5))/(k_end+1));
     }
 
     eval_sum_clenshaw_transposed(k_end, k_end, set->result, set->xc_slow,
@@ -1621,7 +1622,7 @@ void fpt_transposed(fpt_set set, const int m, double _Complex *x,
   if (flags & FPT_FUNCTION_VALUES)
   {
 #ifdef _OPENMP
-    int nthreads = nfft_get_omp_num_threads();
+    int nthreads = X(get_num_threads)();
 #pragma omp critical (nfft_omp_critical_fftw_plan)
 {
     fftw_plan_with_nthreads(nthreads);
@@ -1632,7 +1633,9 @@ void fpt_transposed(fpt_set set, const int m, double _Complex *x,
 }
 #endif
     fftw_execute_r2r(plan,(double*)y,(double*)set->result);
-#pragma omp critical (nfft_omp_critical_fftw_plan)
+#ifdef _OPENMP
+    #pragma omp critical (nfft_omp_critical_fftw_plan)
+#endif
     fftw_destroy_plan(plan);
     for (k = 0; k <= k_end; k++)
     {
@@ -1894,7 +1897,9 @@ void fpt_finalize(fpt_set set)
     /* Free FFTW plans. */
     for(tau = 0; tau < set->t/*-1*/; tau++)
     {
+#ifdef _OPENMP
 #pragma omp critical (nfft_omp_critical_fftw_plan)
+#endif
 {
       fftw_destroy_plan(set->plans_dct3[tau]);
       fftw_destroy_plan(set->plans_dct2[tau]);
diff --git a/kernel/fpt/fpt.h b/kernel/fpt/fpt.h
index fdb5d04..f10fd3a 100644
--- a/kernel/fpt/fpt.h
+++ b/kernel/fpt/fpt.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: fpt.h 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id$ */
 
 #ifndef _FPT_H_
 #define _FPT_H_
diff --git a/kernel/mri/Makefile.in b/kernel/mri/Makefile.in
deleted file mode 100644
index 9b3b6d8..0000000
--- a/kernel/mri/Makefile.in
+++ /dev/null
@@ -1,553 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/mri
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libmri_la_LIBADD =
-am_libmri_la_OBJECTS = mri.lo
-libmri_la_OBJECTS = $(am_libmri_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libmri_la_SOURCES)
-DIST_SOURCES = $(libmri_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-noinst_LTLIBRARIES = libmri.la
-libmri_la_SOURCES = mri.c 
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/mri/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/mri/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libmri.la: $(libmri_la_OBJECTS) $(libmri_la_DEPENDENCIES) $(EXTRA_libmri_la_DEPENDENCIES) 
-	$(LINK)  $(libmri_la_OBJECTS) $(libmri_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mri.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/mri/mri.c b/kernel/mri/mri.c
index 2cdbab3..c117ba8 100644
--- a/kernel/mri/mri.c
+++ b/kernel/mri/mri.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: mri.c 3965 2013-04-22 12:12:31Z tovo $ */
+/* $Id$ */
 
 #include "config.h"
 
@@ -25,7 +25,6 @@
 #ifdef HAVE_COMPLEX_H
 #include <complex.h>
 #endif
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -80,16 +79,16 @@ void mri_inh_2d1d_trafo(mri_inh_2d1d_plan *that) {
 
   for(l=-ths->n[0]/2;l<=ths->n[0]/2;l++) {
     for(j=0;j<that->N_total;j++)
-      that->f_hat[j]*=cexp(-2*PI*_Complex_I*that->w[j]*((double)l))/PHI_HUT(ths->n[0]*that->w[j],0);
+      that->f_hat[j]*=cexp(-2*KPI*_Complex_I*that->w[j]*((double)l))/PHI_HUT(ths->n[0], ths->n[0]*that->w[j],0);
     nfft_trafo(&that->plan);
     for(j=0;j<that->M_total;j++){
       /* PHI has compact support */
 			if(fabs(that->t[j]-((double)l)/((double)ths->n[0]))<that->plan.m/((double)ths->n[0]))
       {
-        double phi_val = PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);
+        double phi_val = PHI(ths->n[0],that->t[j]-((double)l)/((double)ths->n[0]),0);
         f[j]+=that->f[j]*phi_val;
 // the line below causes internal compiler error for gcc 4.7.1
-//        f[j]+=that->f[j]*PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);
+//        f[j]+=that->f[j]*PHI(ths->n[0],that->t[j]-((double)l)/((double)ths->n[0]),0);
       }
     }
     for(j=0;j<that->N_total;j++)
@@ -132,20 +131,20 @@ void mri_inh_2d1d_adjoint(mri_inh_2d1d_plan *that) {
     for(j=0;j<that->M_total;j++) {
       /* PHI has compact support */
       if(fabs(that->t[j]-((double)l)/((double)ths->n[0]))<that->plan.m/((double)ths->n[0]))
-        that->f[j]*=PHI(that->t[j]-((double)l)/((double)ths->n[0]),0);
+        that->f[j]*=PHI(ths->n[0],that->t[j]-((double)l)/((double)ths->n[0]),0);
       else
       	that->f[j]=0.0;
     }
     nfft_adjoint(&that->plan);
     for(j=0;j<that->N_total;j++)
-      f_hat[j]+=that->f_hat[j]*cexp(2*PI*_Complex_I*that->w[j]*((double)l));
+      f_hat[j]+=that->f_hat[j]*cexp(2*KPI*_Complex_I*that->w[j]*((double)l));
     for(j=0;j<that->M_total;j++)
       that->f[j]=f[j];
   }
 
   for(j=0;j<that->N_total;j++)
   {
-    f_hat[j] /= PHI_HUT(ths->n[0]*that->w[j],0);
+    f_hat[j] /= PHI_HUT(ths->n[0],ths->n[0]*that->w[j],0);
   }
 
   nfft_free(that->plan.f_hat);
@@ -206,7 +205,7 @@ void mri_inh_3d_trafo(mri_inh_3d_plan *that) {
     {
       /* PHI has compact support */
       if(fabs(that->w[j]-((double)l)/((double)ths->n[0]))<ths->m/((double)ths->n[0]))
-        that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]= that->f_hat[j]*PHI(that->w[j]-((double)l)/((double)ths->n[0]),0);
+        that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]= that->f_hat[j]*PHI(ths->n[0],that->w[j]-((double)l)/((double)ths->n[0]),0);
       else
 	      that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]=0.0;
     }
@@ -216,7 +215,7 @@ void mri_inh_3d_trafo(mri_inh_3d_plan *that) {
 
   for(j=0;j<that->M_total;j++)
   {
-    that->f[j] /= PHI_HUT(ths->n[0]*that->plan.x[3*j+2],0);
+    that->f[j] /= PHI_HUT(ths->n[0],ths->n[0]*that->plan.x[3*j+2],0);
   }
 
 	WINDOW_HELP_FINALIZE
@@ -233,7 +232,7 @@ void mri_inh_3d_adjoint(mri_inh_3d_plan *that) {
 
   for(j=0;j<that->M_total;j++)
   {
-    that->f[j] /= PHI_HUT(ths->n[0]*that->plan.x[3*j+2],0);
+    that->f[j] /= PHI_HUT(ths->n[0],ths->n[0]*that->plan.x[3*j+2],0);
   }
 
   nfft_adjoint(&that->plan);
@@ -244,7 +243,7 @@ void mri_inh_3d_adjoint(mri_inh_3d_plan *that) {
     {
       /* PHI has compact support */
       if(fabs(that->w[j]-((double)l)/((double)ths->n[0]))<ths->m/((double)ths->n[0]))
-        that->f_hat[j]+= that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]*PHI(that->w[j]-((double)l)/((double)ths->n[0]),0);
+        that->f_hat[j]+= that->plan.f_hat[j*ths->n[0]+(l+ths->n[0]/2)]*PHI(ths->n[0],that->w[j]-((double)l)/((double)ths->n[0]),0);
     }
   }
 
diff --git a/kernel/nfct/Makefile.in b/kernel/nfct/Makefile.in
deleted file mode 100644
index b9fc453..0000000
--- a/kernel/nfct/Makefile.in
+++ /dev/null
@@ -1,553 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/nfct
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libnfct_la_LIBADD =
-am_libnfct_la_OBJECTS = nfct.lo
-libnfct_la_OBJECTS = $(am_libnfct_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libnfct_la_SOURCES)
-DIST_SOURCES = $(libnfct_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-noinst_LTLIBRARIES = libnfct.la
-libnfct_la_SOURCES = nfct.c 
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfct/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/nfct/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libnfct.la: $(libnfct_la_OBJECTS) $(libnfct_la_DEPENDENCIES) $(EXTRA_libnfct_la_DEPENDENCIES) 
-	$(LINK)  $(libnfct_la_OBJECTS) $(libnfct_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfct.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/nfct/nfct.c b/kernel/nfct/nfct.c
index a6fc00d..ab9a3f6 100644
--- a/kernel/nfct/nfct.c
+++ b/kernel/nfct/nfct.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,109 +16,64 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nfct.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
-/* Nonequispaced fast cosine transform
- * Author: Steffen Klatt 2004-2006, Jens Keiner 2010 */
+/* Nonequispaced fast cosine transform */
 
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
+/* Author: Steffen Klatt 2004-2006, Jens Keiner 2010 */
 
-#include "nfft3util.h"
+/* configure header */
+#include "config.h"
+
+/* complex datatype (maybe) */
+#ifdef HAVE_COMPLEX_H
+#include<complex.h>
+#endif
+
+/* NFFT headers */
 #include "nfft3.h"
 #include "infft.h"
 
-#undef X
-#if defined(NFFT_SINGLE)
-#define X(name) CONCAT(nfctf_, name)
-#elif defined(NFFT_LDOUBLE)
-#define X(name) CONCAT(nfctl_, name)
-#else
-#define X(name) CONCAT(nfct_, name)
+#ifdef _OPENMP
+#include <omp.h>
 #endif
 
-static inline int fftw_2N(int n)
-{
-  return 2 * (n - 1);
-}
+#ifdef OMP_ASSERT
+#include <assert.h>
+#endif
 
-static inline int fftw_2N_rev(int n)
-{
-  return (LRINT(K(0.5) * n) + 1);
-}
+#undef X
+#define X(name) NFCT(name)
 
-static inline int prod_int(int *vec, int d)
+/** Compute aggregated product of integer array. */
+static inline INT intprod(const INT *vec, const INT a, const INT d)
 {
-  int t, prod = 1;
+  INT t, p;
 
+  p = 1;
   for (t = 0; t < d; t++)
-    prod *= vec[t];
+    p *= vec[t] - a;
 
-  return prod;
+  return p;
 }
 
 /* handy shortcuts */
-#define NFCT_DEFAULT_FLAGS PRE_PHI_HUT | PRE_PSI | MALLOC_X | MALLOC_F_HAT | \
-  MALLOC_F | FFTW_INIT | FFT_OUT_OF_PLACE
-
+#define BASE(x) COS(x)
+#define NN(x) (x - 1)
+#define OFFSET 0
+#define FOURIER_TRAFO FFTW_REDFT00
 #define FFTW_DEFAULT_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT
 
-#define NFCT_SUMMANDS (2 * ths->m + 2)
 #define NODE(p,r) (ths->x[(p) * ths->d + (r)])
 
-#define MACRO_ndct_init_result_trafo \
-  memset(f, 0, ths->M_total * sizeof(R));
-#define MACRO_ndct_init_result_adjoint \
-  memset(f_hat, 0, ths->N_total * sizeof(R));
-
-#define MACRO_nfct_D_init_result_A \
-  memset(g_hat, 0, prod_int(ths->n, ths->d) * sizeof(R));
-#define MACRO_nfct_D_init_result_T \
-  memset(f_hat, 0, ths->N_total * sizeof(R));
-
-#define MACRO_nfct_B_init_result_A \
-  memset(f, 0, ths->M_total * sizeof(R));
-#define MACRO_nfct_B_init_result_T \
-  memset(g, 0, prod_int(ths->n, ths->d) * sizeof(R));
-
-#define NFCT_PRE_WINFUN(d) ths->N[d] = 2 * ths->N[d]; \
-  ths->n[d] = fftw_2N(ths->n[d]);
-
-#define NFCT_POST_WINFUN(d) ths->N[d] = LRINT(K(0.5) * ths->N[d]); \
-  ths->n[d] = fftw_2N_rev(ths->n[d]);
-
-#define NFCT_WINDOW_HELP_INIT WINDOW_HELP_INIT
-
-R X(phi_hut)(X(plan) *ths, int k, int d)
-{
-  NFCT_PRE_WINFUN(d);
-  R phi_hut_tmp = PHI_HUT(k, d);
-  NFCT_POST_WINFUN(d);
-
-  return phi_hut_tmp;
-}
-
-R X(phi)(X(plan) *ths, R x, int d)
-{
-  NFCT_PRE_WINFUN(d);
-  R phi_tmp = PHI(x, d);
-  NFCT_POST_WINFUN(d);
-
-  return phi_tmp;
-}
+#define MACRO_with_FG_PSI fg_psi[t][lj[t]]
+#define MACRO_with_PRE_PSI ths->psi[(j * ths->d + t) * (2 * ths->m + 2) + lj[t]]
+#define MACRO_without_PRE_PSI PHI((2 * NN(ths->n[t])), ((ths->x[(j) * ths->d + t]) \
+  - ((R)(lj[t] + u[t])) / (K(2.0) * ((R)NN(ths->n[t])))), t)
+#define MACRO_compute_PSI PHI((2 * NN(ths->n[t])), (NODE(j,t) - ((R)(lj[t] + u[t])) / (K(2.0) * ((R)NN(ths->n[t])))), t)
 
-#define MACRO_with_cos_vec cos_vec[t][ka[t]]
-#define MACRO_without_cos_vec COS(K(2.0) * KPI * ka[t] * NODE(j,t))
-
-#define MACRO_with_PRE_PHI_HUT ths->c_phi_inv[t][kg[t]];
-#define MACRO_compute_PHI_HUT_INV (K(1.0) / (X(phi_hut)(ths, kg[t], t)))
-
-#define MACRO_with_PRE_PSI ths->psi[(j * ths->d + t) * NFCT_SUMMANDS + lc[t]]
-#define MACRO_compute_PSI X(phi)(ths, NODE(j,t) - ((R)(lc[t] + lb[t])) / (K(2.0)*((R)(ths->n[t])-K(1.0))/*(R)(fftw_2N(ths->n[t]))*/), t)
-
-/** direct computation of non equispaced cosine transforms
+/**
+ * Direct computation of non equispaced cosine transforms
  *  nfct_trafo_direct,  nfct_adjoint_direct
  *  require O(M N^d) arithemtical operations
  *
@@ -132,788 +87,1112 @@ R X(phi)(X(plan) *ths, R x, int d)
  * for k in I_N^d
  *  f_hat[k] = sum_{j=0}^{M-1} f[j] * cos(2 (pi) k x[j])
  */
+void X(trafo_direct)(const X(plan) *ths)
+{
+  R *f_hat = (R*)ths->f_hat, *f = (R*)ths->f;
 
-#define MACRO_ndct_malloc__cos_vec \
-  R **cos_vec; \
-  cos_vec = (R**)Y(malloc)(ths->d * sizeof(R*)); \
-  for (t = 0; t < ths->d; t++) \
-    cos_vec[t] = (R*)Y(malloc)(ths->N[t] * sizeof(R));
-
-#define MACRO_ndct_free__cos_vec \
-{ \
-  /* free allocated memory */ \
-  for (t = 0; t < ths->d; t++) \
-    Y(free)(cos_vec[t]); \
-  Y(free)(cos_vec); \
-}
+  memset(f, 0, (size_t)(ths->M_total) * sizeof(R));
 
-#define MACRO_ndct_init__cos_vec \
-{ \
-  for(t = 0; t < ths->d; t++) \
-  { \
-    cos_vec[t][0] = K(1.0); \
-    cos_vec[t][1] = COS(K(2.0) * KPI * NODE(j,t)); \
-    for (k = 2; k < ths->N[t]; k++) \
-      cos_vec[t][k] = K(2.0) * cos_vec[t][1] * cos_vec[t][k-1] - \
-        cos_vec[t][k-2]; \
-  } \
+  if (ths->d == 1)
+  {
+    /* specialize for univariate case, rationale: faster */
+    INT j;
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(j)
+#endif
+    for (j = 0; j < ths->M_total; j++)
+    {
+      INT k_L;
+      for (k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        R omega = K2PI * ((R)(k_L + OFFSET)) * ths->x[j];
+        f[j] += f_hat[k_L] * BASE(omega);
+      }
+    }
+  }
+  else
+  {
+    /* multivariate case */
+    INT j;
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(j)
+#endif
+    for (j = 0; j < ths->M_total; j++)
+    {
+      R x[ths->d], omega, Omega[ths->d + 1];
+      INT t, t2, k_L, k[ths->d];
+      Omega[0] = K(1.0);
+      for (t = 0; t < ths->d; t++)
+      {
+        k[t] = OFFSET;
+        x[t] = K2PI * ths->x[j * ths->d + t];
+        Omega[t+1] = BASE(((R)(k[t])) * x[t]) * Omega[t];
+      }
+      omega = Omega[ths->d];
+
+      for (k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        f[j] += f_hat[k_L] * omega;
+        {
+          for (t = ths->d - 1; (t >= 1) && (k[t] == (ths->N[t] - 1)); t--)
+            k[t] = OFFSET;
+
+          k[t]++;
+
+          for (t2 = t; t2 < ths->d; t2++)
+            Omega[t2+1] = BASE(((R)(k[t2])) * x[t2]) * Omega[t2];
+
+          omega = Omega[ths->d];
+        }
+      }
+    }
+  }
 }
 
-#define MACRO_ndct_init__k__cos_k(which_one) \
-{ \
-  cos_k[0] = K(1.0); \
-  for (t = 0; t < ths->d; t++) \
-    ka[t] = 0; \
-\
-  for (t = 0; t < ths->d; t++) \
-  { \
-    cos_k[t+1] = cos_k[t] * MACRO_ ##which_one; \
-  } \
-}
+void X(adjoint_direct)(const X(plan) *ths)
+{
+  R *f_hat = (R*)ths->f_hat, *f = (R*)ths->f;
 
-#define MACRO_ndct_count__k__cos_k(which_one) \
-{ \
-  ka[ths->d-1]++; \
-  i = ths->d - 1; \
-  while ((ka[i] == ths->N[i]) && (i > 0)) \
-  { \
-    ka[i - 1]++; \
-    ka[i] = 0; \
-    i--; \
-  } \
-  for (t = i; t < ths->d; t++) \
-    cos_k[t+1] = cos_k[t] * MACRO_ ##which_one; \
-}
+  memset(f_hat, 0, (size_t)(ths->N_total) * sizeof(R));
 
-#define MACRO_ndct_compute__trafo \
-{ \
-  f[j] += f_hat[k] * cos_k[ths->d]; \
+  if (ths->d == 1)
+  {
+    /* specialize for univariate case, rationale: faster */
+#ifdef _OPENMP
+      INT k_L;
+      #pragma omp parallel for default(shared) private(k_L)
+      for (k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        INT j;
+        for (j = 0; j < ths->M_total; j++)
+        {
+          R omega = K2PI * ((R)(k_L + OFFSET)) * ths->x[j];
+          f_hat[k_L] += f[j] * BASE(omega);
+        }
+      }
+#else
+      INT j;
+      for (j = 0; j < ths->M_total; j++)
+      {
+        INT k_L;
+        for (k_L = 0; k_L < ths->N_total; k_L++)
+        {
+          R omega = K2PI * ((R)(k_L + OFFSET)) * ths->x[j];
+          f_hat[k_L] += f[j] * BASE(omega);
+        }
+      }
+#endif
+  }
+  else
+  {
+    /* multivariate case */
+    INT j, k_L;
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(j, k_L)
+    for (k_L = 0; k_L < ths->N_total; k_L++)
+    {
+      INT k[ths->d], k_temp, t;
+
+      k_temp = k_L;
+
+      for (t = ths->d - 1; t >= 0; t--)
+      {
+        k[t] = k_temp % ths->N[t];
+        k_temp /= ths->N[t];
+      }
+
+      for (j = 0; j < ths->M_total; j++)
+      {
+        R omega = K(1.0);
+        for (t = 0; t < ths->d; t++)
+          omega *= BASE(K2PI * (k[t] + OFFSET) * ths->x[j * ths->d + t]);
+        f_hat[k_L] += f[j] * omega;
+      }
+    }
+#else
+    for (j = 0; j < ths->M_total; j++)
+    {
+      R x[ths->d], omega, Omega[ths->d+1];
+      INT t, t2, k[ths->d];
+      Omega[0] = K(1.0);
+      for (t = 0; t < ths->d; t++)
+      {
+        k[t] = OFFSET;
+        x[t] = K2PI * ths->x[j * ths->d + t];
+        Omega[t+1] = BASE(((R)(k[t])) * x[t]) * Omega[t];
+      }
+      omega = Omega[ths->d];
+      for (k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        f_hat[k_L] += f[j] * omega;
+
+        for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t] - 1); t--)
+          k[t] = OFFSET;
+
+        k[t]++;
+
+        for (t2 = t; t2 < ths->d; t2++)
+          Omega[t2+1] = BASE(((R)(k[t2])) * x[t2]) * Omega[t2];
+
+        omega = Omega[ths->d];
+      }
+    }
+#endif
+  }
 }
 
-#define MACRO_ndct_compute__adjoint \
-{ \
-  f_hat[k] += f[j] * cos_k[ths->d]; \
-}
+/** fast computation of non equispaced cosine transforms
+ *  require O(N^d log(N) + M) arithemtical operations
+ *
+ * fast computation of the nfct_trafo, formula (1.1)
+ * nfct_trafo:
+ * for j=0,...,M-1
+ *  f[j] = sum_{k in I_N^d} f_hat[k] * cos(2 (pi) k x[j])
+ *
+ * direct computation of the nfct_adjoint, formula (1.2)
+ * nfct_adjoint:
+ * for k in I_N^d
+ *  f_hat[k] = sum_{j=0}^{M-1} f[j] * cos(2 (pi) k x[j])
+ */
 
-/* slow (trafo) transform */
-#define MACRO_ndct(which_one) \
-  void X(which_one ## _direct) (X(plan) *ths) \
-  { \
-    int j, k, t, i; \
-    int ka[ths->d]; \
-    R cos_k[ths->d+1]; \
-    R *f = ths->f; \
-    R *f_hat = ths->f_hat; \
-\
-    MACRO_ndct_init_result_ ## which_one; \
-    if (ths->d == 1) \
-      for (j = 0; j < ths->M_total; j++) \
-      { \
-        for (k = 0; k < ths->N[0]; k++) \
-        { \
-          cos_k[ths->d] = COS(K(2.0) * KPI * k * NODE(j,0)); \
-          MACRO_ndct_compute__ ## which_one; \
-        } \
-      } \
-    else \
-    { \
-      /* fast nfct_trafo_direct */ \
-      MACRO_ndct_malloc__cos_vec; \
-\
-      for (j = 0; j < ths->M_total; j++) \
-      { \
-        MACRO_ndct_init__cos_vec; \
-        MACRO_ndct_init__k__cos_k(with_cos_vec); \
-\
-        for (k = 0; k < ths->N_total; k++) \
-        { \
-          MACRO_ndct_compute__ ## which_one; \
-          MACRO_ndct_count__k__cos_k(with_cos_vec); \
-        } \
-      } \
-      MACRO_ndct_free__cos_vec; \
-    } \
-} /* ndct_{trafo, adjoint} */
+/** macros and small sub routines for the fast transforms
+ */
 
-MACRO_ndct(trafo)
-MACRO_ndct(adjoint)
+/** computes 2m+2 indices for the matrix B
+ */
+static inline void uo(const X(plan) *ths, const INT j, INT *up, INT *op,
+  const INT act_dim)
+{
+  const R xj = ths->x[j * ths->d + act_dim];
+  INT c = LRINT(xj * (2 * NN(ths->n[(act_dim)])));
 
-/** fast computation of non equispaced cosine transforms
-*  require O(N^d log(N) + M) arithemtical operations
-*
-* fast computation of the nfct_trafo, formula (1.1)
-* nfct_trafo:
-* for j=0,...,M-1
-*  f[j] = sum_{k in I_N^d} f_hat[k] * cos(2 (pi) k x[j])
-*
-* direct computation of the nfct_adjoint, formula (1.2)
-* nfct_adjoint:
-* for k in I_N^d
-*  f_hat[k] = sum_{j=0}^{M-1} f[j] * cos(2 (pi) k x[j])
-*/
-
-#define MACRO_nfct__lower_boundary(j,act_dim) \
-{ \
-  lb[(act_dim)] = \
-    LRINT(NODE((j),(act_dim)) * fftw_2N(ths->n[(act_dim)])) - ths->m; \
+  (*up) = c - (ths->m);
+  (*op) = c + 1 + (ths->m);
 }
 
-#define MACRO_nfct_D_compute_A \
+#define MACRO_D_compute_A \
 { \
   g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d]; \
 }
 
-#define MACRO_nfct_D_compute_T \
+#define MACRO_D_compute_T \
 { \
   f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d]; \
 }
 
-#define MACRO_init__kg \
-{ \
-  for (t = 0; t < ths->d; t++) \
-    kg[t] = 0; \
-  i = 0; \
-}
+#define MACRO_D_init_result_A memset(g_hat, 0, (size_t)(ths->n_total) * sizeof(R));
+
+#define MACRO_D_init_result_T memset(f_hat, 0, (size_t)(ths->N_total) * sizeof(R));
 
-#define MACRO_count__kg \
+#define MACRO_with_PRE_PHI_HUT ths->c_phi_inv[t][kg[t]]
+
+#define MACRO_compute_PHI_HUT_INV (K(1.0) / (PHI_HUT((2 * NN(ths->n[t])), kg[t] + OFFSET, t)))
+
+#define MACRO_init_k_ks \
 { \
-\
-  kg[ths->d - 1]++; \
-  i = ths->d - 1; \
-  while ((kg[i] == ths->N[i]) && (i > 0)) \
+  for (t = 0; t < ths->d; t++) \
   { \
-    kg[i - 1]++; \
-    kg[i] = 0; \
-    i--; \
+    kg[t] = 0; \
   } \
+  i = 0; \
 }
 
-#define MACRO_update__phi_inv_k__kg_plain(what_kind, which_phi) \
+#define MACRO_update_c_phi_inv_k(what_kind, which_phi) \
 { \
   for (t = i; t < ths->d; t++) \
   { \
-    MACRO__c_phi_inv_k__ ## what_kind(which_phi); \
+    MACRO_update_c_phi_inv_k_ ## what_kind(which_phi); \
     kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t]; \
   } \
 }
 
-#define MACRO__c_phi_inv_k__A(which_phi) \
+#define MACRO_update_c_phi_inv_k_A(which_phi) \
 { \
-  if (kg[t] == 0) \
-  { \
-    c_phi_inv_k[t+1] = c_phi_inv_k[t] * MACRO_ ## which_phi; \
-  } \
-  else \
-  { \
-    c_phi_inv_k[t+1] = K(0.5) * c_phi_inv_k[t] * MACRO_ ## which_phi; \
-  } \
+  c_phi_inv_k[t+1] = (kg[t] == 0 ? K(1.0) : K(0.5)) * c_phi_inv_k[t] * MACRO_ ## which_phi; \
 }
 
-#define MACRO__c_phi_inv_k__T(which_phi) \
+#define MACRO_update_c_phi_inv_k_T(which_phi) \
 { \
   c_phi_inv_k[t+1] = c_phi_inv_k[t] * MACRO_ ## which_phi; \
 }
 
-#define MACRO_nfct_D(which_one) \
+#define MACRO_count_k_ks \
+{ \
+  kg[ths->d - 1]++; \
+  i = ths->d - 1; \
+\
+  while ((kg[i] == ths->N[i]) && (i > 0)) \
+  { \
+    kg[i - 1]++; \
+    kg[i] = 0; \
+    i--; \
+  } \
+}
+
+/* sub routines for the fast transforms  matrix vector multiplication with D, D^T */
+#define MACRO_D(which_one) \
 static inline void D_ ## which_one (X(plan) *ths) \
 { \
-  int k_L; /* plain index */ \
-  int i, t; \
-  int kg[ths->d]; /* multi index in g_hat,c_phi */ \
-  R c_phi_inv_k[ths->d+1]; /* postfix product of PHI_HUT_INV */ \
-  int kg_plain[ths->d+1]; /* postfix plain index */ \
   R *g_hat, *f_hat; /* local copy */ \
+  R c_phi_inv_k[ths->d+1]; /* postfix product of PHI_HUT */ \
+  INT t; /* index dimensions */ \
+  INT i; \
+  INT k_L; /* plain index */ \
+  INT kg[ths->d]; /* multi index in g_hat */ \
+  INT kg_plain[ths->d+1]; /* postfix plain index */ \
 \
-  g_hat = ths->g_hat; \
-  f_hat = ths->f_hat; \
-\
-  MACRO_nfct_D_init_result_ ## which_one \
+  f_hat = (R*)ths->f_hat; g_hat = (R*)ths->g_hat; \
+  MACRO_D_init_result_ ## which_one; \
 \
   c_phi_inv_k[0] = K(1.0); \
   kg_plain[0] = 0; \
 \
-  MACRO_init__kg; \
+  MACRO_init_k_ks; \
 \
-  if (ths->nfct_flags & PRE_PHI_HUT) \
+  if (ths->flags & PRE_PHI_HUT) \
+  { \
     for (k_L = 0; k_L < ths->N_total; k_L++) \
     { \
-      MACRO_update__phi_inv_k__kg_plain(which_one, with_PRE_PHI_HUT); \
-      MACRO_nfct_D_compute_ ## which_one; \
-      MACRO_count__kg; \
-    } /* for (k_L) */ \
+      MACRO_update_c_phi_inv_k(which_one, with_PRE_PHI_HUT); \
+      MACRO_D_compute_ ## which_one; \
+      MACRO_count_k_ks; \
+    } \
+  } \
   else \
+  { \
     for (k_L = 0; k_L < ths->N_total; k_L++) \
     { \
-      MACRO_update__phi_inv_k__kg_plain(which_one,compute_PHI_HUT_INV); \
-      MACRO_nfct_D_compute_ ## which_one; \
-      MACRO_count__kg; \
-    } /* for(k_L) */ \
-} /* nfct_D */
-
-MACRO_nfct_D(A)
-MACRO_nfct_D(T)
-
-/** sub routines for the fast transforms
-*  matrix vector multiplication with \f$B, B^{\rm T}\f$
-*/
-#define MACRO_nfct_B_PRE_FULL_PSI_compute_A \
-{ \
-  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \
-}
-
-#define MACRO_nfct_B_PRE_FULL_PSI_compute_T \
-{ \
-  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \
+      MACRO_update_c_phi_inv_k(which_one,compute_PHI_HUT_INV); \
+      MACRO_D_compute_ ## which_one; \
+      MACRO_count_k_ks; \
+    } \
+  } \
 }
 
-#define MACRO_nfct_B_compute_A \
-{ \
-  (*fj) += phi_tilde[ths->d] * g[lg_plain[ths->d]]; \
-}
+MACRO_D(A)
+MACRO_D(T)
 
-#define MACRO_nfct_B_compute_T \
-{ \
-  g[lg_plain[ths->d]] += phi_tilde[ths->d] * (*fj); \
-}
+/* sub routines for the fast transforms matrix vector multiplication with B, B^T */
+#define MACRO_B_init_result_A memset(f, 0, (size_t)(ths->M_total) * sizeof(R));
+#define MACRO_B_init_result_T memset(g, 0, (size_t)(ths->n_total) * sizeof(R));
 
-#define MACRO_compute_lg_offset__count_lg(i0) \
+#define MACRO_B_PRE_FULL_PSI_compute_A \
 { \
-  /* determine index in g-array corresponding to lb[(i0)] */ \
-  if (lb[(i0)] < 0) \
-    lg_offset[(i0)] = \
-      (lb[(i0)] % fftw_2N(ths->n[(i0)])) + fftw_2N(ths->n[(i0)]); \
-  else \
-    lg_offset[(i0)] = lb[(i0)] % (fftw_2N(ths->n[(i0)])); \
-    if (lg_offset[(i0)] >= ths->n[(i0)]) \
-      lg_offset[(i0)] = -(fftw_2N(ths->n[(i0)]) - lg_offset[(i0)]); \
+  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \
 }
 
-#define MACRO_set__lg__to__lg_offset \
+#define MACRO_B_PRE_FULL_PSI_compute_T \
 { \
-  if (lg_offset[i] <= 0) \
-  { \
-    lg[i] = -lg_offset[i]; \
-    count_lg[i] = -1; \
-  } \
-  else \
+  R factor = K(1.0); \
+  INT d = ths->psi_index_g[ix]; \
+  for (t = ths->d - 1; t >= 0; t--) \
   { \
-    lg[i] = +lg_offset[i]; \
-    count_lg[i] = +1; \
+    INT m = d % ths->n[t]; \
+    if (m != 0 && m != ths->n[t] - 1) \
+      factor *= K(0.5); \
+    d = d / ths->n[t]; \
   } \
+  g[ths->psi_index_g[ix]] += factor * ths->psi[ix] * (*fj); \
 }
 
-#define MACRO_count__lg(dim) \
+#define MACRO_B_compute_A \
 { \
-  /* turn around if we hit one of the boundaries */ \
-  if ((lg[(dim)] == 0) || (lg[(dim)] == ths->n[(dim)]-1)) \
-    count_lg[(dim)] *= -1; \
-  /* move array index */ \
-  lg[(dim)] += count_lg[(dim)]; \
+  (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]]; \
 }
 
-#define MACRO_init_lb_lg_lc \
+#define MACRO_B_compute_T \
 { \
-  for (i = 0; i < ths->d; i++) \
-  { \
-    MACRO_nfct__lower_boundary(j, i); \
-    MACRO_compute_lg_offset__count_lg(i); \
-    MACRO_set__lg__to__lg_offset; \
-    /* counter for lg */ \
-    lc[i] = 0; \
-   } \
-   i = 0; \
+  g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj); \
 }
 
-#define MACRO_count__lg_lc \
+#define MACRO_init_uo_l_lj_t \
 { \
-  MACRO_count__lg(ths->d-1); \
-  lc[ths->d - 1]++; \
-  i = ths->d - 1; \
-  while ((lc[i] == NFCT_SUMMANDS) && (i > 0)) \
+  for (t2 = 0; t2 < ths->d; t2++) \
   { \
-    lc[i - 1]++; \
-    lc[i] = 0; \
-    /* ansonsten lg[i-1] verschieben */ \
-    MACRO_count__lg(i - 1); \
-    /* lg[i] = anfangswert */ \
-    MACRO_set__lg__to__lg_offset; \
-    i--; \
-  } \
+    uo(ths, j, &u[t2], &o[t2], t2); \
+    \
+    /* determine index in g-array corresponding to u[(t2)] */ \
+    if (u[(t2)] < 0) \
+      lg_offset[(t2)] = \
+        (u[(t2)] % (2 * NN(ths->n[(t2)]))) + (2 * NN(ths->n[(t2)])); \
+    else \
+      lg_offset[(t2)] = u[(t2)] % (2 * NN(ths->n[(t2)])); \
+      if (lg_offset[(t2)] > NN(ths->n[(t2)])) \
+        lg_offset[(t2)] = -(2 * NN(ths->n[(t2)]) - lg_offset[(t2)]); \
+    \
+    if (lg_offset[t2] <= 0) \
+    { \
+      l[t2] = -lg_offset[t2]; \
+      count_lg[t2] = -1; \
+    } \
+    else \
+    { \
+      l[t2] = +lg_offset[t2]; \
+      count_lg[t2] = +1; \
+    } \
+ \
+    lj[t2] = 0; \
+   } \
+   t2 = 0; \
 }
 
-#define  MACRO_update_phi_tilde_lg_plain(which_one, which_psi) \
+#define FOO_A K(1.0)
+
+#define FOO_T ((l[t] == 0 || l[t] == ths->n[t] - 1) ? K(1.0) : K(0.5))
+
+#define MACRO_update_phi_prod_ll_plain(which_one,which_psi) \
 { \
-  for (t = i; t < ths->d; t++) \
+  for (t = t2; t < ths->d; t++) \
   { \
-    MACRO__phi_tilde__ ## which_one(which_psi); \
-    lg_plain[t+1]  = lg_plain[t]  * ths->n[t] + lg[t]; \
+    phi_prod[t+1] = (FOO_ ## which_one) * phi_prod[t] * (MACRO_ ## which_psi); \
+    ll_plain[t+1]  = ll_plain[t] * ths->n[t] + l[t]; \
   } \
 }
 
-#define MACRO__phi_tilde__A(which_psi) \
+#define MACRO_count_uo_l_lj_t \
 { \
-  phi_tilde[t+1] = phi_tilde[t] * MACRO_ ## which_psi; \
-}
-
-#define MACRO__phi_tilde__T(which_psi) \
-{ \
-  if(lg[t] == 0 || lg[t] == ths->n[t] - 1) \
-  { \
-    phi_tilde[t+1] = phi_tilde[t] * MACRO_ ## which_psi; \
-  } \
-  else \
+  /* turn around if we hit one of the boundaries */ \
+  if ((l[(ths->d-1)] == 0) || (l[(ths->d-1)] == NN(ths->n[(ths->d-1)]))) \
+    count_lg[(ths->d-1)] *= -1; \
+ \
+  /* move array index */ \
+  l[(ths->d-1)] += count_lg[(ths->d-1)]; \
+ \
+  lj[ths->d - 1]++; \
+  t2 = ths->d - 1; \
+ \
+  while ((lj[t2] == (2 * ths->m + 2)) && (t2 > 0)) \
   { \
-    phi_tilde[t+1] = K(0.5) * phi_tilde[t] * MACRO_ ## which_psi; \
+    lj[t2 - 1]++; \
+    lj[t2] = 0; \
+    /* ansonsten lg[i-1] verschieben */ \
+ \
+    /* turn around if we hit one of the boundaries */ \
+    if ((l[(t2 - 1)] == 0) || (l[(t2 - 1)] == NN(ths->n[(t2 - 1)]))) \
+      count_lg[(t2 - 1)] *= -1; \
+    /* move array index */ \
+    l[(t2 - 1)] += count_lg[(t2 - 1)]; \
+ \
+    /* lg[i] = anfangswert */ \
+    if (lg_offset[t2] <= 0) \
+    { \
+      l[t2] = -lg_offset[t2]; \
+      count_lg[t2] = -1; \
+    } \
+    else \
+    { \
+      l[t2] = +lg_offset[t2]; \
+      count_lg[t2] = +1; \
+    } \
+ \
+    t2--; \
   } \
 }
 
-#define MACRO_nfct_B(which_one) \
-static inline void B_ ## which_one (nfct_plan *ths) \
-{ /* MACRO_nfct_B */ \
-  int lb[ths->d]; /* multi band with respect to x_j */ \
-  int j, t, i; /* index nodes, help vars */ \
-  int lprod, l_L, ix; /* index one row of B */ \
-  int lc[ths->d]; /* multi index 0<=lc<2m+2 */ \
-  int lg[ths->d]; /* real index of g in array */ \
-  int lg_offset[ths->d]; /* offset in g according to u */ \
-  int count_lg[ths->d]; /* count summands (2m+2) */ \
-  int lg_plain[ths->d+1]; /* index of g in multi_array */ \
+#define MACRO_B(which_one) \
+static inline void B_ ## which_one (X(plan) *ths) \
+{ \
+  INT lprod; /* 'regular bandwidth' of matrix B  */ \
+  INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */ \
+  INT t, t2; /* index dimensions */ \
+  INT j; /* index nodes */ \
+  INT l_L, ix; /* index one row of B */ \
+  INT l[ths->d]; /* multi index u<=l<=o (real index of g in array) */ \
+  INT lj[ths->d]; /* multi index 0<=lc<2m+2 */ \
+  INT ll_plain[ths->d+1]; /* postfix plain index in g */ \
+  R phi_prod[ths->d+1]; /* postfix product of PHI */ \
   R *f, *g; /* local copy */ \
-  R phi_tilde[ths->d+1]; /* holds values for psi */ \
-  R *fj; /* pointer to final result */ \
+  R *fj; /* local copy */ \
+  R y[ths->d]; \
+  R fg_psi[ths->d][2*ths->m+2]; \
+  R fg_exp_l[ths->d][2*ths->m+2]; \
+  INT l_fg,lj_fg; \
+  R tmpEXP1, tmpEXP2, tmpEXP2sq, tmp1, tmp2, tmp3; \
+  R ip_w; \
+  INT ip_u; \
+  INT ip_s = ths->K/(ths->m+2); \
+  INT lg_offset[ths->d]; /* offset in g according to u */ \
+  INT count_lg[ths->d]; /* count summands (2m+2) */ \
 \
-  f = ths->f; g = ths->g; \
+  f = (R*)ths->f; g = (R*)ths->g; \
 \
-  MACRO_nfct_B_init_result_ ## which_one \
+  MACRO_B_init_result_ ## which_one \
 \
-  /* both flags are set */ \
-  if ((ths->nfct_flags & PRE_PSI)&&(ths->nfct_flags & PRE_FULL_PSI)) \
+  if (ths->flags & PRE_FULL_PSI) \
   { \
-    for (ix = 0, j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+    for (ix = 0, j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
       for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \
       { \
-        MACRO_nfct_B_PRE_FULL_PSI_compute_ ## which_one; \
+        MACRO_B_PRE_FULL_PSI_compute_ ## which_one; \
       } \
+    } \
+    return; \
   } \
-  else \
-  { \
-    phi_tilde[0] = K(1.0); \
-    lg_plain[0]  = 0; \
 \
-    for (t = 0, lprod = 1; t < ths->d; t++) \
-      lprod *= NFCT_SUMMANDS; \
+  phi_prod[0] = K(1.0); \
+  ll_plain[0] = 0; \
 \
-    /* PRE_PSI flag is set */ \
-    if (ths->nfct_flags & PRE_PSI) \
-      for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
-        { \
-          MACRO_init_lb_lg_lc; \
-          for (l_L = 0; l_L < lprod; l_L++) \
-          { \
-            MACRO_update_phi_tilde_lg_plain(which_one, with_PRE_PSI); \
-            MACRO_nfct_B_compute_ ## which_one; \
-            MACRO_count__lg_lc; \
-          } /* for(l_L) */ \
-        } /* for(j) */ \
+  for (t = 0, lprod = 1; t < ths->d; t++) \
+    lprod *= (2 * ths->m + 2); \
 \
-    /* no PSI flag is set */ \
-    else \
-      for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+  if (ths->flags & PRE_PSI) \
+  { \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+ \
+      for (l_L = 0; l_L < lprod; l_L++) \
       { \
-        MACRO_init_lb_lg_lc; \
-        for (l_L = 0; l_L < lprod; l_L++) \
+        MACRO_update_phi_prod_ll_plain(which_one, with_PRE_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      } /* for(l_L) */ \
+    } /* for(j) */ \
+    return; \
+  } /* if(PRE_PSI) */ \
+ \
+  if (ths->flags & PRE_FG_PSI) \
+  { \
+    for (t = 0; t < ths->d; t++) \
+    { \
+      tmpEXP2 = EXP(K(-1.0) / ths->b[t]); \
+      tmpEXP2sq = tmpEXP2 * tmpEXP2; \
+      tmp2 = K(1.0); \
+      tmp3 = K(1.0); \
+      fg_exp_l[t][0] = K(1.0); \
+ \
+      for (lj_fg = 1; lj_fg <= (2 * ths->m + 2); lj_fg++) \
+      { \
+        tmp3 = tmp2 * tmpEXP2; \
+        tmp2 *= tmpEXP2sq; \
+        fg_exp_l[t][lj_fg] = fg_exp_l[t][lj_fg-1] * tmp3; \
+      } \
+    } \
+ \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+ \
+      for (t = 0; t < ths->d; t++) \
+      { \
+        fg_psi[t][0] = ths->psi[2 * (j * ths->d + t)]; \
+        tmpEXP1 = ths->psi[2 * (j * ths->d + t) + 1]; \
+        tmp1 = K(1.0); \
+ \
+        for (l_fg = u[t] + 1, lj_fg = 1; l_fg <= o[t]; l_fg++, lj_fg++) \
         { \
-          MACRO_update_phi_tilde_lg_plain(which_one,compute_PSI); \
-          MACRO_nfct_B_compute_ ## which_one; \
-          MACRO_count__lg_lc; \
-        } /* for (l_L) */ \
-      } /* for (j) */ \
-  } /* else (PRE_PSI && FULL_PRE_PSI) */ \
-} /* nfct_B */
-
-MACRO_nfct_B(A)
-MACRO_nfct_B(T)
-
-/* more memory, but faster */
-#define MACRO_nfct_full_psi(which_one) \
-static inline void full_psi__ ## which_one(nfct_plan *ths) \
-{ \
-  int t, i; /* index over all dimensions */ \
-  int j; /* node index */ \
-  int l_L; /* plain index 0 <= l_L < lprod */ \
-  int lc[ths->d]; /* multi index 0<=lj<u+o+1 */ \
-  int lg_plain[ths->d+1]; /* postfix plain index */ \
-  int count_lg[ths->d]; \
-  int lg_offset[ths->d]; \
-  int lg[ths->d]; \
-  int lprod; /* 'bandwidth' of matrix B */ \
-  int lb[ths->d]; /* depends on x_j */ \
-\
-  R phi_tilde[ths->d+1]; \
-  R eps = ths->nfct_full_psi_eps; \
-\
-  int *index_g, *index_f; \
-  R *new_psi; \
-  int ix, ix_old, size_psi; \
-\
-  phi_tilde[0] = K(1.0); \
-  lg_plain[0]  =   0; \
+          tmp1 *= tmpEXP1; \
+          fg_psi[t][lj_fg] = fg_psi[t][0] * tmp1 * fg_exp_l[t][lj_fg]; \
+        } \
+      } \
+ \
+      for (l_L= 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_prod_ll_plain(which_one, with_FG_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      } \
+    } \
+    return; \
+  } \
  \
-  if (ths->nfct_flags & PRE_PSI) \
+  if (ths->flags & FG_PSI) \
   { \
-    size_psi = ths->M_total; \
-    index_f = (int*)Y(malloc)(ths->M_total  * sizeof(int)); \
-    index_g = (int*)Y(malloc)(size_psi * sizeof(int)); \
-    new_psi = (R*)Y(malloc)(size_psi * sizeof(R)); \
-\
-    for (t = 0,lprod = 1; t < ths->d; t++) \
+    for (t = 0; t < ths->d; t++) \
     { \
-      lprod *= NFCT_SUMMANDS; \
-      eps *= nfct_phi(ths, K(0.0), t); \
+      tmpEXP2 = EXP(K(-1.0) / ths->b[t]); \
+      tmpEXP2sq = tmpEXP2 * tmpEXP2; \
+      tmp2 = K(1.0); \
+      tmp3 = K(1.0); \
+      fg_exp_l[t][0] = K(1.0); \
+      for (lj_fg = 1; lj_fg <= (2 * ths->m + 2); lj_fg++) \
+      { \
+        tmp3 = tmp2 * tmpEXP2; \
+        tmp2 *= tmpEXP2sq; \
+        fg_exp_l[t][lj_fg] = fg_exp_l[t][lj_fg-1] * tmp3; \
+      } \
     } \
-\
-    for (ix = 0, ix_old = 0, j = 0; j < ths->M_total; j++) \
+ \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
     { \
-      MACRO_init_lb_lg_lc; \
-\
+      MACRO_init_uo_l_lj_t; \
+ \
+      for (t = 0; t < ths->d; t++) \
+      { \
+        fg_psi[t][0] = (PHI((2 * NN(ths->n[t])), (ths->x[j*ths->d+t] - ((R)u[t])/(2 * NN(ths->n[t]))),(t)));\
+ \
+        tmpEXP1 = EXP(K(2.0) * ((2 * NN(ths->n[t])) * ths->x[j * ths->d + t] - u[t]) / ths->b[t]); \
+        tmp1 = K(1.0); \
+        for (l_fg = u[t] + 1, lj_fg = 1; l_fg <= o[t]; l_fg++, lj_fg++) \
+        { \
+          tmp1 *= tmpEXP1; \
+          fg_psi[t][lj_fg] = fg_psi[t][0] * tmp1 * fg_exp_l[t][lj_fg]; \
+        } \
+      } \
+  \
       for (l_L = 0; l_L < lprod; l_L++) \
       { \
-        MACRO_update_phi_tilde_lg_plain(which_one, with_PRE_PSI); \
-\
-        if (phi_tilde[ths->d] > eps) \
+        MACRO_update_phi_prod_ll_plain(which_one, with_FG_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      } \
+    } \
+    return; \
+  } \
+ \
+  if (ths->flags & PRE_LIN_PSI) \
+  { \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+  \
+      for (t = 0; t < ths->d; t++) \
+      { \
+        y[t] = (((2 * NN(ths->n[t])) * ths->x[j * ths->d + t] - (R)u[t]) \
+                * ((R)ths->K))/(ths->m + 2); \
+        ip_u  = LRINT(FLOOR(y[t])); \
+        ip_w  = y[t]-ip_u; \
+        for (l_fg = u[t], lj_fg = 0; l_fg <= o[t]; l_fg++, lj_fg++) \
         { \
-          index_g[ix] = lg_plain[ths->d]; \
-          new_psi[ix] = phi_tilde[ths->d]; \
-\
-          ix++; \
-          if (ix == size_psi) \
-          { \
-            size_psi += ths->M_total; \
-            index_g = (int*)realloc(index_g, size_psi * sizeof(int)); \
-            new_psi = (R*)realloc(new_psi, size_psi * sizeof(R)); \
-          } \
+          fg_psi[t][lj_fg] = ths->psi[(ths->K+1)*t + ABS(ip_u-lj_fg*ip_s)] \
+            * (1-ip_w) + ths->psi[(ths->K+1)*t + ABS(ip_u-lj_fg*ip_s+1)] \
+            * (ip_w); \
         } \
-\
-        MACRO_count__lg_lc; \
-\
-      } /* for (l_L) */ \
-\
-      index_f[j] = ix - ix_old; \
-      ix_old = ix; \
-\
-    } /* for(j) */ \
-\
-    Y(free)(ths->psi); \
-    size_psi = ix; \
-    ths->size_psi = size_psi; \
-\
-    index_g = (int*)realloc(index_g, size_psi * sizeof(int)); \
-    new_psi = (R*)realloc(new_psi, size_psi * sizeof(R)); \
-\
-    ths->psi = new_psi; \
-    ths->psi_index_g = index_g; \
-    ths->psi_index_f = index_f; \
-\
-  } /* if(PRE_PSI) */ \
-}
-
-MACRO_nfct_full_psi(A)
-MACRO_nfct_full_psi(T)
+      } \
+  \
+      for (l_L = 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_prod_ll_plain(which_one, with_FG_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      }  /* for(l_L) */  \
+    } /* for(j) */  \
+    return; \
+  } /* if(PRE_LIN_PSI) */ \
+  \
+  /* no precomputed psi at all */ \
+  for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+  { \
+    MACRO_init_uo_l_lj_t; \
+ \
+    for (l_L = 0; l_L < lprod; l_L++) \
+    { \
+      MACRO_update_phi_prod_ll_plain(which_one, without_PRE_PSI); \
+ \
+      MACRO_B_compute_ ## which_one; \
+ \
+      MACRO_count_uo_l_lj_t; \
+    } /* for (l_L) */ \
+  } /* for (j) */ \
+} /* B */
 
-/* user routines */
+MACRO_B(A)
+MACRO_B(T)
 
+/**
+ * user routines
+ */
 void X(trafo)(X(plan) *ths)
 {
-  /* use ths->my_fftw_r2r_plan */
-  ths->g_hat = ths->g1;
-  ths->g = ths->g2;
-
-  /* form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
-   * k \in I_N \f$ */
-  TIC(0)
-  D_A(ths);
-  TOC(0)
-
-  /* Compute by d-variate discrete Fourier transform
-   * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
-   * \text{ for } l \in I_n \f$ */
-  TIC(1)
-  Z(execute)(ths->my_fftw_r2r_plan);
-  TOC(1)
-
-  if (ths->nfct_flags & PRE_FULL_PSI)
-    full_psi__A(ths);
-
-  /* Set \f$ f_j = \sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
-   * \text{ for } j=0,\hdots,M-1 \f$ */
-  TIC(2)
-  B_A(ths);
-  TOC(2)
-
-  if (ths->nfct_flags & PRE_FULL_PSI)
+  switch(ths->d)
   {
-    Y(free)(ths->psi_index_g);
-    Y(free)(ths->psi_index_f);
+    default:
+    {
+      /* use ths->my_fftw_r2r_plan */
+      ths->g_hat = ths->g1;
+      ths->g = ths->g2;
+
+      /* form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
+       * k \in I_N \f$ */
+      TIC(0)
+      D_A(ths);
+      TOC(0)
+
+      /* Compute by d-variate discrete Fourier transform
+       * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+       * \text{ for } l \in I_n \f$ */
+      TIC_FFTW(1)
+      FFTW(execute)(ths->my_fftw_r2r_plan);
+      TOC_FFTW(1)
+
+      /*if (ths->flags & PRE_FULL_PSI)
+        full_psi__A(ths);*/
+
+      /* Set \f$ f_j = \sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
+       * \text{ for } j=0,\hdots,M-1 \f$ */
+      TIC(2)
+      B_A(ths);
+      TOC(2)
+
+      /*if (ths->flags & PRE_FULL_PSI)
+      {
+        Y(free)(ths->psi_index_g);
+        Y(free)(ths->psi_index_f);
+      }*/
+    }
   }
-} /* nfct_trafo */
+} /* trafo */
 
 void X(adjoint)(X(plan) *ths)
 {
-  /* use ths->my_fftw_plan */
-  ths->g_hat = ths->g2;
-  ths->g = ths->g1;
+  switch(ths->d)
+  {
+    default:
+    {
+      /* use ths->my_fftw_plan */
+      ths->g_hat = ths->g2;
+      ths->g = ths->g1;
+
+      /*if (ths->flags & PRE_FULL_PSI)
+        full_psi__T(ths);*/
+
+      /* Set \f$ g_l = \sum_{j=0}^{M-1} f_j \psi\left(x_j-\frac{l}{n}\right)
+       * \text{ for } l \in I_n,m(x_j) \f$ */
+      TIC(2)
+      B_T(ths);
+      TOC(2)
+
+      /* Compute by d-variate discrete cosine transform
+       * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+       * \text{ for }  k \in I_N\f$ */
+      TIC_FFTW(1)
+      FFTW(execute)(ths->my_fftw_r2r_plan);
+      TOC_FFTW(1)
+
+      /* Form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
+       * k \in I_N \f$ */
+      TIC(0)
+      D_T(ths);
+      TOC(0)
+    }
+  }
+} /* adjoint */
 
-  if (ths->nfct_flags & PRE_FULL_PSI)
-    full_psi__T(ths);
+/** initialisation of direct transform
+ */
+static inline void precompute_phi_hut(X(plan) *ths)
+{
+  INT ks[ths->d]; /* index over all frequencies */
+  INT t; /* index over all dimensions */
 
-  /* Set \f$ g_l = \sum_{j=0}^{M-1} f_j \psi\left(x_j-\frac{l}{n}\right)
-   * \text{ for } l \in I_n,m(x_j) \f$ */
-  TIC(2)
-  B_T(ths);
-  TOC(2)
+  ths->c_phi_inv = (R**) Y(malloc)((size_t)(ths->d) * sizeof(R*));
 
-  if (ths->nfct_flags & PRE_FULL_PSI)
+  for (t = 0; t < ths->d; t++)
   {
-    Y(free)(ths->psi_index_g);
-    Y(free)(ths->psi_index_f);
+    ths->c_phi_inv[t] = (R*)Y(malloc)((size_t)(ths->N[t] - OFFSET) * sizeof(R));
+
+    for (ks[t] = 0; ks[t] < ths->N[t] - OFFSET; ks[t]++)
+    {
+      ths->c_phi_inv[t][ks[t]] = (K(1.0) / (PHI_HUT((2 * NN(ths->n[t])), ks[t] + OFFSET, t)));
+    }
   }
+} /* phi_hut */
 
-  /* Compute by d-variate discrete cosine transform
-   * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
-   * \text{ for }  k \in I_N\f$ */
-  TIC(1)
-  Z(execute)(ths->my_fftw_r2r_plan);
-  TOC(1)
+/** create a lookup table, but NOT for each node
+ *  good idea K=2^xx
+ *  TODO: estimate K, call from init
+ *  assumes an EVEN window function
+ */
+void X(precompute_lin_psi)(X(plan) *ths)
+{
+  INT t; /**< index over all dimensions */
+  INT j; /**< index over all nodes */
+  R step; /**< step size in [0,(m+2)/n] */
 
-  /* Form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
-   * k \in I_N \f$ */
-  TIC(0)
-  D_T(ths);
-  TOC(0)
+  for (t = 0; t < ths->d; t++)
+  {
+    step = ((R)(ths->m+2)) / (((R)ths->K) * (2 * NN(ths->n[t])));
 
-} /* nfct_adjoint */
+    for (j = 0; j <= ths->K; j++)
+    {
+      ths->psi[(ths->K + 1) * t + j] = PHI((2 * NN(ths->n[t])), (j * step), t);
+    } /* for(j) */
+  } /* for(t) */
+}
 
-static inline void precompute_phi_hut(X(plan) *ths)
+void X(precompute_fg_psi)(X(plan) *ths)
 {
-  int kg[ths->d]; /* index over all frequencies */
-  int t; /* index over all dimensions */
+  INT t; /* index over all dimensions */
+  INT u, o; /* depends on x_j */
 
-  ths->c_phi_inv = (R**)Y(malloc)(ths->d * sizeof(R*));
+//  sort(ths);
 
   for (t = 0; t < ths->d; t++)
   {
-    ths->c_phi_inv[t] = (R*)Y(malloc)(ths->N[t] * sizeof(R));
-
-    for (kg[t] = 0; kg[t] < ths->N[t]; kg[t]++)
+    INT j;
+//    #pragma omp parallel for default(shared) private(j,u,o)
+    for (j = 0; j < ths->M_total; j++)
     {
-      ths->c_phi_inv[t][kg[t]] = MACRO_compute_PHI_HUT_INV;
-    }
+      uo(ths, j, &u, &o, t);
+
+      ths->psi[2 * (j*ths->d + t)] = (PHI((2 * NN(ths->n[t])),(ths->x[j * ths->d + t] - ((R)u) / (2 * NN(ths->n[t]))),(t)));
+      ths->psi[2 * (j*ths->d + t) + 1] = EXP(K(2.0) * ( (2 * NN(ths->n[t])) * ths->x[j * ths->d + t] - u) / ths->b[t]);
+      } /* for(j) */
   }
-} /* nfct_phi_hut */
+  /* for(t) */
+} /* nfft_precompute_fg_psi */
 
 void X(precompute_psi)(X(plan) *ths)
 {
-  int t; /* index over all dimensions */
-  int j; /* index over all nodes */
-  int lc[ths->d]; /* index 0<=lj<u+o+1 */
-  int lb[ths->d]; /* depends on x_j */
+  INT t; /* index over all dimensions */
+  INT lj; /* index 0<=lj<u+o+1 */
+  INT u, o; /* depends on x_j */
+
+  //sort(ths);
 
   for (t = 0; t < ths->d; t++)
   {
+    INT j;
+
     for (j = 0; j < ths->M_total; j++)
     {
-      MACRO_nfct__lower_boundary(j, t);
-      for(lc[t] = 0; lc[t] < NFCT_SUMMANDS; lc[t]++)
-	      ths->psi[(j * ths->d + t) * NFCT_SUMMANDS + lc[t]] = MACRO_compute_PSI;
+      uo(ths, j, &u, &o, t);
+
+      for(lj = 0; lj < (2 * ths->m + 2); lj++)
+        ths->psi[(j * ths->d + t) * (2 * ths->m + 2) + lj] =
+            (PHI((2 * NN(ths->n[t])), ((ths->x[(j) * ths->d + (t)]) - ((R)(lj + u)) / (K(2.0) * ((R)NN(ths->n[t])))), t));
     } /* for (j) */
   } /* for (t) */
-} /* nfct_precompute_psi */
+} /* precompute_psi */
+
+void X(precompute_full_psi)(X(plan) *ths)
+{
+//#ifdef _OPENMP
+//  sort(ths);
+//
+//  nfft_precompute_full_psi_omp(ths);
+//#else
+  INT t, t2; /* index over all dimensions */
+  INT j; /* index over all nodes */
+  INT l_L; /* plain index 0 <= l_L < lprod */
+  INT l[ths->d]; /* multi index u<=l<=o */
+  INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+  INT ll_plain[ths->d+1]; /* postfix plain index */
+  INT lprod; /* 'bandwidth' of matrix B */
+  INT u[ths->d], o[ths->d]; /* depends on x_j */
+  INT count_lg[ths->d];
+  INT lg_offset[ths->d];
+
+  R phi_prod[ths->d+1];
+
+  INT ix, ix_old;
+
+  //sort(ths);
+
+  phi_prod[0] = K(1.0);
+  ll_plain[0]  = 0;
+
+  for (t = 0, lprod = 1; t < ths->d; t++)
+    lprod *= 2 * ths->m + 2;
+
+  for (j = 0, ix = 0, ix_old = 0; j < ths->M_total; j++)
+  {
+    MACRO_init_uo_l_lj_t;
+
+    for (l_L = 0; l_L < lprod; l_L++, ix++)
+    {
+      MACRO_update_phi_prod_ll_plain(A, without_PRE_PSI);
+
+      ths->psi_index_g[ix] = ll_plain[ths->d];
+      ths->psi[ix] = phi_prod[ths->d];
+
+      MACRO_count_uo_l_lj_t;
+    } /* for (l_L) */
+
+    ths->psi_index_f[j] = ix - ix_old;
+    ix_old = ix;
+  } /* for(j) */
+//#endif
+}
+
+void X(precompute_one_psi)(X(plan) *ths)
+{
+  if(ths->flags & PRE_PSI)
+    X(precompute_psi)(ths);
+  if(ths->flags & PRE_FULL_PSI)
+    X(precompute_full_psi)(ths);
+  if(ths->flags & PRE_FG_PSI)
+    X(precompute_fg_psi)(ths);
+  if(ths->flags & PRE_LIN_PSI)
+    X(precompute_lin_psi)(ths);
+}
 
 static inline void init_help(X(plan) *ths)
 {
-  int t; /* index over all dimensions */
+  INT t; /* index over all dimensions */
+  INT lprod; /* 'bandwidth' of matrix B */
 
-  ths->N_total = prod_int(ths->N, ths->d);
-  ths->sigma = (R*)Y(malloc)(ths->d * sizeof(R));
+  if (ths->flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+    ths->flags |= NFFT_SORT_NODES;
+
+  ths->N_total = intprod(ths->N, OFFSET, ths->d);
+  ths->n_total = intprod(ths->n, 0, ths->d);
+
+  ths->sigma = (R*)Y(malloc)((size_t)(ths->d) * sizeof(R));
 
   for (t = 0; t < ths->d; t++)
-    ths->sigma[t] = ((R)(ths->n[t] - 1)) / ths->N[t];
+    ths->sigma[t] = ((R)NN(ths->n[t])) / ths->N[t];
 
   /* Assign r2r transform kinds for each dimension */
-  ths->r2r_kind = (Z(r2r_kind)*)Y(malloc)(ths->d * sizeof (Z(r2r_kind)));
+  ths->r2r_kind = (FFTW(r2r_kind)*)Y(malloc)((size_t)(ths->d) * sizeof (FFTW(r2r_kind)));
   for (t = 0; t < ths->d; t++)
-    ths->r2r_kind[t] = FFTW_REDFT00;
+    ths->r2r_kind[t] = FOURIER_TRAFO;
 
-  NFCT_WINDOW_HELP_INIT;
+  WINDOW_HELP_INIT;
 
-  if (ths->nfct_flags & MALLOC_X)
-    ths->x = (R*)Y(malloc)(ths->d * ths->M_total * sizeof(R));
+  if (ths->flags & MALLOC_X)
+    ths->x = (R*)Y(malloc)((size_t)(ths->d * ths->M_total) * sizeof(R));
 
-  if (ths->nfct_flags & MALLOC_F_HAT)
-    ths->f_hat = (R*)Y(malloc)(ths->N_total * sizeof(R));
+  if (ths->flags & MALLOC_F_HAT)
+    ths->f_hat = (R*)Y(malloc)((size_t)(ths->N_total) * sizeof(R));
 
-  if (ths->nfct_flags & MALLOC_F)
-    ths->f = (R*)Y(malloc)(ths->M_total * sizeof(R));
+  if (ths->flags & MALLOC_F)
+    ths->f = (R*)Y(malloc)((size_t)(ths->M_total) * sizeof(R));
 
-  if (ths->nfct_flags & PRE_PHI_HUT)
+  if (ths->flags & PRE_PHI_HUT)
     precompute_phi_hut(ths);
 
-  /* NO FFTW_MALLOC HERE */
-  if (ths->nfct_flags & PRE_PSI)
+  if(ths->flags & PRE_LIN_PSI)
   {
-    ths->psi =
-      (R*)Y(malloc)(ths->M_total * ths->d * NFCT_SUMMANDS * sizeof(R));
+      ths->K = (1U<< 10) * (ths->m+2);
+      ths->psi = (R*) Y(malloc)((size_t)((ths->K + 1) * ths->d) * sizeof(R));
+  }
 
-    /* Set default for full_psi_eps */
-    ths->nfct_full_psi_eps = POW(K(10.0), K(-10.0));
+  if(ths->flags & PRE_FG_PSI)
+    ths->psi = (R*) Y(malloc)((size_t)(ths->M_total * ths->d * 2) * sizeof(R));
+
+  if (ths->flags & PRE_PSI)
+    ths->psi = (R*) Y(malloc)((size_t)(ths->M_total * ths->d * (2 * ths->m + 2 )) * sizeof(R));
+
+  if(ths->flags & PRE_FULL_PSI)
+  {
+      for (t = 0, lprod = 1; t < ths->d; t++)
+        lprod *= 2 * ths->m + 2;
+
+      ths->psi = (R*) Y(malloc)((size_t)(ths->M_total * lprod) * sizeof(R));
+
+      ths->psi_index_f = (INT*) Y(malloc)((size_t)(ths->M_total) * sizeof(INT));
+      ths->psi_index_g = (INT*) Y(malloc)((size_t)(ths->M_total * lprod) * sizeof(INT));
   }
 
-  if (ths->nfct_flags & FFTW_INIT)
+  if (ths->flags & FFTW_INIT)
   {
-    ths->g1 =
-      (R*)Y(malloc)(prod_int(ths->n, ths->d) * sizeof(R));
+    ths->g1 = (R*)Y(malloc)((size_t)(ths->n_total) * sizeof(R));
 
-    if (ths->nfct_flags & FFT_OUT_OF_PLACE)
-      ths->g2 =
-	      (R*) Y(malloc)(prod_int(ths->n, ths->d) * sizeof(R));
+    if (ths->flags & FFT_OUT_OF_PLACE)
+      ths->g2 = (R*) Y(malloc)((size_t)(ths->n_total) * sizeof(R));
     else
       ths->g2 = ths->g1;
 
-    ths->my_fftw_r2r_plan =
-      Z(plan_r2r)(ths->d, ths->n, ths->g1, ths->g2, ths->r2r_kind,
-        ths->fftw_flags);
+    {
+      int *_n = Y(malloc)((size_t)(ths->d) * sizeof(int));
+
+      for (t = 0; t < ths->d; t++)
+        _n[t] = (int)(ths->n[t]);
+
+      ths->my_fftw_r2r_plan = FFTW(plan_r2r)((int)ths->d, _n, ths->g1, ths->g2, ths->r2r_kind, ths->fftw_flags);
+      Y(free)(_n);
+    }
   }
 
+//  if(ths->flags & NFFT_SORT_NODES)
+//    ths->index_x = (INT*) Y(malloc)(sizeof(INT)*2*ths->M_total);
+//  else
+//    ths->index_x = NULL;
+
   ths->mv_trafo = (void (*) (void* ))X(trafo);
   ths->mv_adjoint = (void (*) (void* ))X(adjoint);
 }
 
 void X(init)(X(plan) *ths, int d, int *N, int M_total)
 {
-  int t;
-
-  ths->d = d;
-  ths->M_total = M_total;
-  ths->N = (int*) Y(malloc)(ths->d * sizeof(int));
+  int t; /* index over all dimensions */
 
-  for (t = 0;t < d; t++)
-    ths->N[t] = N[t];
+  ths->d = (INT)d;
 
-  ths->n = (int*) Y(malloc)(ths->d * sizeof(int));
+  ths->N = (INT*) Y(malloc)((size_t)(d) * sizeof(INT));
 
   for (t = 0; t < d; t++)
-    ths->n[t] = fftw_2N(Y(next_power_of_2)(ths->N[t]));
+    ths->N[t] = (INT)N[t];
 
-/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!
+  ths->M_total = (INT)M_total;
 
-  WINDOW_HELP_ESTIMATE_m;
-*/
-  ths->nfct_flags = NFCT_DEFAULT_FLAGS;
-  ths->fftw_flags = FFTW_DEFAULT_FLAGS;
+  ths->n = (INT*) Y(malloc)((size_t)(d) * sizeof(INT));
 
-  init_help(ths);
-}
+  for (t = 0; t < d; t++)
+    ths->n[t] = 2 * (Y(next_power_of_2)(ths->N[t]) - 1) + OFFSET;
 
-/* Was macht diese Funktion. Wird sie gebraucht? Bei NFST ist sie auch in
- * nfft3.h deklariert.
-void nfct_init_m(nfct_plan *ths, int d, int *N, int M_total, int m)
-{
-  int t, n[d];
+  ths->m = WINDOW_HELP_ESTIMATE_m;
+
+  if (d > 1)
+  {
+//#ifdef _OPENMP
+//    ths->flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+//                      FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES |
+//          NFFT_OMP_BLOCKWISE_ADJOINT;
+//#else
+    ths->flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+                      FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES;
+//#endif
+  }
+  else
+    ths->flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+                      FFTW_INIT | FFT_OUT_OF_PLACE;
 
-  for(t = 0; t < d; t++)
-    n[t] = fftw_2N(X(next_power_of_2)(N[t]));
+  ths->fftw_flags = FFTW_ESTIMATE | FFTW_DESTROY_INPUT;
 
-  nfct_init_guru(ths, d, N, M_total, n, m, NFCT_DEFAULT_FLAGS, FFTW_DEFAULT_FLAGS);
+  init_help(ths);
 }
-*/
 
 void X(init_guru)(X(plan) *ths, int d, int *N, int M_total, int *n, int m,
-  unsigned nfct_flags, unsigned fftw_flags)
+  unsigned flags, unsigned fftw_flags)
 {
-  int t; /* index over all dimensions */
+  INT t; /* index over all dimensions */
 
-  ths->d = d;
-  ths->M_total = M_total;
-
-  ths->N = (int*)Y(malloc)(ths->d * sizeof(int));
+  ths->d = (INT)d;
+  ths->M_total = (INT)M_total;
+  ths->N = (INT*)Y(malloc)((size_t)(ths->d) * sizeof(INT));
 
   for (t = 0; t < d; t++)
-    ths->N[t] = N[t];
+    ths->N[t] = (INT)N[t];
 
-  ths->n = (int*)Y(malloc)(ths->d * sizeof(int));
+  ths->n = (INT*)Y(malloc)((size_t)(ths->d) * sizeof(INT));
 
   for (t = 0; t < d; t++)
-    ths->n[t] = n[t];
+    ths->n[t] = (INT)n[t];
 
-  ths->m = m;
+  ths->m = (INT)m;
 
-  ths->nfct_flags = nfct_flags;
+  ths->flags = flags;
   ths->fftw_flags = fftw_flags;
 
   init_help(ths);
 }
 
-void X(init_1d)(X(plan) *ths, int N0, int M_total)
+void X(init_1d)(X(plan) *ths, int N1, int M_total)
 {
   int N[1];
 
-  N[0] = N0;
+  N[0] = N1;
+
   X(init)(ths, 1, N, M_total);
 }
 
-void X(init_2d)(X(plan) *ths, int N0, int N1, int M_total)
+void X(init_2d)(X(plan) *ths, int N1, int N2, int M_total)
 {
   int N[2];
 
-  N[0] = N0;
-  N[1] = N1;
+  N[0] = N1;
+  N[1] = N2;
+
   X(init)(ths, 2, N, M_total);
 }
 
-void X(init_3d)(X(plan) *ths, int N0, int N1, int N2, int M_total)
+void X(init_3d)(X(plan) *ths, int N1, int N2, int N3, int M_total)
 {
   int N[3];
 
-  N[0] = N0;
-  N[1] = N1;
-  N[2] = N2;
+  N[0] = N1;
+  N[1] = N2;
+  N[2] = N3;
+
   X(init)(ths, 3, N, M_total);
 }
 
+const char* X(check)(X(plan) *ths)
+{
+  INT j;
+
+  if (!ths->f)
+      return "Member f not initialized.";
+
+  if (!ths->x)
+      return "Member x not initialized.";
+
+  if (!ths->f_hat)
+      return "Member f_hat not initialized.";
+
+  for (j = 0; j < ths->M_total * ths->d; j++)
+  {
+    if ((ths->x[j] < K(0.0)) || (ths->x[j] >= K(0.5)))
+    {
+      return "ths->x out of range [0.0,0.5)";
+    }
+  }
+
+  for (j = 0; j < ths->d; j++)
+  {
+    if (ths->sigma[j] <= 1)
+      return "nfft_check: oversampling factor too small";
+
+    if(ths->N[j] - 1 <= ths->m)
+      return "Polynomial degree N is smaller than cut-off m";
+
+    if(ths->N[j]%2 == 1)
+      return "polynomial degree N has to be even";
+  }
+  return 0;
+}
+
 void X(finalize)(X(plan) *ths)
 {
-  int t; /* dimension index*/
+  INT t; /* index over dimensions */
+
+//  if(ths->flags & NFFT_SORT_NODES)
+//    Y(free)(ths->index_x);
 
-  if (ths->nfct_flags & FFTW_INIT)
+  if (ths->flags & FFTW_INIT)
   {
-    Z(destroy_plan)(ths->my_fftw_r2r_plan);
+#ifdef _OPENMP
+    #pragma omp critical (nfft_omp_critical_fftw_plan)
+#endif
+    FFTW(destroy_plan)(ths->my_fftw_r2r_plan);
 
-    if (ths->nfct_flags & FFT_OUT_OF_PLACE)
+    if (ths->flags & FFT_OUT_OF_PLACE)
       Y(free)(ths->g2);
 
     Y(free)(ths->g1);
   }
 
-  /* NO FFTW_FREE HERE */
-  if (ths->nfct_flags & PRE_PSI)
+  if(ths->flags & PRE_FULL_PSI)
   {
+    Y(free)(ths->psi_index_g);
+    Y(free)(ths->psi_index_f);
     Y(free)(ths->psi);
   }
 
-  if (ths->nfct_flags & PRE_PHI_HUT)
+  if (ths->flags & PRE_PSI)
+    Y(free)(ths->psi);
+
+  if(ths->flags & PRE_FG_PSI)
+    Y(free)(ths->psi);
+
+  if(ths->flags & PRE_LIN_PSI)
+    Y(free)(ths->psi);
+
+  if (ths->flags & PRE_PHI_HUT)
   {
     for (t = 0; t < ths->d; t++)
       Y(free)(ths->c_phi_inv[t]);
     Y(free)(ths->c_phi_inv);
   }
 
-  if (ths->nfct_flags & MALLOC_F)
+  if (ths->flags & MALLOC_F)
     Y(free)(ths->f);
 
-  if(ths->nfct_flags & MALLOC_F_HAT)
+  if(ths->flags & MALLOC_F_HAT)
     Y(free)(ths->f_hat);
 
-  if (ths->nfct_flags & MALLOC_X)
+  if (ths->flags & MALLOC_X)
     Y(free)(ths->x);
 
   WINDOW_HELP_FINALIZE;
@@ -923,4 +1202,4 @@ void X(finalize)(X(plan) *ths)
   Y(free)(ths->sigma);
 
   Y(free)(ths->r2r_kind);
-} /* nfct_finalize */
+} /* finalize */
diff --git a/kernel/nfft/Makefile.in b/kernel/nfft/Makefile.in
deleted file mode 100644
index 1ed75b0..0000000
--- a/kernel/nfft/Makefile.in
+++ /dev/null
@@ -1,578 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/nfft
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libnfft_la_LIBADD =
-am_libnfft_la_OBJECTS = nfft.lo
-libnfft_la_OBJECTS = $(am_libnfft_la_OBJECTS)
-libnfft_threads_la_LIBADD =
-am__libnfft_threads_la_SOURCES_DIST = nfft.c
- at HAVE_THREADS_TRUE@am_libnfft_threads_la_OBJECTS =  \
- at HAVE_THREADS_TRUE@	libnfft_threads_la-nfft.lo
-libnfft_threads_la_OBJECTS = $(am_libnfft_threads_la_OBJECTS)
-libnfft_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(libnfft_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
- at HAVE_THREADS_TRUE@am_libnfft_threads_la_rpath =
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libnfft_la_SOURCES) $(libnfft_threads_la_SOURCES)
-DIST_SOURCES = $(libnfft_la_SOURCES) \
-	$(am__libnfft_threads_la_SOURCES_DIST)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
- at HAVE_THREADS_FALSE@LIBNFFT_THREADS_LA = 
- at HAVE_THREADS_TRUE@LIBNFFT_THREADS_LA = libnfft_threads.la
-noinst_LTLIBRARIES = libnfft.la $(LIBNFFT_THREADS_LA)
-libnfft_la_SOURCES = nfft.c 
- at HAVE_THREADS_TRUE@libnfft_threads_la_SOURCES = nfft.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libnfft_threads_la_CFLAGS = $(OPENMP_CFLAGS)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/nfft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libnfft.la: $(libnfft_la_OBJECTS) $(libnfft_la_DEPENDENCIES) $(EXTRA_libnfft_la_DEPENDENCIES) 
-	$(LINK)  $(libnfft_la_OBJECTS) $(libnfft_la_LIBADD) $(LIBS)
-libnfft_threads.la: $(libnfft_threads_la_OBJECTS) $(libnfft_threads_la_DEPENDENCIES) $(EXTRA_libnfft_threads_la_DEPENDENCIES) 
-	$(libnfft_threads_la_LINK) $(am_libnfft_threads_la_rpath) $(libnfft_threads_la_OBJECTS) $(libnfft_threads_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfft_threads_la-nfft.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfft.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-libnfft_threads_la-nfft.lo: nfft.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_threads_la_CFLAGS) $(CFLAGS) -MT libnfft_threads_la-nfft.lo -MD -MP -MF $(DEPDIR)/libnfft_threads_la-nfft.Tpo -c -o libnfft_threads_la-nfft.lo `test -f 'nfft.c' || echo '$(srcdir)/'`nfft.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libnfft_threads_la-nfft.Tpo $(DEPDIR)/libnfft_threads_la-nfft.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfft.c' object='libnfft_threads_la-nfft.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_threads_la_CFLAGS) $(CFLAGS) -c -o libnfft_threads_la-nfft.lo `test -f 'nfft.c' || echo '$(srcdir)/'`nfft.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/nfft/nfft.c b/kernel/nfft/nfft.c
index 517b83c..2b97fc2 100644
--- a/kernel/nfft/nfft.c
+++ b/kernel/nfft/nfft.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /* Nonequispaced FFT */
 
@@ -31,7 +31,6 @@
 #endif
 
 /* NFFT headers */
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -43,6 +42,23 @@
 #include <assert.h>
 #endif
 
+#undef X
+#define X(name) NFFT(name)
+
+/** Compute aggregated product of integer array. */
+static inline INT intprod(const INT *vec, const INT a, const INT d)
+{
+  INT t, p;
+
+  p = 1;
+  for (t = 0; t < d; t++)
+    p *= vec[t] - a;
+
+  return p;
+}
+
+/* handy shortcuts */
+#define BASE(x) CEXP(x)
 
 /**
  * Sort nodes (index) to get better cache utilization during multiplication
@@ -58,38 +74,40 @@
  *
  * \author Toni Volkmer
  */
-static void nfft_sort_nodes_for_better_cache_handle(int d,
-    const int *n, int m, int local_x_num, const R *local_x, int *ar_x)
+static inline void sort0(const INT d, const INT *n, const INT m,
+    const INT local_x_num, const R *local_x, INT *ar_x)
 {
-  int u_j[d], i, j, help, rhigh;
-  int *ar_x_temp;
-  int nprod;
-
-  for(i = 0; i < local_x_num; i++) {
-    ar_x[2*i] = 0;
-    ar_x[2*i+1] = i;
-    for(j = 0; j < d; j++) {
-      help = (int) floor( n[j]*local_x[d*i+j] - m);
-      u_j[j] = (help%n[j]+n[j])%n[j];
-
-      ar_x[2*i] += u_j[j];
-      if (j+1 < d)
-        ar_x[2*i] *= n[j+1];
+  INT u_j[d], i, j, help, rhigh;
+  INT *ar_x_temp;
+  INT nprod;
+
+  for (i = 0; i < local_x_num; i++)
+  {
+    ar_x[2 * i] = 0;
+    ar_x[2 *i + 1] = i;
+    for (j = 0; j < d; j++)
+    {
+      help = (INT) LRINT(FLOOR((R)(n[j]) * local_x[d * i + j] - (R)(m)));
+      u_j[j] = (help % n[j] + n[j]) % n[j];
+
+      ar_x[2 * i] += u_j[j];
+      if (j + 1 < d)
+        ar_x[2 * i] *= n[j + 1];
     }
   }
 
   for (j = 0, nprod = 1; j < d; j++)
     nprod *= n[j];
 
-  rhigh = (int) ceil(log2(nprod)) - 1;
+  rhigh = (INT) LRINT(CEIL(LOG2((R)nprod))) - 1;
 
-  ar_x_temp = (int *) nfft_malloc(2*local_x_num*sizeof(int));
-  nfft_sort_node_indices_radix_lsdf(local_x_num, ar_x, ar_x_temp, rhigh);
+  ar_x_temp = (INT*) Y(malloc)(2 * (size_t)(local_x_num) * sizeof(INT));
+  Y(sort_node_indices_radix_lsdf)(local_x_num, ar_x, ar_x_temp, rhigh);
 #ifdef OMP_ASSERT
   for (i = 1; i < local_x_num; i++)
-    assert(ar_x[2*(i-1)] <= ar_x[2*i]);
+    assert(ar_x[2 * (i - 1)] <= ar_x[2 * i]);
 #endif
-  nfft_free(ar_x_temp);
+  Y(free)(ar_x_temp);
 }
 
 /**
@@ -100,10 +118,10 @@ static void nfft_sort_nodes_for_better_cache_handle(int d,
  *
  * \arg ths nfft_plan
  */
-static void nfft_sort_nodes(const nfft_plan *ths)
+static inline void sort(const X(plan) *ths)
 {
-  if (ths->nfft_flags & NFFT_SORT_NODES)
-    nfft_sort_nodes_for_better_cache_handle(ths->d, ths->n, ths->m, ths->M_total, ths->x, ths->index_x);
+  if (ths->flags & NFFT_SORT_NODES)
+    sort0(ths->d, ths->n, ths->m, ths->M_total, ths->x, ths->index_x);
 }
 
 /** direct computation of non equispaced fourier transforms
@@ -126,141 +144,60 @@ static void nfft_sort_nodes(const nfft_plan *ths)
  * for k in I_N^d
  *  f_hat[k] = sum_{j=0}^{M_total-1} f[j] * exp(-2(pi) k x[j])
  */
-
-/* some macros to initialize arrays before executing a transformation */
-#define MACRO_ndft_init_result_trafo memset(f,0,ths->M_total*sizeof(C));
-#define MACRO_ndft_init_result_conjugated MACRO_ndft_init_result_trafo
-#define MACRO_ndft_init_result_adjoint memset(f_hat,0,ths->N_total*sizeof(C));
-#define MACRO_ndft_init_result_transposed MACRO_ndft_init_result_adjoint
-
-/* exponent of complex exponentials */
-#define MACRO_ndft_sign_trafo K2PI*ths->x[j*ths->d+t]
-#define MACRO_ndft_sign_conjugated -K2PI*ths->x[j*ths->d+t]
-#define MACRO_ndft_sign_adjoint K2PI*ths->x[j*ths->d+t]
-#define MACRO_ndft_sign_transposed -K2PI*ths->x[j*ths->d+t]
-
-#define MACRO_init_k_N_Omega_x(which_one)                                     \
-{                                                                             \
-  for (t = 0; t < ths->d; t++)                                                \
-  {                                                                           \
-    k[t] = -ths->N[t]/2;                                                      \
-    x[t] = MACRO_ndft_sign_ ## which_one;                                     \
-    Omega[t+1] = k[t]*x[t] + Omega[t];                                        \
-  }                                                                           \
-  omega = Omega[ths->d];                                                      \
-}                                                                             \
-
-#define MACRO_count_k_N_Omega                                                 \
-{                                                                             \
-  for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--)                \
-    k[t]-= ths->N[t]-1;                                                       \
-                                                                              \
-  k[t]++;                                                                     \
-\
-  for (t2 = t; t2 < ths->d; t2++)                                             \
-    Omega[t2+1] = k[t2]*x[t2] + Omega[t2];                                    \
-                                                                              \
-  omega = Omega[ths->d];                                                      \
-}
-
-#define MACRO_ndft_compute_trafo f[j] += f_hat[k_L]*CEXP(-II*omega);
-#define MACRO_ndft_compute_conjugated MACRO_ndft_compute_trafo
-#define MACRO_ndft_compute_adjoint f_hat[k_L] += f[j]*CEXP(+II*omega);
-#define MACRO_ndft_compute_transposed MACRO_ndft_compute_adjoint
-
-#define MACRO_ndft(which_one)                                                 \
-void nfft_ ## which_one ## _direct (nfft_plan *ths)                           \
-{                                                                             \
-  C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f;                                 \
-                                                                              \
-  MACRO_ndft_init_result_ ## which_one                                        \
-                                                                              \
-  if (ths->d == 1)                                                            \
-  {                                                                           \
-    /* specialize for univariate case, rationale: faster */                   \
-    const int t = 0;                                                          \
-    int j;                                                                    \
-    for (j = 0; j < ths->M_total; j++)                                        \
-    {                                                                         \
-      int k_L;                                                                \
-      for(k_L = 0; k_L < ths->N_total; k_L++)                                 \
-      {                                                                       \
-        R omega = (k_L - (ths->N_total/2)) * MACRO_ndft_sign_ ## which_one;   \
-        MACRO_ndft_compute_ ## which_one;                                     \
-      }                                                                       \
-    }                                                                         \
-  }                                                                           \
-  else                                                                        \
-  {                                                                           \
-    /* multivariate case */                                                   \
-    int j;                                                                    \
-    for (j = 0; j < ths->M_total; j++)                                        \
-    {                                                                         \
-      R x[ths->d], omega, Omega[ths->d+1];                                    \
-      int t, t2, k_L, k[ths->d];                                              \
-      Omega[0] = K(0.0);                                                      \
-      MACRO_init_k_N_Omega_x(which_one);                                      \
-      for(k_L = 0; k_L < ths->N_total; k_L++)                                 \
-      {                                                                       \
-        MACRO_ndft_compute_ ## which_one;                                     \
-        MACRO_count_k_N_Omega;                                                \
-      }                                                                       \
-    }                                                                         \
-  }                                                                           \
-}
-
-// macro expanded for OpenMP parallelization
-//MACRO_ndft(trafo)
-void nfft_trafo_direct (nfft_plan *ths)
+void X(trafo_direct)(const X(plan) *ths)
 {
   C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f;
 
-  memset(f,0,ths->M_total*sizeof(C));
+  memset(f, 0, (size_t)(ths->M_total) * sizeof(C));
 
   if (ths->d == 1)
   {
     /* specialize for univariate case, rationale: faster */
-    int j;
+    INT j;
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(j)
+#endif
     for (j = 0; j < ths->M_total; j++)
     {
-      int k_L;
-      for(k_L = 0; k_L < ths->N_total; k_L++)
+      INT k_L;
+      for (k_L = 0; k_L < ths->N_total; k_L++)
       {
-        R omega = (k_L - ths->N_total/2) * K2PI * ths->x[j];
-        f[j] += f_hat[k_L]*cexp(-( 1.0iF)*omega);
+        R omega = K2PI * ((R)(k_L - ths->N_total/2)) * ths->x[j];
+        f[j] += f_hat[k_L] * BASE(-II * omega);
       }
     }
   }
   else
   {
     /* multivariate case */
-    int j;
+    INT j;
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(j)
+#endif
     for (j = 0; j < ths->M_total; j++)
     {
-      R x[ths->d], omega, Omega[ths->d+1];
-      int t, t2, k_L, k[ths->d];
-      Omega[0] = ((R) 0.0);
+      R x[ths->d], omega, Omega[ths->d + 1];
+      INT t, t2, k_L, k[ths->d];
+      Omega[0] = K(0.0);
       for (t = 0; t < ths->d; t++)
       {
         k[t] = -ths->N[t]/2;
-        x[t] = K2PI*ths->x[j*ths->d+t];
-        Omega[t+1] = k[t]*x[t] + Omega[t];
+        x[t] = K2PI * ths->x[j * ths->d + t];
+        Omega[t+1] = ((R)k[t]) * x[t] + Omega[t];
       }
       omega = Omega[ths->d];
 
-      for(k_L = 0; k_L < ths->N_total; k_L++)
+      for (k_L = 0; k_L < ths->N_total; k_L++)
       {
-        f[j] += f_hat[k_L]*cexp(-( 1.0iF)*omega);
+        f[j] += f_hat[k_L] * BASE(-II * omega);
         {
-          for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--)
+          for (t = ths->d - 1; (t >= 1) && (k[t] == ths->N[t]/2 - 1); t--)
             k[t]-= ths->N[t]-1;
 
           k[t]++;
 
           for (t2 = t; t2 < ths->d; t2++)
-            Omega[t2+1] = k[t2]*x[t2] + Omega[t2];
+            Omega[t2+1] = ((R)k[t2]) * x[t2] + Omega[t2];
 
           omega = Omega[ths->d];
         }
@@ -269,39 +206,36 @@ void nfft_trafo_direct (nfft_plan *ths)
   }
 }
 
-// macro expanded for OpenMP parallelization since parallel calculation
-// requires outer loop over frequencies and inner loop over nodes.
-//MACRO_ndft(adjoint)
-void nfft_adjoint_direct (nfft_plan *ths)
+void X(adjoint_direct)(const X(plan) *ths)
 {
   C *f_hat = (C*)ths->f_hat, *f = (C*)ths->f;
 
-  memset(f_hat,0,ths->N_total*sizeof(C));
+  memset(f_hat, 0, (size_t)(ths->N_total) * sizeof(C));
 
   if (ths->d == 1)
   {
     /* specialize for univariate case, rationale: faster */
 #ifdef _OPENMP
-      int k_L;
+      INT k_L;
       #pragma omp parallel for default(shared) private(k_L)
-      for(k_L = 0; k_L < ths->N_total; k_L++)
+      for (k_L = 0; k_L < ths->N_total; k_L++)
       {
-        int j;
+        INT j;
         for (j = 0; j < ths->M_total; j++)
         {
-          R omega = (k_L - (ths->N_total/2)) * K2PI * ths->x[j];
-          f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+          R omega = K2PI * ((R)(k_L - (ths->N_total/2))) * ths->x[j];
+          f_hat[k_L] += f[j] * BASE(II * omega);
         }
       }
 #else
-      int j;
+      INT j;
       for (j = 0; j < ths->M_total; j++)
       {
-        int k_L;
-        for(k_L = 0; k_L < ths->N_total; k_L++)
+        INT k_L;
+        for (k_L = 0; k_L < ths->N_total; k_L++)
         {
-          R omega = (k_L - (ths->N_total/2)) * K2PI * ths->x[j];
-          f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+          R omega = K2PI * ((R)(k_L - ths->N_total / 2)) * ths->x[j];
+          f_hat[k_L] += f[j] * BASE(II * omega);
         }
       }
 #endif
@@ -309,16 +243,16 @@ void nfft_adjoint_direct (nfft_plan *ths)
   else
   {
     /* multivariate case */
-    int j, k_L;
+    INT j, k_L;
 #ifdef _OPENMP
     #pragma omp parallel for default(shared) private(j, k_L)
-    for(k_L = 0; k_L < ths->N_total; k_L++)
+    for (k_L = 0; k_L < ths->N_total; k_L++)
     {
-      int k[ths->d], k_temp, t;
+      INT k[ths->d], k_temp, t;
 
       k_temp = k_L;
 
-      for (t = ths->d-1; t >= 0; t--)
+      for (t = ths->d - 1; t >= 0; t--)
       {
         k[t] = k_temp % ths->N[t] - ths->N[t]/2;
         k_temp /= ths->N[t];
@@ -326,28 +260,28 @@ void nfft_adjoint_direct (nfft_plan *ths)
 
       for (j = 0; j < ths->M_total; j++)
       {
-        R omega = 0.0;
+        R omega = K(0.0);
         for (t = 0; t < ths->d; t++)
-          omega += k[t] * K2PI * ths->x[j*ths->d+t];
-        f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+          omega += k[t] * K2PI * ths->x[j * ths->d + t];
+        f_hat[k_L] += f[j] * BASE(II * omega);
       }
     }
 #else
     for (j = 0; j < ths->M_total; j++)
     {
       R x[ths->d], omega, Omega[ths->d+1];
-      int t, t2, k[ths->d];
-      Omega[0] = ((R) 0.0);
+      INT t, t2, k[ths->d];
+      Omega[0] = K(0.0);
       for (t = 0; t < ths->d; t++)
       {
         k[t] = -ths->N[t]/2;
-        x[t] = K2PI * ths->x[j*ths->d+t];
-        Omega[t+1] = k[t]*x[t] + Omega[t];
+        x[t] = K2PI * ths->x[j * ths->d + t];
+        Omega[t+1] = ((R)k[t]) * x[t] + Omega[t];
       }
       omega = Omega[ths->d];
-      for(k_L = 0; k_L < ths->N_total; k_L++)
+      for (k_L = 0; k_L < ths->N_total; k_L++)
       {
-        f_hat[k_L] += f[j]*cexp(+( 1.0iF)*omega);
+        f_hat[k_L] += f[j] * BASE(II * omega);
 
         for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t]/2-1); t--)
           k[t]-= ths->N[t]-1;
@@ -355,7 +289,7 @@ void nfft_adjoint_direct (nfft_plan *ths)
         k[t]++;
 
         for (t2 = t; t2 < ths->d; t2++)
-          Omega[t2+1] = k[t2]*x[t2] + Omega[t2];
+          Omega[t2+1] = ((R)k[t2]) * x[t2] + Omega[t2];
 
         omega = Omega[ths->d];
       }
@@ -364,7 +298,7 @@ void nfft_adjoint_direct (nfft_plan *ths)
   }
 }
 
-/** fast computation of non equispaced fourier transforms
+/** fast computation of non-equispaced fourier transforms
  *  require O(N^d log(N) + M_total) arithmetical operations
  *
  * fast computation of the nfft_trafo and nfft_conjugated, formula (1.1)
@@ -389,147 +323,143 @@ void nfft_adjoint_direct (nfft_plan *ths)
 
 /** computes 2m+2 indices for the matrix B
  */
-static inline void nfft_uo(const nfft_plan *ths, const int j, int *up, int *op,
-  const int act_dim)
+static inline void uo(const X(plan) *ths, const INT j, INT *up, INT *op,
+  const INT act_dim)
 {
   const R xj = ths->x[j * ths->d + act_dim];
-  int c = LRINT(FLOOR(xj * ths->n[act_dim]));
+  INT c = LRINT(FLOOR(xj * (R)(ths->n[act_dim])));
 
   (*up) = c - (ths->m);
   (*op) = c + 1 + (ths->m);
 }
 
-static inline void nfft_uo2(int *u, int *o, const R x, const int n, const int m)
+static inline void uo2(INT *u, INT *o, const R x, const INT n, const INT m)
 {
-  int c = LRINT(FLOOR(x * n));
+  INT c = LRINT(FLOOR(x * (R)(n)));
 
   *u = (c - m + n) % n;
   *o = (c + 1 + m + n) % n;
 }
 
-#define MACRO_nfft_D_compute_A                                                \
-{                                                                             \
-  g_hat[k_plain[ths->d]] = f_hat[ks_plain[ths->d]] * c_phi_inv_k[ths->d];     \
+#define MACRO_D_compute_A \
+{ \
+  g_hat[k_plain[ths->d]] = f_hat[ks_plain[ths->d]] * c_phi_inv_k[ths->d]; \
 }
 
-#define MACRO_nfft_D_compute_T                                                \
-{                                                                             \
-  f_hat[ks_plain[ths->d]] = g_hat[k_plain[ths->d]] * c_phi_inv_k[ths->d];     \
+#define MACRO_D_compute_T \
+{ \
+  f_hat[ks_plain[ths->d]] = g_hat[k_plain[ths->d]] * c_phi_inv_k[ths->d]; \
 }
 
-#define MACRO_nfft_D_init_result_A memset(g_hat,0,ths->n_total*sizeof(C));
+#define MACRO_D_init_result_A memset(g_hat, 0, (size_t)(ths->n_total) * sizeof(C));
 
-#define MACRO_nfft_D_init_result_T memset(f_hat,0,ths->N_total*sizeof(C));
+#define MACRO_D_init_result_T memset(f_hat, 0, (size_t)(ths->N_total) * sizeof(C));
 
 #define MACRO_with_PRE_PHI_HUT * ths->c_phi_inv[t2][ks[t2]];
 
-#define MACRO_without_PRE_PHI_HUT / (PHI_HUT(ks[t2]-(ths->N[t2]/2),t2));
+#define MACRO_without_PRE_PHI_HUT / (PHI_HUT(ths->n[t2],ks[t2]-(ths->N[t2]/2),t2));
 
-#define MACRO_init_k_ks                                                       \
-{                                                                             \
-  for (t = ths->d-1; 0 <= t; t--)                                             \
-  {                                                                           \
-    kp[t] = k[t] = 0;                                                         \
-    ks[t] = ths->N[t]/2;                                                      \
-  }                                                                           \
-  t++;                                                                        \
+#define MACRO_init_k_ks \
+{ \
+  for (t = ths->d-1; 0 <= t; t--) \
+  { \
+    kp[t] = k[t] = 0; \
+    ks[t] = ths->N[t]/2; \
+  } \
+  t++; \
 }
 
 #define MACRO_update_c_phi_inv_k(which_one) \
-{                                                                             \
-  for (t2 = t; t2 < ths->d; t2++)                                             \
-  {                                                                           \
-    c_phi_inv_k[t2+1] = c_phi_inv_k[t2] MACRO_ ##which_one;                   \
-    ks_plain[t2+1] = ks_plain[t2]*ths->N[t2] + ks[t2];                        \
-    k_plain[t2+1] = k_plain[t2]*ths->n[t2] + k[t2];                           \
-  }                                                                           \
+{ \
+  for (t2 = t; t2 < ths->d; t2++) \
+  { \
+    c_phi_inv_k[t2+1] = c_phi_inv_k[t2] MACRO_ ##which_one; \
+    ks_plain[t2+1] = ks_plain[t2]*ths->N[t2] + ks[t2]; \
+    k_plain[t2+1] = k_plain[t2]*ths->n[t2] + k[t2]; \
+  } \
 }
 
-#define MACRO_count_k_ks                                                      \
-{                                                                             \
-  for (t = ths->d-1; (t > 0) && (kp[t] == ths->N[t]-1); t--)                  \
-  {                                                                           \
-    kp[t] = k[t] = 0;                                                         \
-    ks[t]= ths->N[t]/2;                                                       \
-  }                                                                           \
-                                                                              \
-  kp[t]++; k[t]++; ks[t]++;                                                   \
-  if(kp[t] == ths->N[t]/2)                                                    \
-  {                                                                           \
-    k[t] = ths->n[t] - ths->N[t]/2;                                           \
-    ks[t] = 0;                                                                \
-  }                                                                           \
-}                                                                             \
-
-
-/** sub routines for the fast transforms
- *  matrix vector multiplication with \f$D, D^T\f$
- */
-#define MACRO_nfft_D(which_one)                                               \
-static inline void nfft_D_serial_ ## which_one (nfft_plan *ths)               \
-{                                                                             \
-  C *f_hat, *g_hat;                     /**< local copy                     */\
-  R c_phi_inv_k[ths->d+1];              /**< postfix product of PHI_HUT     */\
-  int t, t2;                            /**< index dimensions               */\
-  int k_L;                              /**< plain index                    */\
-  int kp[ths->d];                       /**< multi index (simple)           */\
-  int k[ths->d];                        /**< multi index in g_hat           */\
-  int ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/\
-  int k_plain[ths->d+1];                /**< postfix plain index            */\
-  int ks_plain[ths->d+1];               /**< postfix plain index            */\
-                                                                              \
-  f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat;                             \
-  MACRO_nfft_D_init_result_ ## which_one;                                     \
-                                                                              \
-  c_phi_inv_k[0] = K(1.0);                                                    \
-  k_plain[0] = 0;                                                             \
-  ks_plain[0] = 0;                                                            \
-                                                                              \
-  if (ths->nfft_flags & PRE_PHI_HUT)                                          \
-  {                                                                           \
-    MACRO_init_k_ks;                                                          \
-                                                                              \
-    for (k_L = 0; k_L < ths->N_total; k_L++)                                  \
-    {                                                                         \
-      MACRO_update_c_phi_inv_k(with_PRE_PHI_HUT);                             \
-      MACRO_nfft_D_compute_ ## which_one;                                     \
-      MACRO_count_k_ks;                                                       \
-    } /* for(k_L) */                                                          \
-  } /* if(PRE_PHI_HUT) */                                                     \
-  else                                                                        \
-  {                                                                           \
-    MACRO_init_k_ks;                                                          \
-    for (k_L = 0; k_L < ths->N_total; k_L++)                                  \
-    {                                                                         \
-      MACRO_update_c_phi_inv_k(without_PRE_PHI_HUT);                          \
-      MACRO_nfft_D_compute_ ## which_one;                                     \
-      MACRO_count_k_ks;                                                       \
-    } /* for(k_L) */                                                          \
-  } /* else(PRE_PHI_HUT) */                                                   \
-} /* nfft_D */
+#define MACRO_count_k_ks \
+{ \
+  for (t = ths->d-1; (t > 0) && (kp[t] == ths->N[t]-1); t--) \
+  { \
+    kp[t] = k[t] = 0; \
+    ks[t]= ths->N[t]/2; \
+  } \
+\
+  kp[t]++; k[t]++; ks[t]++; \
+  if(kp[t] == ths->N[t]/2) \
+  { \
+    k[t] = ths->n[t] - ths->N[t]/2; \
+    ks[t] = 0; \
+  } \
+} \
+
+/* sub routines for the fast transforms  matrix vector multiplication with D, D^T */
+#define MACRO_D(which_one) \
+static inline void D_serial_ ## which_one (X(plan) *ths) \
+{ \
+  C *f_hat, *g_hat; /* local copy */ \
+  R c_phi_inv_k[ths->d+1]; /* postfix product of PHI_HUT */ \
+  INT t, t2; /* index dimensions */ \
+  INT k_L; /* plain index */ \
+  INT kp[ths->d]; /* multi index (simple) */ \
+  INT k[ths->d]; /* multi index in g_hat */ \
+  INT ks[ths->d]; /* multi index in f_hat, c_phi_inv*/ \
+  INT k_plain[ths->d+1]; /* postfix plain index */ \
+  INT ks_plain[ths->d+1]; /* postfix plain index */ \
+ \
+  f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat; \
+  MACRO_D_init_result_ ## which_one; \
+\
+  c_phi_inv_k[0] = K(1.0); \
+  k_plain[0] = 0; \
+  ks_plain[0] = 0; \
+\
+  MACRO_init_k_ks; \
+\
+  if (ths->flags & PRE_PHI_HUT) \
+  { \
+    for (k_L = 0; k_L < ths->N_total; k_L++) \
+    { \
+      MACRO_update_c_phi_inv_k(with_PRE_PHI_HUT); \
+      MACRO_D_compute_ ## which_one; \
+      MACRO_count_k_ks; \
+    } \
+  } \
+  else \
+  { \
+    for (k_L = 0; k_L < ths->N_total; k_L++) \
+    { \
+      MACRO_update_c_phi_inv_k(without_PRE_PHI_HUT); \
+      MACRO_D_compute_ ## which_one; \
+      MACRO_count_k_ks; \
+    } \
+  } \
+}
 
 #ifdef _OPENMP
-static void nfft_D_openmp_A(nfft_plan *ths)
+static inline void D_openmp_A(X(plan) *ths)
 {
   C *f_hat, *g_hat;                     /**< local copy                     */
-  int k_L;                              /**< plain index                    */
+  INT k_L;                              /**< plain index                    */
 
   f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat;
-  memset(g_hat,0,ths->n_total*sizeof(C));
+  memset(g_hat, 0, ths->n_total * sizeof(C));
 
-  if (ths->nfft_flags & PRE_PHI_HUT)
+  if (ths->flags & PRE_PHI_HUT)
   {
     #pragma omp parallel for default(shared) private(k_L)
     for (k_L = 0; k_L < ths->N_total; k_L++)
     {
-      int kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
-      int k[ths->d];                        /**< multi index in g_hat           */
-      int ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
+      INT kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
+      INT k[ths->d];                        /**< multi index in g_hat           */
+      INT ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
       R c_phi_inv_k_val = K(1.0);
-      int k_plain_val = 0;
-      int ks_plain_val = 0;
-      int t;
-      int k_temp = k_L;
+      INT k_plain_val = 0;
+      INT ks_plain_val = 0;
+      INT t;
+      INT k_temp = k_L;
 
       for (t = ths->d-1; t >= 0; t--)
       {
@@ -557,14 +487,14 @@ static void nfft_D_openmp_A(nfft_plan *ths)
     #pragma omp parallel for default(shared) private(k_L)
     for (k_L = 0; k_L < ths->N_total; k_L++)
     {
-      int kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
-      int k[ths->d];                        /**< multi index in g_hat           */
-      int ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
+      INT kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
+      INT k[ths->d];                        /**< multi index in g_hat           */
+      INT ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
       R c_phi_inv_k_val = K(1.0);
-      int k_plain_val = 0;
-      int ks_plain_val = 0;
-      int t;
-      int k_temp = k_L;
+      INT k_plain_val = 0;
+      INT ks_plain_val = 0;
+      INT t;
+      INT k_temp = k_L;
 
       for (t = ths->d-1; t >= 0; t--)
       {
@@ -579,7 +509,7 @@ static void nfft_D_openmp_A(nfft_plan *ths)
 
       for (t = 0; t < ths->d; t++)
       {
-        c_phi_inv_k_val /= (PHI_HUT(ks[t]-(ths->N[t]/2),t));
+        c_phi_inv_k_val /= (PHI_HUT(ths->n[t],ks[t]-(ths->N[t]/2),t));
         ks_plain_val = ks_plain_val*ths->N[t] + ks[t];
         k_plain_val = k_plain_val*ths->n[t] + k[t];
       }
@@ -591,42 +521,42 @@ static void nfft_D_openmp_A(nfft_plan *ths)
 #endif
 
 #ifndef _OPENMP
-MACRO_nfft_D(A)
+MACRO_D(A)
 #endif
 
-static void nfft_D_A(nfft_plan *ths)
+static inline void D_A(X(plan) *ths)
 {
 #ifdef _OPENMP
-  nfft_D_openmp_A(ths);
+  D_openmp_A(ths);
 #else
-  nfft_D_serial_A(ths);
+  D_serial_A(ths);
 #endif
 }
 
 #ifdef _OPENMP
-static void nfft_D_openmp_T(nfft_plan *ths)
+static void D_openmp_T(X(plan) *ths)
 {
   C *f_hat, *g_hat;                     /**< local copy                     */
-  int k_L;                              /**< plain index                    */
+  INT k_L;                              /**< plain index                    */
 
   f_hat = (C*)ths->f_hat; g_hat = (C*)ths->g_hat;
-  memset(f_hat,0,ths->N_total*sizeof(C));
+  memset(f_hat, 0, ths->N_total * sizeof(C));
 
-  if (ths->nfft_flags & PRE_PHI_HUT)
+  if (ths->flags & PRE_PHI_HUT)
   {
     #pragma omp parallel for default(shared) private(k_L)
     for (k_L = 0; k_L < ths->N_total; k_L++)
     {
-      int kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
-      int k[ths->d];                        /**< multi index in g_hat           */
-      int ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
+      INT kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
+      INT k[ths->d];                        /**< multi index in g_hat           */
+      INT ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
       R c_phi_inv_k_val = K(1.0);
-      int k_plain_val = 0;
-      int ks_plain_val = 0;
-      int t;
-      int k_temp = k_L;
+      INT k_plain_val = 0;
+      INT ks_plain_val = 0;
+      INT t;
+      INT k_temp = k_L;
 
-      for (t = ths->d-1; t >= 0; t--)
+      for (t = ths->d - 1; t >= 0; t--)
       {
         kp[t] = k_temp % ths->N[t];
         if (kp[t] >= ths->N[t]/2)
@@ -652,14 +582,14 @@ static void nfft_D_openmp_T(nfft_plan *ths)
     #pragma omp parallel for default(shared) private(k_L)
     for (k_L = 0; k_L < ths->N_total; k_L++)
     {
-      int kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
-      int k[ths->d];                        /**< multi index in g_hat           */
-      int ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
+      INT kp[ths->d];                       /**< multi index (simple)           */ //0..N-1
+      INT k[ths->d];                        /**< multi index in g_hat           */
+      INT ks[ths->d];                       /**< multi index in f_hat, c_phi_inv*/
       R c_phi_inv_k_val = K(1.0);
-      int k_plain_val = 0;
-      int ks_plain_val = 0;
-      int t;
-      int k_temp = k_L;
+      INT k_plain_val = 0;
+      INT ks_plain_val = 0;
+      INT t;
+      INT k_temp = k_L;
 
       for (t = ths->d-1; t >= 0; t--)
       {
@@ -674,7 +604,7 @@ static void nfft_D_openmp_T(nfft_plan *ths)
 
       for (t = 0; t < ths->d; t++)
       {
-        c_phi_inv_k_val /= (PHI_HUT(ks[t]-(ths->N[t]/2),t));
+        c_phi_inv_k_val /= (PHI_HUT(ths->n[t],ks[t]-(ths->N[t]/2),t));
         ks_plain_val = ks_plain_val*ths->N[t] + ks[t];
         k_plain_val = k_plain_val*ths->n[t] + k[t];
       }
@@ -686,300 +616,303 @@ static void nfft_D_openmp_T(nfft_plan *ths)
 #endif
 
 #ifndef _OPENMP
-MACRO_nfft_D(T)
+MACRO_D(T)
 #endif
 
-static void nfft_D_T(nfft_plan *ths)
+static void D_T(X(plan) *ths)
 {
 #ifdef _OPENMP
-  nfft_D_openmp_T(ths);
+  D_openmp_T(ths);
 #else
-  nfft_D_serial_T(ths);
+  D_serial_T(ths);
 #endif
 }
 
-/** sub routines for the fast transforms
- *  matrix vector multiplication with \f$B, B^{\rm T}\f$
- */
-#define MACRO_nfft_B_init_result_A  memset(f,0,ths->M_total*sizeof(C));
-#define MACRO_nfft_B_init_result_T memset(g,0,ths->n_total*sizeof(C));
+/* sub routines for the fast transforms matrix vector multiplication with B, B^T */
+#define MACRO_B_init_result_A memset(f, 0, (size_t)(ths->M_total) * sizeof(C));
+#define MACRO_B_init_result_T memset(g, 0, (size_t)(ths->n_total) * sizeof(C));
 
-#define MACRO_nfft_B_PRE_FULL_PSI_compute_A                                   \
-{                                                                             \
-  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]];                            \
+#define MACRO_B_PRE_FULL_PSI_compute_A \
+{ \
+  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \
 }
 
-#define MACRO_nfft_B_PRE_FULL_PSI_compute_T                                   \
-{                                                                             \
-  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj);                            \
+#define MACRO_B_PRE_FULL_PSI_compute_T \
+{ \
+  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \
 }
 
-#define MACRO_nfft_B_compute_A                                                \
-{                                                                             \
-  (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]];                            \
+#define MACRO_B_compute_A \
+{ \
+  (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]]; \
 }
 
-#define MACRO_nfft_B_compute_T                                                \
-{                                                                             \
-  g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj);                            \
+#define MACRO_B_compute_T \
+{ \
+  g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj); \
 }
 
 #define MACRO_with_FG_PSI fg_psi[t2][lj[t2]]
 
 #define MACRO_with_PRE_PSI ths->psi[(j*ths->d+t2) * (2*ths->m+2)+lj[t2]]
 
-#define MACRO_without_PRE_PSI  PHI(ths->x[j*ths->d+t2]                        \
+#define MACRO_without_PRE_PSI  PHI(ths->n[t2], ths->x[j*ths->d+t2] \
   - ((R)l[t2])/((R)ths->n[t2]), t2)
 
-#define MACRO_init_uo_l_lj_t                                                  \
-{                                                                             \
-  for (t = ths->d-1; t >= 0; t--)                                             \
-  {                                                                           \
-    nfft_uo(ths,j,&u[t],&o[t],t);                                             \
-    l[t] = u[t];                                                              \
-    lj[t] = 0;                                                                \
-  } /* for(t) */                                                              \
-  t++;                                                                        \
+#define MACRO_init_uo_l_lj_t \
+{ \
+  for (t = ths->d-1; t >= 0; t--) \
+  { \
+    uo(ths,j,&u[t],&o[t],t); \
+    l[t] = u[t]; \
+    lj[t] = 0; \
+  } \
+  t++; \
 }
 
-#define MACRO_update_phi_prod_ll_plain(which_one) {                           \
-  for(t2=t; t2<ths->d; t2++)                                                  \
-    {                                                                         \
-      phi_prod[t2+1] = phi_prod[t2]* MACRO_ ## which_one;                     \
-      ll_plain[t2+1] = ll_plain[t2]*ths->n[t2] +(l[t2]+ths->n[t2])%ths->n[t2];\
-    } /* for(t2) */                                                           \
+#define MACRO_update_phi_prod_ll_plain(which_one) { \
+  for (t2 = t; t2 < ths->d; t2++) \
+    { \
+      phi_prod[t2+1] = phi_prod[t2] * MACRO_ ## which_one; \
+      ll_plain[t2+1] = ll_plain[t2] * ths->n[t2] + (l[t2] + ths->n[t2]) % ths->n[t2]; \
+    } \
 }
 
-#define MACRO_count_uo_l_lj_t {                                               \
-  for(t = ths->d-1; (t > 0) && (l[t] == o[t]); t--)                           \
-    {                                                                         \
-      l[t] = u[t];                                                            \
-      lj[t] = 0;                                                              \
-    } /* for(t) */                                                            \
-                                                                              \
-  l[t]++;                                                                     \
-  lj[t]++;                                                                    \
+#define MACRO_count_uo_l_lj_t \
+{ \
+  for (t = ths->d-1; (t > 0) && (l[t] == o[t]); t--) \
+  { \
+    l[t] = u[t]; \
+    lj[t] = 0; \
+  } \
+ \
+  l[t]++; \
+  lj[t]++; \
 }
 
-#define MACRO_nfft_B(which_one)                                               \
-static inline void nfft_B_serial_ ## which_one (nfft_plan *ths)               \
-{                                                                             \
-  int lprod; /* 'regular bandwidth' of matrix B  */                           \
-  int u[ths->d], o[ths->d]; /* multi band with respect to x_j */              \
-  int t, t2; /* index dimensions */                                           \
-  int j; /* index nodes */                                                    \
-  int l_L, ix; /* index one row of B */                                       \
-  int l[ths->d]; /* multi index u<=l<=o */                                    \
-  int lj[ths->d]; /* multi index 0<=lj<u+o+1 */                               \
-  int ll_plain[ths->d+1]; /* postfix plain index in g */                      \
-  R phi_prod[ths->d+1]; /* postfix product of PHI */                          \
-  C *f, *g; /* local copy */                                                  \
-  C *fj; /* local copy */                                                     \
-  R y[ths->d];                                                                \
-  R fg_psi[ths->d][2*ths->m+2];                                               \
-  R fg_exp_l[ths->d][2*ths->m+2];                                             \
-  int l_fg,lj_fg;                                                             \
-  R tmpEXP1, tmpEXP2, tmpEXP2sq, tmp1, tmp2, tmp3;                            \
-  R ip_w;                                                                     \
-  int ip_u;                                                                   \
-  int ip_s = ths->K/(ths->m+2);                                               \
-                                                                              \
-  f = (C*)ths->f; g = (C*)ths->g;                                             \
-                                                                              \
-  MACRO_nfft_B_init_result_ ## which_one;                                     \
-                                                                              \
-  if (ths->nfft_flags & PRE_FULL_PSI)                                         \
-  {                                                                           \
-    for (ix = 0, j = 0, fj = f; j < ths->M_total; j++, fj++)                  \
-      for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++)                   \
-        MACRO_nfft_B_PRE_FULL_PSI_compute_ ## which_one;                      \
-    return;                                                                   \
-  }                                                                           \
-                                                                              \
-  phi_prod[0] = K(1.0);                                                       \
-  ll_plain[0] = 0;                                                            \
-                                                                              \
-  for (t = 0, lprod = 1; t < ths->d; t++)                                     \
-    lprod *= (2*ths->m+2);                                                    \
-                                                                              \
-  if (ths->nfft_flags & PRE_PSI)                                              \
-  {                                                                           \
-    for (j = 0, fj = f; j < ths->M_total; j++, fj++)                          \
-    {                                                                         \
-      MACRO_init_uo_l_lj_t;                                                   \
-                                                                              \
-      for (l_L = 0; l_L < lprod; l_L++)                                       \
-      {                                                                       \
-        MACRO_update_phi_prod_ll_plain(with_PRE_PSI);                         \
-                                                                              \
-        MACRO_nfft_B_compute_ ## which_one;                                   \
-                                                                              \
-        MACRO_count_uo_l_lj_t;                                                \
-      } /* for(l_L) */                                                        \
-    } /* for(j) */                                                            \
-    return;                                                                   \
-  } /* if(PRE_PSI) */                                                         \
-                                                                              \
-  if (ths->nfft_flags & PRE_FG_PSI)                                           \
-  {                                                                           \
-    for(t2 = 0; t2 < ths->d; t2++)                                            \
-    {                                                                         \
-      tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);                                      \
-      tmpEXP2sq = tmpEXP2*tmpEXP2;                                            \
-      tmp2 = K(1.0);                                                          \
-      tmp3 = K(1.0);                                                          \
-      fg_exp_l[t2][0] = K(1.0);                                               \
-      for(lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)                          \
-      {                                                                       \
-        tmp3 = tmp2*tmpEXP2;                                                  \
-        tmp2 *= tmpEXP2sq;                                                    \
-        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;                     \
-      }                                                                       \
-    }                                                                         \
-    for (j = 0, fj = f; j < ths->M_total; j++, fj++)                          \
-    {                                                                         \
-      MACRO_init_uo_l_lj_t;                                                   \
-                                                                              \
-      for (t2 = 0; t2 < ths->d; t2++)                                         \
-      {                                                                       \
-        fg_psi[t2][0] = ths->psi[2*(j*ths->d+t2)];                            \
-        tmpEXP1 = ths->psi[2*(j*ths->d+t2)+1];                                \
-        tmp1 = K(1.0);                                                        \
-        for (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)       \
-        {                                                                     \
-          tmp1 *= tmpEXP1;                                                    \
-          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];         \
-        }                                                                     \
-      }                                                                       \
-                                                                              \
-      for (l_L= 0; l_L < lprod; l_L++)                                        \
-      {                                                                       \
-        MACRO_update_phi_prod_ll_plain(with_FG_PSI);                          \
-                                                                              \
-        MACRO_nfft_B_compute_ ## which_one;                                   \
-                                                                              \
-        MACRO_count_uo_l_lj_t;                                                \
-      } /* for(l_L) */                                                        \
-    } /* for(j) */                                                            \
-    return;                                                                   \
-  } /* if(PRE_FG_PSI) */                                                      \
-                                                                              \
-  if (ths->nfft_flags & FG_PSI)                                               \
-  {                                                                           \
-    for (t2 = 0; t2 < ths->d; t2++)                                           \
-    {                                                                         \
-      tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);                                      \
-      tmpEXP2sq = tmpEXP2*tmpEXP2;                                            \
-      tmp2 = K(1.0);                                                          \
-      tmp3 = K(1.0);                                                          \
-      fg_exp_l[t2][0] = K(1.0);                                               \
-      for (lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++)                         \
-      {                                                                       \
-        tmp3 = tmp2*tmpEXP2;                                                  \
-        tmp2 *= tmpEXP2sq;                                                    \
-        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3;                     \
-      }                                                                       \
-    }                                                                         \
-    for (j = 0, fj = f; j < ths->M_total; j++, fj++)                          \
-    {                                                                         \
-      MACRO_init_uo_l_lj_t;                                                   \
-                                                                              \
-      for (t2 = 0; t2 < ths->d; t2++)                                         \
-      {                                                                       \
-        fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));\
-                                                                              \
-        tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2])         \
-          /ths->b[t2]);                                                       \
-        tmp1 = K(1.0);                                                        \
-        for (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++)     \
-        {                                                                     \
-          tmp1 *= tmpEXP1;                                                    \
-          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg];         \
-        }                                                                     \
-      }                                                                       \
-                                                                              \
-      for (l_L = 0; l_L < lprod; l_L++)                                       \
-      {                                                                       \
-        MACRO_update_phi_prod_ll_plain(with_FG_PSI);                          \
-                                                                              \
-        MACRO_nfft_B_compute_ ## which_one;                                   \
-                                                                              \
-        MACRO_count_uo_l_lj_t;                                                \
-      } /* for(l_L) */                                                        \
-    } /* for(j) */                                                            \
-    return;                                                                   \
-  } /* if(FG_PSI) */                                                          \
-                                                                              \
-  if (ths->nfft_flags & PRE_LIN_PSI)                                          \
-  {                                                                           \
-    for (j = 0, fj=f; j<ths->M_total; j++, fj++)                              \
-    {                                                                         \
-      MACRO_init_uo_l_lj_t;                                                   \
-                                                                              \
-      for (t2 = 0; t2 < ths->d; t2++)                                         \
-      {                                                                       \
-        y[t2] = ((ths->n[t2]*ths->x[j*ths->d+t2]-(R)u[t2])                    \
-          * ((R)ths->K))/(ths->m+2);                                          \
-        ip_u  = LRINT(FLOOR(y[t2]));                                          \
-        ip_w  = y[t2]-ip_u;                                                   \
-        for (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++)         \
-        {                                                                     \
-          fg_psi[t2][lj_fg] = ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s)]  \
-            * (1-ip_w) + ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)]     \
-            * (ip_w);                                                         \
-        }                                                                     \
-      }                                                                       \
-                                                                              \
-      for (l_L = 0; l_L < lprod; l_L++)                                       \
-      {                                                                       \
-        MACRO_update_phi_prod_ll_plain(with_FG_PSI);                          \
-                                                                              \
-        MACRO_nfft_B_compute_ ## which_one;                                   \
-                                                                              \
-        MACRO_count_uo_l_lj_t;                                                \
-      } /* for(l_L) */                                                        \
-    } /* for(j) */                                                            \
-    return;                                                                   \
-  } /* if(PRE_LIN_PSI) */                                                     \
-                                                                              \
-  /* no precomputed psi at all */                                             \
-  for (j = 0, fj = f; j < ths->M_total; j++, fj++)                            \
-  {                                                                           \
-    MACRO_init_uo_l_lj_t;                                                     \
-                                                                              \
-    for (l_L = 0; l_L < lprod; l_L++)                                         \
-    {                                                                         \
-      MACRO_update_phi_prod_ll_plain(without_PRE_PSI);                        \
-                                                                              \
-      MACRO_nfft_B_compute_ ## which_one;                                     \
-                                                                              \
-      MACRO_count_uo_l_lj_t;                                                  \
-    } /* for(l_L) */                                                          \
-  } /* for(j) */                                                              \
-} /* nfft_B */                                                                \
+#define MACRO_B(which_one) \
+static inline void B_serial_ ## which_one (X(plan) *ths) \
+{ \
+  INT lprod; /* 'regular bandwidth' of matrix B  */ \
+  INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */ \
+  INT t, t2; /* index dimensions */ \
+  INT j; /* index nodes */ \
+  INT l_L, ix; /* index one row of B */ \
+  INT l[ths->d]; /* multi index u<=l<=o */ \
+  INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */ \
+  INT ll_plain[ths->d+1]; /* postfix plain index in g */ \
+  R phi_prod[ths->d+1]; /* postfix product of PHI */ \
+  C *f, *g; /* local copy */ \
+  C *fj; /* local copy */ \
+  R y[ths->d]; \
+  R fg_psi[ths->d][2*ths->m+2]; \
+  R fg_exp_l[ths->d][2*ths->m+2]; \
+  INT l_fg,lj_fg; \
+  R tmpEXP1, tmpEXP2, tmpEXP2sq, tmp1, tmp2, tmp3; \
+  R ip_w; \
+  INT ip_u; \
+  INT ip_s = ths->K/(ths->m+2); \
+ \
+  f = (C*)ths->f; g = (C*)ths->g; \
+ \
+  MACRO_B_init_result_ ## which_one; \
+ \
+  if (ths->flags & PRE_FULL_PSI) \
+  { \
+    for (ix = 0, j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \
+      { \
+        MACRO_B_PRE_FULL_PSI_compute_ ## which_one; \
+      } \
+    } \
+    return; \
+  } \
+\
+  phi_prod[0] = K(1.0); \
+  ll_plain[0] = 0; \
+\
+  for (t = 0, lprod = 1; t < ths->d; t++) \
+    lprod *= (2 * ths->m + 2); \
+\
+  if (ths->flags & PRE_PSI) \
+  { \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+ \
+      for (l_L = 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_prod_ll_plain(with_PRE_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      } /* for(l_L) */ \
+    } /* for(j) */ \
+    return; \
+  } /* if(PRE_PSI) */ \
+ \
+  if (ths->flags & PRE_FG_PSI) \
+  { \
+    for(t2 = 0; t2 < ths->d; t2++) \
+    { \
+      tmpEXP2 = EXP(K(-1.0) / ths->b[t2]); \
+      tmpEXP2sq = tmpEXP2*tmpEXP2; \
+      tmp2 = K(1.0); \
+      tmp3 = K(1.0); \
+      fg_exp_l[t2][0] = K(1.0); \
+      for (lj_fg = 1; lj_fg <= (2 * ths->m + 2); lj_fg++) \
+      { \
+        tmp3 = tmp2*tmpEXP2; \
+        tmp2 *= tmpEXP2sq; \
+        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1] * tmp3; \
+      } \
+    } \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+ \
+      for (t2 = 0; t2 < ths->d; t2++) \
+      { \
+        fg_psi[t2][0] = ths->psi[2*(j*ths->d+t2)]; \
+        tmpEXP1 = ths->psi[2*(j*ths->d+t2)+1]; \
+        tmp1 = K(1.0); \
+        for (l_fg = u[t2]+1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++) \
+        { \
+          tmp1 *= tmpEXP1; \
+          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg]; \
+        } \
+      } \
+ \
+      for (l_L= 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      } /* for(l_L) */ \
+    } /* for(j) */ \
+    return; \
+  } /* if(PRE_FG_PSI) */ \
+ \
+  if (ths->flags & FG_PSI) \
+  { \
+    for (t2 = 0; t2 < ths->d; t2++) \
+    { \
+      tmpEXP2 = EXP(K(-1.0)/ths->b[t2]); \
+      tmpEXP2sq = tmpEXP2*tmpEXP2; \
+      tmp2 = K(1.0); \
+      tmp3 = K(1.0); \
+      fg_exp_l[t2][0] = K(1.0); \
+      for (lj_fg = 1; lj_fg <= (2*ths->m+2); lj_fg++) \
+      { \
+        tmp3 = tmp2*tmpEXP2; \
+        tmp2 *= tmpEXP2sq; \
+        fg_exp_l[t2][lj_fg] = fg_exp_l[t2][lj_fg-1]*tmp3; \
+      } \
+    } \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+ \
+      for (t2 = 0; t2 < ths->d; t2++) \
+      { \
+        fg_psi[t2][0] = (PHI(ths->n[t2], (ths->x[j*ths->d+t2] - ((R)u[t2])/((R)(ths->n[t2]))), t2));\
+ \
+        tmpEXP1 = EXP(K(2.0) * ((R)(ths->n[t2]) * ths->x[j * ths->d + t2] - (R)(u[t2])) \
+          /ths->b[t2]); \
+        tmp1 = K(1.0); \
+        for (l_fg = u[t2] + 1, lj_fg = 1; l_fg <= o[t2]; l_fg++, lj_fg++) \
+        { \
+          tmp1 *= tmpEXP1; \
+          fg_psi[t2][lj_fg] = fg_psi[t2][0]*tmp1*fg_exp_l[t2][lj_fg]; \
+        } \
+      } \
+ \
+      for (l_L = 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      } /* for(l_L) */ \
+    } /* for(j) */ \
+    return; \
+  } /* if(FG_PSI) */ \
+ \
+  if (ths->flags & PRE_LIN_PSI) \
+  { \
+    for (j = 0, fj=f; j<ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+ \
+      for (t2 = 0; t2 < ths->d; t2++) \
+      { \
+        y[t2] = (((R)(ths->n[t2]) * ths->x[j * ths->d + t2] - (R)(u[t2])) \
+          * ((R)(ths->K))) / (R)(ths->m + 2); \
+        ip_u  = LRINT(FLOOR(y[t2])); \
+        ip_w  = y[t2]-ip_u; \
+        for (l_fg = u[t2], lj_fg = 0; l_fg <= o[t2]; l_fg++, lj_fg++) \
+        { \
+          fg_psi[t2][lj_fg] = ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s)] \
+            * (1-ip_w) + ths->psi[(ths->K+1)*t2 + ABS(ip_u-lj_fg*ip_s+1)] \
+            * (ip_w); \
+        } \
+      } \
+ \
+      for (l_L = 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_prod_ll_plain(with_FG_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      } /* for(l_L) */ \
+    } /* for(j) */ \
+    return; \
+  } /* if(PRE_LIN_PSI) */ \
+ \
+  /* no precomputed psi at all */ \
+  for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+  { \
+    MACRO_init_uo_l_lj_t; \
+ \
+    for (l_L = 0; l_L < lprod; l_L++) \
+    { \
+      MACRO_update_phi_prod_ll_plain(without_PRE_PSI); \
+ \
+      MACRO_B_compute_ ## which_one; \
+ \
+      MACRO_count_uo_l_lj_t; \
+    } /* for(l_L) */ \
+  } /* for(j) */ \
+} /* nfft_B */ \
 
 #ifndef _OPENMP
-MACRO_nfft_B(A)
+MACRO_B(A)
 #endif
 
 #ifdef _OPENMP
-static inline void nfft_B_openmp_A (nfft_plan *ths)
+static inline void B_openmp_A (X(plan) *ths)
 {
-  int lprod; /* 'regular bandwidth' of matrix B  */
-  int k;
+  INT lprod; /* 'regular bandwidth' of matrix B  */
+  INT k;
 
-  memset(ths->f,0,ths->M_total*sizeof(C));
+  memset(ths->f, 0, ths->M_total * sizeof(C));
 
   for (k = 0, lprod = 1; k < ths->d; k++)
     lprod *= (2*ths->m+2);
 
-  if (ths->nfft_flags & PRE_FULL_PSI)
+  if (ths->flags & PRE_FULL_PSI)
   {
     #pragma omp parallel for default(shared) private(k)
     for (k = 0; k < ths->M_total; k++)
     {
-      int l;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       ths->f[j] = K(0.0);
       for (l = 0; l < lprod; l++)
         ths->f[j] += ths->psi[j*lprod+l] * ths->g[ths->psi_index_g[j*lprod+l]];
@@ -987,19 +920,19 @@ static inline void nfft_B_openmp_A (nfft_plan *ths)
     return;
   }
 
-  if (ths->nfft_flags & PRE_PSI)
+  if (ths->flags & PRE_PSI)
   {
     #pragma omp parallel for default(shared) private(k)
     for (k = 0; k < ths->M_total; k++)
     {
-      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
-      int t, t2; /* index dimensions */
-      int l_L; /* index one row of B */
-      int l[ths->d]; /* multi index u<=l<=o */
-      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
-      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      INT t, t2; /* index dimensions */
+      INT l_L; /* index one row of B */
+      INT l[ths->d]; /* multi index u<=l<=o */
+      INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      INT ll_plain[ths->d+1]; /* postfix plain index in g */
       R phi_prod[ths->d+1]; /* postfix product of PHI */
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
       phi_prod[0] = K(1.0);
       ll_plain[0] = 0;
@@ -1018,14 +951,14 @@ static inline void nfft_B_openmp_A (nfft_plan *ths)
     return;
   } /* if(PRE_PSI) */
 
-  if (ths->nfft_flags & PRE_FG_PSI)
+  if (ths->flags & PRE_FG_PSI)
   {
-    int t, t2; /* index dimensions */
+    INT t, t2; /* index dimensions */
     R fg_exp_l[ths->d][2*ths->m+2];
 
-    for(t2 = 0; t2 < ths->d; t2++)
+    for (t2 = 0; t2 < ths->d; t2++)
     {
-      int lj_fg;
+      INT lj_fg;
       R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
       R tmpEXP2sq = tmpEXP2*tmpEXP2;
       R tmp2 = K(1.0);
@@ -1042,16 +975,16 @@ static inline void nfft_B_openmp_A (nfft_plan *ths)
     #pragma omp parallel for default(shared) private(k,t,t2)
     for (k = 0; k < ths->M_total; k++)
     {
-      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      INT ll_plain[ths->d+1]; /* postfix plain index in g */
       R phi_prod[ths->d+1]; /* postfix product of PHI */
-      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
-      int l[ths->d]; /* multi index u<=l<=o */
-      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      INT l[ths->d]; /* multi index u<=l<=o */
+      INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
       R fg_psi[ths->d][2*ths->m+2];
       R tmpEXP1, tmp1;
-      int l_fg,lj_fg;
-      int l_L;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l_fg,lj_fg;
+      INT l_L;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
       phi_prod[0] = K(1.0);
       ll_plain[0] = 0;
@@ -1082,16 +1015,16 @@ static inline void nfft_B_openmp_A (nfft_plan *ths)
     return;
   } /* if(PRE_FG_PSI) */
 
-  if (ths->nfft_flags & FG_PSI)
+  if (ths->flags & FG_PSI)
   {
-    int t, t2; /* index dimensions */
+    INT t, t2; /* index dimensions */
     R fg_exp_l[ths->d][2*ths->m+2];
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
     for (t2 = 0; t2 < ths->d; t2++)
     {
-      int lj_fg;
+      INT lj_fg;
       R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
       R tmpEXP2sq = tmpEXP2*tmpEXP2;
       R tmp2 = K(1.0);
@@ -1108,16 +1041,16 @@ static inline void nfft_B_openmp_A (nfft_plan *ths)
     #pragma omp parallel for default(shared) private(k,t,t2)
     for (k = 0; k < ths->M_total; k++)
     {
-      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      INT ll_plain[ths->d+1]; /* postfix plain index in g */
       R phi_prod[ths->d+1]; /* postfix product of PHI */
-      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
-      int l[ths->d]; /* multi index u<=l<=o */
-      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      INT l[ths->d]; /* multi index u<=l<=o */
+      INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
       R fg_psi[ths->d][2*ths->m+2];
       R tmpEXP1, tmp1;
-      int l_fg,lj_fg;
-      int l_L;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l_fg,lj_fg;
+      INT l_L;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
       phi_prod[0] = K(1.0);
       ll_plain[0] = 0;
@@ -1126,7 +1059,7 @@ static inline void nfft_B_openmp_A (nfft_plan *ths)
 
       for (t2 = 0; t2 < ths->d; t2++)
       {
-        fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));
+        fg_psi[t2][0] = (PHI(ths->n[t2],(ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));
 
         tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2])
           /ths->b[t2]);
@@ -1150,27 +1083,27 @@ static inline void nfft_B_openmp_A (nfft_plan *ths)
     return;
   } /* if(FG_PSI) */
 
-  if (ths->nfft_flags & PRE_LIN_PSI)
+  if (ths->flags & PRE_LIN_PSI)
   {
-    nfft_sort_nodes(ths);
+    sort(ths);
 
     #pragma omp parallel for default(shared) private(k)
     for (k = 0; k<ths->M_total; k++)
     {
-      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
-      int t, t2; /* index dimensions */
-      int l_L; /* index one row of B */
-      int l[ths->d]; /* multi index u<=l<=o */
-      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
-      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      INT t, t2; /* index dimensions */
+      INT l_L; /* index one row of B */
+      INT l[ths->d]; /* multi index u<=l<=o */
+      INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      INT ll_plain[ths->d+1]; /* postfix plain index in g */
       R phi_prod[ths->d+1]; /* postfix product of PHI */
       R y[ths->d];
       R fg_psi[ths->d][2*ths->m+2];
-      int l_fg,lj_fg;
+      INT l_fg,lj_fg;
       R ip_w;
-      int ip_u;
-      int ip_s = ths->K/(ths->m+2);
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT ip_u;
+      INT ip_s = ths->K/(ths->m+2);
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
       phi_prod[0] = K(1.0);
       ll_plain[0] = 0;
@@ -1204,19 +1137,19 @@ static inline void nfft_B_openmp_A (nfft_plan *ths)
   } /* if(PRE_LIN_PSI) */
 
   /* no precomputed psi at all */
-  nfft_sort_nodes(ths);
+  sort(ths);
 
   #pragma omp parallel for default(shared) private(k)
   for (k = 0; k < ths->M_total; k++)
   {
-    int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
-    int t, t2; /* index dimensions */
-    int l_L; /* index one row of B */
-    int l[ths->d]; /* multi index u<=l<=o */
-    int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
-    int ll_plain[ths->d+1]; /* postfix plain index in g */
+    INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+    INT t, t2; /* index dimensions */
+    INT l_L; /* index one row of B */
+    INT l[ths->d]; /* multi index u<=l<=o */
+    INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+    INT ll_plain[ths->d+1]; /* postfix plain index in g */
     R phi_prod[ths->d+1]; /* postfix product of PHI */
-    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+    INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
     phi_prod[0] = K(1.0);
     ll_plain[0] = 0;
@@ -1235,12 +1168,12 @@ static inline void nfft_B_openmp_A (nfft_plan *ths)
 }
 #endif
 
-static void nfft_B_A(nfft_plan *ths)
+static void B_A(X(plan) *ths)
 {
 #ifdef _OPENMP
-  nfft_B_openmp_A(ths);
+  B_openmp_A(ths);
 #else
-  nfft_B_serial_A(ths);
+  B_serial_A(ths);
 #endif
 }
 
@@ -1260,16 +1193,16 @@ static void nfft_B_A(nfft_plan *ths)
  *
  * \author Toni Volkmer
  */
-static inline int index_x_binary_search(const int *ar_x, const int len, const int key)
+static inline INT index_x_binary_search(const INT *ar_x, const INT len, const INT key)
 {
-  int left = 0, right = len - 1;
+  INT left = 0, right = len - 1;
 
   if (len == 1)
     return 0;
 
   while (left < right - 1)
   {
-    int i = (left + right) / 2;
+    INT i = (left + right) / 2;
     if (ar_x[2*i] >= key)
       right = i;
     else if (ar_x[2*i] < key)
@@ -1299,18 +1232,20 @@ static inline int index_x_binary_search(const int *ar_x, const int len, const in
  *
  * \author Toni Volkmer
  */
-static void nfft_adjoint_B_omp_blockwise_init(int *my_u0, int *my_o0, int *min_u_a, int *max_u_a, int *min_u_b, int *max_u_b, const int d, const int *n, const int m)
+static void nfft_adjoint_B_omp_blockwise_init(INT *my_u0, INT *my_o0,
+    INT *min_u_a, INT *max_u_a, INT *min_u_b, INT *max_u_b, const INT d,
+    const INT *n, const INT m)
 {
-  const int n0 = n[0];
-  int k;
-  int nthreads = omp_get_num_threads();
-  int nthreads_used = MIN(nthreads, n0);
-  int size_per_thread = n0 / nthreads_used;
-  int size_left = n0 - size_per_thread * nthreads_used;
-  int size_g[nthreads_used];
-  int offset_g[nthreads_used];
-  int my_id = omp_get_thread_num();
-  int n_prod_rest = 1;
+  const INT n0 = n[0];
+  INT k;
+  INT nthreads = omp_get_num_threads();
+  INT nthreads_used = MIN(nthreads, n0);
+  INT size_per_thread = n0 / nthreads_used;
+  INT size_left = n0 - size_per_thread * nthreads_used;
+  INT size_g[nthreads_used];
+  INT offset_g[nthreads_used];
+  INT my_id = omp_get_thread_num();
+  INT n_prod_rest = 1;
 
   for (k = 1; k < d; k++)
     n_prod_rest *= n[k];
@@ -1324,7 +1259,7 @@ static void nfft_adjoint_B_omp_blockwise_init(int *my_u0, int *my_o0, int *min_u
 
   if (my_id < nthreads_used)
   {
-    const int m22 = 2 * m + 2;
+    const INT m22 = 2 * m + 2;
 
     offset_g[0] = 0;
     for (k = 0; k < nthreads_used; k++)
@@ -1383,27 +1318,35 @@ static void nfft_adjoint_B_omp_blockwise_init(int *my_u0, int *my_o0, int *min_u
  *
  * \author Toni Volkmer
  */
-static void nfft_adjoint_B_compute_full_psi(
-    C *g, const int *psi_index_g, const R *psi, const C *f,
-    const int M, const int d, const int *n, const int m, const int nfft_flags, const int *index_x)
+static void nfft_adjoint_B_compute_full_psi(C *g, const INT *psi_index_g,
+    const R *psi, const C *f, const INT M, const INT d, const INT *n,
+    const INT m, const unsigned flags, const INT *index_x)
 {
-  int k;
-  int lprod, lprod_m1;
+  INT k;
+  INT lprod;
+#ifdef _OPENMP
+  INT lprod_m1;
+#endif
+#ifndef _OPENMP
+  UNUSED(n);
+#endif
   {
-    int t;
+    INT t;
     for(t = 0, lprod = 1; t < d; t++)
         lprod *= 2 * m + 2;
   }
+#ifdef _OPENMP
   lprod_m1 = lprod / (2 * m + 2);
+#endif
 
 #ifdef _OPENMP
-  if (nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+  if (flags & NFFT_OMP_BLOCKWISE_ADJOINT)
   {
     #pragma omp parallel private(k)
     {
-      int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;
-      const int *ar_x = index_x;
-      int n_prod_rest = 1;
+      INT my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;
+      const INT *ar_x = index_x;
+      INT n_prod_rest = 1;
 
       for (k = 1; k < d; k++)
         n_prod_rest *= n[k];
@@ -1420,23 +1363,23 @@ static void nfft_adjoint_B_compute_full_psi(
 #endif
         while (k < M)
         {
-          int l0, lrest;
-          int u_prod = ar_x[2*k];
-          int j = ar_x[2*k+1];
+          INT l0, lrest;
+          INT u_prod = ar_x[2*k];
+          INT j = ar_x[2*k+1];
 
           if (u_prod < min_u_a || u_prod > max_u_a)
             break;
 
           for (l0 = 0; l0 < 2 * m + 2; l0++)
           {
-            const int start_index = psi_index_g[j * lprod + l0 * lprod_m1];
+            const INT start_index = psi_index_g[j * lprod + l0 * lprod_m1];
 
             if (start_index < my_u0 * n_prod_rest || start_index > (my_o0+1) * n_prod_rest - 1)
               continue;
 
             for (lrest = 0; lrest < lprod_m1; lrest++)
             {
-              const int l = l0 * lprod_m1 + lrest;
+              const INT l = l0 * lprod_m1 + lrest;
               g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];
             }
           }
@@ -1455,22 +1398,22 @@ static void nfft_adjoint_B_compute_full_psi(
 #endif
         while (k < M)
         {
-          int l0, lrest;
-          int u_prod = ar_x[2*k];
-          int j = ar_x[2*k+1];
+          INT l0, lrest;
+          INT u_prod = ar_x[2*k];
+          INT j = ar_x[2*k+1];
 
           if (u_prod < min_u_b || u_prod > max_u_b)
             break;
 
           for (l0 = 0; l0 < 2 * m + 2; l0++)
           {
-            const int start_index = psi_index_g[j * lprod + l0 * lprod_m1];
+            const INT start_index = psi_index_g[j * lprod + l0 * lprod_m1];
 
             if (start_index < my_u0 * n_prod_rest || start_index > (my_o0+1) * n_prod_rest - 1)
               continue;
             for (lrest = 0; lrest < lprod_m1; lrest++)
             {
-              const int l = l0 * lprod_m1 + lrest;
+              const INT l = l0 * lprod_m1 + lrest;
               g[psi_index_g[j * lprod + l]] += psi[j * lprod + l] * f[j];
             }
           }
@@ -1483,11 +1426,13 @@ static void nfft_adjoint_B_compute_full_psi(
   } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */
 #endif
 
+#ifdef _OPENMP
   #pragma omp parallel for default(shared) private(k)
+#endif
   for (k = 0; k < M; k++)
   {
-    int l;
-    int j = (nfft_flags & NFFT_SORT_NODES) ? index_x[2*k+1] : k;
+    INT l;
+    INT j = (flags & NFFT_SORT_NODES) ? index_x[2*k+1] : k;
 
     for (l = 0; l < lprod; l++)
     {
@@ -1509,40 +1454,40 @@ static void nfft_adjoint_B_compute_full_psi(
 }
 
 #ifndef _OPENMP
-MACRO_nfft_B(T)
+MACRO_B(T)
 #endif
 
 #ifdef _OPENMP
-static inline void nfft_B_openmp_T(nfft_plan *ths)
+static inline void B_openmp_T(X(plan) *ths)
 {
-  int lprod; /* 'regular bandwidth' of matrix B  */
-  int k;
+  INT lprod; /* 'regular bandwidth' of matrix B  */
+  INT k;
 
-  memset(ths->g,0,ths->n_total*sizeof(C));
+  memset(ths->g, 0, (size_t)(ths->n_total) * sizeof(C));
 
   for (k = 0, lprod = 1; k < ths->d; k++)
     lprod *= (2*ths->m+2);
 
-  if (ths->nfft_flags & PRE_FULL_PSI)
+  if (ths->flags & PRE_FULL_PSI)
   {
-    nfft_adjoint_B_compute_full_psi(ths->g, ths->psi_index_g, ths->psi, ths->f, ths->M_total,
-            ths->d, ths->n, ths->m, ths->nfft_flags, ths->index_x);
+    nfft_adjoint_B_compute_full_psi(ths->g, ths->psi_index_g, ths->psi, ths->f,
+        ths->M_total, ths->d, ths->n, ths->m, ths->flags, ths->index_x);
     return;
   }
 
-  if (ths->nfft_flags & PRE_PSI)
+  if (ths->flags & PRE_PSI)
   {
     #pragma omp parallel for default(shared) private(k)
     for (k = 0; k < ths->M_total; k++)
     {
-      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
-      int t, t2; /* index dimensions */
-      int l_L; /* index one row of B */
-      int l[ths->d]; /* multi index u<=l<=o */
-      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
-      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      INT t, t2; /* index dimensions */
+      INT l_L; /* index one row of B */
+      INT l[ths->d]; /* multi index u<=l<=o */
+      INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      INT ll_plain[ths->d+1]; /* postfix plain index in g */
       R phi_prod[ths->d+1]; /* postfix product of PHI */
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
       phi_prod[0] = K(1.0);
       ll_plain[0] = 0;
@@ -1562,10 +1507,10 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
         val = phi_prod[ths->d] * ths->f[j];
 
         #pragma omp atomic
-        lhs_real[0] += creal(val);
+        lhs_real[0] += CREAL(val);
 
         #pragma omp atomic
-        lhs_real[1] += cimag(val);
+        lhs_real[1] += CIMAG(val);
 
         MACRO_count_uo_l_lj_t;
       } /* for(l_L) */
@@ -1573,13 +1518,13 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
     return;
   } /* if(PRE_PSI) */
 
-  if (ths->nfft_flags & PRE_FG_PSI)
+  if (ths->flags & PRE_FG_PSI)
   {
-    int t, t2; /* index dimensions */
+    INT t, t2; /* index dimensions */
     R fg_exp_l[ths->d][2*ths->m+2];
     for(t2 = 0; t2 < ths->d; t2++)
     {
-      int lj_fg;
+      INT lj_fg;
       R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
       R tmpEXP2sq = tmpEXP2*tmpEXP2;
       R tmp2 = K(1.0);
@@ -1596,16 +1541,16 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
     #pragma omp parallel for default(shared) private(k,t,t2)
     for (k = 0; k < ths->M_total; k++)
     {
-      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      INT ll_plain[ths->d+1]; /* postfix plain index in g */
       R phi_prod[ths->d+1]; /* postfix product of PHI */
-      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
-      int l[ths->d]; /* multi index u<=l<=o */
-      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      INT l[ths->d]; /* multi index u<=l<=o */
+      INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
       R fg_psi[ths->d][2*ths->m+2];
       R tmpEXP1, tmp1;
-      int l_fg,lj_fg;
-      int l_L;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l_fg,lj_fg;
+      INT l_L;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
       phi_prod[0] = K(1.0);
       ll_plain[0] = 0;
@@ -1637,10 +1582,10 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
         val = phi_prod[ths->d] * ths->f[j];
 
         #pragma omp atomic
-        lhs_real[0] += creal(val);
+        lhs_real[0] += CREAL(val);
 
         #pragma omp atomic
-        lhs_real[1] += cimag(val);
+        lhs_real[1] += CIMAG(val);
 
         MACRO_count_uo_l_lj_t;
       } /* for(l_L) */
@@ -1648,16 +1593,16 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
     return;
   } /* if(PRE_FG_PSI) */
 
-  if (ths->nfft_flags & FG_PSI)
+  if (ths->flags & FG_PSI)
   {
-    int t, t2; /* index dimensions */
+    INT t, t2; /* index dimensions */
     R fg_exp_l[ths->d][2*ths->m+2];
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
     for (t2 = 0; t2 < ths->d; t2++)
     {
-      int lj_fg;
+      INT lj_fg;
       R tmpEXP2 = EXP(K(-1.0)/ths->b[t2]);
       R tmpEXP2sq = tmpEXP2*tmpEXP2;
       R tmp2 = K(1.0);
@@ -1674,16 +1619,16 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
     #pragma omp parallel for default(shared) private(k,t,t2)
     for (k = 0; k < ths->M_total; k++)
     {
-      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      INT ll_plain[ths->d+1]; /* postfix plain index in g */
       R phi_prod[ths->d+1]; /* postfix product of PHI */
-      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
-      int l[ths->d]; /* multi index u<=l<=o */
-      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      INT l[ths->d]; /* multi index u<=l<=o */
+      INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
       R fg_psi[ths->d][2*ths->m+2];
       R tmpEXP1, tmp1;
-      int l_fg,lj_fg;
-      int l_L;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l_fg,lj_fg;
+      INT l_L;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
       phi_prod[0] = K(1.0);
       ll_plain[0] = 0;
@@ -1692,7 +1637,7 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
 
       for (t2 = 0; t2 < ths->d; t2++)
       {
-        fg_psi[t2][0] = (PHI((ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));
+        fg_psi[t2][0] = (PHI(ths->n[t2],(ths->x[j*ths->d+t2]-((R)u[t2])/ths->n[t2]),t2));
 
         tmpEXP1 = EXP(K(2.0)*(ths->n[t2]*ths->x[j*ths->d+t2] - u[t2])
           /ths->b[t2]);
@@ -1717,10 +1662,10 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
         val = phi_prod[ths->d] * ths->f[j];
 
         #pragma omp atomic
-        lhs_real[0] += creal(val);
+        lhs_real[0] += CREAL(val);
 
         #pragma omp atomic
-        lhs_real[1] += cimag(val);
+        lhs_real[1] += CIMAG(val);
 
         MACRO_count_uo_l_lj_t;
       } /* for(l_L) */
@@ -1728,27 +1673,27 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
     return;
   } /* if(FG_PSI) */
 
-  if (ths->nfft_flags & PRE_LIN_PSI)
+  if (ths->flags & PRE_LIN_PSI)
   {
-    nfft_sort_nodes(ths);
+    sort(ths);
 
     #pragma omp parallel for default(shared) private(k)
     for (k = 0; k<ths->M_total; k++)
     {
-      int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
-      int t, t2; /* index dimensions */
-      int l_L; /* index one row of B */
-      int l[ths->d]; /* multi index u<=l<=o */
-      int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
-      int ll_plain[ths->d+1]; /* postfix plain index in g */
+      INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+      INT t, t2; /* index dimensions */
+      INT l_L; /* index one row of B */
+      INT l[ths->d]; /* multi index u<=l<=o */
+      INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+      INT ll_plain[ths->d+1]; /* postfix plain index in g */
       R phi_prod[ths->d+1]; /* postfix product of PHI */
       R y[ths->d];
       R fg_psi[ths->d][2*ths->m+2];
-      int l_fg,lj_fg;
+      INT l_fg,lj_fg;
       R ip_w;
-      int ip_u;
-      int ip_s = ths->K/(ths->m+2);
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT ip_u;
+      INT ip_s = ths->K/(ths->m+2);
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
       phi_prod[0] = K(1.0);
       ll_plain[0] = 0;
@@ -1782,10 +1727,10 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
         val = phi_prod[ths->d] * ths->f[j];
 
         #pragma omp atomic
-        lhs_real[0] += creal(val);
+        lhs_real[0] += CREAL(val);
 
         #pragma omp atomic
-        lhs_real[1] += cimag(val);
+        lhs_real[1] += CIMAG(val);
 
         MACRO_count_uo_l_lj_t;
       } /* for(l_L) */
@@ -1794,19 +1739,19 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
   } /* if(PRE_LIN_PSI) */
 
   /* no precomputed psi at all */
-  nfft_sort_nodes(ths);
+  sort(ths);
 
   #pragma omp parallel for default(shared) private(k)
   for (k = 0; k < ths->M_total; k++)
   {
-    int u[ths->d], o[ths->d]; /* multi band with respect to x_j */
-    int t, t2; /* index dimensions */
-    int l_L; /* index one row of B */
-    int l[ths->d]; /* multi index u<=l<=o */
-    int lj[ths->d]; /* multi index 0<=lj<u+o+1 */
-    int ll_plain[ths->d+1]; /* postfix plain index in g */
+    INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */
+    INT t, t2; /* index dimensions */
+    INT l_L; /* index one row of B */
+    INT l[ths->d]; /* multi index u<=l<=o */
+    INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+    INT ll_plain[ths->d+1]; /* postfix plain index in g */
     R phi_prod[ths->d+1]; /* postfix product of PHI */
-    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+    INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
     phi_prod[0] = K(1.0);
     ll_plain[0] = 0;
@@ -1826,10 +1771,10 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
       val = phi_prod[ths->d] * ths->f[j];
 
       #pragma omp atomic
-      lhs_real[0] += creal(val);
+      lhs_real[0] += CREAL(val);
 
       #pragma omp atomic
-      lhs_real[1] += cimag(val);
+      lhs_real[1] += CIMAG(val);
 
       MACRO_count_uo_l_lj_t;
     } /* for(l_L) */
@@ -1837,21 +1782,21 @@ static inline void nfft_B_openmp_T(nfft_plan *ths)
 }
 #endif
 
-static void nfft_B_T(nfft_plan *ths)
+static void B_T(X(plan) *ths)
 {
 #ifdef _OPENMP
-  nfft_B_openmp_T(ths);
+  B_openmp_T(ths);
 #else
-  nfft_B_serial_T(ths);
+  B_serial_T(ths);
 #endif
 }
 
 /* ## specialized version for d=1  ########################################### */
 
-static void nfft_1d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
+static void nfft_1d_init_fg_exp_l(R *fg_exp_l, const INT m, const R b)
 {
-  const int tmp2 = 2*m+2;
-  int l;
+  const INT tmp2 = 2*m+2;
+  INT l;
   R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;
 
   fg_exp_b0 = EXP(K(-1.0)/b);
@@ -1868,14 +1813,14 @@ static void nfft_1d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
 
 
 static void nfft_trafo_1d_compute(C *fj, const C *g,const R *psij_const,
-  const R *xj, const int n, const int m)
+  const R *xj, const INT n, const INT m)
 {
-  int u, o, l;
+  INT u, o, l;
   const C *gj;
   const R *psij;
   psij = psij_const;
 
-  nfft_uo2(&u, &o, *xj, n, m);
+  uo2(&u, &o, *xj, n, m);
 
   if (u < o)
   {
@@ -1892,17 +1837,17 @@ static void nfft_trafo_1d_compute(C *fj, const C *g,const R *psij_const,
 }
 
 #ifndef _OPENMP
-static void nfft_adjoint_1d_compute_serial(const C *fj, C *g,const R *psij_const,
-  const R *xj, const int n, const int m)
+static void nfft_adjoint_1d_compute_serial(const C *fj, C *g,
+    const R *psij_const, const R *xj, const INT n, const INT m)
 {
-  int u,o,l;
+  INT u,o,l;
   C *gj;
   const R *psij;
-  psij=psij_const;
+  psij = psij_const;
 
-  nfft_uo2(&u,&o,*xj, n, m);
+  uo2(&u,&o,*xj, n, m);
 
-  if(u<o)
+  if (u < o)
   {
     for (l = 0, gj = g+u; l <= 2*m+1; l++)
       (*gj++) += (*psij++) * (*fj);
@@ -1919,21 +1864,21 @@ static void nfft_adjoint_1d_compute_serial(const C *fj, C *g,const R *psij_const
 
 #ifdef _OPENMP
 /* adjoint NFFT one-dimensional case with OpenMP atomic operations */
-static void nfft_adjoint_1d_compute_omp_atomic(const C f, C *g,const R *psij_const,
-  const R *xj, const int n, const int m)
+static void nfft_adjoint_1d_compute_omp_atomic(const C f, C *g,
+    const R *psij_const, const R *xj, const INT n, const INT m)
 {
-  int u,o,l;
+  INT u,o,l;
   C *gj;
-  int index_temp[2*m+2];
+  INT index_temp[2*m+2];
 
-  nfft_uo2(&u,&o,*xj, n, m);
+  uo2(&u,&o,*xj, n, m);
 
   for (l=0; l<=2*m+1; l++)
     index_temp[l] = (l+u)%n;
 
   for (l = 0, gj = g+u; l <= 2*m+1; l++)
   {
-    int i = index_temp[l];
+    INT i = index_temp[l];
     C *lhs = g+i;
     R *lhs_real = (R*)lhs;
     C val = psij_const[l] * f;
@@ -1962,18 +1907,19 @@ static void nfft_adjoint_1d_compute_omp_atomic(const C f, C *g,const R *psij_con
  *
  * \author Toni Volkmer
  */
-static void nfft_adjoint_1d_compute_omp_blockwise(const C f, C *g,const R *psij_const,
-  const R *xj, const int n, const int m, const int my_u0, const int my_o0)
+static void nfft_adjoint_1d_compute_omp_blockwise(const C f, C *g,
+    const R *psij_const, const R *xj, const INT n, const INT m,
+    const INT my_u0, const INT my_o0)
 {
-  int ar_u,ar_o,l;
+  INT ar_u,ar_o,l;
 
-  nfft_uo2(&ar_u,&ar_o,*xj, n, m);
+  uo2(&ar_u,&ar_o,*xj, n, m);
 
-  if(ar_u<ar_o)
+  if (ar_u < ar_o)
   {
-    int u = MAX(my_u0,ar_u);
-    int o = MIN(my_o0,ar_o);
-    int offset_psij = u-ar_u;
+    INT u = MAX(my_u0,ar_u);
+    INT o = MIN(my_o0,ar_o);
+    INT offset_psij = u-ar_u;
 #ifdef OMP_ASSERT
     assert(offset_psij >= 0);
     assert(o-u <= 2*m+1);
@@ -1985,9 +1931,9 @@ static void nfft_adjoint_1d_compute_omp_blockwise(const C f, C *g,const R *psij_
   }
   else
   {
-    int u = MAX(my_u0,ar_u);
-    int o = my_o0;
-    int offset_psij = u-ar_u;
+    INT u = MAX(my_u0,ar_u);
+    INT o = my_o0;
+    INT offset_psij = u-ar_u;
 #ifdef OMP_ASSERT
     assert(offset_psij >= 0);
     assert(o-u <= 2*m+1);
@@ -2002,7 +1948,7 @@ static void nfft_adjoint_1d_compute_omp_blockwise(const C f, C *g,const R *psij_
     offset_psij += my_u0-ar_u+n;
 
 #ifdef OMP_ASSERT
-    if (u<=o)
+    if (u <= o)
     {
       assert(o-u <= 2*m+1);
       if (offset_psij+o-u > 2*m+1)
@@ -2018,19 +1964,21 @@ static void nfft_adjoint_1d_compute_omp_blockwise(const C f, C *g,const R *psij_
 }
 #endif
 
-static void nfft_trafo_1d_B(nfft_plan *ths)
+static void nfft_trafo_1d_B(X(plan) *ths)
 {
-  const int n = ths->n[0], M = ths->M_total, m = ths->m, m2p2 = 2*m+2;
+  const INT n = ths->n[0], M = ths->M_total, m = ths->m, m2p2 = 2*m+2;
   const C *g = (C*)ths->g;
 
-  if (ths->nfft_flags & PRE_FULL_PSI)
+  if (ths->flags & PRE_FULL_PSI)
   {
-    int k;
+    INT k;
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int l;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       ths->f[j] = K(0.0);
       for (l = 0; l < m2p2; l++)
         ths->f[j] += ths->psi[j*m2p2+l] * g[ths->psi_index_g[j*m2p2+l]];
@@ -2038,34 +1986,38 @@ static void nfft_trafo_1d_B(nfft_plan *ths)
     return;
   } /* if(PRE_FULL_PSI) */
 
-  if (ths->nfft_flags & PRE_PSI)
+  if (ths->flags & PRE_PSI)
   {
-    int k;
+    INT k;
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       nfft_trafo_1d_compute(&ths->f[j], g, ths->psi + j * (2 * m + 2),
         &ths->x[j], n, m);
     }
     return;
   } /* if(PRE_PSI) */
 
-  if (ths->nfft_flags & PRE_FG_PSI)
+  if (ths->flags & PRE_FG_PSI)
   {
-    int k;
+    INT k;
     R fg_exp_l[m2p2];
 
     nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       const R fg_psij0 = ths->psi[2 * j], fg_psij1 = ths->psi[2 * j + 1];
       R fg_psij2 = K(1.0);
       R psij_const[m2p2];
-      int l;
+      INT l;
 
       psij_const[0] = fg_psij0;
 
@@ -2081,26 +2033,28 @@ static void nfft_trafo_1d_B(nfft_plan *ths)
     return;
   } /* if(PRE_FG_PSI) */
 
-  if (ths->nfft_flags & FG_PSI)
+  if (ths->flags & FG_PSI)
   {
-    int k;
+    INT k;
     R fg_exp_l[m2p2];
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
     nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
-      int u, o, l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT u, o, l;
       R fg_psij0, fg_psij1, fg_psij2;
       R psij_const[m2p2];
 
-      nfft_uo(ths, (int)j, &u, &o, 0);
-      fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0));
-      fg_psij1 = EXP(K(2.0) * (n * ths->x[j] - u) / ths->b[0]);
+      uo(ths, (INT)j, &u, &o, (INT)0);
+      fg_psij0 = (PHI(ths->n[0], ths->x[j] - ((R)(u))/(R)(n), 0));
+      fg_psij1 = EXP(K(2.0) * ((R)(n) * ths->x[j] - (R)(u)) / ths->b[0]);
       fg_psij2  = K(1.0);
 
       psij_const[0] = fg_psij0;
@@ -2116,27 +2070,29 @@ static void nfft_trafo_1d_B(nfft_plan *ths)
     return;
   } /* if(FG_PSI) */
 
-  if (ths->nfft_flags & PRE_LIN_PSI)
+  if (ths->flags & PRE_LIN_PSI)
   {
-    const int K = ths->K, ip_s = K / (m + 2);
-    int k;
+    const INT K = ths->K, ip_s = K / (m + 2);
+    INT k;
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int u, o, l;
+      INT u, o, l;
       R ip_y, ip_w;
-      int ip_u;
+      INT ip_u;
       R psij_const[m2p2];
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-      nfft_uo(ths, (int)j, &u, &o, 0);
+      uo(ths, (INT)j, &u, &o, (INT)0);
 
-      ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y - ip_u;
+      ip_y = FABS((R)(n) * ths->x[j] - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
 
       for (l = 0; l < m2p2; l++)
         psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)
@@ -2149,21 +2105,23 @@ static void nfft_trafo_1d_B(nfft_plan *ths)
   else
   {
     /* no precomputed psi at all */
-    int k;
+    INT k;
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
       R psij_const[m2p2];
-      int u, o, l;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT u, o, l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-      nfft_uo(ths, (int)j, &u, &o, 0);
+      uo(ths, (INT)j, &u, &o, (INT)0);
 
       for (l = 0; l < m2p2; l++)
-        psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0));
+        psij_const[l] = (PHI(ths->n[0], ths->x[j] - ((R)((u+l))) / (R)(n), 0));
 
       nfft_trafo_1d_compute(&ths->f[j], g, psij_const, &ths->x[j], n, m);
     }
@@ -2172,189 +2130,191 @@ static void nfft_trafo_1d_B(nfft_plan *ths)
 
 
 #ifdef OMP_ASSERT
-#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A                        \
-{                                                                             \
-          assert(ar_x[2*k] >= min_u_a || k == M-1);                           \
-          if (k > 0)                                                          \
-            assert(ar_x[2*k-2] < min_u_a);                                    \
+#define MACRO_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A \
+{ \
+          assert(ar_x[2*k] >= min_u_a || k == M-1); \
+          if (k > 0) \
+            assert(ar_x[2*k-2] < min_u_a); \
 }
 #else
-#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A
+#define MACRO_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A
 #endif
 
 #ifdef OMP_ASSERT
-#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B                        \
-{                                                                             \
-          assert(ar_x[2*k] >= min_u_b || k == M-1);                           \
-          if (k > 0)                                                          \
-            assert(ar_x[2*k-2] < min_u_b);                                    \
+#define MACRO_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B \
+{ \
+          assert(ar_x[2*k] >= min_u_b || k == M-1); \
+          if (k > 0) \
+            assert(ar_x[2*k-2] < min_u_b); \
 }
 #else
-#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B
+#define MACRO_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B
 #endif
 
-#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI                 \
-{                                                                             \
-            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g,               \
-                ths->psi + j * (2 * m + 2), ths->x + j, n, m, my_u0, my_o0);  \
+#define MACRO_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI \
+{ \
+            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, \
+                ths->psi + j * (2 * m + 2), ths->x + j, n, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI              \
-{                                                                             \
-            R psij_const[2 * m + 2];                                          \
-            int u, o, l;                                                      \
-            R fg_psij0 = ths->psi[2 * j];                                     \
-            R fg_psij1 = ths->psi[2 * j + 1];                                 \
-            R fg_psij2 = K(1.0);                                              \
-                                                                              \
-            psij_const[0] = fg_psij0;                                         \
-            for (l = 1; l <= 2 * m + 1; l++)                                  \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
-              psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];              \
-            }                                                                 \
-                                                                              \
-            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \
-                ths->x + j, n, m, my_u0, my_o0);                              \
+#define MACRO_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI \
+{ \
+            R psij_const[2 * m + 2]; \
+            INT u, o, l; \
+            R fg_psij0 = ths->psi[2 * j]; \
+            R fg_psij1 = ths->psi[2 * j + 1]; \
+            R fg_psij2 = K(1.0); \
+ \
+            psij_const[0] = fg_psij0; \
+            for (l = 1; l <= 2 * m + 1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
+              psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l]; \
+            } \
+ \
+            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \
+                ths->x + j, n, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI                  \
-{                                                                             \
-            R psij_const[2 * m + 2];                                          \
-            R fg_psij0, fg_psij1, fg_psij2;                                   \
-            int u, o, l;                                                      \
-                                                                              \
-            nfft_uo(ths, j, &u, &o, 0);                                       \
-            fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0));                           \
-            fg_psij1 = EXP(K(2.0) * (n * (ths->x[j]) - u) / ths->b[0]);       \
-            fg_psij2 = K(1.0);                                                \
-            psij_const[0] = fg_psij0;                                         \
-            for (l = 1; l <= 2 * m + 1; l++)                                  \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
-              psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l];              \
-            }                                                                 \
-                                                                              \
-            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \
-                ths->x + j, n, m, my_u0, my_o0);                              \
+#define MACRO_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI \
+{ \
+            R psij_const[2 * m + 2]; \
+            R fg_psij0, fg_psij1, fg_psij2; \
+            INT u, o, l; \
+ \
+            uo(ths, j, &u, &o, (INT)0); \
+            fg_psij0 = (PHI(ths->n[0],ths->x[j]-((R)u)/n,0)); \
+            fg_psij1 = EXP(K(2.0) * (n * (ths->x[j]) - u) / ths->b[0]); \
+            fg_psij2 = K(1.0); \
+            psij_const[0] = fg_psij0; \
+            for (l = 1; l <= 2 * m + 1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
+              psij_const[l] = fg_psij0 * fg_psij2 * fg_exp_l[l]; \
+            } \
+ \
+            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \
+                ths->x + j, n, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI             \
-{                                                                             \
-            R psij_const[2 * m + 2];                                          \
-            int ip_u;                                                         \
-            R ip_y, ip_w;                                                     \
-            int u, o, l;                                                      \
-                                                                              \
-            nfft_uo(ths, j, &u, &o, 0);                                       \
-                                                                              \
-            ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s);                       \
-            ip_u = LRINT(FLOOR(ip_y));                                        \
-            ip_w = ip_y - ip_u;                                               \
-            for (l = 0; l < 2 * m + 2; l++)                                   \
-              psij_const[l]                                                   \
-                  = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)              \
-                      + ths->psi[ABS(ip_u-l*ip_s+1)] * (ip_w);                \
-                                                                              \
-            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \
-                ths->x + j, n, m, my_u0, my_o0);                              \
+#define MACRO_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI \
+{ \
+            R psij_const[2 * m + 2]; \
+            INT ip_u; \
+            R ip_y, ip_w; \
+            INT u, o, l; \
+ \
+            uo(ths, j, &u, &o, (INT)0); \
+ \
+            ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s); \
+            ip_u = LRINT(FLOOR(ip_y)); \
+            ip_w = ip_y - ip_u; \
+            for (l = 0; l < 2 * m + 2; l++) \
+              psij_const[l] \
+                  = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w) \
+                      + ths->psi[ABS(ip_u-l*ip_s+1)] * (ip_w); \
+ \
+            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \
+                ths->x + j, n, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI                  \
-{                                                                             \
-            R psij_const[2 * m + 2];                                          \
-            int u, o, l;                                                      \
-                                                                              \
-            nfft_uo(ths, j, &u, &o, 0);                                       \
-                                                                              \
-            for (l = 0; l <= 2 * m + 1; l++)                                  \
-              psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0));              \
-                                                                              \
-            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const,   \
-                ths->x + j, n, m, my_u0, my_o0);                              \
+#define MACRO_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI \
+{ \
+            R psij_const[2 * m + 2]; \
+            INT u, o, l; \
+ \
+            uo(ths, j, &u, &o, (INT)0); \
+ \
+            for (l = 0; l <= 2 * m + 1; l++) \
+              psij_const[l] = (PHI(ths->n[0],ths->x[j]-((R)((u+l)))/n,0)); \
+ \
+            nfft_adjoint_1d_compute_omp_blockwise(ths->f[j], g, psij_const, \
+                ths->x + j, n, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(whichone)                       \
-{                                                                             \
-    if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)                         \
-    {                                                                         \
-      _Pragma("omp parallel private(k)")                                      \
-      {                                                                       \
-        int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;                 \
-        int *ar_x = ths->index_x;                                             \
-                                                                              \
+#define MACRO_adjoint_1d_B_OMP_BLOCKWISE(whichone) \
+{ \
+    if (ths->flags & NFFT_OMP_BLOCKWISE_ADJOINT) \
+    { \
+      _Pragma("omp parallel private(k)") \
+      { \
+        INT my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b; \
+        INT *ar_x = ths->index_x; \
+ \
         nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \
-        		                          &min_u_b, &max_u_b, 1, &n, m);      \
-                                                                              \
-        if (min_u_a != -1)                                                    \
-        {                                                                     \
-          k = index_x_binary_search(ar_x, M, min_u_a);                        \
-                                                                              \
-          MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A                      \
-                                                                              \
-          while (k < M)                                                       \
-          {                                                                   \
-            int u_prod = ar_x[2*k];                                           \
-            int j = ar_x[2*k+1];                                              \
-                                                                              \
-            if (u_prod < min_u_a || u_prod > max_u_a)                         \
-              break;                                                          \
-                                                                              \
-            MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
-                                                                              \
-            k++;                                                              \
-          }                                                                   \
-        }                                                                     \
-                                                                              \
-        if (min_u_b != -1)                                                    \
-        {                                                                     \
-          k = index_x_binary_search(ar_x, M, min_u_b);                        \
-                                                                              \
-          MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B                      \
-                                                                              \
-          while (k < M)                                                       \
-          {                                                                   \
-            int u_prod = ar_x[2*k];                                           \
-            int j = ar_x[2*k+1];                                              \
-                                                                              \
-            if (u_prod < min_u_b || u_prod > max_u_b)                         \
-              break;                                                          \
-                                                                              \
-            MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
-                                                                              \
-            k++;                                                              \
-          }                                                                   \
-        }                                                                     \
-      } /* omp parallel */                                                    \
-      return;                                                                 \
-    } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */                                    \
+        		                          &min_u_b, &max_u_b, 1, &n, m); \
+ \
+        if (min_u_a != -1) \
+        { \
+          k = index_x_binary_search(ar_x, M, min_u_a); \
+ \
+          MACRO_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_A \
+ \
+          while (k < M) \
+          { \
+            INT u_prod = ar_x[2*k]; \
+            INT j = ar_x[2*k+1]; \
+ \
+            if (u_prod < min_u_a || u_prod > max_u_a) \
+              break; \
+ \
+            MACRO_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+            k++; \
+          } \
+        } \
+ \
+        if (min_u_b != -1) \
+        { \
+          k = index_x_binary_search(ar_x, M, min_u_b); \
+ \
+          MACRO_adjoint_1d_B_OMP_BLOCKWISE_ASSERT_B \
+ \
+          while (k < M) \
+          { \
+            INT u_prod = ar_x[2*k]; \
+            INT j = ar_x[2*k+1]; \
+ \
+            if (u_prod < min_u_b || u_prod > max_u_b) \
+              break; \
+ \
+            MACRO_adjoint_1d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+            k++; \
+          } \
+        } \
+      } /* omp parallel */ \
+      return; \
+    } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */ \
 }
 
-static void nfft_adjoint_1d_B(nfft_plan *ths)
+static void nfft_adjoint_1d_B(X(plan) *ths)
 {
-  const int n = ths->n[0], M = ths->M_total, m = ths->m;
-  int k;
+  const INT n = ths->n[0], M = ths->M_total, m = ths->m;
+  INT k;
   C *g = (C*)ths->g;
 
-  memset(g,0,ths->n_total*sizeof(C));
+  memset(g, 0, (size_t)(ths->n_total) * sizeof(C));
 
-  if (ths->nfft_flags & PRE_FULL_PSI)
+  if (ths->flags & PRE_FULL_PSI)
   {
     nfft_adjoint_B_compute_full_psi(g, ths->psi_index_g, ths->psi, ths->f, M,
-        1, ths->n, m, ths->nfft_flags, ths->index_x);
+        (INT)1, ths->n, m, ths->flags, ths->index_x);
     return;
   } /* if(PRE_FULL_PSI) */
 
-  if (ths->nfft_flags & PRE_PSI)
+  if (ths->flags & PRE_PSI)
   {
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_PSI)
+    MACRO_adjoint_1d_B_OMP_BLOCKWISE(PRE_PSI)
 #endif
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 #ifdef _OPENMP
       nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, ths->psi + j * (2 * m + 2), ths->x + j, n, m);
 #else
@@ -2365,23 +2325,25 @@ static void nfft_adjoint_1d_B(nfft_plan *ths)
     return;
   } /* if(PRE_PSI) */
 
-  if (ths->nfft_flags & PRE_FG_PSI)
+  if (ths->flags & PRE_FG_PSI)
   {
     R fg_exp_l[2 * m + 2];
 
     nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
 
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_FG_PSI)
+    MACRO_adjoint_1d_B_OMP_BLOCKWISE(PRE_FG_PSI)
 #endif
 
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
       R psij_const[2 * m + 2];
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
-      int l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l;
       R fg_psij0 = ths->psi[2 * j];
       R fg_psij1 = ths->psi[2 * j + 1];
       R fg_psij2 = K(1.0);
@@ -2403,29 +2365,31 @@ static void nfft_adjoint_1d_B(nfft_plan *ths)
     return;
   } /* if(PRE_FG_PSI) */
 
-  if (ths->nfft_flags & FG_PSI)
+  if (ths->flags & FG_PSI)
   {
     R fg_exp_l[2 * m + 2];
 
     nfft_1d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(FG_PSI)
+    MACRO_adjoint_1d_B_OMP_BLOCKWISE(FG_PSI)
 #endif
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int u,o,l;
+      INT u,o,l;
       R psij_const[2 * m + 2];
       R fg_psij0, fg_psij1, fg_psij2;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-      nfft_uo(ths, j, &u, &o, 0);
-      fg_psij0 = (PHI(ths->x[j]-((R)u)/n,0));
-      fg_psij1 = EXP(K(2.0) * (n * (ths->x[j]) - u) / ths->b[0]);
+      uo(ths, j, &u, &o, (INT)0);
+      fg_psij0 = (PHI(ths->n[0], ths->x[j] - ((R)u) / (R)(n),0));
+      fg_psij1 = EXP(K(2.0) * ((R)(n) * (ths->x[j]) - (R)(u)) / ths->b[0]);
       fg_psij2 = K(1.0);
       psij_const[0] = fg_psij0;
       for (l = 1; l <= 2 * m + 1; l++)
@@ -2444,31 +2408,33 @@ static void nfft_adjoint_1d_B(nfft_plan *ths)
     return;
   } /* if(FG_PSI) */
 
-  if (ths->nfft_flags & PRE_LIN_PSI)
+  if (ths->flags & PRE_LIN_PSI)
   {
-    const int K = ths->K;
-    const int ip_s = K / (m + 2);
+    const INT K = ths->K;
+    const INT ip_s = K / (m + 2);
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
+    MACRO_adjoint_1d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
 #endif
 
-    #pragma openmp parallel for default(shared) private(k)
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int u,o,l;
-      int ip_u;
+      INT u,o,l;
+      INT ip_u;
       R ip_y, ip_w;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       R psij_const[2 * m + 2];
 
-      nfft_uo(ths, j, &u, &o, 0);
+      uo(ths, j, &u, &o, (INT)0);
 
-      ip_y = FABS(n * ths->x[j] - u) * ((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y - ip_u;
+      ip_y = FABS((R)(n) * ths->x[j] - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
       for (l = 0; l < 2 * m + 2; l++)
         psij_const[l]
             = ths->psi[ABS(ip_u-l*ip_s)] * (K(1.0) - ip_w)
@@ -2484,23 +2450,25 @@ static void nfft_adjoint_1d_B(nfft_plan *ths)
   } /* if(PRE_LIN_PSI) */
 
   /* no precomputed psi at all */
-  nfft_sort_nodes(ths);
+  sort(ths);
 
 #ifdef _OPENMP
-  MACRO_nfft_adjoint_1d_B_OMP_BLOCKWISE(NO_PSI)
+  MACRO_adjoint_1d_B_OMP_BLOCKWISE(NO_PSI)
 #endif
 
+#ifdef _OPENMP
   #pragma omp parallel for default(shared) private(k)
+#endif
   for (k = 0; k < M; k++)
   {
-    int u,o,l;
+    INT u,o,l;
     R psij_const[2 * m + 2];
-    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+    INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-    nfft_uo(ths, j, &u, &o, 0);
+    uo(ths, j, &u, &o, (INT)0);
 
     for (l = 0; l <= 2 * m + 1; l++)
-      psij_const[l] = (PHI(ths->x[j]-((R)((u+l)))/n,0));
+      psij_const[l] = (PHI(ths->n[0], ths->x[j] - ((R)((u+l))) / (R)(n),0));
 
 #ifdef _OPENMP
     nfft_adjoint_1d_compute_omp_atomic(ths->f[j], g, psij_const, ths->x + j, n, m);
@@ -2510,9 +2478,9 @@ static void nfft_adjoint_1d_B(nfft_plan *ths)
   }
 }
 
-void nfft_trafo_1d(nfft_plan *ths)
+void X(trafo_1d)(X(plan) *ths)
 {
-  const int N = ths->N[0], N2 = N/2, n = ths->n[0];
+  const INT N = ths->N[0], N2 = N/2, n = ths->n[0];
   C *f_hat1 = (C*)ths->f_hat, *f_hat2 = (C*)&ths->f_hat[N2];
 
   ths->g_hat = ths->g1;
@@ -2525,21 +2493,23 @@ void nfft_trafo_1d(nfft_plan *ths)
     TIC(0)
 #ifdef _OPENMP
     {
-      int k;
+      INT k;
       #pragma omp parallel for default(shared) private(k)
       for (k = 0; k < ths->n_total; k++)
         ths->g_hat[k] = 0.0;
     }
 #else
-    memset(ths->g_hat, 0, ths->n_total*sizeof(C));
+    memset(ths->g_hat, 0, (size_t)(ths->n_total) * sizeof(C));
 #endif
-    if(ths->nfft_flags & PRE_PHI_HUT)
+    if(ths->flags & PRE_PHI_HUT)
     {
-      int k;
+      INT k;
       c_phi_inv1 = ths->c_phi_inv[0];
       c_phi_inv2 = &ths->c_phi_inv[0][N2];
 
+#ifdef _OPENMP
       #pragma omp parallel for default(shared) private(k)
+#endif
       for (k = 0; k < N2; k++)
       {
         g_hat1[k] = f_hat1[k] * c_phi_inv1[k];
@@ -2548,18 +2518,20 @@ void nfft_trafo_1d(nfft_plan *ths)
     }
     else
     {
-      int k;
+      INT k;
+#ifdef _OPENMP
       #pragma omp parallel for default(shared) private(k)
+#endif
       for (k = 0; k < N2; k++)
       {
-        g_hat1[k] = f_hat1[k] / (PHI_HUT(k-N2,0));
-        g_hat2[k] = f_hat2[k] / (PHI_HUT(k,0));
+        g_hat1[k] = f_hat1[k] / (PHI_HUT(ths->n[0],k-N2,0));
+        g_hat2[k] = f_hat2[k] / (PHI_HUT(ths->n[0],k,0));
       }
     }
     TOC(0)
 
     TIC_FFTW(1)
-    fftw_execute(ths->my_fftw_plan1);
+    FFTW(execute)(ths->my_fftw_plan1);
     TOC_FFTW(1);
 
     TIC(2);
@@ -2568,9 +2540,9 @@ void nfft_trafo_1d(nfft_plan *ths)
   }
 }
 
-void nfft_adjoint_1d(nfft_plan *ths)
+void X(adjoint_1d)(X(plan) *ths)
 {
-  int n,N;
+  INT n,N;
   C *g_hat1,*g_hat2,*f_hat1,*f_hat2;
   R *c_phi_inv1, *c_phi_inv2;
 
@@ -2590,17 +2562,19 @@ void nfft_adjoint_1d(nfft_plan *ths)
   TOC(2)
 
   TIC_FFTW(1)
-  fftw_execute(ths->my_fftw_plan2);
+  FFTW(execute)(ths->my_fftw_plan2);
   TOC_FFTW(1);
 
   TIC(0)
-  if(ths->nfft_flags & PRE_PHI_HUT)
+  if(ths->flags & PRE_PHI_HUT)
   {
-    int k;
+    INT k;
     c_phi_inv1=ths->c_phi_inv[0];
     c_phi_inv2=&ths->c_phi_inv[0][N/2];
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < N/2; k++)
     {
       f_hat1[k] = g_hat1[k] * c_phi_inv1[k];
@@ -2609,24 +2583,26 @@ void nfft_adjoint_1d(nfft_plan *ths)
   }
   else
   {
-    int k;
+    INT k;
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < N/2; k++)
     {
-      f_hat1[k] = g_hat1[k] / (PHI_HUT(k-N/2,0));
-      f_hat2[k] = g_hat2[k] / (PHI_HUT(k,0));
+      f_hat1[k] = g_hat1[k] / (PHI_HUT(ths->n[0],k-N/2,0));
+      f_hat2[k] = g_hat2[k] / (PHI_HUT(ths->n[0],k,0));
     }
   }
   TOC(0)
 }
 
 
-/* ############################################################ SPECIFIC VERSIONS FOR d=2 */
+/* ################################################ SPECIFIC VERSIONS FOR d=2 */
 
-static void nfft_2d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
+static void nfft_2d_init_fg_exp_l(R *fg_exp_l, const INT m, const R b)
 {
-  int l;
+  INT l;
   R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;
 
   fg_exp_b0 = EXP(K(-1.0)/b);
@@ -2642,25 +2618,24 @@ static void nfft_2d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
     }
 }
 
-static void nfft_trafo_2d_compute(C *fj, const C *g,
-          const R *psij_const0, const R *psij_const1,
-          const R *xj0, const R *xj1,
-          const int n0, const int n1, const int m)
+static void nfft_trafo_2d_compute(C *fj, const C *g, const R *psij_const0,
+    const R *psij_const1, const R *xj0, const R *xj1, const INT n0,
+    const INT n1, const INT m)
 {
-  int u0,o0,l0,u1,o1,l1;
+  INT u0,o0,l0,u1,o1,l1;
   const C *gj;
   const R *psij0,*psij1;
 
   psij0=psij_const0;
   psij1=psij_const1;
 
-  nfft_uo2(&u0,&o0,*xj0, n0, m);
-  nfft_uo2(&u1,&o1,*xj1, n1, m);
+  uo2(&u0,&o0,*xj0, n0, m);
+  uo2(&u1,&o1,*xj1, n1, m);
 
   *fj=0;
 
-  if(u0<o0)
-      if(u1<o1)
+  if (u0 < o0)
+      if(u1 < o1)
     for(l0=0; l0<=2*m+1; l0++,psij0++)
     {
         psij1=psij_const1;
@@ -2725,18 +2700,17 @@ static void nfft_trafo_2d_compute(C *fj, const C *g,
 #ifdef _OPENMP
 /* adjoint NFFT two-dimensional case with OpenMP atomic operations */
 static void nfft_adjoint_2d_compute_omp_atomic(const C f, C *g,
-            const R *psij_const0, const R *psij_const1,
-            const R *xj0, const R *xj1,
-            const int n0, const int n1, const int m)
+            const R *psij_const0, const R *psij_const1, const R *xj0,
+            const R *xj1, const INT n0, const INT n1, const INT m)
 {
-  int u0,o0,l0,u1,o1,l1;
-  const int lprod = (2*m+2) * (2*m+2); 
+  INT u0,o0,l0,u1,o1,l1;
+  const INT lprod = (2*m+2) * (2*m+2);
 
-  unsigned long int index_temp0[2*m+2];
-  unsigned long int index_temp1[2*m+2];
+  INT index_temp0[2*m+2];
+  INT index_temp1[2*m+2];
 
-  nfft_uo2(&u0,&o0,*xj0, n0, m);
-  nfft_uo2(&u1,&o1,*xj1, n1, m);
+  uo2(&u0,&o0,*xj0, n0, m);
+  uo2(&u1,&o1,*xj1, n1, m);
 
   for (l0=0; l0<=2*m+1; l0++)
     index_temp0[l0] = (u0+l0)%n0;
@@ -2748,7 +2722,7 @@ static void nfft_adjoint_2d_compute_omp_atomic(const C f, C *g,
   {
     for(l1=0; l1<=2*m+1; l1++)
     {
-      unsigned long int i = index_temp0[l0] * n1 + index_temp1[l1];
+      INT i = index_temp0[l0] * n1 + index_temp1[l1];
       C *lhs = g+i;
       R *lhs_real = (R*)lhs;
       C val = psij_const0[l0] * psij_const1[l1] * f;
@@ -2783,26 +2757,25 @@ static void nfft_adjoint_2d_compute_omp_atomic(const C f, C *g,
  * \author Toni Volkmer
  */
 static void nfft_adjoint_2d_compute_omp_blockwise(const C f, C *g,
-            const R *psij_const0, const R *psij_const1,
-            const R *xj0, const R *xj1,
-            const int n0, const int n1, const int m,
-	    const int my_u0, const int my_o0)
+            const R *psij_const0, const R *psij_const1, const R *xj0,
+            const R *xj1, const INT n0, const INT n1, const INT m,
+            const INT my_u0, const INT my_o0)
 {
-  int ar_u0,ar_o0,l0,u1,o1,l1;
-  const int lprod = (2*m+2) * (2*m+2); 
-  unsigned long int index_temp1[2*m+2];
+  INT ar_u0,ar_o0,l0,u1,o1,l1;
+  const INT lprod = (2*m+2) * (2*m+2);
+  INT index_temp1[2*m+2];
 
-  nfft_uo2(&ar_u0,&ar_o0,*xj0, n0, m);
-  nfft_uo2(&u1,&o1,*xj1, n1, m);
+  uo2(&ar_u0,&ar_o0,*xj0, n0, m);
+  uo2(&u1,&o1,*xj1, n1, m);
 
-  for (l1=0; l1<=2*m+1; l1++)
+  for (l1 = 0; l1 <= 2*m+1; l1++)
     index_temp1[l1] = (u1+l1)%n1;
 
-  if(ar_u0<ar_o0)
+  if(ar_u0 < ar_o0)
   {
-    int u0 = MAX(my_u0,ar_u0);
-    int o0 = MIN(my_o0,ar_o0);
-    int offset_psij = u0-ar_u0;
+    INT u0 = MAX(my_u0,ar_u0);
+    INT o0 = MIN(my_o0,ar_o0);
+    INT offset_psij = u0-ar_u0;
 #ifdef OMP_ASSERT
     assert(offset_psij >= 0);
     assert(o0-u0 <= 2*m+1);
@@ -2811,7 +2784,7 @@ static void nfft_adjoint_2d_compute_omp_blockwise(const C f, C *g,
 
     for (l0 = 0; l0 <= o0-u0; l0++)
     {
-      unsigned long int i0 = (u0+l0) * n1;
+      INT i0 = (u0+l0) * n1;
       const C val0 = psij_const0[offset_psij+l0];
 
       for(l1=0; l1<=2*m+1; l1++)
@@ -2820,9 +2793,9 @@ static void nfft_adjoint_2d_compute_omp_blockwise(const C f, C *g,
   }
   else
   {
-    int u0 = MAX(my_u0,ar_u0);
-    int o0 = my_o0;
-    int offset_psij = u0-ar_u0;
+    INT u0 = MAX(my_u0,ar_u0);
+    INT o0 = my_o0;
+    INT offset_psij = u0-ar_u0;
 #ifdef OMP_ASSERT
     assert(offset_psij >= 0);
     assert(o0-u0 <= 2*m+1);
@@ -2831,7 +2804,7 @@ static void nfft_adjoint_2d_compute_omp_blockwise(const C f, C *g,
 
     for (l0 = 0; l0 <= o0-u0; l0++)
     {
-      unsigned long int i0 = (u0+l0) * n1;
+      INT i0 = (u0+l0) * n1;
       const C val0 = psij_const0[offset_psij+l0];
 
       for(l1=0; l1<=2*m+1; l1++)
@@ -2852,7 +2825,7 @@ static void nfft_adjoint_2d_compute_omp_blockwise(const C f, C *g,
 
     for (l0 = 0; l0 <= o0-u0; l0++)
     {
-      unsigned long int i0 = (u0+l0) * n1;
+      INT i0 = (u0+l0) * n1;
       const C val0 = psij_const0[offset_psij+l0];
 
       for(l1=0; l1<=2*m+1; l1++)
@@ -2864,19 +2837,18 @@ static void nfft_adjoint_2d_compute_omp_blockwise(const C f, C *g,
 
 #ifndef _OPENMP
 static void nfft_adjoint_2d_compute_serial(const C *fj, C *g,
-            const R *psij_const0, const R *psij_const1,
-            const R *xj0, const R *xj1,
-            const int n0, const int n1, const int m)
+            const R *psij_const0, const R *psij_const1, const R *xj0,
+            const R *xj1, const INT n0, const INT n1, const INT m)
 {
-  int u0,o0,l0,u1,o1,l1;
+  INT u0,o0,l0,u1,o1,l1;
   C *gj;
   const R *psij0,*psij1;
 
   psij0=psij_const0;
   psij1=psij_const1;
 
-  nfft_uo2(&u0,&o0,*xj0, n0, m);
-  nfft_uo2(&u1,&o1,*xj1, n1, m);
+  uo2(&u0,&o0,*xj0, n0, m);
+  uo2(&u1,&o1,*xj1, n1, m);
 
   if(u0<o0)
       if(u1<o1)
@@ -2942,26 +2914,26 @@ static void nfft_adjoint_2d_compute_serial(const C *fj, C *g,
 }
 #endif
 
-static void nfft_trafo_2d_B(nfft_plan *ths)
+static void nfft_trafo_2d_B(X(plan) *ths)
 {
   const C *g = (C*)ths->g;
-  const int N0 = ths->N[0];
-  const int n0 = ths->n[0];
-  const int N1 = ths->N[1];
-  const int n1 = ths->n[1];
-  const int M = ths->M_total;
-  const int m = ths->m;
+  const INT n0 = ths->n[0];
+  const INT n1 = ths->n[1];
+  const INT M = ths->M_total;
+  const INT m = ths->m;
 
-  int k;
+  INT k;
 
-  if(ths->nfft_flags & PRE_FULL_PSI)
+  if(ths->flags & PRE_FULL_PSI)
   {
-    const int lprod = (2*m+2) * (2*m+2);
+    const INT lprod = (2*m+2) * (2*m+2);
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int l;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       ths->f[j] = K(0.0);
       for (l = 0; l < lprod; l++)
         ths->f[j] += ths->psi[j*lprod+l] * g[ths->psi_index_g[j*lprod+l]];
@@ -2969,37 +2941,41 @@ static void nfft_trafo_2d_B(nfft_plan *ths)
     return;
   } /* if(PRE_FULL_PSI) */
 
-  if(ths->nfft_flags & PRE_PSI)
+  if(ths->flags & PRE_PSI)
   {
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       nfft_trafo_2d_compute(ths->f+j, g, ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), ths->x+2*j, ths->x+2*j+1, n0, n1, m);
     }
 
       return;
   } /* if(PRE_PSI) */
 
-  if(ths->nfft_flags & PRE_FG_PSI)
+  if(ths->flags & PRE_FG_PSI)
   {
     R fg_exp_l[2*(2*m+2)];
 
     nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
     nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
       R psij_const[2*(2*m+2)];
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
-      int l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l;
       R fg_psij0 = ths->psi[2*j*2];
       R fg_psij1 = ths->psi[2*j*2+1];
       R fg_psij2 = K(1.0);
 
       psij_const[0] = fg_psij0;
-      for(l=1; l<=2*m+1; l++)
+      for (l = 1; l <= 2*m+1; l++)
       {
         fg_psij2 *= fg_psij1;
         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
@@ -3009,7 +2985,7 @@ static void nfft_trafo_2d_B(nfft_plan *ths)
       fg_psij1 = ths->psi[2*(j*2+1)+1];
       fg_psij2 = K(1.0);
       psij_const[2*m+2] = fg_psij0;
-      for(l=1; l<=2*m+1; l++)
+      for (l = 1; l <= 2*m+1; l++)
       {
         fg_psij2 *= fg_psij1;
         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
@@ -3021,37 +2997,39 @@ static void nfft_trafo_2d_B(nfft_plan *ths)
     return;
   } /* if(PRE_FG_PSI) */
 
-  if(ths->nfft_flags & FG_PSI)
+  if(ths->flags & FG_PSI)
   {
     R fg_exp_l[2*(2*m+2)];
 
     nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
     nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int u, o, l;
+      INT u, o, l;
       R fg_psij0, fg_psij1, fg_psij2;
       R psij_const[2*(2*m+2)];
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-      nfft_uo(ths,j,&u,&o,0);
-      fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0));
-      fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]);
+      uo(ths, j, &u, &o, (INT)0);
+      fg_psij0 = (PHI(ths->n[0], ths->x[2*j] - ((R)u) / (R)(n0),0));
+      fg_psij1 = EXP(K(2.0) * ((R)(n0) * (ths->x[2*j]) - (R)(u)) / ths->b[0]);
       fg_psij2 = K(1.0);
       psij_const[0] = fg_psij0;
-      for(l=1; l<=2*m+1; l++)
+      for (l = 1; l <= 2*m+1; l++)
       {
         fg_psij2 *= fg_psij1;
         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
       }
 
-      nfft_uo(ths,j,&u,&o,1);
-      fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1));
-      fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]);
+      uo(ths,j,&u,&o, (INT)1);
+      fg_psij0 = (PHI(ths->n[1], ths->x[2*j+1] - ((R)u) / (R)(n1),1));
+      fg_psij1 = EXP(K(2.0) * ((R)(n1) * (ths->x[2*j+1]) - (R)(u)) / ths->b[1]);
       fg_psij2 = K(1.0);
       psij_const[2*m+2] = fg_psij0;
       for(l=1; l<=2*m+1; l++)
@@ -3066,33 +3044,35 @@ static void nfft_trafo_2d_B(nfft_plan *ths)
     return;
   } /* if(FG_PSI) */
 
-  if(ths->nfft_flags & PRE_LIN_PSI)
+  if(ths->flags & PRE_LIN_PSI)
   {
-    const int K = ths->K, ip_s = K / (m + 2);
+    const INT K = ths->K, ip_s = K / (m + 2);
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int u, o, l;
+      INT u, o, l;
       R ip_y, ip_w;
-      int ip_u;
+      INT ip_u;
       R psij_const[2*(2*m+2)];
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-      nfft_uo(ths,j,&u,&o,0);
-      ip_y = FABS(n0*ths->x[2*j] - u)*((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y-ip_u;
-      for(l=0; l < 2*m+2; l++)
+      uo(ths,j,&u,&o,(INT)0);
+      ip_y = FABS((R)(n0) * ths->x[2*j] - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)LRINT(FLOOR(ip_y));
+      ip_w = ip_y - (R)(ip_u);
+      for (l = 0; l < 2*m+2; l++)
         psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
 
-      nfft_uo(ths,j,&u,&o,1);
-      ip_y = FABS(n1*ths->x[2*j+1] - u)*((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y-ip_u;
-      for(l=0; l < 2*m+2; l++)
+      uo(ths,j,&u,&o,(INT)1);
+      ip_y = FABS((R)(n1) * ths->x[2*j+1] - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
+      for (l = 0; l < 2*m+2; l++)
         psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
 
       nfft_trafo_2d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
@@ -3102,250 +3082,252 @@ static void nfft_trafo_2d_B(nfft_plan *ths)
 
   /* no precomputed psi at all */
 
-  nfft_sort_nodes(ths);
+  sort(ths);
 
+#ifdef _OPENMP
   #pragma omp parallel for default(shared) private(k)
+#endif
   for (k = 0; k < M; k++)
   {
     R psij_const[2*(2*m+2)];
-    int u, o, l;
-    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+    INT u, o, l;
+    INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-    nfft_uo(ths,j,&u,&o,0);
-    for(l=0;l<=2*m+1;l++)
-      psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0));
+    uo(ths,j,&u,&o,(INT)0);
+    for (l = 0; l <= 2*m+1; l++)
+      psij_const[l]=(PHI(ths->n[0], ths->x[2*j] - ((R)((u+l))) / (R)(n0),0));
 
-    nfft_uo(ths,j,&u,&o,1);
-    for(l=0;l<=2*m+1;l++)
-      psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1));
+    uo(ths,j,&u,&o,(INT)1);
+    for (l = 0; l <= 2*m+1; l++)
+      psij_const[2*m+2+l] = (PHI(ths->n[1], ths->x[2*j+1] - ((R)((u+l)))/(R)(n1),1));
 
     nfft_trafo_2d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
   }
 }
 
 #ifdef OMP_ASSERT
-#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A                        \
-{                                                                             \
-          assert(ar_x[2*k] >= min_u_a || k == M-1);                           \
-          if (k > 0)                                                          \
-            assert(ar_x[2*k-2] < min_u_a);                                    \
+#define MACRO_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A \
+{ \
+          assert(ar_x[2*k] >= min_u_a || k == M-1); \
+          if (k > 0) \
+            assert(ar_x[2*k-2] < min_u_a); \
 }
 #else
-#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A
+#define MACRO_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A
 #endif
 
 #ifdef OMP_ASSERT
-#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B                        \
-{                                                                             \
-          assert(ar_x[2*k] >= min_u_b || k == M-1);                           \
-          if (k > 0)                                                          \
-            assert(ar_x[2*k-2] < min_u_b);                                    \
+#define MACRO_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B \
+{ \
+          assert(ar_x[2*k] >= min_u_b || k == M-1); \
+          if (k > 0) \
+            assert(ar_x[2*k-2] < min_u_b); \
 }
 #else
-#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B
+#define MACRO_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B
 #endif
 
-#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI                 \
-            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \
-                ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2),               \
+#define MACRO_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI \
+            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \
+                ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), \
                 ths->x+2*j, ths->x+2*j+1, n0, n1, m, my_u0, my_o0);
 
-#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI              \
-{                                                                             \
-            R psij_const[2*(2*m+2)];                                          \
-            int u, o, l;                                                      \
-            R fg_psij0 = ths->psi[2*j*2];                                     \
-            R fg_psij1 = ths->psi[2*j*2+1];                                   \
-            R fg_psij2 = K(1.0);                                              \
-                                                                              \
-            psij_const[0] = fg_psij0;                                         \
-            for(l=1; l<=2*m+1; l++)                                           \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
-              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \
-            }                                                                 \
-                                                                              \
-            fg_psij0 = ths->psi[2*(j*2+1)];                                   \
-            fg_psij1 = ths->psi[2*(j*2+1)+1];                                 \
-            fg_psij2 = K(1.0);                                                \
-            psij_const[2*m+2] = fg_psij0;                                     \
-            for(l=1; l<=2*m+1; l++)                                           \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
-              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \
-            }                                                                 \
-                                                                              \
-            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \
-                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \
-                n0, n1, m, my_u0, my_o0);                                     \
+#define MACRO_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI \
+{ \
+            R psij_const[2*(2*m+2)]; \
+            INT u, o, l; \
+            R fg_psij0 = ths->psi[2*j*2]; \
+            R fg_psij1 = ths->psi[2*j*2+1]; \
+            R fg_psij2 = K(1.0); \
+ \
+            psij_const[0] = fg_psij0; \
+            for(l=1; l<=2*m+1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
+              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \
+            } \
+ \
+            fg_psij0 = ths->psi[2*(j*2+1)]; \
+            fg_psij1 = ths->psi[2*(j*2+1)+1]; \
+            fg_psij2 = K(1.0); \
+            psij_const[2*m+2] = fg_psij0; \
+            for(l=1; l<=2*m+1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
+              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \
+            } \
+ \
+            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \
+                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \
+                n0, n1, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI                  \
-{                                                                             \
-            R psij_const[2*(2*m+2)];                                          \
-            R fg_psij0, fg_psij1, fg_psij2;                                   \
-            int u, o, l;                                                      \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,0);                                           \
-            fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0));                        \
-            fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]);          \
-            fg_psij2 = K(1.0);                                                \
-            psij_const[0] = fg_psij0;                                         \
-            for(l=1; l<=2*m+1; l++)                                           \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
-              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \
-            }                                                                 \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,1);                                           \
-            fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1));                      \
-            fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]);        \
-            fg_psij2 = K(1.0);                                                \
-            psij_const[2*m+2] = fg_psij0;                                     \
-            for(l=1; l<=2*m+1; l++)                                           \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
-              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \
-            }                                                                 \
-                                                                              \
-            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \
-                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \
-                n0, n1, m, my_u0, my_o0);                                     \
+#define MACRO_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI \
+{ \
+            R psij_const[2*(2*m+2)]; \
+            R fg_psij0, fg_psij1, fg_psij2; \
+            INT u, o, l; \
+ \
+            uo(ths,j,&u,&o,(INT)0); \
+            fg_psij0 = (PHI(ths->n[0],ths->x[2*j]-((R)u)/n0,0)); \
+            fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]); \
+            fg_psij2 = K(1.0); \
+            psij_const[0] = fg_psij0; \
+            for(l=1; l<=2*m+1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
+              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \
+            } \
+ \
+            uo(ths,j,&u,&o,(INT)1); \
+            fg_psij0 = (PHI(ths->n[1],ths->x[2*j+1]-((R)u)/n1,1)); \
+            fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]); \
+            fg_psij2 = K(1.0); \
+            psij_const[2*m+2] = fg_psij0; \
+            for(l=1; l<=2*m+1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
+              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \
+            } \
+ \
+            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \
+                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \
+                n0, n1, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI             \
-{                                                                             \
-            R psij_const[2*(2*m+2)];                                          \
-            int u, o, l;                                                      \
-            int ip_u;                                                         \
-            R ip_y, ip_w;                                                     \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,0);                                           \
-            ip_y = FABS(n0*(ths->x[2*j]) - u)*((R)ip_s);                      \
-            ip_u = LRINT(FLOOR(ip_y));                                        \
-            ip_w = ip_y-ip_u;                                                 \
-            for(l=0; l < 2*m+2; l++)                                          \
-              psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +      \
-                ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);                          \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,1);                                           \
-            ip_y = FABS(n1*(ths->x[2*j+1]) - u)*((R)ip_s);                    \
-            ip_u = LRINT(FLOOR(ip_y));                                        \
-            ip_w = ip_y-ip_u;                                                 \
-            for(l=0; l < 2*m+2; l++)                                          \
-              psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +  \
-                ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);                    \
-                                                                              \
-            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \
-                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \
-                n0, n1, m, my_u0, my_o0);                                     \
+#define MACRO_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI \
+{ \
+            R psij_const[2*(2*m+2)]; \
+            INT u, o, l; \
+            INT ip_u; \
+            R ip_y, ip_w; \
+ \
+            uo(ths,j,&u,&o,(INT)0); \
+            ip_y = FABS(n0*(ths->x[2*j]) - u)*((R)ip_s); \
+            ip_u = LRINT(FLOOR(ip_y)); \
+            ip_w = ip_y-ip_u; \
+            for(l=0; l < 2*m+2; l++) \
+              psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
+                ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w); \
+ \
+            uo(ths,j,&u,&o,(INT)1); \
+            ip_y = FABS(n1*(ths->x[2*j+1]) - u)*((R)ip_s); \
+            ip_u = LRINT(FLOOR(ip_y)); \
+            ip_w = ip_y-ip_u; \
+            for(l=0; l < 2*m+2; l++) \
+              psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
+                ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w); \
+ \
+            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \
+                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \
+                n0, n1, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI                  \
-{                                                                             \
-            R psij_const[2*(2*m+2)];                                          \
-            int u, o, l;                                                      \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,0);                                           \
-            for(l=0;l<=2*m+1;l++)                                             \
-              psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0));             \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,1);                                           \
-            for(l=0;l<=2*m+1;l++)                                             \
-              psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1));     \
-                                                                              \
-            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g,               \
-                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1,       \
-                n0, n1, m, my_u0, my_o0);                                     \
+#define MACRO_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI \
+{ \
+            R psij_const[2*(2*m+2)]; \
+            INT u, o, l; \
+ \
+            uo(ths,j,&u,&o,(INT)0); \
+            for(l=0;l<=2*m+1;l++) \
+              psij_const[l]=(PHI(ths->n[0],ths->x[2*j]-((R)((u+l)))/n0,0)); \
+ \
+            uo(ths,j,&u,&o,(INT)1); \
+            for(l=0;l<=2*m+1;l++) \
+              psij_const[2*m+2+l]=(PHI(ths->n[1],ths->x[2*j+1]-((R)((u+l)))/n1,1)); \
+ \
+            nfft_adjoint_2d_compute_omp_blockwise(ths->f[j], g, \
+                psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, \
+                n0, n1, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(whichone)                       \
-{                                                                             \
-    if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)                         \
-    {                                                                         \
-      _Pragma("omp parallel private(k)")                                      \
-      {                                                                       \
-        int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;                 \
-        int *ar_x = ths->index_x;                                             \
-                                                                              \
+#define MACRO_adjoint_2d_B_OMP_BLOCKWISE(whichone) \
+{ \
+    if (ths->flags & NFFT_OMP_BLOCKWISE_ADJOINT) \
+    { \
+      _Pragma("omp parallel private(k)") \
+      { \
+        INT my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b; \
+        INT *ar_x = ths->index_x; \
+ \
         nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \
-            &min_u_b, &max_u_b, 2, ths->n, m);                                \
-                                                                              \
-        if (min_u_a != -1)                                                    \
-        {                                                                     \
-          k = index_x_binary_search(ar_x, M, min_u_a);                        \
-                                                                              \
-          MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A                      \
-                                                                              \
-          while (k < M)                                                       \
-          {                                                                   \
-            int u_prod = ar_x[2*k];                                           \
-            int j = ar_x[2*k+1];                                              \
-                                                                              \
-            if (u_prod < min_u_a || u_prod > max_u_a)                         \
-              break;                                                          \
-                                                                              \
-            MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
-                                                                              \
-            k++;                                                              \
-          }                                                                   \
-        }                                                                     \
-                                                                              \
-        if (min_u_b != -1)                                                    \
-        {                                                                     \
-          int k = index_x_binary_search(ar_x, M, min_u_b);                    \
-                                                                              \
-          MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B                      \
-                                                                              \
-          while (k < M)                                                       \
-          {                                                                   \
-            int u_prod = ar_x[2*k];                                           \
-            int j = ar_x[2*k+1];                                              \
-                                                                              \
-            if (u_prod < min_u_b || u_prod > max_u_b)                         \
-              break;                                                          \
-                                                                              \
-            MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
-                                                                              \
-            k++;                                                              \
-          }                                                                   \
-        }                                                                     \
-      } /* omp parallel */                                                    \
-      return;                                                                 \
-    } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */                                    \
+            &min_u_b, &max_u_b, 2, ths->n, m); \
+ \
+        if (min_u_a != -1) \
+        { \
+          k = index_x_binary_search(ar_x, M, min_u_a); \
+ \
+          MACRO_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_A \
+ \
+          while (k < M) \
+          { \
+            INT u_prod = ar_x[2*k]; \
+            INT j = ar_x[2*k+1]; \
+ \
+            if (u_prod < min_u_a || u_prod > max_u_a) \
+              break; \
+ \
+            MACRO_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+            k++; \
+          } \
+        } \
+ \
+        if (min_u_b != -1) \
+        { \
+          INT k = index_x_binary_search(ar_x, M, min_u_b); \
+ \
+          MACRO_adjoint_2d_B_OMP_BLOCKWISE_ASSERT_B \
+ \
+          while (k < M) \
+          { \
+            INT u_prod = ar_x[2*k]; \
+            INT j = ar_x[2*k+1]; \
+ \
+            if (u_prod < min_u_b || u_prod > max_u_b) \
+              break; \
+ \
+            MACRO_adjoint_2d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+            k++; \
+          } \
+        } \
+      } /* omp parallel */ \
+      return; \
+    } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */ \
 }
 
 
-static void nfft_adjoint_2d_B(nfft_plan *ths)
+static void nfft_adjoint_2d_B(X(plan) *ths)
 {
-  const int N0 = ths->N[0];
-  const int n0 = ths->n[0];
-  const int N1 = ths->N[1];
-  const int n1 = ths->n[1];
-  const int M = ths->M_total;
-  const int m = ths->m;
+  const INT n0 = ths->n[0];
+  const INT n1 = ths->n[1];
+  const INT M = ths->M_total;
+  const INT m = ths->m;
   C* g = (C*) ths->g;
-  int k;
+  INT k;
 
-  memset(g,0,ths->n_total*sizeof(C));
+  memset(g, 0, (size_t)(ths->n_total) * sizeof(C));
 
-  if(ths->nfft_flags & PRE_FULL_PSI)
+  if(ths->flags & PRE_FULL_PSI)
   {
     nfft_adjoint_B_compute_full_psi(g, ths->psi_index_g, ths->psi, ths->f, M,
-        2, ths->n, m, ths->nfft_flags, ths->index_x);
+        (INT)2, ths->n, m, ths->flags, ths->index_x);
     return;
   } /* if(PRE_FULL_PSI) */
 
-  if(ths->nfft_flags & PRE_PSI)
+  if(ths->flags & PRE_PSI)
   {
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_PSI)
+    MACRO_adjoint_2d_B_OMP_BLOCKWISE(PRE_PSI)
 #endif
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 #ifdef _OPENMP
       nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, ths->psi+j*2*(2*m+2), ths->psi+(j*2+1)*(2*m+2), ths->x+2*j, ths->x+2*j+1, n0, n1, m);
 #else
@@ -3355,7 +3337,7 @@ static void nfft_adjoint_2d_B(nfft_plan *ths)
     return;
   } /* if(PRE_PSI) */
 
-  if(ths->nfft_flags & PRE_FG_PSI)
+  if(ths->flags & PRE_FG_PSI)
   {
     R fg_exp_l[2*(2*m+2)];
 
@@ -3363,16 +3345,18 @@ static void nfft_adjoint_2d_B(nfft_plan *ths)
     nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
 
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_FG_PSI)
+    MACRO_adjoint_2d_B_OMP_BLOCKWISE(PRE_FG_PSI)
 #endif
 
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
       R psij_const[2*(2*m+2)];
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
-      int l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l;
       R fg_psij0 = ths->psi[2*j*2];
       R fg_psij1 = ths->psi[2*j*2+1];
       R fg_psij2 = K(1.0);
@@ -3404,30 +3388,32 @@ static void nfft_adjoint_2d_B(nfft_plan *ths)
     return;
   } /* if(PRE_FG_PSI) */
 
-  if(ths->nfft_flags & FG_PSI)
+  if(ths->flags & FG_PSI)
   {
     R fg_exp_l[2*(2*m+2)];
 
     nfft_2d_init_fg_exp_l(fg_exp_l, m, ths->b[0]);
     nfft_2d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(FG_PSI)
+    MACRO_adjoint_2d_B_OMP_BLOCKWISE(FG_PSI)
 #endif
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int u, o, l;
+      INT u, o, l;
       R fg_psij0, fg_psij1, fg_psij2;
       R psij_const[2*(2*m+2)];
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-      nfft_uo(ths,j,&u,&o,0);
-      fg_psij0 = (PHI(ths->x[2*j]-((R)u)/n0,0));
-      fg_psij1 = EXP(K(2.0)*(n0*(ths->x[2*j]) - u)/ths->b[0]);
+      uo(ths,j,&u,&o,(INT)0);
+      fg_psij0 = (PHI(ths->n[0], ths->x[2*j] - ((R)u)/(R)(n0),0));
+      fg_psij1 = EXP(K(2.0) * ((R)(n0) * (ths->x[2*j]) - (R)(u)) / ths->b[0]);
       fg_psij2 = K(1.0);
       psij_const[0] = fg_psij0;
       for(l=1; l<=2*m+1; l++)
@@ -3436,9 +3422,9 @@ static void nfft_adjoint_2d_B(nfft_plan *ths)
         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
       }
 
-      nfft_uo(ths,j,&u,&o,1);
-      fg_psij0 = (PHI(ths->x[2*j+1]-((R)u)/n1,1));
-      fg_psij1 = EXP(K(2.0)*(n1*(ths->x[2*j+1]) - u)/ths->b[1]);
+      uo(ths,j,&u,&o,(INT)1);
+      fg_psij0 = (PHI(ths->n[1], ths->x[2*j+1] - ((R)u) / (R)(n1),1));
+      fg_psij1 = EXP(K(2.0) * ((R)(n1) * (ths->x[2*j+1]) - (R)(u)) / ths->b[1]);
       fg_psij2 = K(1.0);
       psij_const[2*m+2] = fg_psij0;
       for(l=1; l<=2*m+1; l++)
@@ -3457,38 +3443,40 @@ static void nfft_adjoint_2d_B(nfft_plan *ths)
     return;
   } /* if(FG_PSI) */
 
-  if(ths->nfft_flags & PRE_LIN_PSI)
+  if(ths->flags & PRE_LIN_PSI)
   {
-    const int K = ths->K;
-    const int ip_s = K / (m + 2);
+    const INT K = ths->K;
+    const INT ip_s = K / (m + 2);
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
+    MACRO_adjoint_2d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
 #endif
 
-    #pragma openmp parallel for default(shared) private(k)
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int u,o,l;
-      int ip_u;
+      INT u,o,l;
+      INT ip_u;
       R ip_y, ip_w;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       R psij_const[2*(2*m+2)];
 
-      nfft_uo(ths,j,&u,&o,0);
-      ip_y = FABS(n0*(ths->x[2*j]) - u)*((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y-ip_u;
+      uo(ths,j,&u,&o,(INT)0);
+      ip_y = FABS((R)(n0) * (ths->x[2*j]) - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
       for(l=0; l < 2*m+2; l++)
         psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
           ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
 
-      nfft_uo(ths,j,&u,&o,1);
-      ip_y = FABS(n1*(ths->x[2*j+1]) - u)*((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y-ip_u;
+      uo(ths,j,&u,&o,(INT)1);
+      ip_y = FABS((R)(n1) * (ths->x[2*j+1]) - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
       for(l=0; l < 2*m+2; l++)
         psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
           ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
@@ -3503,26 +3491,28 @@ static void nfft_adjoint_2d_B(nfft_plan *ths)
     } /* if(PRE_LIN_PSI) */
 
   /* no precomputed psi at all */
-  nfft_sort_nodes(ths);
+  sort(ths);
 
 #ifdef _OPENMP
-  MACRO_nfft_adjoint_2d_B_OMP_BLOCKWISE(NO_PSI)
+  MACRO_adjoint_2d_B_OMP_BLOCKWISE(NO_PSI)
 #endif
 
+#ifdef _OPENMP
   #pragma omp parallel for default(shared) private(k)
+#endif
   for (k = 0; k < M; k++)
   {
-    int u,o,l;
+    INT u,o,l;
     R psij_const[2*(2*m+2)];
-    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+    INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-    nfft_uo(ths,j,&u,&o,0);
+    uo(ths,j,&u,&o,(INT)0);
     for(l=0;l<=2*m+1;l++)
-      psij_const[l]=(PHI(ths->x[2*j]-((R)((u+l)))/n0,0));
+      psij_const[l]=(PHI(ths->n[0], ths->x[2*j] - ((R)((u+l))) / (R)(n0),0));
 
-    nfft_uo(ths,j,&u,&o,1);
+    uo(ths,j,&u,&o,(INT)1);
     for(l=0;l<=2*m+1;l++)
-      psij_const[2*m+2+l]=(PHI(ths->x[2*j+1]-((R)((u+l)))/n1,1));
+      psij_const[2*m+2+l]=(PHI(ths->n[1], ths->x[2*j+1] - ((R)((u+l))) / (R)(n1),1));
 
 #ifdef _OPENMP
     nfft_adjoint_2d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, ths->x+2*j, ths->x+2*j+1, n0, n1, m);
@@ -3533,9 +3523,9 @@ static void nfft_adjoint_2d_B(nfft_plan *ths)
 }
 
 
-void nfft_trafo_2d(nfft_plan *ths)
+void X(trafo_2d)(X(plan) *ths)
 {
-  int k0,k1,n0,n1,N0,N1;
+  INT k0,k1,n0,n1,N0,N1;
   C *g_hat,*f_hat;
   R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12;
   R ck01, ck02, ck11, ck12;
@@ -3558,14 +3548,16 @@ void nfft_trafo_2d(nfft_plan *ths)
   for (k0 = 0; k0 < ths->n_total; k0++)
     ths->g_hat[k0] = 0.0;
 #else
-  memset(ths->g_hat,0,ths->n_total*sizeof(C));
+  memset(ths->g_hat, 0, (size_t)(ths->n_total) * sizeof(C));
 #endif
-  if(ths->nfft_flags & PRE_PHI_HUT)
+  if(ths->flags & PRE_PHI_HUT)
     {
       c_phi_inv01=ths->c_phi_inv[0];
       c_phi_inv02=&ths->c_phi_inv[0][N0/2];
 
+#ifdef _OPENMP
       #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,c_phi_inv11,c_phi_inv12,g_hat11,f_hat11,g_hat21,f_hat21,g_hat12,f_hat12,g_hat22,f_hat22,ck11,ck12)
+#endif
       for(k0=0;k0<N0/2;k0++)
       {
         ck01=c_phi_inv01[k0];
@@ -3596,15 +3588,17 @@ void nfft_trafo_2d(nfft_plan *ths)
       }
     }
   else
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,ck11,ck12)
+#endif
     for(k0=0;k0<N0/2;k0++)
       {
-  ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
-  ck02=K(1.0)/(PHI_HUT(k0,0));
+  ck01=K(1.0)/(PHI_HUT(ths->n[0],k0-N0/2,0));
+  ck02=K(1.0)/(PHI_HUT(ths->n[0],k0,0));
   for(k1=0;k1<N1/2;k1++)
     {
-      ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
-      ck12=K(1.0)/(PHI_HUT(k1,1));
+      ck11=K(1.0)/(PHI_HUT(ths->n[1],k1-N1/2,1));
+      ck12=K(1.0)/(PHI_HUT(ths->n[1],k1,1));
       g_hat[(n0-N0/2+k0)*n1+n1-N1/2+k1] = f_hat[k0*N1+k1]             * ck01 * ck11;
       g_hat[k0*n1+n1-N1/2+k1]           = f_hat[(N0/2+k0)*N1+k1]      * ck02 * ck11;
       g_hat[(n0-N0/2+k0)*n1+k1]         = f_hat[k0*N1+N1/2+k1]        * ck01 * ck12;
@@ -3615,7 +3609,7 @@ void nfft_trafo_2d(nfft_plan *ths)
   TOC(0)
 
   TIC_FFTW(1)
-  fftw_execute(ths->my_fftw_plan1);
+  FFTW(execute)(ths->my_fftw_plan1);
   TOC_FFTW(1);
 
   TIC(2);
@@ -3623,9 +3617,9 @@ void nfft_trafo_2d(nfft_plan *ths)
   TOC(2);
 }
 
-void nfft_adjoint_2d(nfft_plan *ths)
+void X(adjoint_2d)(X(plan) *ths)
 {
-  int k0,k1,n0,n1,N0,N1;
+  INT k0,k1,n0,n1,N0,N1;
   C *g_hat,*f_hat;
   R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12;
   R ck01, ck02, ck11, ck12;
@@ -3647,16 +3641,18 @@ void nfft_adjoint_2d(nfft_plan *ths)
   TOC(2);
 
   TIC_FFTW(1)
-  fftw_execute(ths->my_fftw_plan2);
+  FFTW(execute)(ths->my_fftw_plan2);
   TOC_FFTW(1);
 
   TIC(0)
-  if(ths->nfft_flags & PRE_PHI_HUT)
+  if(ths->flags & PRE_PHI_HUT)
     {
       c_phi_inv01=ths->c_phi_inv[0];
       c_phi_inv02=&ths->c_phi_inv[0][N0/2];
 
+#ifdef _OPENMP
       #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,c_phi_inv11,c_phi_inv12,g_hat11,f_hat11,g_hat21,f_hat21,g_hat12,f_hat12,g_hat22,f_hat22,ck11,ck12)
+#endif
       for(k0=0;k0<N0/2;k0++)
       {
         ck01=c_phi_inv01[k0];
@@ -3687,15 +3683,17 @@ void nfft_adjoint_2d(nfft_plan *ths)
       }
     }
   else
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k0,k1,ck01,ck02,ck11,ck12)
+#endif
     for(k0=0;k0<N0/2;k0++)
       {
-  ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
-  ck02=K(1.0)/(PHI_HUT(k0,0));
+  ck01=K(1.0)/(PHI_HUT(ths->n[0],k0-N0/2,0));
+  ck02=K(1.0)/(PHI_HUT(ths->n[0],k0,0));
   for(k1=0;k1<N1/2;k1++)
     {
-      ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
-      ck12=K(1.0)/(PHI_HUT(k1,1));
+      ck11=K(1.0)/(PHI_HUT(ths->n[1],k1-N1/2,1));
+      ck12=K(1.0)/(PHI_HUT(ths->n[1],k1,1));
       f_hat[k0*N1+k1]             = g_hat[(n0-N0/2+k0)*n1+n1-N1/2+k1] * ck01 * ck11;
       f_hat[(N0/2+k0)*N1+k1]      = g_hat[k0*n1+n1-N1/2+k1]           * ck02 * ck11;
       f_hat[k0*N1+N1/2+k1]        = g_hat[(n0-N0/2+k0)*n1+k1]         * ck01 * ck12;
@@ -3705,14 +3703,14 @@ void nfft_adjoint_2d(nfft_plan *ths)
   TOC(0)
 }
 
-/* ############################################################ SPECIFIC VERSIONS FOR d=3 */
+/* ################################################ SPECIFIC VERSIONS FOR d=3 */
 
-static void nfft_3d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
+static void nfft_3d_init_fg_exp_l(R *fg_exp_l, const INT m, const R b)
 {
-  int l;
+  INT l;
   R fg_exp_b0, fg_exp_b1, fg_exp_b2, fg_exp_b0_sq;
 
-  fg_exp_b0 = EXP(-1.0/b);
+  fg_exp_b0 = EXP(-K(1.0) / b);
   fg_exp_b0_sq = fg_exp_b0*fg_exp_b0;
   fg_exp_b1 = K(1.0);
   fg_exp_b2 = K(1.0);
@@ -3725,253 +3723,251 @@ static void nfft_3d_init_fg_exp_l(R *fg_exp_l, const int m, const R b)
     }
 }
 
-static void nfft_trafo_3d_compute(C *fj, const C *g,
-          const R *psij_const0, const R *psij_const1, const R *psij_const2,
-          const R *xj0, const R *xj1, const R *xj2,
-          const int n0, const int n1, const int n2, const int m)
+static void nfft_trafo_3d_compute(C *fj, const C *g, const R *psij_const0,
+    const R *psij_const1, const R *psij_const2, const R *xj0, const R *xj1,
+    const R *xj2, const INT n0, const INT n1, const INT n2, const INT m)
 {
-  int u0,o0,l0,u1,o1,l1,u2,o2,l2;
+  INT u0, o0, l0, u1, o1, l1, u2, o2, l2;
   const C *gj;
-  const R *psij0,*psij1,*psij2;
+  const R *psij0, *psij1, *psij2;
 
-  psij0=psij_const0;
-  psij1=psij_const1;
-  psij2=psij_const2;
+  psij0 = psij_const0;
+  psij1 = psij_const1;
+  psij2 = psij_const2;
 
-  nfft_uo2(&u0,&o0,*xj0, n0, m);
-  nfft_uo2(&u1,&o1,*xj1, n1, m);
-  nfft_uo2(&u2,&o2,*xj2, n2, m);
+  uo2(&u0, &o0, *xj0, n0, m);
+  uo2(&u1, &o1, *xj1, n1, m);
+  uo2(&u2, &o2, *xj2, n2, m);
 
-  *fj=0;
+  *fj = 0;
 
-  if(u0<o0)
-    if(u1<o1)
-      if(u2<o2)
-  for(l0=0; l0<=2*m+1; l0++,psij0++)
-    {
-      psij1=psij_const1;
-      for(l1=0; l1<=2*m+1; l1++,psij1++)
-        {
-    psij2=psij_const2;
-    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-    for(l2=0; l2<=2*m+1; l2++)
-      (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-        }
-    }
-      else/* asserts (u2>o2)*/
-  for(l0=0; l0<=2*m+1; l0++,psij0++)
-    {
-      psij1=psij_const1;
-      for(l1=0; l1<=2*m+1; l1++,psij1++)
+  if (u0 < o0)
+    if (u1 < o1)
+      if (u2 < o2)
+        for (l0 = 0; l0 <= 2 * m + 1; l0++, psij0++)
         {
-    psij2=psij_const2;
-    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-    for(l2=0; l2<2*m+1-o2; l2++)
-      (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    gj=g+((u0+l0)*n1+(u1+l1))*n2;
-    for(l2=0; l2<=o2; l2++)
-      (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
         }
-    }
-    else/* asserts (u1>o1)*/
-      if(u2<o2)
-  for(l0=0; l0<=2*m+1; l0++,psij0++)
-    {
-      psij1=psij_const1;
-      for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+      else
+        /* asserts (u2>o2)*/
+        for (l0 = 0; l0 <= 2 * m + 1; l0++, psij0++)
         {
-    psij2=psij_const2;
-    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-    for(l2=0; l2<=2*m+1; l2++)
-      (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
         }
-      for(l1=0; l1<=o1; l1++,psij1++)
+    else /* asserts (u1>o1)*/
+      if (u2 < o2)
+        for (l0 = 0; l0 <= 2 * m + 1; l0++, psij0++)
         {
-    psij2=psij_const2;
-    gj=g+((u0+l0)*n1+l1)*n2+u2;
-    for(l2=0; l2<=2*m+1; l2++)
-      (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
         }
-    }
       else/* asserts (u2>o2) */
-  {
-    for(l0=0; l0<=2*m+1; l0++,psij0++)
       {
-        psij1=psij_const1;
-        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-      gj=g+((u0+l0)*n1+(u1+l1))*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-        for(l1=0; l1<=o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+l1)*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-      gj=g+((u0+l0)*n1+l1)*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
+        for (l0 = 0; l0 <= 2 * m + 1; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+            gj = g + ((u0 + l0) * n1 + l1) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+        }
       }
-  }
-  else/* asserts (u0>o0) */
-    if(u1<o1)
-      if(u2<o2)
-  {
-    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+  else /* asserts (u0>o0) */
+    if (u1 < o1)
+      if (u2 < o2)
       {
-        psij1=psij_const1;
-        for(l1=0; l1<=2*m+1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-      }
+        for (l0 = 0; l0 < 2 * m + 1 - o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+        }
 
-    for(l0=0; l0<=o0; l0++,psij0++)
-      {
-        psij1=psij_const1;
-        for(l1=0; l1<=2*m+1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-      }
-  }
-      else/* asserts (u2>o2) */
-  {
-    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+        for (l0 = 0; l0 <= o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+        }
+      } else/* asserts (u2>o2) */
       {
-        psij1=psij_const1;
-        for(l1=0; l1<=2*m+1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-      gj=g+((u0+l0)*n1+(u1+l1))*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-      }
+        for (l0 = 0; l0 < 2 * m + 1 - o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+        }
 
-    for(l0=0; l0<=o0; l0++,psij0++)
-      {
-        psij1=psij_const1;
-        for(l1=0; l1<=2*m+1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-      gj=g+(l0*n1+(u1+l1))*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
+        for (l0 = 0; l0 <= o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+            gj = g + (l0 * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+        }
       }
-  }
-    else/* asserts (u1>o1) */
-      if(u2<o2)
-  {
-    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+    else /* asserts (u1>o1) */
+      if (u2 < o2)
       {
-        psij1=psij_const1;
-        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-        for(l1=0; l1<=o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+l1)*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-      }
-    for(l0=0; l0<=o0; l0++,psij0++)
+        for (l0 = 0; l0 < 2 * m + 1 - o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+        }
+        for (l0 = 0; l0 <= o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+        }
+      } else/* asserts (u2>o2) */
       {
-        psij1=psij_const1;
-        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-        for(l1=0; l1<=o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+l1)*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
+        for (l0 = 0; l0 < 2 * m + 1 - o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+            gj = g + ((u0 + l0) * n1 + l1) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+        }
+
+        for (l0 = 0; l0 <= o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+            gj = g + (l0 * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+            gj = g + (l0 * n1 + l1) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
+          }
+        }
       }
-  }
-      else/* asserts (u2>o2) */
-  {
-    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
-      {
-        psij1=psij_const1;
-        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-      gj=g+((u0+l0)*n1+(u1+l1))*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-        for(l1=0; l1<=o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+l1)*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-      gj=g+((u0+l0)*n1+l1)*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-      }
-
-    for(l0=0; l0<=o0; l0++,psij0++)
-      {
-        psij1=psij_const1;
-        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-      gj=g+(l0*n1+(u1+l1))*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-        for(l1=0; l1<=o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+l1)*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-      gj=g+(l0*n1+l1)*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*fj) += (*psij0) * (*psij1) * (*psij2++) * (*gj++);
-    }
-      }
-  }
 }
 
 #ifdef _OPENMP
@@ -3997,20 +3993,20 @@ static void nfft_trafo_3d_compute(C *fj, const C *g,
  * \author Toni Volkmer
  */
 static void nfft_adjoint_3d_compute_omp_blockwise(const C f, C *g,
-            const R *psij_const0, const R *psij_const1, const R *psij_const2,
-            const R *xj0, const R *xj1, const R *xj2,
-            const int n0, const int n1, const int n2, const int m,
-	    const int my_u0, const int my_o0)
+    const R *psij_const0, const R *psij_const1, const R *psij_const2,
+    const R *xj0, const R *xj1, const R *xj2,
+    const INT n0, const INT n1, const INT n2, const INT m,
+    const INT my_u0, const INT my_o0)
 {
-  int ar_u0,ar_o0,l0,u1,o1,l1,u2,o2,l2;
-  const int lprod = (2*m+2) * (2*m+2) * (2*m+2);
+  INT ar_u0,ar_o0,l0,u1,o1,l1,u2,o2,l2;
+  const INT lprod = (2*m+2) * (2*m+2) * (2*m+2);
 
-  unsigned long int index_temp1[2*m+2];
-  unsigned long int index_temp2[2*m+2];
+  INT index_temp1[2*m+2];
+  INT index_temp2[2*m+2];
 
-  nfft_uo2(&ar_u0,&ar_o0,*xj0, n0, m);
-  nfft_uo2(&u1,&o1,*xj1, n1, m);
-  nfft_uo2(&u2,&o2,*xj2, n2, m);
+  uo2(&ar_u0,&ar_o0,*xj0, n0, m);
+  uo2(&u1,&o1,*xj1, n1, m);
+  uo2(&u2,&o2,*xj2, n2, m);
 
   for (l1=0; l1<=2*m+1; l1++)
     index_temp1[l1] = (u1+l1)%n1;
@@ -4020,9 +4016,9 @@ static void nfft_adjoint_3d_compute_omp_blockwise(const C f, C *g,
 
   if(ar_u0<ar_o0)
   {
-    int u0 = MAX(my_u0,ar_u0);
-    int o0 = MIN(my_o0,ar_o0);
-    int offset_psij = u0-ar_u0;
+    INT u0 = MAX(my_u0,ar_u0);
+    INT o0 = MIN(my_o0,ar_o0);
+    INT offset_psij = u0-ar_u0;
 #ifdef OMP_ASSERT
     assert(offset_psij >= 0);
     assert(o0-u0 <= 2*m+1);
@@ -4031,24 +4027,24 @@ static void nfft_adjoint_3d_compute_omp_blockwise(const C f, C *g,
 
     for (l0 = 0; l0 <= o0-u0; l0++)
     {
-      const unsigned long int i0 = (u0+l0) * n1;
+      const INT i0 = (u0+l0) * n1;
       const C val0 = psij_const0[offset_psij+l0];
 
       for(l1=0; l1<=2*m+1; l1++)
       {
-        const unsigned long int i1 = (i0 + index_temp1[l1]) * n2;
+        const INT i1 = (i0 + index_temp1[l1]) * n2;
         const C val1 = psij_const1[l1];
 
         for(l2=0; l2<=2*m+1; l2++)
           g[i1 + index_temp2[l2]] += val0 * val1 * psij_const2[l2] * f;
       }
-    }  
+    }
   }
   else
   {
-    int u0 = MAX(my_u0,ar_u0);
-    int o0 = my_o0;
-    int offset_psij = u0-ar_u0;
+    INT u0 = MAX(my_u0,ar_u0);
+    INT o0 = my_o0;
+    INT offset_psij = u0-ar_u0;
 #ifdef OMP_ASSERT
     assert(offset_psij >= 0);
     assert(o0-u0 <= 2*m+1);
@@ -4057,12 +4053,12 @@ static void nfft_adjoint_3d_compute_omp_blockwise(const C f, C *g,
 
     for (l0 = 0; l0 <= o0-u0; l0++)
     {
-      unsigned long int i0 = (u0+l0) * n1;
+      INT i0 = (u0+l0) * n1;
       const C val0 = psij_const0[offset_psij+l0];
 
       for(l1=0; l1<=2*m+1; l1++)
       {
-        const unsigned long int i1 = (i0 + index_temp1[l1]) * n2;
+        const INT i1 = (i0 + index_temp1[l1]) * n2;
         const C val1 = psij_const1[l1];
 
         for(l2=0; l2<=2*m+1; l2++)
@@ -4083,12 +4079,12 @@ static void nfft_adjoint_3d_compute_omp_blockwise(const C f, C *g,
 #endif
     for (l0 = 0; l0 <= o0-u0; l0++)
     {
-      unsigned long int i0 = (u0+l0) * n1;
+      INT i0 = (u0+l0) * n1;
       const C val0 = psij_const0[offset_psij+l0];
 
       for(l1=0; l1<=2*m+1; l1++)
       {
-        const unsigned long int i1 = (i0 + index_temp1[l1]) * n2;
+        const INT i1 = (i0 + index_temp1[l1]) * n2;
         const C val1 = psij_const1[l1];
 
         for(l2=0; l2<=2*m+1; l2++)
@@ -4102,20 +4098,20 @@ static void nfft_adjoint_3d_compute_omp_blockwise(const C f, C *g,
 #ifdef _OPENMP
 /* adjoint NFFT three-dimensional case with OpenMP atomic operations */
 static void nfft_adjoint_3d_compute_omp_atomic(const C f, C *g,
-            const R *psij_const0, const R *psij_const1, const R *psij_const2,
-            const R *xj0, const R *xj1, const R *xj2,
-            const int n0, const int n1, const int n2, const int m)
+    const R *psij_const0, const R *psij_const1, const R *psij_const2,
+    const R *xj0, const R *xj1, const R *xj2,
+    const INT n0, const INT n1, const INT n2, const INT m)
 {
-  int u0,o0,l0,u1,o1,l1,u2,o2,l2;
-  const int lprod = (2*m+2) * (2*m+2) * (2*m+2);
+  INT u0,o0,l0,u1,o1,l1,u2,o2,l2;
+  const INT lprod = (2*m+2) * (2*m+2) * (2*m+2);
 
-  unsigned long int index_temp0[2*m+2];
-  unsigned long int index_temp1[2*m+2];
-  unsigned long int index_temp2[2*m+2];
+  INT index_temp0[2*m+2];
+  INT index_temp1[2*m+2];
+  INT index_temp2[2*m+2];
 
-  nfft_uo2(&u0,&o0,*xj0, n0, m);
-  nfft_uo2(&u1,&o1,*xj1, n1, m);
-  nfft_uo2(&u2,&o2,*xj2, n2, m);
+  uo2(&u0,&o0,*xj0, n0, m);
+  uo2(&u1,&o1,*xj1, n1, m);
+  uo2(&u2,&o2,*xj2, n2, m);
 
   for (l0=0; l0<=2*m+1; l0++)
     index_temp0[l0] = (u0+l0)%n0;
@@ -4132,15 +4128,15 @@ static void nfft_adjoint_3d_compute_omp_atomic(const C f, C *g,
     {
       for(l2=0; l2<=2*m+1; l2++)
       {
-        unsigned long int i = (index_temp0[l0] * n1 + index_temp1[l1]) * n2 + index_temp2[l2];
+        INT i = (index_temp0[l0] * n1 + index_temp1[l1]) * n2 + index_temp2[l2];
         C *lhs = g+i;
         R *lhs_real = (R*)lhs;
         C val = psij_const0[l0] * psij_const1[l1] * psij_const2[l2] * f;
 
-        #pragma omp atomic
+#pragma omp atomic
         lhs_real[0] += creal(val);
 
-        #pragma omp atomic
+#pragma omp atomic
         lhs_real[1] += cimag(val);
       }
     }
@@ -4150,276 +4146,274 @@ static void nfft_adjoint_3d_compute_omp_atomic(const C f, C *g,
 
 #ifndef _OPENMP
 static void nfft_adjoint_3d_compute_serial(const C *fj, C *g,
-            const R *psij_const0, const R *psij_const1, const R *psij_const2,
-            const R *xj0, const R *xj1, const R *xj2,
-            const int n0, const int n1, const int n2, const int m)
+    const R *psij_const0, const R *psij_const1, const R *psij_const2, const R *xj0,
+    const R *xj1, const R *xj2, const INT n0, const INT n1, const INT n2,
+    const INT m)
 {
-  int u0,o0,l0,u1,o1,l1,u2,o2,l2;
+  INT u0, o0, l0, u1, o1, l1, u2, o2, l2;
   C *gj;
-  const R *psij0,*psij1,*psij2;
+  const R *psij0, *psij1, *psij2;
 
-  psij0=psij_const0;
-  psij1=psij_const1;
-  psij2=psij_const2;
+  psij0 = psij_const0;
+  psij1 = psij_const1;
+  psij2 = psij_const2;
 
-  nfft_uo2(&u0,&o0,*xj0, n0, m);
-  nfft_uo2(&u1,&o1,*xj1, n1, m);
-  nfft_uo2(&u2,&o2,*xj2, n2, m);
+  uo2(&u0, &o0, *xj0, n0, m);
+  uo2(&u1, &o1, *xj1, n1, m);
+  uo2(&u2, &o2, *xj2, n2, m);
 
-  if(u0<o0)
-    if(u1<o1)
-      if(u2<o2)
-  for(l0=0; l0<=2*m+1; l0++,psij0++)
-    {
-      psij1=psij_const1;
-      for(l1=0; l1<=2*m+1; l1++,psij1++)
-        {
-    psij2=psij_const2;
-    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-    for(l2=0; l2<=2*m+1; l2++)
-      (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-        }
-    }
-      else/* asserts (u2>o2)*/
-  for(l0=0; l0<=2*m+1; l0++,psij0++)
-    {
-      psij1=psij_const1;
-      for(l1=0; l1<=2*m+1; l1++,psij1++)
+  if (u0 < o0)
+    if (u1 < o1)
+      if (u2 < o2)
+        for (l0 = 0; l0 <= 2 * m + 1; l0++, psij0++)
         {
-    psij2=psij_const2;
-    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-    for(l2=0; l2<2*m+1-o2; l2++)
-      (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    gj=g+((u0+l0)*n1+(u1+l1))*n2;
-    for(l2=0; l2<=o2; l2++)
-      (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
         }
-    }
-    else/* asserts (u1>o1)*/
-      if(u2<o2)
-  for(l0=0; l0<=2*m+1; l0++,psij0++)
-    {
-      psij1=psij_const1;
-      for(l1=0; l1<2*m+1-o1; l1++,psij1++)
+      else
+        /* asserts (u2>o2)*/
+        for (l0 = 0; l0 <= 2 * m + 1; l0++, psij0++)
         {
-    psij2=psij_const2;
-    gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-    for(l2=0; l2<=2*m+1; l2++)
-      (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
         }
-      for(l1=0; l1<=o1; l1++,psij1++)
+    else /* asserts (u1>o1)*/
+      if (u2 < o2)
+        for (l0 = 0; l0 <= 2 * m + 1; l0++, psij0++)
         {
-    psij2=psij_const2;
-    gj=g+((u0+l0)*n1+l1)*n2+u2;
-    for(l2=0; l2<=2*m+1; l2++)
-      (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
         }
-    }
       else/* asserts (u2>o2) */
-  {
-    for(l0=0; l0<=2*m+1; l0++,psij0++)
       {
-        psij1=psij_const1;
-        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-      gj=g+((u0+l0)*n1+(u1+l1))*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-        for(l1=0; l1<=o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+l1)*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-      gj=g+((u0+l0)*n1+l1)*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
+        for (l0 = 0; l0 <= 2 * m + 1; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+            gj = g + ((u0 + l0) * n1 + l1) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+        }
       }
-  }
-  else/* asserts (u0>o0) */
-    if(u1<o1)
-      if(u2<o2)
-  {
-    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+  else /* asserts (u0>o0) */
+    if (u1 < o1)
+      if (u2 < o2)
       {
-        psij1=psij_const1;
-        for(l1=0; l1<=2*m+1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-      }
+        for (l0 = 0; l0 < 2 * m + 1 - o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+        }
 
-    for(l0=0; l0<=o0; l0++,psij0++)
-      {
-        psij1=psij_const1;
-        for(l1=0; l1<=2*m+1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-      }
-  }
-      else/* asserts (u2>o2) */
-  {
-    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+        for (l0 = 0; l0 <= o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+        }
+      } else/* asserts (u2>o2) */
       {
-        psij1=psij_const1;
-        for(l1=0; l1<=2*m+1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-      gj=g+((u0+l0)*n1+(u1+l1))*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-      }
+        for (l0 = 0; l0 < 2 * m + 1 - o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+        }
 
-    for(l0=0; l0<=o0; l0++,psij0++)
-      {
-        psij1=psij_const1;
-        for(l1=0; l1<=2*m+1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-      gj=g+(l0*n1+(u1+l1))*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-      }
-  }
-    else/* asserts (u1>o1) */
-      if(u2<o2)
-  {
-    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
-      {
-        psij1=psij_const1;
-        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-        for(l1=0; l1<=o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+l1)*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
+        for (l0 = 0; l0 <= o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 <= 2 * m + 1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+            gj = g + (l0 * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+        }
       }
-    for(l0=0; l0<=o0; l0++,psij0++)
+    else /* asserts (u1>o1) */
+      if (u2 < o2)
       {
-        psij1=psij_const1;
-        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-        for(l1=0; l1<=o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+l1)*n2+u2;
-      for(l2=0; l2<=2*m+1; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-      }
-  }
-      else/* asserts (u2>o2) */
-  {
-    for(l0=0; l0<2*m+1-o0; l0++,psij0++)
+        for (l0 = 0; l0 < 2 * m + 1 - o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+        }
+        for (l0 = 0; l0 <= o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 <= 2 * m + 1; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+        }
+      } else/* asserts (u2>o2) */
       {
-        psij1=psij_const1;
-        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-      gj=g+((u0+l0)*n1+(u1+l1))*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-        for(l1=0; l1<=o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+((u0+l0)*n1+l1)*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-      gj=g+((u0+l0)*n1+l1)*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-      }
+        for (l0 = 0; l0 < 2 * m + 1 - o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+            gj = g + ((u0 + l0) * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + ((u0 + l0) * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+            gj = g + ((u0 + l0) * n1 + l1) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+        }
 
-    for(l0=0; l0<=o0; l0++,psij0++)
-      {
-        psij1=psij_const1;
-        for(l1=0; l1<2*m+1-o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+(u1+l1))*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-      gj=g+(l0*n1+(u1+l1))*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
-        for(l1=0; l1<=o1; l1++,psij1++)
-    {
-      psij2=psij_const2;
-      gj=g+(l0*n1+l1)*n2+u2;
-      for(l2=0; l2<2*m+1-o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-      gj=g+(l0*n1+l1)*n2;
-      for(l2=0; l2<=o2; l2++)
-        (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
-    }
+        for (l0 = 0; l0 <= o0; l0++, psij0++)
+        {
+          psij1 = psij_const1;
+          for (l1 = 0; l1 < 2 * m + 1 - o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + (u1 + l1)) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+            gj = g + (l0 * n1 + (u1 + l1)) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+          for (l1 = 0; l1 <= o1; l1++, psij1++)
+          {
+            psij2 = psij_const2;
+            gj = g + (l0 * n1 + l1) * n2 + u2;
+            for (l2 = 0; l2 < 2 * m + 1 - o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+            gj = g + (l0 * n1 + l1) * n2;
+            for (l2 = 0; l2 <= o2; l2++)
+              (*gj++) += (*psij0) * (*psij1) * (*psij2++) * (*fj);
+          }
+        }
       }
-  }
 }
 #endif
 
-static void nfft_trafo_3d_B(nfft_plan *ths)
+static void nfft_trafo_3d_B(X(plan) *ths)
 {
-  const int N0 = ths->N[0];
-  const int n0 = ths->n[0];
-  const int N1 = ths->N[1];
-  const int n1 = ths->n[1];
-  const int N2 = ths->N[2];
-  const int n2 = ths->n[2];
-  const int M = ths->M_total;
-  const int m = ths->m;
+  const INT n0 = ths->n[0];
+  const INT n1 = ths->n[1];
+  const INT n2 = ths->n[2];
+  const INT M = ths->M_total;
+  const INT m = ths->m;
 
   const C* g = (C*) ths->g;
 
-  int k;
+  INT k;
 
-  if(ths->nfft_flags & PRE_FULL_PSI)
+  if(ths->flags & PRE_FULL_PSI)
   {
-    const int lprod = (2*m+2) * (2*m+2) * (2*m+2);
+    const INT lprod = (2*m+2) * (2*m+2) * (2*m+2);
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int l;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       ths->f[j] = K(0.0);
       for (l = 0; l < lprod; l++)
         ths->f[j] += ths->psi[j*lprod+l] * g[ths->psi_index_g[j*lprod+l]];
@@ -4427,18 +4421,20 @@ static void nfft_trafo_3d_B(nfft_plan *ths)
     return;
   } /* if(PRE_FULL_PSI) */
 
-  if(ths->nfft_flags & PRE_PSI)
+  if(ths->flags & PRE_PSI)
   {
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       nfft_trafo_3d_compute(ths->f+j, g, ths->psi+j*3*(2*m+2), ths->psi+(j*3+1)*(2*m+2), ths->psi+(j*3+2)*(2*m+2), ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
     }
     return;
   } /* if(PRE_PSI) */
 
-  if(ths->nfft_flags & PRE_FG_PSI)
+  if(ths->flags & PRE_FG_PSI)
   {
     R fg_exp_l[3*(2*m+2)];
 
@@ -4446,11 +4442,13 @@ static void nfft_trafo_3d_B(nfft_plan *ths)
     nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
     nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
-      int l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l;
       R psij_const[3*(2*m+2)];
       R fg_psij0 = ths->psi[2*j*3];
       R fg_psij1 = ths->psi[2*j*3+1];
@@ -4489,7 +4487,7 @@ static void nfft_trafo_3d_B(nfft_plan *ths)
     return;
   } /* if(PRE_FG_PSI) */
 
-  if(ths->nfft_flags & FG_PSI)
+  if(ths->flags & FG_PSI)
   {
     R fg_exp_l[3*(2*m+2)];
 
@@ -4497,19 +4495,21 @@ static void nfft_trafo_3d_B(nfft_plan *ths)
     nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
     nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
-      int u, o, l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT u, o, l;
       R psij_const[3*(2*m+2)];
       R fg_psij0, fg_psij1, fg_psij2;
 
-      nfft_uo(ths,j,&u,&o,0);
-      fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0));
-      fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]);
+      uo(ths,j,&u,&o,(INT)0);
+      fg_psij0 = (PHI(ths->n[0], ths->x[3*j] - ((R)u) / (R)(n0),0));
+      fg_psij1 = EXP(K(2.0) * ((R)(n0) * (ths->x[3*j]) - (R)(u)) / ths->b[0]);
       fg_psij2 = K(1.0);
       psij_const[0] = fg_psij0;
       for(l=1; l<=2*m+1; l++)
@@ -4518,9 +4518,9 @@ static void nfft_trafo_3d_B(nfft_plan *ths)
         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
       }
 
-      nfft_uo(ths,j,&u,&o,1);
-      fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1));
-      fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]);
+      uo(ths,j,&u,&o,(INT)1);
+      fg_psij0 = (PHI(ths->n[1], ths->x[3*j+1] - ((R)u) / (R)(n1),1));
+      fg_psij1 = EXP(K(2.0) * ((R)(n1) * (ths->x[3*j+1]) - (R)(u)) / ths->b[1]);
       fg_psij2 = K(1.0);
       psij_const[2*m+2] = fg_psij0;
       for(l=1; l<=2*m+1; l++)
@@ -4529,9 +4529,9 @@ static void nfft_trafo_3d_B(nfft_plan *ths)
         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
       }
 
-      nfft_uo(ths,j,&u,&o,2);
-      fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2));
-      fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]);
+      uo(ths,j,&u,&o,(INT)2);
+      fg_psij0 = (PHI(ths->n[2], ths->x[3*j+2] - ((R)u) / (R)(n2),2));
+      fg_psij1 = EXP(K(2.0) * ((R)(n2) * (ths->x[3*j+2]) - (R)(u)) / ths->b[2]);
       fg_psij2 = K(1.0);
       psij_const[2*(2*m+2)] = fg_psij0;
       for(l=1; l<=2*m+1; l++)
@@ -4546,41 +4546,43 @@ static void nfft_trafo_3d_B(nfft_plan *ths)
     return;
   } /* if(FG_PSI) */
 
-  if(ths->nfft_flags & PRE_LIN_PSI)
+  if(ths->flags & PRE_LIN_PSI)
   {
-    const int K = ths->K, ip_s = K / (m + 2);
+    const INT K = ths->K, ip_s = K / (m + 2);
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int u, o, l;
+      INT u, o, l;
       R ip_y, ip_w;
-      int ip_u;
+      INT ip_u;
       R psij_const[3*(2*m+2)];
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-      nfft_uo(ths,j,&u,&o,0);
-      ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y-ip_u;
+      uo(ths,j,&u,&o,(INT)0);
+      ip_y = FABS((R)(n0) * ths->x[3*j+0] - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
       for(l=0; l < 2*m+2; l++)
         psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
           ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
 
-      nfft_uo(ths,j,&u,&o,1);
-      ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y-ip_u;
+      uo(ths,j,&u,&o,(INT)1);
+      ip_y = FABS((R)(n1) * ths->x[3*j+1] - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
       for(l=0; l < 2*m+2; l++)
         psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
           ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
 
-      nfft_uo(ths,j,&u,&o,2);
-      ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y-ip_u;
+      uo(ths,j,&u,&o,(INT)2);
+      ip_y = FABS((R)(n2) * ths->x[3*j+2] - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
       for(l=0; l < 2*m+2; l++)
         psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
           ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
@@ -4592,296 +4594,297 @@ static void nfft_trafo_3d_B(nfft_plan *ths)
 
   /* no precomputed psi at all */
 
-  nfft_sort_nodes(ths);
+  sort(ths);
 
+#ifdef _OPENMP
   #pragma omp parallel for default(shared) private(k)
+#endif
   for (k = 0; k < M; k++)
   {
     R psij_const[3*(2*m+2)];
-    int u, o, l;
-    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+    INT u, o, l;
+    INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-    nfft_uo(ths,j,&u,&o,0);
+    uo(ths,j,&u,&o,(INT)0);
     for(l=0;l<=2*m+1;l++)
-      psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0));
+      psij_const[l]=(PHI(ths->n[0], ths->x[3*j] - ((R)((u+l))) / (R)(n0),0));
 
-    nfft_uo(ths,j,&u,&o,1);
+    uo(ths,j,&u,&o,(INT)1);
     for(l=0;l<=2*m+1;l++)
-      psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1));
+      psij_const[2*m+2+l]=(PHI(ths->n[1], ths->x[3*j+1] - ((R)((u+l))) / (R)(n1),1));
 
-    nfft_uo(ths,j,&u,&o,2);
+    uo(ths,j,&u,&o,(INT)2);
     for(l=0;l<=2*m+1;l++)
-      psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2));
+      psij_const[2*(2*m+2)+l]=(PHI(ths->n[2], ths->x[3*j+2] - ((R)((u+l))) / (R)(n2),2));
 
     nfft_trafo_3d_compute(ths->f+j, g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
   }
 }
 
 #ifdef OMP_ASSERT
-#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A                        \
-{                                                                             \
-          assert(ar_x[2*k] >= min_u_a || k == M-1);                           \
-          if (k > 0)                                                          \
-            assert(ar_x[2*k-2] < min_u_a);                                    \
+#define MACRO_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A \
+{ \
+          assert(ar_x[2*k] >= min_u_a || k == M-1); \
+          if (k > 0) \
+            assert(ar_x[2*k-2] < min_u_a); \
 }
 #else
-#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A
+#define MACRO_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A
 #endif
 
 #ifdef OMP_ASSERT
-#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B                        \
-{                                                                             \
-          assert(ar_x[2*k] >= min_u_b || k == M-1);                           \
-          if (k > 0)                                                          \
-            assert(ar_x[2*k-2] < min_u_b);                                    \
+#define MACRO_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B \
+{ \
+          assert(ar_x[2*k] >= min_u_b || k == M-1); \
+          if (k > 0) \
+            assert(ar_x[2*k-2] < min_u_b); \
 }
 #else
-#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B
+#define MACRO_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B
 #endif
 
-#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI                 \
-            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \
-                ths->psi+j*3*(2*m+2),                                         \
-                ths->psi+(j*3+1)*(2*m+2),                                     \
-                ths->psi+(j*3+2)*(2*m+2),                                     \
-                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \
+#define MACRO_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_PSI \
+            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \
+                ths->psi+j*3*(2*m+2), \
+                ths->psi+(j*3+1)*(2*m+2), \
+                ths->psi+(j*3+2)*(2*m+2), \
+                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \
                 n0, n1, n2, m, my_u0, my_o0);
 
-#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI              \
-{                                                                             \
-            int u, o, l;                                                      \
-            R psij_const[3*(2*m+2)];                                          \
-            R fg_psij0 = ths->psi[2*j*3];                                     \
-            R fg_psij1 = ths->psi[2*j*3+1];                                   \
-            R fg_psij2 = K(1.0);                                              \
-                                                                              \
-            psij_const[0] = fg_psij0;                                         \
-            for(l=1; l<=2*m+1; l++)                                           \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
-              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \
-            }                                                                 \
-                                                                              \
-            fg_psij0 = ths->psi[2*(j*3+1)];                                   \
-            fg_psij1 = ths->psi[2*(j*3+1)+1];                                 \
-            fg_psij2 = K(1.0);                                                \
-            psij_const[2*m+2] = fg_psij0;                                     \
-            for(l=1; l<=2*m+1; l++)                                           \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
-              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \
-            }                                                                 \
-                                                                              \
-            fg_psij0 = ths->psi[2*(j*3+2)];                                   \
-            fg_psij1 = ths->psi[2*(j*3+2)+1];                                 \
-            fg_psij2 = K(1.0);                                                \
-            psij_const[2*(2*m+2)] = fg_psij0;                                 \
-            for(l=1; l<=2*m+1; l++)                                           \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
+#define MACRO_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_FG_PSI \
+{ \
+            INT u, o, l; \
+            R psij_const[3*(2*m+2)]; \
+            R fg_psij0 = ths->psi[2*j*3]; \
+            R fg_psij1 = ths->psi[2*j*3+1]; \
+            R fg_psij2 = K(1.0); \
+ \
+            psij_const[0] = fg_psij0; \
+            for(l=1; l<=2*m+1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
+              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \
+            } \
+ \
+            fg_psij0 = ths->psi[2*(j*3+1)]; \
+            fg_psij1 = ths->psi[2*(j*3+1)+1]; \
+            fg_psij2 = K(1.0); \
+            psij_const[2*m+2] = fg_psij0; \
+            for(l=1; l<=2*m+1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
+              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \
+            } \
+ \
+            fg_psij0 = ths->psi[2*(j*3+2)]; \
+            fg_psij1 = ths->psi[2*(j*3+2)+1]; \
+            fg_psij2 = K(1.0); \
+            psij_const[2*(2*m+2)] = fg_psij0; \
+            for(l=1; l<=2*m+1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
               psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l]; \
-            }                                                                 \
-                                                                              \
-            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \
-                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \
-                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \
-                n0, n1, n2, m, my_u0, my_o0);                                 \
+            } \
+ \
+            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \
+                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \
+                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \
+                n0, n1, n2, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI                  \
-{                                                                             \
-            int u, o, l;                                                      \
-            R psij_const[3*(2*m+2)];                                          \
-            R fg_psij0, fg_psij1, fg_psij2;                                   \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,0);                                           \
-            fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0));                        \
-            fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]);          \
-            fg_psij2 = K(1.0);                                                \
-            psij_const[0] = fg_psij0;                                         \
-            for(l=1; l<=2*m+1; l++)                                           \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
-              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];                  \
-            }                                                                 \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,1);                                           \
-            fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1));                      \
-            fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]);        \
-            fg_psij2 = K(1.0);                                                \
-            psij_const[2*m+2] = fg_psij0;                                     \
-            for(l=1; l<=2*m+1; l++)                                           \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
-              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];      \
-            }                                                                 \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,2);                                           \
-            fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2));                      \
-            fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]);        \
-            fg_psij2 = K(1.0);                                                \
-            psij_const[2*(2*m+2)] = fg_psij0;                                 \
-            for(l=1; l<=2*m+1; l++)                                           \
-            {                                                                 \
-              fg_psij2 *= fg_psij1;                                           \
+#define MACRO_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_FG_PSI \
+{ \
+            INT u, o, l; \
+            R psij_const[3*(2*m+2)]; \
+            R fg_psij0, fg_psij1, fg_psij2; \
+ \
+            uo(ths,j,&u,&o,(INT)0); \
+            fg_psij0 = (PHI(ths->n[0],ths->x[3*j]-((R)u)/n0,0)); \
+            fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]); \
+            fg_psij2 = K(1.0); \
+            psij_const[0] = fg_psij0; \
+            for(l=1; l<=2*m+1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
+              psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l]; \
+            } \
+ \
+            uo(ths,j,&u,&o,(INT)1); \
+            fg_psij0 = (PHI(ths->n[1],ths->x[3*j+1]-((R)u)/n1,1)); \
+            fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]); \
+            fg_psij2 = K(1.0); \
+            psij_const[2*m+2] = fg_psij0; \
+            for(l=1; l<=2*m+1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
+              psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l]; \
+            } \
+ \
+            uo(ths,j,&u,&o,(INT)2); \
+            fg_psij0 = (PHI(ths->n[2],ths->x[3*j+2]-((R)u)/n2,2)); \
+            fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]); \
+            fg_psij2 = K(1.0); \
+            psij_const[2*(2*m+2)] = fg_psij0; \
+            for(l=1; l<=2*m+1; l++) \
+            { \
+              fg_psij2 *= fg_psij1; \
               psij_const[2*(2*m+2)+l] = fg_psij0*fg_psij2*fg_exp_l[2*(2*m+2)+l]; \
-            }                                                                 \
-                                                                              \
-            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \
-                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \
-                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \
-                n0, n1, n2, m, my_u0, my_o0);                                 \
+            } \
+ \
+            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \
+                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \
+                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \
+                n0, n1, n2, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI             \
-{                                                                             \
-            int u, o, l;                                                      \
-            R psij_const[3*(2*m+2)];                                          \
-            int ip_u;                                                         \
-            R ip_y, ip_w;                                                     \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,0);                                           \
-            ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s);                      \
-            ip_u = LRINT(FLOOR(ip_y));                                        \
-            ip_w = ip_y-ip_u;                                                 \
-            for(l=0; l < 2*m+2; l++)                                          \
-              psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +      \
-                ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);                          \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,1);                                           \
-            ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s);                      \
-            ip_u = LRINT(FLOOR(ip_y));                                        \
-            ip_w = ip_y-ip_u;                                                 \
-            for(l=0; l < 2*m+2; l++)                                          \
+#define MACRO_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_PRE_LIN_PSI \
+{ \
+            INT u, o, l; \
+            R psij_const[3*(2*m+2)]; \
+            INT ip_u; \
+            R ip_y, ip_w; \
+ \
+            uo(ths,j,&u,&o,(INT)0); \
+            ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s); \
+            ip_u = LRINT(FLOOR(ip_y)); \
+            ip_w = ip_y-ip_u; \
+            for(l=0; l < 2*m+2; l++) \
+              psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
+                ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w); \
+ \
+            uo(ths,j,&u,&o,(INT)1); \
+            ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s); \
+            ip_u = LRINT(FLOOR(ip_y)); \
+            ip_w = ip_y-ip_u; \
+            for(l=0; l < 2*m+2; l++) \
               psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
-                ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);                    \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,2);                                           \
-            ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s);                      \
-            ip_u = LRINT(FLOOR(ip_y));                                        \
-            ip_w = ip_y-ip_u;                                                 \
-            for(l=0; l < 2*m+2; l++)                                          \
+                ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w); \
+ \
+            uo(ths,j,&u,&o,(INT)2); \
+            ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s); \
+            ip_u = LRINT(FLOOR(ip_y)); \
+            ip_w = ip_y-ip_u; \
+            for(l=0; l < 2*m+2; l++) \
               psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) + \
-                ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);                  \
-                                                                              \
-            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \
-                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \
-                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \
-                n0, n1, n2, m, my_u0, my_o0);                                 \
+                ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w); \
+ \
+            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \
+                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \
+                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \
+                n0, n1, n2, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI                  \
-{                                                                             \
-            int u, o, l;                                                      \
-            R psij_const[3*(2*m+2)];                                          \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,0);                                           \
-            for(l=0;l<=2*m+1;l++)                                             \
-              psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0));             \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,1);                                           \
-            for(l=0;l<=2*m+1;l++)                                             \
-              psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1));     \
-                                                                              \
-            nfft_uo(ths,j,&u,&o,2);                                           \
-            for(l=0;l<=2*m+1;l++)                                             \
-              psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2)); \
-                                                                              \
-            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g,               \
-                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2,           \
-                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2,                       \
-                n0, n1, n2, m, my_u0, my_o0);                                 \
+#define MACRO_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_NO_PSI \
+{ \
+            INT u, o, l; \
+            R psij_const[3*(2*m+2)]; \
+ \
+            uo(ths,j,&u,&o,(INT)0); \
+            for(l=0;l<=2*m+1;l++) \
+              psij_const[l]=(PHI(ths->n[0],ths->x[3*j]-((R)((u+l)))/n0,0)); \
+ \
+            uo(ths,j,&u,&o,(INT)1); \
+            for(l=0;l<=2*m+1;l++) \
+              psij_const[2*m+2+l]=(PHI(ths->n[1],ths->x[3*j+1]-((R)((u+l)))/n1,1)); \
+ \
+            uo(ths,j,&u,&o,(INT)2); \
+            for(l=0;l<=2*m+1;l++) \
+              psij_const[2*(2*m+2)+l]=(PHI(ths->n[2],ths->x[3*j+2]-((R)((u+l)))/n2,2)); \
+ \
+            nfft_adjoint_3d_compute_omp_blockwise(ths->f[j], g, \
+                psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, \
+                ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, \
+                n0, n1, n2, m, my_u0, my_o0); \
 }
 
-#define MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(whichone)                       \
-{                                                                             \
-    if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)                         \
-    {                                                                         \
-      _Pragma("omp parallel private(k)")                                      \
-      {                                                                       \
-        int my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b;                 \
-        int *ar_x = ths->index_x;                                             \
-                                                                              \
+#define MACRO_adjoint_3d_B_OMP_BLOCKWISE(whichone) \
+{ \
+    if (ths->flags & NFFT_OMP_BLOCKWISE_ADJOINT) \
+    { \
+      _Pragma("omp parallel private(k)") \
+      { \
+        INT my_u0, my_o0, min_u_a, max_u_a, min_u_b, max_u_b; \
+        INT *ar_x = ths->index_x; \
+ \
         nfft_adjoint_B_omp_blockwise_init(&my_u0, &my_o0, &min_u_a, &max_u_a, \
-            &min_u_b, &max_u_b, 3, ths->n, m);                                \
-                                                                              \
-        if (min_u_a != -1)                                                    \
-        {                                                                     \
-          k = index_x_binary_search(ar_x, M, min_u_a);                        \
-                                                                              \
-          MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A                      \
-                                                                              \
-          while (k < M)                                                       \
-          {                                                                   \
-            int u_prod = ar_x[2*k];                                           \
-            int j = ar_x[2*k+1];                                              \
-                                                                              \
-            if (u_prod < min_u_a || u_prod > max_u_a)                         \
-              break;                                                          \
-                                                                              \
-            MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
-                                                                              \
-            k++;                                                              \
-          }                                                                   \
-        }                                                                     \
-                                                                              \
-        if (min_u_b != -1)                                                    \
-        {                                                                     \
-          int k = index_x_binary_search(ar_x, M, min_u_b);                    \
-                                                                              \
-          MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B                      \
-                                                                              \
-          while (k < M)                                                       \
-          {                                                                   \
-            int u_prod = ar_x[2*k];                                           \
-            int j = ar_x[2*k+1];                                              \
-                                                                              \
-            if (u_prod < min_u_b || u_prod > max_u_b)                         \
-              break;                                                          \
-                                                                              \
-            MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone         \
-                                                                              \
-            k++;                                                              \
-          }                                                                   \
-        }                                                                     \
-      } /* omp parallel */                                                    \
-      return;                                                                 \
-    } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */                                    \
+            &min_u_b, &max_u_b, 3, ths->n, m); \
+ \
+        if (min_u_a != -1) \
+        { \
+          k = index_x_binary_search(ar_x, M, min_u_a); \
+ \
+          MACRO_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_A \
+ \
+          while (k < M) \
+          { \
+            INT u_prod = ar_x[2*k]; \
+            INT j = ar_x[2*k+1]; \
+ \
+            if (u_prod < min_u_a || u_prod > max_u_a) \
+              break; \
+ \
+            MACRO_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+            k++; \
+          } \
+        } \
+ \
+        if (min_u_b != -1) \
+        { \
+          INT k = index_x_binary_search(ar_x, M, min_u_b); \
+ \
+          MACRO_adjoint_3d_B_OMP_BLOCKWISE_ASSERT_B \
+ \
+          while (k < M) \
+          { \
+            INT u_prod = ar_x[2*k]; \
+            INT j = ar_x[2*k+1]; \
+ \
+            if (u_prod < min_u_b || u_prod > max_u_b) \
+              break; \
+ \
+            MACRO_adjoint_3d_B_OMP_BLOCKWISE_COMPUTE_ ##whichone \
+ \
+            k++; \
+          } \
+        } \
+      } /* omp parallel */ \
+      return; \
+    } /* if(NFFT_OMP_BLOCKWISE_ADJOINT) */ \
 }
 
-static void nfft_adjoint_3d_B(nfft_plan *ths)
+static void nfft_adjoint_3d_B(X(plan) *ths)
 {
-  int k;
-  const int N0 = ths->N[0];
-  const int n0 = ths->n[0];
-  const int N1 = ths->N[1];
-  const int n1 = ths->n[1];
-  const int N2 = ths->N[2];
-  const int n2 = ths->n[2];
-  const int M = ths->M_total;
-  const int m = ths->m;
+  INT k;
+  const INT n0 = ths->n[0];
+  const INT n1 = ths->n[1];
+  const INT n2 = ths->n[2];
+  const INT M = ths->M_total;
+  const INT m = ths->m;
 
   C* g = (C*) ths->g;
 
-  memset(g,0,ths->n_total*sizeof(C));
+  memset(g, 0, (size_t)(ths->n_total) * sizeof(C));
 
-  if(ths->nfft_flags & PRE_FULL_PSI)
+  if(ths->flags & PRE_FULL_PSI)
   {
     nfft_adjoint_B_compute_full_psi(g, ths->psi_index_g, ths->psi, ths->f, M,
-        3, ths->n, m, ths->nfft_flags, ths->index_x);
+        (INT)3, ths->n, m, ths->flags, ths->index_x);
     return;
   } /* if(PRE_FULL_PSI) */
 
-  if(ths->nfft_flags & PRE_PSI)
+  if(ths->flags & PRE_PSI)
   {
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_PSI)
+    MACRO_adjoint_3d_B_OMP_BLOCKWISE(PRE_PSI)
 #endif
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 #ifdef _OPENMP
       nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, ths->psi+j*3*(2*m+2), ths->psi+(j*3+1)*(2*m+2), ths->psi+(j*3+2)*(2*m+2), ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
 #else
@@ -4891,7 +4894,7 @@ static void nfft_adjoint_3d_B(nfft_plan *ths)
     return;
   } /* if(PRE_PSI) */
 
-  if(ths->nfft_flags & PRE_FG_PSI)
+  if(ths->flags & PRE_FG_PSI)
   {
     R fg_exp_l[3*(2*m+2)];
 
@@ -4900,15 +4903,17 @@ static void nfft_adjoint_3d_B(nfft_plan *ths)
     nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
 
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_FG_PSI)
+    MACRO_adjoint_3d_B_OMP_BLOCKWISE(PRE_FG_PSI)
 #endif
 
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
       R psij_const[3*(2*m+2)];
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
-      int l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT l;
       R fg_psij0 = ths->psi[2*j*3];
       R fg_psij1 = ths->psi[2*j*3+1];
       R fg_psij2 = K(1.0);
@@ -4950,7 +4955,7 @@ static void nfft_adjoint_3d_B(nfft_plan *ths)
     return;
   } /* if(PRE_FG_PSI) */
 
-  if(ths->nfft_flags & FG_PSI)
+  if(ths->flags & FG_PSI)
   {
     R fg_exp_l[3*(2*m+2)];
 
@@ -4958,23 +4963,25 @@ static void nfft_adjoint_3d_B(nfft_plan *ths)
     nfft_3d_init_fg_exp_l(fg_exp_l+2*m+2, m, ths->b[1]);
     nfft_3d_init_fg_exp_l(fg_exp_l+2*(2*m+2), m, ths->b[2]);
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(FG_PSI)
+    MACRO_adjoint_3d_B_OMP_BLOCKWISE(FG_PSI)
 #endif
 
-    #pragma openmp parallel for default(shared) private(k)
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int u,o,l;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT u,o,l;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       R psij_const[3*(2*m+2)];
       R fg_psij0, fg_psij1, fg_psij2;
 
-      nfft_uo(ths,j,&u,&o,0);
-      fg_psij0 = (PHI(ths->x[3*j]-((R)u)/n0,0));
-      fg_psij1 = EXP(K(2.0)*(n0*(ths->x[3*j]) - u)/ths->b[0]);
+      uo(ths,j,&u,&o,(INT)0);
+      fg_psij0 = (PHI(ths->n[0], ths->x[3*j] - ((R)u) / (R)(n0),0));
+      fg_psij1 = EXP(K(2.0) * ((R)(n0) * (ths->x[3*j]) - (R)(u))/ths->b[0]);
       fg_psij2 = K(1.0);
       psij_const[0] = fg_psij0;
       for(l=1; l<=2*m+1; l++)
@@ -4983,9 +4990,9 @@ static void nfft_adjoint_3d_B(nfft_plan *ths)
         psij_const[l] = fg_psij0*fg_psij2*fg_exp_l[l];
       }
 
-      nfft_uo(ths,j,&u,&o,1);
-      fg_psij0 = (PHI(ths->x[3*j+1]-((R)u)/n1,1));
-      fg_psij1 = EXP(K(2.0)*(n1*(ths->x[3*j+1]) - u)/ths->b[1]);
+      uo(ths,j,&u,&o,(INT)1);
+      fg_psij0 = (PHI(ths->n[1], ths->x[3*j+1] - ((R)u) / (R)(n1),1));
+      fg_psij1 = EXP(K(2.0) * ((R)(n1) * (ths->x[3*j+1]) - (R)(u))/ths->b[1]);
       fg_psij2 = K(1.0);
       psij_const[2*m+2] = fg_psij0;
       for(l=1; l<=2*m+1; l++)
@@ -4994,9 +5001,9 @@ static void nfft_adjoint_3d_B(nfft_plan *ths)
         psij_const[2*m+2+l] = fg_psij0*fg_psij2*fg_exp_l[2*m+2+l];
       }
 
-      nfft_uo(ths,j,&u,&o,2);
-      fg_psij0 = (PHI(ths->x[3*j+2]-((R)u)/n2,2));
-      fg_psij1 = EXP(K(2.0)*(n2*(ths->x[3*j+2]) - u)/ths->b[2]);
+      uo(ths,j,&u,&o,(INT)2);
+      fg_psij0 = (PHI(ths->n[2], ths->x[3*j+2] - ((R)u) / (R)(n2),2));
+      fg_psij1 = EXP(K(2.0) * ((R)(n2) * (ths->x[3*j+2]) - (R)(u))/ths->b[2]);
       fg_psij2 = K(1.0);
       psij_const[2*(2*m+2)] = fg_psij0;
       for(l=1; l<=2*m+1; l++)
@@ -5015,46 +5022,48 @@ static void nfft_adjoint_3d_B(nfft_plan *ths)
     return;
   } /* if(FG_PSI) */
 
-  if(ths->nfft_flags & PRE_LIN_PSI)
+  if(ths->flags & PRE_LIN_PSI)
   {
-    const int K = ths->K;
-    const int ip_s = K / (m + 2);
+    const INT K = ths->K;
+    const INT ip_s = K / (m + 2);
 
-    nfft_sort_nodes(ths);
+    sort(ths);
 
 #ifdef _OPENMP
-    MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
+    MACRO_adjoint_3d_B_OMP_BLOCKWISE(PRE_LIN_PSI)
 #endif
 
-    #pragma openmp parallel for default(shared) private(k)
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(k)
+#endif
     for (k = 0; k < M; k++)
     {
-      int u,o,l;
-      int ip_u;
+      INT u,o,l;
+      INT ip_u;
       R ip_y, ip_w;
-      int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+      INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
       R psij_const[3*(2*m+2)];
 
-      nfft_uo(ths,j,&u,&o,0);
-      ip_y = FABS(n0*ths->x[3*j+0] - u)*((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y-ip_u;
+      uo(ths,j,&u,&o,(INT)0);
+      ip_y = FABS((R)(n0) * ths->x[3*j+0] - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
       for(l=0; l < 2*m+2; l++)
         psij_const[l] = ths->psi[ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
           ths->psi[ABS(ip_u-l*ip_s+1)]*(ip_w);
 
-      nfft_uo(ths,j,&u,&o,1);
-      ip_y = FABS(n1*ths->x[3*j+1] - u)*((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y-ip_u;
+      uo(ths,j,&u,&o,(INT)1);
+      ip_y = FABS((R)(n1) * ths->x[3*j+1] - (R)(u)) * ((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
       for(l=0; l < 2*m+2; l++)
         psij_const[2*m+2+l] = ths->psi[(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
           ths->psi[(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
 
-      nfft_uo(ths,j,&u,&o,2);
-      ip_y = FABS(n2*ths->x[3*j+2] - u)*((R)ip_s);
-      ip_u = LRINT(FLOOR(ip_y));
-      ip_w = ip_y-ip_u;
+      uo(ths,j,&u,&o,(INT)2);
+      ip_y = FABS((R)(n2) * ths->x[3*j+2] - (R)(u))*((R)ip_s);
+      ip_u = (INT)(LRINT(FLOOR(ip_y)));
+      ip_w = ip_y - (R)(ip_u);
       for(l=0; l < 2*m+2; l++)
         psij_const[2*(2*m+2)+l] = ths->psi[2*(K+1)+ABS(ip_u-l*ip_s)]*(K(1.0)-ip_w) +
           ths->psi[2*(K+1)+ABS(ip_u-l*ip_s+1)]*(ip_w);
@@ -5069,30 +5078,32 @@ static void nfft_adjoint_3d_B(nfft_plan *ths)
   } /* if(PRE_LIN_PSI) */
 
   /* no precomputed psi at all */
-  nfft_sort_nodes(ths);
+  sort(ths);
 
 #ifdef _OPENMP
-  MACRO_nfft_adjoint_3d_B_OMP_BLOCKWISE(NO_PSI)
+  MACRO_adjoint_3d_B_OMP_BLOCKWISE(NO_PSI)
 #endif
 
+#ifdef _OPENMP
   #pragma omp parallel for default(shared) private(k)
+#endif
   for (k = 0; k < M; k++)
   {
-    int u,o,l;
+    INT u,o,l;
     R psij_const[3*(2*m+2)];
-    int j = (ths->nfft_flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
+    INT j = (ths->flags & NFFT_SORT_NODES) ? ths->index_x[2*k+1] : k;
 
-    nfft_uo(ths,j,&u,&o,0);
+    uo(ths,j,&u,&o,(INT)0);
     for(l=0;l<=2*m+1;l++)
-      psij_const[l]=(PHI(ths->x[3*j]-((R)((u+l)))/n0,0));
+      psij_const[l]=(PHI(ths->n[0], ths->x[3*j] - ((R)((u+l))) / (R)(n0),0));
 
-    nfft_uo(ths,j,&u,&o,1);
+    uo(ths,j,&u,&o,(INT)1);
     for(l=0;l<=2*m+1;l++)
-      psij_const[2*m+2+l]=(PHI(ths->x[3*j+1]-((R)((u+l)))/n1,1));
+      psij_const[2*m+2+l]=(PHI(ths->n[1], ths->x[3*j+1] - ((R)((u+l))) / (R)(n1),1));
 
-    nfft_uo(ths,j,&u,&o,2);
+    uo(ths,j,&u,&o,(INT)2);
     for(l=0;l<=2*m+1;l++)
-      psij_const[2*(2*m+2)+l]=(PHI(ths->x[3*j+2]-((R)((u+l)))/n2,2));
+      psij_const[2*(2*m+2)+l]=(PHI(ths->n[2], ths->x[3*j+2] - ((R)((u+l))) / (R)(n2),2));
 
 #ifdef _OPENMP
     nfft_adjoint_3d_compute_omp_atomic(ths->f[j], g, psij_const, psij_const+2*m+2, psij_const+(2*m+2)*2, ths->x+3*j, ths->x+3*j+1, ths->x+3*j+2, n0, n1, n2, m);
@@ -5103,9 +5114,9 @@ static void nfft_adjoint_3d_B(nfft_plan *ths)
 }
 
 
-void nfft_trafo_3d(nfft_plan *ths)
+void X(trafo_3d)(X(plan) *ths)
 {
-  int k0,k1,k2,n0,n1,n2,N0,N1,N2;
+  INT k0,k1,k2,n0,n1,n2,N0,N1,N2;
   C *g_hat,*f_hat;
   R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12, *c_phi_inv21, *c_phi_inv22;
   R ck01, ck02, ck11, ck12, ck21, ck22;
@@ -5131,15 +5142,17 @@ void nfft_trafo_3d(nfft_plan *ths)
   for (k0 = 0; k0 < ths->n_total; k0++)
     ths->g_hat[k0] = 0.0;
 #else
-  memset(ths->g_hat,0,ths->n_total*sizeof(C));
+  memset(ths->g_hat, 0, (size_t)(ths->n_total) * sizeof(C));
 #endif
 
-  if(ths->nfft_flags & PRE_PHI_HUT)
+  if(ths->flags & PRE_PHI_HUT)
     {
       c_phi_inv01=ths->c_phi_inv[0];
       c_phi_inv02=&ths->c_phi_inv[0][N0/2];
 
+#ifdef _OPENMP
       #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,c_phi_inv11,c_phi_inv12,ck11,ck12,c_phi_inv21,c_phi_inv22,g_hat111,f_hat111,g_hat211,f_hat211,g_hat121,f_hat121,g_hat221,f_hat221,g_hat112,f_hat112,g_hat212,f_hat212,g_hat122,f_hat122,g_hat222,f_hat222,ck21,ck22)
+#endif
       for(k0=0;k0<N0/2;k0++)
   {
     ck01=c_phi_inv01[k0];
@@ -5191,20 +5204,22 @@ void nfft_trafo_3d(nfft_plan *ths)
   }
     }
   else
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,ck11,ck12,ck21,ck22)
+#endif
     for(k0=0;k0<N0/2;k0++)
       {
-  ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
-  ck02=K(1.0)/(PHI_HUT(k0,0));
+  ck01=K(1.0)/(PHI_HUT(ths->n[0],k0-N0/2,0));
+  ck02=K(1.0)/(PHI_HUT(ths->n[0],k0,0));
   for(k1=0;k1<N1/2;k1++)
     {
-      ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
-      ck12=K(1.0)/(PHI_HUT(k1,1));
+      ck11=K(1.0)/(PHI_HUT(ths->n[1],k1-N1/2,1));
+      ck12=K(1.0)/(PHI_HUT(ths->n[1],k1,1));
 
       for(k2=0;k2<N2/2;k2++)
         {
-    ck21=K(1.0)/(PHI_HUT(k2-N2/2,2));
-    ck22=K(1.0)/(PHI_HUT(k2,2));
+    ck21=K(1.0)/(PHI_HUT(ths->n[2],k2-N2/2,2));
+    ck22=K(1.0)/(PHI_HUT(ths->n[2],k2,2));
 
     g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] = f_hat[(k0*N1+k1)*N2+k2]                  * ck01 * ck11 * ck21;
     g_hat[(k0*n1+n1-N1/2+k1)*n2+n2-N2/2+k2]           = f_hat[((N0/2+k0)*N1+k1)*N2+k2]           * ck02 * ck11 * ck21;
@@ -5222,7 +5237,7 @@ void nfft_trafo_3d(nfft_plan *ths)
   TOC(0)
 
   TIC_FFTW(1)
-  fftw_execute(ths->my_fftw_plan1);
+  FFTW(execute)(ths->my_fftw_plan1);
   TOC_FFTW(1);
 
   TIC(2);
@@ -5230,9 +5245,9 @@ void nfft_trafo_3d(nfft_plan *ths)
   TOC(2);
 }
 
-void nfft_adjoint_3d(nfft_plan *ths)
+void X(adjoint_3d)(X(plan) *ths)
 {
-  int k0,k1,k2,n0,n1,n2,N0,N1,N2;
+  INT k0,k1,k2,n0,n1,n2,N0,N1,N2;
   C *g_hat,*f_hat;
   R *c_phi_inv01, *c_phi_inv02, *c_phi_inv11, *c_phi_inv12, *c_phi_inv21, *c_phi_inv22;
   R ck01, ck02, ck11, ck12, ck21, ck22;
@@ -5257,16 +5272,18 @@ void nfft_adjoint_3d(nfft_plan *ths)
   TOC(2);
 
   TIC_FFTW(1)
-  fftw_execute(ths->my_fftw_plan2);
+  FFTW(execute)(ths->my_fftw_plan2);
   TOC_FFTW(1);
 
   TIC(0)
-  if(ths->nfft_flags & PRE_PHI_HUT)
+  if(ths->flags & PRE_PHI_HUT)
     {
       c_phi_inv01=ths->c_phi_inv[0];
       c_phi_inv02=&ths->c_phi_inv[0][N0/2];
 
+#ifdef _OPENMP
       #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,c_phi_inv11,c_phi_inv12,ck11,ck12,c_phi_inv21,c_phi_inv22,g_hat111,f_hat111,g_hat211,f_hat211,g_hat121,f_hat121,g_hat221,f_hat221,g_hat112,f_hat112,g_hat212,f_hat212,g_hat122,f_hat122,g_hat222,f_hat222,ck21,ck22)
+#endif
       for(k0=0;k0<N0/2;k0++)
   {
     ck01=c_phi_inv01[k0];
@@ -5318,20 +5335,22 @@ void nfft_adjoint_3d(nfft_plan *ths)
   }
     }
   else
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k0,k1,k2,ck01,ck02,ck11,ck12,ck21,ck22)
+#endif
     for(k0=0;k0<N0/2;k0++)
       {
-  ck01=K(1.0)/(PHI_HUT(k0-N0/2,0));
-  ck02=K(1.0)/(PHI_HUT(k0,0));
+  ck01=K(1.0)/(PHI_HUT(ths->n[0],k0-N0/2,0));
+  ck02=K(1.0)/(PHI_HUT(ths->n[0],k0,0));
   for(k1=0;k1<N1/2;k1++)
     {
-      ck11=K(1.0)/(PHI_HUT(k1-N1/2,1));
-      ck12=K(1.0)/(PHI_HUT(k1,1));
+      ck11=K(1.0)/(PHI_HUT(ths->n[1],k1-N1/2,1));
+      ck12=K(1.0)/(PHI_HUT(ths->n[1],k1,1));
 
       for(k2=0;k2<N2/2;k2++)
         {
-    ck21=K(1.0)/(PHI_HUT(k2-N2/2,2));
-    ck22=K(1.0)/(PHI_HUT(k2,2));
+    ck21=K(1.0)/(PHI_HUT(ths->n[2],k2-N2/2,2));
+    ck22=K(1.0)/(PHI_HUT(ths->n[2],k2,2));
 
     f_hat[(k0*N1+k1)*N2+k2]                  = g_hat[((n0-N0/2+k0)*n1+n1-N1/2+k1)*n2+n2-N2/2+k2] * ck01 * ck11 * ck21;
     f_hat[((N0/2+k0)*N1+k1)*N2+k2]           = g_hat[(k0*n1+n1-N1/2+k1)*n2+n2-N2/2+k2]           * ck02 * ck11 * ck21;
@@ -5351,50 +5370,53 @@ void nfft_adjoint_3d(nfft_plan *ths)
 
 /** user routines
  */
-void nfft_trafo(nfft_plan *ths)
+void X(trafo)(X(plan) *ths)
 {
   switch(ths->d)
-    {
-    case 1: nfft_trafo_1d(ths); break;
-    case 2: nfft_trafo_2d(ths); break;
-    case 3: nfft_trafo_3d(ths); break;
+  {
+    case 1: X(trafo_1d)(ths); break;
+    case 2: X(trafo_2d)(ths); break;
+    case 3: X(trafo_3d)(ths); break;
     default:
-    /* use ths->my_fftw_plan1 */
-    ths->g_hat=ths->g1;
-    ths->g=ths->g2;
+    {
+      /* use ths->my_fftw_plan1 */
+      ths->g_hat = ths->g1;
+      ths->g = ths->g2;
 
-    /** form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
-     *  k \in I_N \f$
-     */
-    TIC(0)
-    nfft_D_A(ths);
-    TOC(0)
+      /** form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
+       *  k \in I_N \f$
+       */
+      TIC(0)
+      D_A(ths);
+      TOC(0)
 
-    /** compute by d-variate discrete Fourier transform
-     *  \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
-     *  \text{ for } l \in I_n \f$
-     */
-    TIC_FFTW(1)
-    fftw_execute(ths->my_fftw_plan1);
-    TOC_FFTW(1)
-
-    /** set \f$ f_j =\sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
-     *  \text{ for } j=0,\hdots,M_total-1 \f$
-     */
-    TIC(2)
-    nfft_B_A(ths);
-    TOC(2)
+      /** compute by d-variate discrete Fourier transform
+       *  \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+       *  \text{ for } l \in I_n \f$
+       */
+      TIC_FFTW(1)
+      FFTW(execute)(ths->my_fftw_plan1);
+      TOC_FFTW(1)
+
+      /** set \f$ f_j =\sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
+       *  \text{ for } j=0,\hdots,M_total-1 \f$
+       */
+      TIC(2)
+      B_A(ths);
+      TOC(2)
     }
+  }
 } /* nfft_trafo */
 
-void nfft_adjoint(nfft_plan *ths)
+void X(adjoint)(X(plan) *ths)
 {
   switch(ths->d)
-    {
-    case 1: nfft_adjoint_1d(ths); break;
-    case 2: nfft_adjoint_2d(ths); break;
-    case 3: nfft_adjoint_3d(ths); break;
+  {
+    case 1: X(adjoint_1d)(ths); break;
+    case 2: X(adjoint_2d)(ths); break;
+    case 3: X(adjoint_3d)(ths); break;
     default:
+    {
       /* use ths->my_fftw_plan2 */
       ths->g_hat=ths->g1;
       ths->g=ths->g2;
@@ -5403,7 +5425,7 @@ void nfft_adjoint(nfft_plan *ths)
        *  \text{ for } l \in I_n,m(x_j) \f$
        */
       TIC(2)
-      nfft_B_T(ths);
+      B_T(ths);
       TOC(2)
 
       /** compute by d-variate discrete Fourier transform
@@ -5411,115 +5433,122 @@ void nfft_adjoint(nfft_plan *ths)
        *  \text{ for }  k \in I_N\f$
        */
       TIC_FFTW(1)
-      fftw_execute(ths->my_fftw_plan2);
+      FFTW(execute)(ths->my_fftw_plan2);
       TOC_FFTW(1)
 
       /** form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
        *  k \in I_N \f$
        */
       TIC(0)
-      nfft_D_T(ths);
+      D_T(ths);
       TOC(0)
     }
+  }
 } /* nfft_adjoint */
 
 
 /** initialisation of direct transform
  */
-static void nfft_precompute_phi_hut(nfft_plan *ths)
+static void precompute_phi_hut(X(plan) *ths)
 {
-  int ks[ths->d];                       /**< index over all frequencies      */
-  int t;                                /**< index over all dimensions       */
+  INT ks[ths->d]; /* index over all frequencies */
+  INT t; /* index over all dimensions */
 
-  ths->c_phi_inv = (R**) nfft_malloc(ths->d*sizeof(R*));
+  ths->c_phi_inv = (R**) Y(malloc)((size_t)(ths->d) * sizeof(R*));
 
-  for(t=0; t<ths->d; t++)
+  for (t = 0; t < ths->d; t++)
+  {
+    ths->c_phi_inv[t] = (R*)Y(malloc)((size_t)(ths->N[t]) * sizeof(R));
+
+    for (ks[t] = 0; ks[t] < ths->N[t]; ks[t]++)
     {
-      ths->c_phi_inv[t]= (R*)nfft_malloc(ths->N[t]*sizeof(R));
-      for(ks[t]=0; ks[t]<ths->N[t]; ks[t]++)
-  ths->c_phi_inv[t][ks[t]]= K(1.0)/(PHI_HUT(ks[t]-ths->N[t]/2,t));
+      ths->c_phi_inv[t][ks[t]]= K(1.0) / (PHI_HUT(ths->n[t], ks[t] - ths->N[t] / 2,t));
     }
+  }
 } /* nfft_phi_hut */
 
 /** create a lookup table, but NOT for each node
  *  good idea K=2^xx
- *  TODO: estimate K, call from init
  *  assumes an EVEN window function
  */
-void nfft_precompute_lin_psi(nfft_plan *ths)
+void X(precompute_lin_psi)(X(plan) *ths)
 {
-  int t;                                /**< index over all dimensions       */
-  int j;                                /**< index over all nodes            */
+  INT t;                                /**< index over all dimensions       */
+  INT j;                                /**< index over all nodes            */
   R step;                          /**< step size in [0,(m+2)/n]        */
 
   for (t=0; t<ths->d; t++)
     {
-      step=((R)(ths->m+2))/(((R)ths->K)*ths->n[t]);
-      for(j=0;j<=ths->K;j++)
+      step = ((R)(ths->m+2)) / ((R)(ths->K * ths->n[t]));
+      for(j = 0;j <= ths->K; j++)
   {
-    ths->psi[(ths->K+1)*t + j] = PHI(j*step,t);
+    ths->psi[(ths->K+1)*t + j] = PHI(ths->n[t], (R)(j) * step,t);
   } /* for(j) */
     } /* for(t) */
 }
 
-static void nfft_precompute_fg_psi(nfft_plan *ths)
+void X(precompute_fg_psi)(X(plan) *ths)
 {
-  int t;                                /**< index over all dimensions       */
-  int u, o;                             /**< depends on x_j                  */
+  INT t;                                /**< index over all dimensions       */
+  INT u, o;                             /**< depends on x_j                  */
 
-  nfft_sort_nodes(ths);
+  sort(ths);
 
   for (t=0; t<ths->d; t++)
   {
-    int j;
+    INT j;
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(j,u,o)
+#endif
     for (j = 0; j < ths->M_total; j++)
       {
-  nfft_uo(ths,j,&u,&o,t);
+  uo(ths,j,&u,&o,t);
 
         ths->psi[2*(j*ths->d+t)]=
-            (PHI((ths->x[j*ths->d+t]-((R)u)/ths->n[t]),t));
+            (PHI(ths->n[t] ,(ths->x[j*ths->d+t] - ((R)u) / (R)(ths->n[t])),t));
 
         ths->psi[2*(j*ths->d+t)+1]=
-            EXP(K(2.0)*(ths->n[t]*ths->x[j*ths->d+t] - u) / ths->b[t]);
+            EXP(K(2.0) * ((R)(ths->n[t]) * ths->x[j*ths->d+t] - (R)(u)) / ths->b[t]);
       } /* for(j) */
   }
   /* for(t) */
 } /* nfft_precompute_fg_psi */
 
-void nfft_precompute_psi(nfft_plan *ths)
+void X(precompute_psi)(X(plan) *ths)
 {
-  int t;                                /**< index over all dimensions       */
-  int l;                                /**< index u<=l<=o                   */
-  int lj;                               /**< index 0<=lj<u+o+1               */
-  int u, o;                             /**< depends on x_j                  */
+  INT t; /* index over all dimensions */
+  INT l; /* index u<=l<=o */
+  INT lj; /* index 0<=lj<u+o+1 */
+  INT u, o; /* depends on x_j */
 
-  nfft_sort_nodes(ths);
+  sort(ths);
 
   for (t=0; t<ths->d; t++)
   {
-    int j;
+    INT j;
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(j,l,lj,u,o)
+#endif
     for (j = 0; j < ths->M_total; j++)
-      {
-  nfft_uo(ths,j,&u,&o,t);
+    {
+      uo(ths,j,&u,&o,t);
 
-  for(l=u, lj=0; l <= o; l++, lj++)
-    ths->psi[(j*ths->d+t)*(2*ths->m+2)+lj]=
-      (PHI((ths->x[j*ths->d+t]-((R)l)/ths->n[t]),t));
-      } /* for(j) */
+      for(l = u, lj = 0; l <= o; l++, lj++)
+        ths->psi[(j * ths->d + t) * (2 * ths->m + 2) + lj] =
+            (PHI(ths->n[t], (ths->x[j*ths->d+t] - ((R)l) / (R)(ths->n[t])), t));
+    } /* for(j) */
   }
   /* for(t) */
 } /* nfft_precompute_psi */
 
 #ifdef _OPENMP
-static void nfft_precompute_full_psi_omp(nfft_plan *ths)
+static void nfft_precompute_full_psi_omp(X(plan) *ths)
 {
-  int j;                                /**< index over all nodes            */
-  int lprod;                            /**< 'bandwidth' of matrix B         */
+  INT j;                                /**< index over all nodes            */
+  INT lprod;                            /**< 'bandwidth' of matrix B         */
 
   {
-    int t;
+    INT t;
     for(t=0,lprod = 1; t<ths->d; t++)
         lprod *= 2*ths->m+2;
   }
@@ -5527,16 +5556,16 @@ static void nfft_precompute_full_psi_omp(nfft_plan *ths)
   #pragma omp parallel for default(shared) private(j)
   for(j=0; j<ths->M_total; j++)
     {
-      int t,t2;                             /**< index over all dimensions       */
-      int l_L;                              /**< plain index 0<=l_L<lprod        */
-      int l[ths->d];                        /**< multi index u<=l<=o             */
-      int lj[ths->d];                       /**< multi index 0<=lj<u+o+1         */
-      int ll_plain[ths->d+1];               /**< postfix plain index             */
+      INT t,t2;                             /**< index over all dimensions       */
+      INT l_L;                              /**< plain index 0<=l_L<lprod        */
+      INT l[ths->d];                        /**< multi index u<=l<=o             */
+      INT lj[ths->d];                       /**< multi index 0<=lj<u+o+1         */
+      INT ll_plain[ths->d+1];               /**< postfix plain index             */
 
-      int u[ths->d], o[ths->d];             /**< depends on x_j                  */
+      INT u[ths->d], o[ths->d];             /**< depends on x_j                  */
 
       R phi_prod[ths->d+1];
-      int ix = j*lprod;
+      INT ix = j*lprod;
 
       phi_prod[0]=1;
       ll_plain[0]=0;
@@ -5558,321 +5587,382 @@ static void nfft_precompute_full_psi_omp(nfft_plan *ths)
 }
 #endif
 
-void nfft_precompute_full_psi(nfft_plan *ths)
+void X(precompute_full_psi)(X(plan) *ths)
 {
 #ifdef _OPENMP
-  nfft_sort_nodes(ths);
+  sort(ths);
 
   nfft_precompute_full_psi_omp(ths);
 #else
-  int t,t2;                             /**< index over all dimensions       */
-  int j;                                /**< index over all nodes            */
-  int l_L;                              /**< plain index 0<=l_L<lprod        */
-  int l[ths->d];                        /**< multi index u<=l<=o             */
-  int lj[ths->d];                       /**< multi index 0<=lj<u+o+1         */
-  int ll_plain[ths->d+1];               /**< postfix plain index             */
-  int lprod;                            /**< 'bandwidth' of matrix B         */
-  int u[ths->d], o[ths->d];             /**< depends on x_j                  */
+  INT t, t2; /* index over all dimensions */
+  INT j; /* index over all nodes */
+  INT l_L; /* plain index 0 <= l_L < lprod */
+  INT l[ths->d]; /* multi index u<=l<=o */
+  INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+  INT ll_plain[ths->d+1]; /* postfix plain index */
+  INT lprod; /* 'bandwidth' of matrix B */
+  INT u[ths->d], o[ths->d]; /* depends on x_j */
 
   R phi_prod[ths->d+1];
 
-  int ix,ix_old;
+  INT ix, ix_old;
 
-  nfft_sort_nodes(ths);
+  sort(ths);
 
-  phi_prod[0]=1;
-  ll_plain[0]=0;
+  phi_prod[0] = K(1.0);
+  ll_plain[0] = 0;
 
-  for(t=0,lprod = 1; t<ths->d; t++)
-      lprod *= 2*ths->m+2;
+  for (t = 0, lprod = 1; t < ths->d; t++)
+    lprod *= 2 * ths->m + 2;
 
-  for(j=0,ix=0,ix_old=0; j<ths->M_total; j++)
-    {
-      MACRO_init_uo_l_lj_t;
-
-      for(l_L=0; l_L<lprod; l_L++, ix++)
+  for (j = 0, ix = 0, ix_old = 0; j < ths->M_total; j++)
   {
-    MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
+    MACRO_init_uo_l_lj_t;
 
-    ths->psi_index_g[ix]=ll_plain[ths->d];
-    ths->psi[ix]=phi_prod[ths->d];
+    for (l_L = 0; l_L < lprod; l_L++, ix++)
+    {
+      MACRO_update_phi_prod_ll_plain(without_PRE_PSI);
 
-    MACRO_count_uo_l_lj_t;
-  } /* for(l_L) */
+      ths->psi_index_g[ix] = ll_plain[ths->d];
+      ths->psi[ix] = phi_prod[ths->d];
 
+      MACRO_count_uo_l_lj_t;
+    } /* for(l_L) */
 
-      ths->psi_index_f[j]=ix-ix_old;
-      ix_old=ix;
-    } /* for(j) */
+    ths->psi_index_f[j] = ix - ix_old;
+    ix_old = ix;
+  } /* for(j) */
 #endif
 }
 
-void nfft_precompute_one_psi(nfft_plan *ths)
+void X(precompute_one_psi)(X(plan) *ths)
 {
-  if(ths->nfft_flags & PRE_LIN_PSI)
-    nfft_precompute_lin_psi(ths);
-  if(ths->nfft_flags & PRE_FG_PSI)
-    nfft_precompute_fg_psi(ths);
-  if(ths->nfft_flags & PRE_PSI)
-    nfft_precompute_psi(ths);
-  if(ths->nfft_flags & PRE_FULL_PSI)
-    nfft_precompute_full_psi(ths);
+  if(ths->flags & PRE_LIN_PSI)
+    X(precompute_lin_psi)(ths);
+  if(ths->flags & PRE_FG_PSI)
+    X(precompute_fg_psi)(ths);
+  if(ths->flags & PRE_PSI)
+    X(precompute_psi)(ths);
+  if(ths->flags & PRE_FULL_PSI)
+    X(precompute_full_psi)(ths);
 }
 
-
-static void nfft_init_help(nfft_plan *ths)
+static void init_help(X(plan) *ths)
 {
-  int t;                                /**< index over all dimensions       */
-  int lprod;                            /**< 'bandwidth' of matrix B         */
+  INT t; /* index over all dimensions */
+  INT lprod; /* 'bandwidth' of matrix B */
+
+  if (ths->flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+    ths->flags |= NFFT_SORT_NODES;
 
-  if (ths->nfft_flags & NFFT_OMP_BLOCKWISE_ADJOINT)
-    ths->nfft_flags |= NFFT_SORT_NODES;
+  ths->N_total = intprod(ths->N, 0, ths->d);
+  ths->n_total = intprod(ths->n, 0, ths->d);
 
-  ths->N_total=nfft_prod_int(ths->N, ths->d);
-  ths->n_total=nfft_prod_int(ths->n, ths->d);
+  ths->sigma = (R*) Y(malloc)((size_t)(ths->d) * sizeof(R));
 
-  ths->sigma = (R*) nfft_malloc(ths->d*sizeof(R));
   for(t = 0;t < ths->d; t++)
-    ths->sigma[t] = ((R)ths->n[t])/ths->N[t];
+    ths->sigma[t] = ((R)ths->n[t]) / (R)(ths->N[t]);
 
   WINDOW_HELP_INIT;
 
-  if(ths->nfft_flags & MALLOC_X)
-    ths->x = (R*)nfft_malloc(ths->d*ths->M_total*sizeof(R));
+  if(ths->flags & MALLOC_X)
+    ths->x = (R*)Y(malloc)((size_t)(ths->d * ths->M_total) * sizeof(R));
 
-  if(ths->nfft_flags & MALLOC_F_HAT)
-    ths->f_hat = (fftw_complex*)nfft_malloc(ths->N_total*sizeof(C));
+  if(ths->flags & MALLOC_F_HAT)
+    ths->f_hat = (C*)Y(malloc)((size_t)(ths->N_total) * sizeof(C));
 
-  if(ths->nfft_flags & MALLOC_F)
-    ths->f = (fftw_complex*)nfft_malloc(ths->M_total*sizeof(C));
+  if(ths->flags & MALLOC_F)
+    ths->f = (C*)Y(malloc)((size_t)(ths->M_total) * sizeof(C));
 
-  if(ths->nfft_flags & PRE_PHI_HUT)
-    nfft_precompute_phi_hut(ths);
+  if(ths->flags & PRE_PHI_HUT)
+    precompute_phi_hut(ths);
 
-  if(ths->nfft_flags & PRE_LIN_PSI)
+  if (ths->flags & PRE_LIN_PSI)
   {
-      ths->K=(1U<< 10)*(ths->m+2);
-      ths->psi = (R*) nfft_malloc((ths->K+1)*ths->d*sizeof(R));
+      if (ths->K == 0)
+      {
+        ths->K = Y(m2K)(ths->m);
+      }
+      ths->psi = (R*) Y(malloc)((size_t)((ths->K+1) * ths->d) * sizeof(R));
   }
 
-  if(ths->nfft_flags & PRE_FG_PSI)
-    ths->psi = (R*) nfft_malloc(ths->M_total*ths->d*2*sizeof(R));
+  if(ths->flags & PRE_FG_PSI)
+    ths->psi = (R*) Y(malloc)((size_t)(ths->M_total * ths->d * 2) * sizeof(R));
 
-  if(ths->nfft_flags & PRE_PSI)
-    ths->psi = (R*) nfft_malloc(ths->M_total*ths->d*
-             (2*ths->m+2)*sizeof(R));
+  if(ths->flags & PRE_PSI)
+    ths->psi = (R*) Y(malloc)((size_t)(ths->M_total * ths->d * (2 * ths->m + 2)) * sizeof(R));
 
-  if(ths->nfft_flags & PRE_FULL_PSI)
+  if(ths->flags & PRE_FULL_PSI)
   {
-      for(t=0,lprod = 1; t<ths->d; t++)
-    lprod *= 2*ths->m+2;
+      for (t = 0, lprod = 1; t < ths->d; t++)
+        lprod *= 2 * ths->m + 2;
 
-      ths->psi = (R*) nfft_malloc(ths->M_total*lprod*sizeof(R));
+      ths->psi = (R*) Y(malloc)((size_t)(ths->M_total * lprod) * sizeof(R));
 
-      ths->psi_index_f = (int*) nfft_malloc(ths->M_total*sizeof(int));
-      ths->psi_index_g = (int*) nfft_malloc(ths->M_total*lprod*sizeof(int));
+      ths->psi_index_f = (INT*) Y(malloc)((size_t)(ths->M_total) * sizeof(INT));
+      ths->psi_index_g = (INT*) Y(malloc)((size_t)(ths->M_total * lprod) * sizeof(INT));
   }
 
-  if(ths->nfft_flags & FFTW_INIT)
+  if(ths->flags & FFTW_INIT)
   {
 #ifdef _OPENMP
-    int nthreads = nfft_get_omp_num_threads();
+    INT nthreads = Y(get_num_threads)();
 #endif
 
-    ths->g1=(fftw_complex*)nfft_malloc(ths->n_total*sizeof(C));
+    ths->g1 = (C*)Y(malloc)((size_t)(ths->n_total) * sizeof(C));
 
-    if(ths->nfft_flags & FFT_OUT_OF_PLACE)
-      ths->g2 = (fftw_complex*) nfft_malloc(ths->n_total*sizeof(C));
+    if(ths->flags & FFT_OUT_OF_PLACE)
+      ths->g2 = (C*) Y(malloc)((size_t)(ths->n_total) * sizeof(C));
     else
       ths->g2 = ths->g1;
 
 #ifdef _OPENMP
 #pragma omp critical (nfft_omp_critical_fftw_plan)
 {
-    fftw_plan_with_nthreads(nthreads);
+    FFTW(plan_with_nthreads)(nthreads);
 #endif
-    ths->my_fftw_plan1 = fftw_plan_dft(ths->d, ths->n, ths->g1, ths->g2, FFTW_FORWARD, ths->fftw_flags);
-    ths->my_fftw_plan2 = fftw_plan_dft(ths->d, ths->n, ths->g2, ths->g1,
-      FFTW_BACKWARD, ths->fftw_flags);
+    {
+      int *_n = Y(malloc)((size_t)(ths->d) * sizeof(int));
+
+      for (t = 0; t < ths->d; t++)
+        _n[t] = (int)(ths->n[t]);
+
+      ths->my_fftw_plan1 = FFTW(plan_dft)((int)ths->d, _n, ths->g1, ths->g2, FFTW_FORWARD, ths->fftw_flags);
+      ths->my_fftw_plan2 = FFTW(plan_dft)((int)ths->d, _n, ths->g2, ths->g1, FFTW_BACKWARD, ths->fftw_flags);
+      Y(free)(_n);
+    }
 #ifdef _OPENMP
 }
 #endif
   }
 
-  if(ths->nfft_flags & NFFT_SORT_NODES)
-    ths->index_x = (int*) nfft_malloc(sizeof(int)*2*ths->M_total);
+  if(ths->flags & NFFT_SORT_NODES)
+    ths->index_x = (INT*) Y(malloc)(sizeof(INT) * 2U * (size_t)(ths->M_total));
   else
     ths->index_x = NULL;
 
-  ths->mv_trafo = (void (*) (void* ))nfft_trafo;
-  ths->mv_adjoint = (void (*) (void* ))nfft_adjoint;
+  ths->mv_trafo = (void (*) (void* ))X(trafo);
+  ths->mv_adjoint = (void (*) (void* ))X(adjoint);
 }
 
-void nfft_init(nfft_plan *ths, int d, int *N, int M_total)
+void X(init)(X(plan) *ths, int d, int *N, int M_total)
 {
-  int t;                                /**< index over all dimensions       */
+  INT t; /* index over all dimensions */
 
-  ths->d = d;
+  ths->d = (INT)d;
 
-  ths->N=(int*) nfft_malloc(d*sizeof(int));
+  ths->N = (INT*) Y(malloc)((size_t)(d) * sizeof(INT));
 
-  for (t = 0;t < d; t++)
-    ths->N[t] = N[t];
+  for (t = 0; t < d; t++)
+    ths->N[t] = (INT)N[t];
 
-  ths->M_total = M_total;
+  ths->M_total = (INT)M_total;
 
-  ths->n = (int*) nfft_malloc(d*sizeof(int));
-  for (t = 0;t < d; t++)
-    ths->n[t] = 2*X(next_power_of_2)(ths->N[t]);
+  ths->n = (INT*) Y(malloc)((size_t)(d) * sizeof(INT));
+
+  for (t = 0; t < d; t++)
+    ths->n[t] = 2 * (Y(next_power_of_2)(ths->N[t]));
 
   ths->m = WINDOW_HELP_ESTIMATE_m;
 
   if (d > 1)
   {
 #ifdef _OPENMP
-    ths->nfft_flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+    ths->flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
                       FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES |
-		      NFFT_OMP_BLOCKWISE_ADJOINT;
+                 NFFT_OMP_BLOCKWISE_ADJOINT;
 #else
-    ths->nfft_flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+    ths->flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
                       FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES;
 #endif
   }
   else
-    ths->nfft_flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+    ths->flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
                       FFTW_INIT | FFT_OUT_OF_PLACE;
 
   ths->fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;
 
-  nfft_init_help(ths);
+  ths->K = 0;
+  init_help(ths);
 }
 
-void nfft_init_guru(nfft_plan *ths, int d, int *N, int M_total, int *n,
-      int m, unsigned nfft_flags, unsigned fftw_flags)
+void X(init_guru)(X(plan) *ths, int d, int *N, int M_total, int *n, int m,
+  unsigned flags, unsigned fftw_flags)
 {
-  int t;                                /**< index over all dimensions       */
-
-  ths->d =d;
-  ths->N= (int*) nfft_malloc(ths->d*sizeof(int));
-  for(t=0; t<d; t++)
-    ths->N[t]= N[t];
-  ths->M_total= M_total;
-  ths->n= (int*) nfft_malloc(ths->d*sizeof(int));
-  for(t=0; t<d; t++)
-    ths->n[t]= n[t];
-  ths->m= m;
-  ths->nfft_flags= nfft_flags;
-  ths->fftw_flags= fftw_flags;
-
-  nfft_init_help(ths);
+  INT t; /* index over all dimensions */
+
+  ths->d = (INT)d;
+  ths->M_total = (INT)M_total;
+  ths->N = (INT*)Y(malloc)((size_t)(ths->d) * sizeof(INT));
+
+  for (t = 0; t < d; t++)
+    ths->N[t] = (INT)N[t];
+
+  ths->n = (INT*)Y(malloc)((size_t)(ths->d) * sizeof(INT));
+
+  for (t = 0; t < d; t++)
+    ths->n[t] = (INT)n[t];
+
+  ths->m = (INT)m;
+
+  ths->flags = flags;
+  ths->fftw_flags = fftw_flags;
+
+  ths->K = 0;
+  init_help(ths);
+}
+
+void X(init_lin)(X(plan) *ths, int d, int *N, int M_total, int *n, int m, int K,
+  unsigned flags, unsigned fftw_flags)
+{
+  INT t; /* index over all dimensions */
+
+  ths->d = (INT)d;
+  ths->M_total = (INT)M_total;
+  ths->N = (INT*)Y(malloc)((size_t)(ths->d) * sizeof(INT));
+
+  for (t = 0; t < d; t++)
+    ths->N[t] = (INT)N[t];
+
+  ths->n = (INT*)Y(malloc)((size_t)(ths->d) * sizeof(INT));
+
+  for (t = 0; t < d; t++)
+    ths->n[t] = (INT)n[t];
+
+  ths->m = (INT)m;
+
+  ths->flags = flags;
+  ths->fftw_flags = fftw_flags;
+
+  ths->K = K;
+  init_help(ths);
 }
 
-void nfft_init_1d(nfft_plan *ths, int N1, int M_total)
+void X(init_1d)(X(plan) *ths, int N1, int M_total)
 {
   int N[1];
 
-  N[0]=N1;
+  N[0] = N1;
 
-  nfft_init(ths, 1, N, M_total);
+  X(init)(ths, 1, N, M_total);
 }
 
-void nfft_init_2d(nfft_plan *ths, int N1, int N2, int M_total)
+void X(init_2d)(X(plan) *ths, int N1, int N2, int M_total)
 {
   int N[2];
 
-  N[0]=N1;
-  N[1]=N2;
-  nfft_init(ths,2,N,M_total);
+  N[0] = N1;
+  N[1] = N2;
+  X(init)(ths, 2, N, M_total);
 }
 
-void nfft_init_3d(nfft_plan *ths, int N1, int N2, int N3, int M_total)
+void X(init_3d)(X(plan) *ths, int N1, int N2, int N3, int M_total)
 {
   int N[3];
 
-  N[0]=N1;
-  N[1]=N2;
-  N[2]=N3;
-  nfft_init(ths,3,N,M_total);
+  N[0] = N1;
+  N[1] = N2;
+  N[2] = N3;
+  X(init)(ths, 3, N, M_total);
 }
 
-const char* nfft_check(nfft_plan *ths)
+const char* X(check)(X(plan) *ths)
 {
-  int j;
+  INT j;
+
+  if (!ths->f)
+      return "Member f not initialized.";
+
+  if (!ths->x)
+      return "Member x not initialized.";
 
-  for(j=0;j<ths->M_total*ths->d;j++)
-    if((ths->x[j]<-K(0.5)) || (ths->x[j]>= K(0.5)))
+  if (!ths->f_hat)
+      return "Member f_hat not initialized.";
+
+  if ((ths->flags & PRE_LIN_PSI) && ths->K < ths->M_total)
+    return "Number of nodes too small to use PRE_LIN_PSI.";
+
+  for (j = 0; j < ths->M_total * ths->d; j++)
+  {
+    if ((ths->x[j]<-K(0.5)) || (ths->x[j]>= K(0.5)))
+    {
       return "ths->x out of range [-0.5,0.5)";
+    }
+  }
 
-  for(j=0;j<ths->d;j++)
+  for (j = 0; j < ths->d; j++)
   {
-    if(ths->sigma[j]<=1)
+    if (ths->sigma[j] <= 1)
       return "nfft_check: oversampling factor too small";
 
-    if(ths->N[j]<=ths->m)
+    if(ths->N[j] <= ths->m)
       return "Polynomial degree N is smaller than cut-off m";
 
-    if(ths->N[j]%2==1)
+    if(ths->N[j]%2 == 1)
       return "polynomial degree N has to be even";
   }
   return 0;
 }
 
-void nfft_finalize(nfft_plan *ths)
+void X(finalize)(X(plan) *ths)
 {
-  int t; /* index over dimensions */
+  INT t; /* index over dimensions */
 
-  if(ths->nfft_flags & NFFT_SORT_NODES)
-    nfft_free(ths->index_x);
+  if(ths->flags & NFFT_SORT_NODES)
+    Y(free)(ths->index_x);
 
-  if(ths->nfft_flags & FFTW_INIT)
+  if(ths->flags & FFTW_INIT)
   {
-#pragma omp critical (nfft_omp_critical_fftw_plan)
-{
-    fftw_destroy_plan(ths->my_fftw_plan2);
-    fftw_destroy_plan(ths->my_fftw_plan1);
-}
+#ifdef _OPENMP
+    #pragma omp critical (nfft_omp_critical_fftw_plan)
+#endif
+    FFTW(destroy_plan)(ths->my_fftw_plan2);
+#ifdef _OPENMP
+    #pragma omp critical (nfft_omp_critical_fftw_plan)
+#endif
+    FFTW(destroy_plan)(ths->my_fftw_plan1);
 
-    if(ths->nfft_flags & FFT_OUT_OF_PLACE)
-      nfft_free(ths->g2);
+    if(ths->flags & FFT_OUT_OF_PLACE)
+      Y(free)(ths->g2);
 
-    nfft_free(ths->g1);
+    Y(free)(ths->g1);
   }
 
-  if(ths->nfft_flags & PRE_FULL_PSI)
-    {
-      nfft_free(ths->psi_index_g);
-      nfft_free(ths->psi_index_f);
-      nfft_free(ths->psi);
-    }
+  if(ths->flags & PRE_FULL_PSI)
+  {
+    Y(free)(ths->psi_index_g);
+    Y(free)(ths->psi_index_f);
+    Y(free)(ths->psi);
+  }
 
-  if(ths->nfft_flags & PRE_PSI)
-    nfft_free(ths->psi);
+  if(ths->flags & PRE_PSI)
+    Y(free)(ths->psi);
 
-  if(ths->nfft_flags & PRE_FG_PSI)
-    nfft_free(ths->psi);
+  if(ths->flags & PRE_FG_PSI)
+    Y(free)(ths->psi);
 
-  if(ths->nfft_flags & PRE_LIN_PSI)
-    nfft_free(ths->psi);
+  if(ths->flags & PRE_LIN_PSI)
+    Y(free)(ths->psi);
 
-  if(ths->nfft_flags & PRE_PHI_HUT)
-    {
-      for(t=0; t<ths->d; t++)
-        nfft_free(ths->c_phi_inv[t]);
-      nfft_free(ths->c_phi_inv);
-    }
+  if(ths->flags & PRE_PHI_HUT)
+  {
+    for (t = 0; t < ths->d; t++)
+        Y(free)(ths->c_phi_inv[t]);
+    Y(free)(ths->c_phi_inv);
+  }
 
-  if(ths->nfft_flags & MALLOC_F)
-    nfft_free(ths->f);
+  if(ths->flags & MALLOC_F)
+    Y(free)(ths->f);
 
-  if(ths->nfft_flags & MALLOC_F_HAT)
-    nfft_free(ths->f_hat);
+  if(ths->flags & MALLOC_F_HAT)
+    Y(free)(ths->f_hat);
 
-  if(ths->nfft_flags & MALLOC_X)
-  nfft_free(ths->x);
+  if(ths->flags & MALLOC_X)
+    Y(free)(ths->x);
 
   WINDOW_HELP_FINALIZE;
 
-  nfft_free(ths->sigma);
-  nfft_free(ths->n);
-  nfft_free(ths->N);
+  Y(free)(ths->sigma);
+  Y(free)(ths->n);
+  Y(free)(ths->N);
 }
diff --git a/kernel/nfsft/Makefile.am b/kernel/nfsft/Makefile.am
index 42e6460..74cb41a 100644
--- a/kernel/nfsft/Makefile.am
+++ b/kernel/nfsft/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/kernel/nfsft/Makefile.in b/kernel/nfsft/Makefile.in
deleted file mode 100644
index fe8aba2..0000000
--- a/kernel/nfsft/Makefile.in
+++ /dev/null
@@ -1,591 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/nfsft
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libnfsft_la_LIBADD =
-am_libnfsft_la_OBJECTS = nfsft.lo legendre.lo
-libnfsft_la_OBJECTS = $(am_libnfsft_la_OBJECTS)
-libnfsft_threads_la_LIBADD =
-am__libnfsft_threads_la_SOURCES_DIST = nfsft.c legendre.h legendre.c \
-	api.h
- at HAVE_THREADS_TRUE@am_libnfsft_threads_la_OBJECTS =  \
- at HAVE_THREADS_TRUE@	libnfsft_threads_la-nfsft.lo \
- at HAVE_THREADS_TRUE@	libnfsft_threads_la-legendre.lo
-libnfsft_threads_la_OBJECTS = $(am_libnfsft_threads_la_OBJECTS)
-libnfsft_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(libnfsft_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
- at HAVE_THREADS_TRUE@am_libnfsft_threads_la_rpath =
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libnfsft_la_SOURCES) $(libnfsft_threads_la_SOURCES)
-DIST_SOURCES = $(libnfsft_la_SOURCES) \
-	$(am__libnfsft_threads_la_SOURCES_DIST)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
- at HAVE_THREADS_FALSE@LIBNFSFT_THREADS_LA = 
- at HAVE_THREADS_TRUE@LIBNFSFT_THREADS_LA = libnfsft_threads.la
-noinst_LTLIBRARIES = libnfsft.la $(LIBNFSFT_THREADS_LA)
-libnfsft_la_SOURCES = nfsft.c legendre.h legendre.c api.h
- at HAVE_THREADS_TRUE@libnfsft_threads_la_SOURCES = nfsft.c legendre.h legendre.c api.h
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libnfsft_threads_la_CFLAGS = $(OPENMP_CFLAGS)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfsft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/nfsft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libnfsft.la: $(libnfsft_la_OBJECTS) $(libnfsft_la_DEPENDENCIES) $(EXTRA_libnfsft_la_DEPENDENCIES) 
-	$(LINK)  $(libnfsft_la_OBJECTS) $(libnfsft_la_LIBADD) $(LIBS)
-libnfsft_threads.la: $(libnfsft_threads_la_OBJECTS) $(libnfsft_threads_la_DEPENDENCIES) $(EXTRA_libnfsft_threads_la_DEPENDENCIES) 
-	$(libnfsft_threads_la_LINK) $(am_libnfsft_threads_la_rpath) $(libnfsft_threads_la_OBJECTS) $(libnfsft_threads_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/legendre.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfsft_threads_la-legendre.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfsft_threads_la-nfsft.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsft.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-libnfsft_threads_la-nfsft.lo: nfsft.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -MT libnfsft_threads_la-nfsft.lo -MD -MP -MF $(DEPDIR)/libnfsft_threads_la-nfsft.Tpo -c -o libnfsft_threads_la-nfsft.lo `test -f 'nfsft.c' || echo '$(srcdir)/'`nfsft.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libnfsft_threads_la-nfsft.Tpo $(DEPDIR)/libnfsft_threads_la-nfsft.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsft.c' object='libnfsft_threads_la-nfsft.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -c -o libnfsft_threads_la-nfsft.lo `test -f 'nfsft.c' || echo '$(srcdir)/'`nfsft.c
-
-libnfsft_threads_la-legendre.lo: legendre.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -MT libnfsft_threads_la-legendre.lo -MD -MP -MF $(DEPDIR)/libnfsft_threads_la-legendre.Tpo -c -o libnfsft_threads_la-legendre.lo `test -f 'legendre.c' || echo '$(srcdir)/'`legendre.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libnfsft_threads_la-legendre.Tpo $(DEPDIR)/libnfsft_threads_la-legendre.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='legendre.c' object='libnfsft_threads_la-legendre.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_threads_la_CFLAGS) $(CFLAGS) -c -o libnfsft_threads_la-legendre.lo `test -f 'legendre.c' || echo '$(srcdir)/'`legendre.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/nfsft/api.h b/kernel/nfsft/api.h
index ef479a5..46d01df 100644
--- a/kernel/nfsft/api.h
+++ b/kernel/nfsft/api.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: api.h 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id$ */
 
 /**
  * \file api.h
diff --git a/kernel/nfsft/legendre.c b/kernel/nfsft/legendre.c
index 1790c17..7603fdc 100644
--- a/kernel/nfsft/legendre.c
+++ b/kernel/nfsft/legendre.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,13 +16,13 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: legendre.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 #include <math.h>
 #include <stdio.h>
 #include "infft.h"
-#include "nfft3util.h"
 #include "legendre.h"
+#include "infft.h"
 
 /* One over sqrt(pi) */
 DK(KSQRTPII,0.56418958354775628694807945156077258584405062932900);
diff --git a/kernel/nfsft/legendre.h b/kernel/nfsft/legendre.h
index 00fbd11..0a68db9 100644
--- a/kernel/nfsft/legendre.h
+++ b/kernel/nfsft/legendre.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: legendre.h 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id$ */
 
 /**
  * \file nfsft.h
diff --git a/kernel/nfsft/nfsft.c b/kernel/nfsft/nfsft.c
index caa08fc..c6595a0 100644
--- a/kernel/nfsft/nfsft.c
+++ b/kernel/nfsft/nfsft.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nfsft.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /**
  * \file nfsft.c
@@ -39,7 +39,6 @@
 #endif
 
 /* Include NFFT3 utilities header. */
-#include "nfft3util.h"
 
 /* Include NFFT3 library header. */
 #include "nfft3.h"
@@ -658,14 +657,16 @@ void nfsft_trafo_direct(nfsft_plan *plan)
   if (plan->flags & NFSFT_NORMALIZED)
   {
     /* Traverse Fourier coefficients array. */
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k,n)
+#endif
     for (k = 0; k <= plan->N; k++)
     {
       for (n = -k; n <= k; n++)
       {
         /* Multiply with normalization weight. */
         plan->f_hat_intern[NFSFT_INDEX(k,n,plan)] *=
-          sqrt((2*k+1)/(4.0*PI));
+          sqrt((2*k+1)/(4.0*KPI));
       }
     }
   }
@@ -690,13 +691,15 @@ void nfsft_trafo_direct(nfsft_plan *plan)
      *   = \sum_{n=-N}^N \sum_{k=|n|}^N a_k^n P_k^{|n|}(cos theta_m)
      *     e^{i n phi_m}.
      */
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(m,stheta,sphi,f_m,n,a,n_abs,alpha,gamma,it2,it1,k,temp)
+#endif
     for (m = 0; m < plan->M_total; m++)
     {
       /* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */
-      stheta = cos(2.0*PI*plan->x[2*m+1]);
+      stheta = cos(2.0*KPI*plan->x[2*m+1]);
       /* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */
-      sphi = 2.0*PI*plan->x[2*m];
+      sphi = 2.0*KPI*plan->x[2*m];
 
       /* Initialize result for current node. */
       f_m = 0.0;
@@ -812,9 +815,9 @@ void nfsft_adjoint_direct(nfsft_plan *plan)
         for (m = 0; m < plan->M_total; m++)
         {
           /* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */
-          stheta = cos(2.0*PI*plan->x[2*m+1]);
+          stheta = cos(2.0*KPI*plan->x[2*m+1]);
           /* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */
-          sphi = 2.0*PI*plan->x[2*m];
+          sphi = 2.0*KPI*plan->x[2*m];
 
           /* Transposed Clenshaw algorithm */
 
@@ -845,9 +848,9 @@ void nfsft_adjoint_direct(nfsft_plan *plan)
     for (m = 0; m < plan->M_total; m++)
     {
       /* Scale angle theta from [0,1/2] to [0,pi] and apply cosine. */
-      stheta = cos(2.0*PI*plan->x[2*m+1]);
+      stheta = cos(2.0*KPI*plan->x[2*m+1]);
       /* Scale angle phi from [-1/2,1/2] to [-pi,pi]. */
-      sphi = 2.0*PI*plan->x[2*m];
+      sphi = 2.0*KPI*plan->x[2*m];
 
       /* Traverse all orders n. */
       for (n = -plan->N; n <= plan->N; n++)
@@ -892,14 +895,16 @@ void nfsft_adjoint_direct(nfsft_plan *plan)
   if (plan->flags & NFSFT_NORMALIZED)
   {
     /* Traverse Fourier coefficients array. */
+#ifdef _OPENMP
     #pragma omp parallel for default(shared) private(k,n)
+#endif
     for (k = 0; k <= plan->N; k++)
     {
       for (n = -k; n <= k; n++)
       {
         /* Multiply with normalization weight. */
         plan->f_hat[NFSFT_INDEX(k,n,plan)] *=
-          sqrt((2*k+1)/(4.0*PI));
+          sqrt((2*k+1)/(4.0*KPI));
       }
     }
   }
@@ -984,14 +989,16 @@ void nfsft_trafo(nfsft_plan *plan)
     if (plan->flags & NFSFT_NORMALIZED)
     {
       /* Traverse Fourier coefficients array. */
+#ifdef _OPENMP
       #pragma omp parallel for default(shared) private(k,n)
+#endif
       for (k = 0; k <= plan->N; k++)
       {
         for (n = -k; n <= k; n++)
         {
           /* Multiply with normalization weight. */
           plan->f_hat_intern[NFSFT_INDEX(k,n,plan)] *=
-            sqrt((2*k+1)/(4.0*PI));
+            sqrt((2*k+1)/(4.0*KPI));
         }
       }
     }
@@ -1228,14 +1235,16 @@ void nfsft_adjoint(nfsft_plan *plan)
       //fprintf(stderr,"nfsft_adjoint: Normalizing\n");
       //fflush(stderr);
       /* Traverse Fourier coefficients array. */
+#ifdef _OPENMP
       #pragma omp parallel for default(shared) private(k,n)
+#endif
       for (k = 0; k <= plan->N; k++)
       {
         for (n = -k; n <= k; n++)
         {
           /* Multiply with normalization weight. */
           plan->f_hat[NFSFT_INDEX(k,n,plan)] *=
-            sqrt((2*k+1)/(4.0*PI));
+            sqrt((2*k+1)/(4.0*KPI));
         }
       }
     }
@@ -1262,7 +1271,7 @@ void nfsft_precompute_x(nfsft_plan *plan)
   plan->plan_nfft.x = plan->x;
 
   /* Precompute. */
-  if (plan->plan_nfft.nfft_flags & PRE_ONE_PSI)
+  if (plan->plan_nfft.flags & PRE_ONE_PSI)
     nfft_precompute_one_psi(&plan->plan_nfft);
 }
 /* \} */
diff --git a/kernel/nfsoft/Makefile.am b/kernel/nfsoft/Makefile.am
index 3f33e35..367fbcd 100644
--- a/kernel/nfsoft/Makefile.am
+++ b/kernel/nfsoft/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
+# $Id$
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 
diff --git a/kernel/nfsoft/Makefile.in b/kernel/nfsoft/Makefile.in
deleted file mode 100644
index 978e894..0000000
--- a/kernel/nfsoft/Makefile.in
+++ /dev/null
@@ -1,556 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/nfsoft
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libnfsoft_la_LIBADD =
-am_libnfsoft_la_OBJECTS = nfsoft.lo wigner.lo
-libnfsoft_la_OBJECTS = $(am_libnfsoft_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libnfsoft_la_SOURCES)
-DIST_SOURCES = $(libnfsoft_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-noinst_LTLIBRARIES = libnfsoft.la
-libnfsoft_la_SOURCES = nfsoft.c wigner.h wigner.c
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfsoft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/nfsoft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libnfsoft.la: $(libnfsoft_la_OBJECTS) $(libnfsoft_la_DEPENDENCIES) $(EXTRA_libnfsoft_la_DEPENDENCIES) 
-	$(LINK)  $(libnfsoft_la_OBJECTS) $(libnfsoft_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfsoft.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wigner.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/nfsoft/nfsoft.c b/kernel/nfsoft/nfsoft.c
old mode 100644
new mode 100755
index 50ee2fb..022ca88
--- a/kernel/nfsoft/nfsoft.c
+++ b/kernel/nfsoft/nfsoft.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nfsoft.c 3919 2012-11-20 13:31:45Z grman $ */
+/* $Id$ */
 
 #include "config.h"
 
@@ -28,7 +28,6 @@
 #include <complex.h>
 #endif
 #include "nfft3.h"
-#include "nfft3util.h"
 #include "infft.h"
 #include "wigner.h"
 
@@ -69,7 +68,7 @@ void nfsoft_init_guru(nfsoft_plan *plan, int B, int M,
   nfft_init_guru(&plan->p_nfft, 3, N, M, n, nfft_cutoff, nfft_flags,
       FFTW_ESTIMATE | FFTW_DESTROY_INPUT);
 
-  if ((plan->p_nfft).nfft_flags & PRE_LIN_PSI)
+  if ((plan->p_nfft).flags & PRE_LIN_PSI)
   {
     nfft_precompute_lin_psi(&(plan->p_nfft));
   }
@@ -448,14 +447,14 @@ void nfsoft_precompute(nfsoft_plan *plan3D)
 
   for (j = 0; j < 3* plan3D ->p_nfft.M_total; j++)
   {
-    plan3D->p_nfft.x[j] = plan3D->p_nfft.x[j] * (1 / (2* PI ));
+    plan3D->p_nfft.x[j] = plan3D->p_nfft.x[j] * (1 / (2* KPI ));
   }
 
-  if ((plan3D->p_nfft).nfft_flags & FG_PSI)
+  if ((plan3D->p_nfft).flags & FG_PSI)
   {
     nfft_precompute_one_psi(&(plan3D->p_nfft));
   }
-  if ((plan3D->p_nfft).nfft_flags & PRE_PSI)
+  if ((plan3D->p_nfft).flags & PRE_PSI)
   {
     nfft_precompute_one_psi(&(plan3D->p_nfft));
   }
@@ -497,7 +496,7 @@ void nfsoft_trafo(nfsoft_plan *plan3D)
 
         if ((plan3D->flags & NFSOFT_NORMALIZED))
         {
-          plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (1. / (2. * PI))
+          plan3D->wig_coeffs[j] = plan3D->wig_coeffs[j] * (1. / (2. * KPI))
               * SQRT(0.5 * (2. * (max + j) + 1.));
         }
 
@@ -673,7 +672,7 @@ void nfsoft_adjoint(nfsoft_plan *plan3D)
 
         if ((plan3D->flags & NFSOFT_NORMALIZED))
         {
-          plan3D->f_hat[glo1] = plan3D->f_hat[glo1] * (1 / (2. * PI)) * SQRT(
+          plan3D->f_hat[glo1] = plan3D->f_hat[glo1] * (1 / (2. * KPI)) * SQRT(
               0.5 * (2. * (j) + 1.));
         }
 
diff --git a/kernel/nfsoft/wigner.c b/kernel/nfsoft/wigner.c
old mode 100644
new mode 100755
index 9ac2a7a..1b8a1b2
--- a/kernel/nfsoft/wigner.c
+++ b/kernel/nfsoft/wigner.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,13 +16,13 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: wigner.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 #include <math.h>
 #include <stdio.h>
 #include "infft.h"
 #include "wigner.h"
-#include "nfft3util.h"
+#include "infft.h"
 
 double SO3_alpha(const int m1, const int m2, const int j)
 {
diff --git a/kernel/nfsoft/wigner.h b/kernel/nfsoft/wigner.h
old mode 100644
new mode 100755
index 15d34f8..3e169a7
--- a/kernel/nfsoft/wigner.h
+++ b/kernel/nfsoft/wigner.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: wigner.h 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id$ */
 
 /**
  * \file wigner.h
diff --git a/kernel/nfst/Makefile.in b/kernel/nfst/Makefile.in
deleted file mode 100644
index 3a28889..0000000
--- a/kernel/nfst/Makefile.in
+++ /dev/null
@@ -1,553 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/nfst
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libnfst_la_LIBADD =
-am_libnfst_la_OBJECTS = nfst.lo
-libnfst_la_OBJECTS = $(am_libnfst_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libnfst_la_SOURCES)
-DIST_SOURCES = $(libnfst_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-noinst_LTLIBRARIES = libnfst.la
-libnfst_la_SOURCES = nfst.c 
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nfst/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/nfst/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libnfst.la: $(libnfst_la_OBJECTS) $(libnfst_la_DEPENDENCIES) $(EXTRA_libnfst_la_DEPENDENCIES) 
-	$(LINK)  $(libnfst_la_OBJECTS) $(libnfst_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nfst.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/nfst/nfst.c b/kernel/nfst/nfst.c
index 664257b..8d682bd 100644
--- a/kernel/nfst/nfst.c
+++ b/kernel/nfst/nfst.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,113 +16,65 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nfst.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
-/**
- * Library.
- * Includes simple and fast computation of the NFST (direct problem)
- * author: S. Klatt 2004-2006
- */
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "nfft3util.h"
-#include "nfft3.h"
-#include "infft.h"
-
-/**
- *  handy shortcuts
- **/
-#define NFST_DEFAULT_FLAGS   PRE_PHI_HUT|\
-                             PRE_PSI|\
-                             MALLOC_X|\
-                             MALLOC_F_HAT|\
-                             MALLOC_F|\
-                             FFTW_INIT|\
-                             FFT_OUT_OF_PLACE
-
-#define FFTW_DEFAULT_FLAGS   FFTW_ESTIMATE|\
-                             FFTW_DESTROY_INPUT
-
-#define NFST_SUMMANDS ( 2 * ths->m + 2)
-#define NODE(p,r) ( ths->x[(p) * ths->d + (r)])
-
-#define MACRO_ndst_init_result_trafo      \
-  memset( f, 0, ths->M_total * sizeof( double));
-#define MACRO_ndst_init_result_adjoint \
-  memset( f_hat, 0, ths->N_total * sizeof( double));
-
-
-#define MACRO_nfst_D_init_result_A        \
-  memset(g_hat, 0, nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
-#define MACRO_nfst_D_init_result_T        \
-  memset(f_hat, 0, ths->N_total * sizeof( double));
-
-#define MACRO_nfst_B_init_result_A        \
-  memset(f, 0,     ths->M_total * sizeof( double));
-#define MACRO_nfst_B_init_result_T        \
-  memset(g, 0, nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
+/* Nonequispaced fast cosine transform */
 
+/* Author: Steffen Klatt 2004-2006, Jens Keiner 2010 */
 
-#define NFST_PRE_WINFUN( d)  ths->N[d] = 2 * ths->N[d];         \
-                             ths->n[d] = nfst_fftw_2N( ths->n[d]);
+/* configure header */
+#include "config.h"
 
-#define NFST_POST_WINFUN( d) ths->N[d] = (LRINT(0.5 * ths->N[d]));   \
-                             ths->n[d] = nfst_fftw_2N_rev( ths->n[d]);
+/* complex datatype (maybe) */
+#ifdef HAVE_COMPLEX_H
+#include<complex.h>
+#endif
 
+/* NFFT headers */
+#include "nfft3.h"
+#include "infft.h"
 
-#define NFST_WINDOW_HELP_INIT  WINDOW_HELP_INIT
+#ifdef _OPENMP
+#include <omp.h>
+#endif
 
+#ifdef OMP_ASSERT
+#include <assert.h>
+#endif
 
-double nfst_phi_hut( nfst_plan *ths, int k, int d)
-{
-  NFST_PRE_WINFUN( d);
-  double phi_hut_tmp = PHI_HUT( k, d);
-  NFST_POST_WINFUN( d);
+#undef X
+#define X(name) NFST(name)
 
-  return phi_hut_tmp;
-}
-
-double nfst_phi( nfst_plan *ths, double x, int d)
+/** Compute aggregated product of integer array. */
+static inline INT intprod(const INT *vec, const INT a, const INT d)
 {
-  NFST_PRE_WINFUN( d);
-  double phi_tmp = PHI( x, d);
-  NFST_POST_WINFUN( d);
+  INT t, p;
 
-  return phi_tmp;
-}
+  p = 1;
+  for (t = 0; t < d; t++)
+    p *= vec[t] - a;
 
-int nfst_fftw_2N( int n)
-{
-  return 2 * ( n + 1);
+  return p;
 }
 
-int nfst_fftw_2N_rev( int n)
-{
-  div_t n_div;
-
-  n_div = div(n, 2);
-  return n_div.quot - 1;
-}
-
-#define MACRO_with_sin_vec     sin_vec[t][ka[t]]
-#define MACRO_without_sin_vec  sin( 2.0 * PI * (ka[t]+1) * NODE(j,t))
-
-
-#define MACRO_with_PRE_PHI_HUT     ths->c_phi_inv[t][kg[t]];
-#define MACRO_compute_PHI_HUT_INV  (1.0 / (nfst_phi_hut( ths, kg[t]+1, t)))
+/* handy shortcuts */
+#define BASE(x) SIN(x)
+#define NN(x) (x + 1)
+#define OFFSET 1
+#define FOURIER_TRAFO FFTW_RODFT00
+#define FFTW_DEFAULT_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT
 
-#define MACRO_with_PRE_PSI     ths->psi[(j * ths->d + t) * NFST_SUMMANDS + lc[t]];
-#define MACRO_compute_PSI      \
-  nfst_phi( ths, NODE(j,t) - (( double)(lc[t] + lb[t])) / nfst_fftw_2N( ths->n[t]), t)
+#define NODE(p,r) (ths->x[(p) * ths->d + (r)])
 
+#define MACRO_with_FG_PSI fg_psi[t][lj[t]]
+#define MACRO_with_PRE_PSI ths->psi[(j * ths->d + t) * (2 * ths->m + 2) + lj[t]]
+#define MACRO_without_PRE_PSI PHI((2 * NN(ths->n[t])), ((ths->x[(j) * ths->d + t]) \
+  - ((R)(lj[t] + u[t])) / (K(2.0) * ((R)NN(ths->n[t])))), t)
+#define MACRO_compute_PSI PHI((2 * NN(ths->n[t])), (NODE(j,t) - ((R)(lj[t] + u[t])) / (K(2.0) * ((R)NN(ths->n[t])))), t)
 
-
-/** direct computation of non equispaced sine transforms
- *  nfst_trafo_direct,  nfst_adjoint_direct_
+/**
+ * Direct computation of non equispaced sine transforms
+ *  nfst_trafo_direct,  nfst_adjoint_direct
  *  require O(M N^d) arithemtical operations
  *
  * direct computation of the nfst_trafo_direct, formula (1.1)
@@ -135,144 +87,159 @@ int nfst_fftw_2N_rev( int n)
  * for k in I_N^d
  *  f_hat[k] = sum_{j=0}^{M-1} f[j] * sin(2 (pi) k x[j])
  */
+void X(trafo_direct)(const X(plan) *ths)
+{
+  R *f_hat = (R*)ths->f_hat, *f = (R*)ths->f;
 
-#define MACRO_ndst_malloc__sin_vec                                              \
-                                                                                \
-  double **sin_vec;                                                             \
-  sin_vec = (double**)nfft_malloc( ths->d * sizeof( double*));                       \
-  for( t = 0; t < ths->d; t++)                                                  \
-    sin_vec[t] = (double*)nfft_malloc( ( ths->N[t] - 1) * sizeof( double));          \
-
-
-
-
-#define MACRO_ndst_free__sin_vec                                                \
-{                                                                               \
-  /* free allocated memory */                                                   \
-  for( t = 0; t < ths->d; t++)                                                  \
-  nfft_free( sin_vec[t]);                                                          \
-  nfft_free( sin_vec);                                                               \
-}
+  memset(f, 0, (size_t)(ths->M_total) * sizeof(R));
 
+  if (ths->d == 1)
+  {
+    /* specialize for univariate case, rationale: faster */
+    INT j;
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(j)
+#endif
+    for (j = 0; j < ths->M_total; j++)
+    {
+      INT k_L;
+      for (k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        R omega = K2PI * ((R)(k_L + OFFSET)) * ths->x[j];
+        f[j] += f_hat[k_L] * BASE(omega);
+      }
+    }
+  }
+  else
+  {
+    /* multivariate case */
+    INT j;
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(j)
+#endif
+    for (j = 0; j < ths->M_total; j++)
+    {
+      R x[ths->d], omega, Omega[ths->d + 1];
+      INT t, t2, k_L, k[ths->d];
+      Omega[0] = K(1.0);
+      for (t = 0; t < ths->d; t++)
+      {
+        k[t] = OFFSET;
+        x[t] = K2PI * ths->x[j * ths->d + t];
+        Omega[t+1] = BASE(((R)(k[t])) * x[t]) * Omega[t];
+      }
+      omega = Omega[ths->d];
 
+      for (k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        f[j] += f_hat[k_L] * omega;
+        {
+          for (t = ths->d - 1; (t >= 1) && (k[t] == (ths->N[t] - 1)); t--)
+            k[t] = OFFSET;
 
-#define MACRO_ndst_init__sin_vec                                                \
-{                                                                               \
-  for( t = 0; t < ths->d; t++)                                                  \
-  {                                                                             \
-    cos_x[t] = cos( 2.0 * PI * NODE(j,t));                                      \
-    sin_vec[t][0] = sin( 2.0 * PI * NODE(j,t));                                 \
-    sin_vec[t][1] = sin( 4.0 * PI * NODE(j,t));                                 \
-    for( k = 2; k < ths->N[t] - 1; k++)                                         \
-      sin_vec[t][k] = 2.0 * cos_x[t] * sin_vec[t][k-1]                          \
-                      - sin_vec[t][k-2];                                        \
-  }                                                                             \
-}
+          k[t]++;
 
+          for (t2 = t; t2 < ths->d; t2++)
+            Omega[t2+1] = BASE(((R)(k[t2])) * x[t2]) * Omega[t2];
 
-#define MACRO_ndst_init__k__sin_k( which_one)                                   \
-{                                                                               \
-  sin_k[0] = 1.0;                                                               \
-  for( t = 0; t < ths->d; t++)                                                  \
-    ka[t] = 0;                                                                  \
-                                                                                \
-  for( t = 0; t < ths->d; t++)                                                  \
-  {                                                                             \
-    sin_k[t+1] = sin_k[t] * MACRO_ ##which_one;                                 \
-  }                                                                             \
+          omega = Omega[ths->d];
+        }
+      }
+    }
+  }
 }
 
+void X(adjoint_direct)(const X(plan) *ths)
+{
+  R *f_hat = (R*)ths->f_hat, *f = (R*)ths->f;
 
-#define MACRO_ndst_count__k__sin_k( which_one)                                  \
-{                                                                               \
-  ka[ths->d-1]++;                                                               \
-  i = ths->d - 1;                                                               \
-  while( ( ka[i] == ths->N[i] - 1) && ( i > 0))                                 \
-  {                                                                             \
-    ka[i - 1]++;                                                                \
-    ka[i] = 0;                                                                  \
-                                                                                \
-    i--;                                                                        \
-  }                                                                             \
-  for( t = i; t < ths->d; t++)                                                  \
-    sin_k[t+1] = sin_k[t] * MACRO_ ##which_one;                                 \
-}
+  memset(f_hat, 0, (size_t)(ths->N_total) * sizeof(R));
 
+  if (ths->d == 1)
+  {
+    /* specialize for univariate case, rationale: faster */
+#ifdef _OPENMP
+      INT k_L;
+      #pragma omp parallel for default(shared) private(k_L)
+      for (k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        INT j;
+        for (j = 0; j < ths->M_total; j++)
+        {
+          R omega = K2PI * ((R)(k_L + OFFSET)) * ths->x[j];
+          f_hat[k_L] += f[j] * BASE(omega);
+        }
+      }
+#else
+      INT j;
+      for (j = 0; j < ths->M_total; j++)
+      {
+        INT k_L;
+        for (k_L = 0; k_L < ths->N_total; k_L++)
+        {
+          R omega = K2PI * ((R)(k_L + OFFSET)) * ths->x[j];
+          f_hat[k_L] += f[j] * BASE(omega);
+        }
+      }
+#endif
+  }
+  else
+  {
+    /* multivariate case */
+    INT j, k_L;
+#ifdef _OPENMP
+    #pragma omp parallel for default(shared) private(j, k_L)
+    for (k_L = 0; k_L < ths->N_total; k_L++)
+    {
+      INT k[ths->d], k_temp, t;
 
-#define MACRO_ndst_compute__trafo                                               \
-{                                                                               \
-  f[j] += f_hat[k] * sin_k[ths->d];                                             \
-}
+      k_temp = k_L;
 
-#define MACRO_ndst_compute__adjoint                                             \
-{                                                                               \
-  f_hat[k] += f[j] * sin_k[ths->d];                                             \
-}
+      for (t = ths->d - 1; t >= 0; t--)
+      {
+        k[t] = k_temp % ths->N[t];
+        k_temp /= ths->N[t];
+      }
 
+      for (j = 0; j < ths->M_total; j++)
+      {
+        R omega = K(1.0);
+        for (t = 0; t < ths->d; t++)
+          omega *= BASE(K2PI * (k[t] + OFFSET) * ths->x[j * ths->d + t]);
+        f_hat[k_L] += f[j] * omega;
+      }
+    }
+#else
+    for (j = 0; j < ths->M_total; j++)
+    {
+      R x[ths->d], omega, Omega[ths->d+1];
+      INT t, t2, k[ths->d];
+      Omega[0] = K(1.0);
+      for (t = 0; t < ths->d; t++)
+      {
+        k[t] = OFFSET;
+        x[t] = K2PI * ths->x[j * ths->d + t];
+        Omega[t+1] = BASE(((R)(k[t])) * x[t]) * Omega[t];
+      }
+      omega = Omega[ths->d];
+      for (k_L = 0; k_L < ths->N_total; k_L++)
+      {
+        f_hat[k_L] += f[j] * omega;
 
-/* slow (trafo) transform */
-#define MACRO_ndst( which_one)                                                  \
-  void nfst_ ## which_one ## _direct ( nfst_plan *ths)                                     \
-  {                                                                             \
-    int j, k, t, i;                                                             \
-    int ka[ths->d];                                                             \
-    double sin_k[ths->d+1];                                                     \
-    double cos_x[ths->d];                                                       \
-                                                                                \
-    double *f     = ths->f;                                                     \
-    double *f_hat = ths->f_hat;                                                 \
-                                                                                \
-    MACRO_ndst_init_result_ ## which_one;                                       \
-                                                                                \
-    if( ths->d == 1)                                                            \
-      for( j = 0; j < ths->M_total; j++)                                        \
-        for( k = 0; k < ths->N_total; k++)                                      \
-        {                                                                       \
-          sin_k[ths->d] = sin( 2.0 * PI * (k+1) * NODE(j,0));                   \
-          MACRO_ndst_compute__ ## which_one;                                    \
-        }                                                                       \
-    else                                                                        \
-      if( 1 == 0) /*FIXME: remove slow slow ... */                              \
-        /* slow ndst */                                                         \
-        for( j = 0; j < ths->M_total; j++)                                      \
-        {                                                                       \
-          MACRO_ndst_init__k__sin_k(without_sin_vec);                           \
-                                                                                \
-          for( k = 0; k < ths->N_total; k++)                                    \
-          {                                                                     \
-            MACRO_ndst_compute__ ## which_one;                                  \
-                                                                                \
-            MACRO_ndst_count__k__sin_k(without_sin_vec);                        \
-          }                                                                     \
-        }                                                                       \
-      else                                                                      \
-      {                                                                         \
-        /* fast nfst_trafo_direct */                                                   \
-        MACRO_ndst_malloc__sin_vec;                                             \
-                                                                                \
-        for( j = 0; j < ths->M_total; j++)                                      \
-        {                                                                       \
-          MACRO_ndst_init__sin_vec;                                             \
-                                                                                \
-          MACRO_ndst_init__k__sin_k(with_sin_vec);                              \
-                                                                                \
-          for( k = 0; k < ths->N_total; k++)                                    \
-          {                                                                     \
-            MACRO_ndst_compute__ ## which_one;                                  \
-                                                                                \
-            MACRO_ndst_count__k__sin_k(with_sin_vec);                           \
-          }                                                                     \
-        }                                                                       \
-        MACRO_ndst_free__sin_vec;                                               \
-      }                                                                         \
-  } /* ndst_{trafo, adjoint} */
-
-
-MACRO_ndst(trafo)
-MACRO_ndst(adjoint)
+        for (t = ths->d-1; (t >= 1) && (k[t] == ths->N[t] - 1); t--)
+          k[t] = OFFSET;
 
+        k[t]++;
 
+        for (t2 = t; t2 < ths->d; t2++)
+          Omega[t2+1] = BASE(((R)(k[t2])) * x[t2]) * Omega[t2];
 
+        omega = Omega[ths->d];
+      }
+    }
+#endif
+  }
+}
 
 /** fast computation of non equispaced sine transforms
  *  require O(N^d log(N) + M) arithemtical operations
@@ -288,791 +255,950 @@ MACRO_ndst(adjoint)
  *  f_hat[k] = sum_{j=0}^{M-1} f[j] * sin(2 (pi) k x[j])
  */
 
-#define MACRO_nfst__lower_boundary( j,act_dim)                                  \
-{                                                                               \
-  lb[(act_dim)] =                                                               \
-    (LRINT(NODE((j),(act_dim)) * nfst_fftw_2N( ths->n[(act_dim)]))) - ths->m;   \
-}
+/** macros and small sub routines for the fast transforms
+ */
 
-#define MACRO_nfst_D_compute_A                                                  \
-{                                                                               \
-  g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d];                   \
-}
+/** computes 2m+2 indices for the matrix B
+ */
+static inline void uo(const X(plan) *ths, const INT j, INT *up, INT *op,
+  const INT act_dim)
+{
+  const R xj = ths->x[j * ths->d + act_dim];
+  INT c = LRINT(xj * (2 * NN(ths->n[(act_dim)])));
 
-#define MACRO_nfst_D_compute_T                                                  \
-{                                                                               \
-  f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d];                   \
+  (*up) = c - (ths->m);
+  (*op) = c + 1 + (ths->m);
 }
 
-
-#define MACRO_init__kg                                                          \
-{                                                                               \
-  for( t = 0; t < ths->d; t++)                                                  \
-    kg[t] = 0;                                                                  \
-                                                                                \
-  i = 0;                                                                        \
+#define MACRO_D_compute_A \
+{ \
+  g_hat[kg_plain[ths->d]] = f_hat[k_L] * c_phi_inv_k[ths->d]; \
 }
 
-
-#define MACRO_count__kg                                                         \
-{                                                                               \
-  kg[ths->d - 1]++;                                                             \
-  i = ths->d - 1;                                                               \
-  while( ( kg[i] == ths->N[i] - 1) && ( i > 0))                                 \
-  {                                                                             \
-    kg[i - 1]++;                                                                \
-    kg[i] = 0;                                                                  \
-                                                                                \
-    i--;                                                                        \
-  }                                                                             \
+#define MACRO_D_compute_T \
+{ \
+  f_hat[k_L] = g_hat[kg_plain[ths->d]] * c_phi_inv_k[ths->d]; \
 }
 
+#define MACRO_D_init_result_A memset(g_hat, 0, (size_t)(ths->n_total) * sizeof(R));
 
-#define MACRO_update__c_phi_inv_k__lg_plain( which_one, which_phi)              \
-{                                                                               \
-  for( t = i; t < ths->d; t++) {                                                \
-    MACRO__c_phi_inv_k( which_phi);                                             \
-    kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t];                            \
-  }                                                                             \
-}
+#define MACRO_D_init_result_T memset(f_hat, 0, (size_t)(ths->N_total) * sizeof(R));
 
+#define MACRO_with_PRE_PHI_HUT ths->c_phi_inv[t][kg[t]]
 
-#define MACRO__c_phi_inv_k( which_phi)                                          \
-{                                                                               \
-  c_phi_inv_k[t+1] = 0.5 * c_phi_inv_k[t] * MACRO_ ## which_phi;                \
-}
+#define MACRO_compute_PHI_HUT_INV (K(1.0) / (PHI_HUT((2 * NN(ths->n[t])), kg[t] + OFFSET, t)))
 
-
-#define MACRO_nfst_D(which_one)                                                 \
-static inline void nfst_D_ ## which_one (nfst_plan *ths)                               \
-{                                                                               \
-  int k_L;                              /**< plain index                */      \
-                                                                                \
-  int i, t;                                                                     \
-  int kg[ths->d];                       /**< multi index in g_hat,c_phi */      \
-  double c_phi_inv_k[ths->d+1];         /**< postfix product of PHI_HUT */      \
-  int kg_plain[ths->d+1];               /**< postfix plain index        */      \
-                                                                                \
-  double *g_hat, *f_hat;                /**< local copy                 */      \
-                                                                                \
-  g_hat = ths->g_hat;                                                           \
-  f_hat = ths->f_hat;                                                           \
-                                                                                \
-  MACRO_nfst_D_init_result_ ## which_one                                        \
-                                                                                \
-  c_phi_inv_k[0] = 1;                                                           \
-  kg_plain[0]    = 0;                                                           \
-                                                                                \
-  MACRO_init__kg;                                                               \
-                                                                                \
-  if( ths->nfst_flags & PRE_PHI_HUT)                                            \
-                                                                                \
-    for( k_L = 0; k_L < ths->N_total; k_L++)                                    \
-    {                                                                           \
-      MACRO_update__c_phi_inv_k__lg_plain( which_one, with_PRE_PHI_HUT);        \
-                                                                                \
-      MACRO_nfst_D_compute_ ## which_one;                                       \
-                                                                                \
-      MACRO_count__kg;                                                          \
-                                                                                \
-    } /* for(k_L) */                                                            \
-                                                                                \
-  else                                                                          \
-                                                                                \
-    for( k_L = 0; k_L < ths->N_total; k_L++)                                    \
-    {                                                                           \
-      MACRO_update__c_phi_inv_k__lg_plain( which_one, compute_PHI_HUT_INV);     \
-                                                                                \
-      MACRO_nfst_D_compute_ ## which_one;                                       \
-                                                                                \
-      MACRO_count__kg                                                           \
-                                                                                \
-    } /* for(k_L) */                                                            \
-} /* nfst_D */
-
-MACRO_nfst_D(A)
-MACRO_nfst_D(T)
-
-
-
-
-
-
-
-/** sub routines for the fast transforms
- *  matrix vector multiplication with \f$B, B^{\rm T}\f$
- */
-#define MACRO_nfst_B_PRE_FULL_PSI_compute_A                                     \
-{                                                                               \
-  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]];                              \
+#define MACRO_init_k_ks \
+{ \
+  for (t = 0; t < ths->d; t++) \
+  { \
+    kg[t] = 0; \
+  } \
+  i = 0; \
 }
 
-#define MACRO_nfst_B_PRE_FULL_PSI_compute_T                                     \
-{                                                                               \
-  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj);                              \
+#define MACRO_update_c_phi_inv_k(what_kind, which_phi) \
+{ \
+  for (t = i; t < ths->d; t++) \
+  { \
+    MACRO_update_c_phi_inv_k_ ## what_kind(which_phi); \
+    kg_plain[t+1] = kg_plain[t] * ths->n[t] + kg[t]; \
+  } \
 }
 
-
-
-#define MACRO_nfst_B_compute_A                                                  \
-{                                                                               \
-  (*fj) += phi_tilde[ths->d] * g[lg_plain[ths->d]];                             \
+#define MACRO_update_c_phi_inv_k_A(which_phi) \
+{ \
+  c_phi_inv_k[t+1] = K(0.5) * c_phi_inv_k[t] * MACRO_ ## which_phi; \
 }
 
-#define MACRO_nfst_B_compute_T                                                  \
-{                                                                               \
-  g[lg_plain[ths->d]] += phi_tilde[ths->d] * (*fj);                             \
+#define MACRO_update_c_phi_inv_k_T(which_phi) \
+{ \
+  c_phi_inv_k[t+1] = K(0.5) * c_phi_inv_k[t] * MACRO_ ## which_phi; \
 }
 
-
-
-#define MACRO_compute_lg_offset__count_lg( i0)                                  \
-{                                                                               \
-  /* determine index in g-array corresponding to lb[(i0)] */                    \
-  if( lb[(i0)] < 0)                                                             \
-  {                                                                             \
-    lg_offset[(i0)] =                                                           \
-      (lb[(i0)] % nfst_fftw_2N( ths->n[(i0)])) + nfst_fftw_2N( ths->n[(i0)]);   \
-  }                                                                             \
-  else                                                                          \
-  {                                                                             \
-    lg_offset[(i0)] = lb[(i0)] % nfst_fftw_2N( ths->n[(i0)]);                   \
-  }                                                                             \
-                                                                                \
-  if( lg_offset[(i0)] > ths->n[(i0)]+1)                                         \
-      lg_offset[(i0)] = -( nfst_fftw_2N( ths->n[(i0)]) - lg_offset[(i0)]);      \
+#define MACRO_count_k_ks \
+{ \
+  kg[ths->d - 1]++; \
+  i = ths->d - 1; \
+\
+  while ((kg[i] == ths->N[i] - 1) && (i > 0)) \
+  { \
+    kg[i - 1]++; \
+    kg[i] = 0; \
+    i--; \
+  } \
 }
 
-
-
-#define MACRO_set__lg__to__lg_offset                                            \
-{                                                                               \
-  if( lg_offset[i] <= 0)                                                        \
-  {                                                                             \
-    lg[i] = -lg_offset[i];                                                      \
-    count_lg[i] = -1;                                                           \
-  }                                                                             \
-  else                                                                          \
-  {                                                                             \
-    lg[i] = +lg_offset[i];                                                      \
-    count_lg[i] = +1;                                                           \
-  }                                                                             \
+/* sub routines for the fast transforms  matrix vector multiplication with D, D^T */
+#define MACRO_D(which_one) \
+static inline void D_ ## which_one (X(plan) *ths) \
+{ \
+  R *g_hat, *f_hat; /* local copy */ \
+  R c_phi_inv_k[ths->d+1]; /* postfix product of PHI_HUT */ \
+  INT t; /* index dimensions */ \
+  INT i; \
+  INT k_L; /* plain index */ \
+  INT kg[ths->d]; /* multi index in g_hat */ \
+  INT kg_plain[ths->d+1]; /* postfix plain index */ \
+\
+  f_hat = (R*)ths->f_hat; g_hat = (R*)ths->g_hat; \
+  MACRO_D_init_result_ ## which_one; \
+\
+  c_phi_inv_k[0] = K(1.0); \
+  kg_plain[0] = 0; \
+\
+  MACRO_init_k_ks; \
+\
+  if (ths->flags & PRE_PHI_HUT) \
+  { \
+    for (k_L = 0; k_L < ths->N_total; k_L++) \
+    { \
+      MACRO_update_c_phi_inv_k(which_one, with_PRE_PHI_HUT); \
+      MACRO_D_compute_ ## which_one; \
+      MACRO_count_k_ks; \
+    } \
+  } \
+  else \
+  { \
+    for (k_L = 0; k_L < ths->N_total; k_L++) \
+    { \
+      MACRO_update_c_phi_inv_k(which_one,compute_PHI_HUT_INV); \
+      MACRO_D_compute_ ## which_one; \
+      MACRO_count_k_ks; \
+    } \
+  } \
 }
 
+MACRO_D(A)
+MACRO_D(T)
 
+/* sub routines for the fast transforms matrix vector multiplication with B, B^T */
+#define MACRO_B_init_result_A memset(f, 0, (size_t)(ths->M_total) * sizeof(R));
+#define MACRO_B_init_result_T memset(g, 0, (size_t)(ths->n_total) * sizeof(R));
 
-#define MACRO_count__lg(dim)                                                    \
-{                                                                               \
-  /* turn around when we hit one of the boundaries */                           \
-  if( ((lg[(dim)] == 0) || (lg[(dim)] == (ths->n[(dim)] + 1))) )                \
-    count_lg[(dim)] *= -1;                                                      \
-                                                                                \
-  lg[(dim)] += count_lg[(dim)];                                                 \
+#define MACRO_B_PRE_FULL_PSI_compute_A \
+{ \
+  (*fj) += ths->psi[ix] * g[ths->psi_index_g[ix]]; \
 }
 
-
-
-#define MACRO_init_lb_lg_lc_phi_tilde_lg_plain( which_psi)                      \
-{                                                                               \
-  for( i = 0; i < ths->d; i++)                                                  \
-  {                                                                             \
-    MACRO_nfst__lower_boundary( j, i);                                          \
-                                                                                \
-    MACRO_compute_lg_offset__count_lg( i);                                      \
-    MACRO_set__lg__to__lg_offset;                                               \
-                                                                                \
-    /* counter for lg */                                                        \
-    lc[i] = 0;                                                                  \
-  }                                                                             \
-                                                                                \
-  for( t = 0; t < ths->d; t++)                                                  \
-  {                                                                             \
-    if( lg[t] == 0)                                                             \
-    {                                                                           \
-      lg_plain[t+1]  = lg_plain[t] * ths->n[t];                                 \
-      phi_tilde[t+1] = 0.0;                                                     \
-    }                                                                           \
-    else                                                                        \
-      if( lg[t] == ths->n[t]+1)                                                 \
-      {                                                                         \
-        lg_plain[t+1]  = lg_plain[t] * ths->n[t] + ths->n[t]-1;                 \
-        phi_tilde[t+1] = 0.0;                                                   \
-      }                                                                         \
-      else                                                                      \
-      {                                                                         \
-        MACRO__phi_tilde( which_psi);                                           \
-        lg_plain[t+1]  = lg_plain[t] * ths->n[t] + lg[t]-1;                     \
-      }                                                                         \
-  }                                                                             \
-                                                                                \
-  i = 0;                                                                        \
+#define MACRO_B_PRE_FULL_PSI_compute_T \
+{ \
+  g[ths->psi_index_g[ix]] += ths->psi[ix] * (*fj); \
 }
 
-
-
-#define MACRO_count__lg_lc                                                      \
-{                                                                               \
-  MACRO_count__lg( ths->d-1);                                                   \
-                                                                                \
-  lc[ths->d - 1]++;                                                             \
-  i = ths->d - 1;                                                               \
-                                                                                \
-  while( (lc[i] == NFST_SUMMANDS) && (i > 0))                                   \
-  {                                                                             \
-    lc[i - 1]++;                                                                \
-    lc[i] = 0;                                                                  \
-                                                                                \
-    /* ansonsten lg[i-1] verschieben */                                         \
-    MACRO_count__lg( i - 1);                                                    \
-    /* lg[i] = anfangswert */                                                   \
-    MACRO_set__lg__to__lg_offset;                                               \
-                                                                                \
-    i--;                                                                        \
-  }                                                                             \
+#define MACRO_B_compute_A \
+{ \
+  (*fj) += phi_prod[ths->d] * g[ll_plain[ths->d]]; \
 }
 
-
-#define MACRO_update__phi_tilde__lg_plain( which_psi)                           \
-{                                                                               \
-  for( t = i; t < ths->d; t++)                                                  \
-  {                                                                             \
-    if( (lg[t] != 0) && (lg[t] != ths->n[t]+1))                                 \
-    {                                                                           \
-      MACRO__phi_tilde( which_psi);                                             \
-      lg_plain[t+1] = lg_plain[t] * ths->n[t] + lg[t]-1;                        \
-    }                                                                           \
-    else                                                                        \
-      phi_tilde[t+1] = 0.0;                                                     \
-  }                                                                             \
+#define MACRO_B_compute_T \
+{ \
+  g[ll_plain[ths->d]] += phi_prod[ths->d] * (*fj); \
 }
 
-
-
-#define MACRO__phi_tilde( which_psi)                                            \
-{                                                                               \
-  phi_tilde[t+1] = (double)count_lg[t] * phi_tilde[t] * MACRO_ ## which_psi;    \
+#define MACRO_init_uo_l_lj_t \
+{ \
+  for (t2 = 0; t2 < ths->d; t2++) \
+  { \
+    uo(ths, j, &u[t2], &o[t2], t2); \
+    \
+    /* determine index in g-array corresponding to u[(t2)] */ \
+    if (u[(t2)] < 0) \
+      lg_offset[(t2)] = \
+        (u[(t2)] % (2 * NN(ths->n[(t2)]))) + (2 * NN(ths->n[(t2)])); \
+    else \
+      lg_offset[(t2)] = u[(t2)] % (2 * NN(ths->n[(t2)])); \
+      if (lg_offset[(t2)] > NN(ths->n[(t2)])) \
+        lg_offset[(t2)] = -(2 * NN(ths->n[(t2)]) - lg_offset[(t2)]); \
+    \
+    if (lg_offset[t2] <= 0) \
+    { \
+      l[t2] = -lg_offset[t2]; \
+      count_lg[t2] = -1; \
+    } \
+    else \
+    { \
+      l[t2] = +lg_offset[t2]; \
+      count_lg[t2] = +1; \
+    } \
+ \
+    lj[t2] = 0; \
+   } \
+   t2 = 0; \
 }
 
+#define FOO_A ((R)count_lg[t])
+
+#define FOO_T ((R)count_lg[t])
+
+#define MACRO_update_phi_prod_ll_plain(which_one,which_psi) \
+{ \
+  for (t = t2; t < ths->d; t++) \
+  { \
+    if ((l[t] != 0) && (l[t] != NN(ths->n[t]))) \
+    { \
+      phi_prod[t+1] = (FOO_ ## which_one) * phi_prod[t] * (MACRO_ ## which_psi); \
+      ll_plain[t+1]  = ll_plain[t] * ths->n[t] + l[t] - 1; \
+    } \
+    else \
+    { \
+      phi_prod[t + 1] = K(0.0); \
+      ll_plain[t+1]  = ll_plain[t] * ths->n[t]; \
+    } \
+  } \
+}
 
+#define MACRO_count_uo_l_lj_t \
+{ \
+  /* turn around if we hit one of the boundaries */ \
+  if ((l[(ths->d-1)] == 0) || (l[(ths->d-1)] == NN(ths->n[(ths->d-1)]))) \
+    count_lg[(ths->d-1)] *= -1; \
+ \
+  /* move array index */ \
+  l[(ths->d-1)] += count_lg[(ths->d-1)]; \
+ \
+  lj[ths->d - 1]++; \
+  t2 = ths->d - 1; \
+ \
+  while ((lj[t2] == (2 * ths->m + 2)) && (t2 > 0)) \
+  { \
+    lj[t2 - 1]++; \
+    lj[t2] = 0; \
+    /* ansonsten lg[i-1] verschieben */ \
+ \
+    /* turn around if we hit one of the boundaries */ \
+    if ((l[(t2 - 1)] == 0) || (l[(t2 - 1)] == NN(ths->n[(t2 - 1)]))) \
+      count_lg[(t2 - 1)] *= -1; \
+    /* move array index */ \
+    l[(t2 - 1)] += count_lg[(t2 - 1)]; \
+ \
+    /* lg[i] = anfangswert */ \
+    if (lg_offset[t2] <= 0) \
+    { \
+      l[t2] = -lg_offset[t2]; \
+      count_lg[t2] = -1; \
+    } \
+    else \
+    { \
+      l[t2] = +lg_offset[t2]; \
+      count_lg[t2] = +1; \
+    } \
+ \
+    t2--; \
+  } \
+}
 
-
-#define MACRO_nfst_B( which_one)                                                \
-  static inline void nfst_B_ ## which_one ( nfst_plan *ths)                            \
-  { /* MACRO_nfst_B */                                                          \
-    int lb[ths->d];                     /**< multi band with respect to x_j */  \
-    int j, t, i;                        /**< index nodes, help vars         */  \
-    int lprod, l_L, ix;                 /**< index one row of B             */  \
-    int lc[ths->d];                     /**< multi index 0<=lj<u+o+1        */  \
-    int lg[ths->d];                     /**< real index of g in array       */  \
-    int lg_offset[ths->d];              /**< offset in g according to u     */  \
-    int count_lg[ths->d];               /**< count summands (2m+2)          */  \
-    int lg_plain[ths->d+1];             /**< index of g in multi_array      */  \
-    double *f, *g;                      /**< local copy                     */  \
-    double phi_tilde[ths->d+1];         /**< holds values for psi           */  \
-    double *fj;                         /**< pointer to final result        */  \
-                                                                                \
-    f = ths->f; g = ths->g;                                                     \
-                                                                                \
-    MACRO_nfst_B_init_result_ ## which_one                                      \
-                                                                                \
-    /* both flags are set */                                                    \
-    if( (ths->nfst_flags & PRE_PSI) && (ths->nfst_flags & PRE_FULL_PSI))        \
-    {                                                                           \
-      for( ix = 0, j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1)           \
-        for( l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++)                   \
-        {                                                                       \
-          MACRO_nfst_B_PRE_FULL_PSI_compute_ ## which_one;                      \
-        }                                                                       \
-    }                                                                           \
-    else                                                                        \
-    {                                                                           \
-      phi_tilde[0] = 1;                                                         \
-      lg_plain[0]  = 0;                                                         \
-                                                                                \
-      for( t = 0, lprod = 1; t < ths->d; t++)                                   \
-        lprod *= NFST_SUMMANDS;                                                 \
-                                                                                \
-      /* PRE_PSI flag is set */                                                 \
-      if( ths->nfst_flags & PRE_PSI)                                            \
-      {                                                                         \
-        for( j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1)                 \
-        {                                                                       \
-          MACRO_init_lb_lg_lc_phi_tilde_lg_plain( with_PRE_PSI);                \
-                                                                                \
-          for( l_L = 0; l_L < lprod; l_L++)                                     \
-          {                                                                     \
-            MACRO_update__phi_tilde__lg_plain( with_PRE_PSI);                   \
-                                                                                \
-            MACRO_nfst_B_compute_ ## which_one;                                 \
-                                                                                \
-            MACRO_count__lg_lc;                                                 \
-                                                                                \
-          } /* for( l_L) */                                                     \
-        } /* for( j) */                                                         \
-      } /* if( PRE_PSI) */                                                      \
-                                                                                \
-      /* no PSI flag is set */                                                  \
-      else                                                                      \
-      {                                                                         \
-        for( j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1)                 \
-        {                                                                       \
-          MACRO_init_lb_lg_lc_phi_tilde_lg_plain( compute_PSI);                 \
-                                                                                \
-          for( l_L = 0; l_L < lprod; l_L++)                                     \
-          {                                                                     \
-            MACRO_update__phi_tilde__lg_plain( compute_PSI);                    \
-                                                                                \
-            MACRO_nfst_B_compute_ ## which_one;                                 \
-                                                                                \
-            MACRO_count__lg_lc;                                                 \
-                                                                                \
-          } /* for(l_L) */                                                      \
-        } /* for(j) */                                                          \
-      } /* else(PRE_PSI) */                                                     \
-    }/* else( PRE_PRE && FULL_PRE_PSI) */                                       \
-} /* nfst_B */
-
-MACRO_nfst_B(A)
-MACRO_nfst_B(T)
-
-
-
-
-
+#define MACRO_B(which_one) \
+static inline void B_ ## which_one (X(plan) *ths) \
+{ \
+  INT lprod; /* 'regular bandwidth' of matrix B  */ \
+  INT u[ths->d], o[ths->d]; /* multi band with respect to x_j */ \
+  INT t, t2; /* index dimensions */ \
+  INT j; /* index nodes */ \
+  INT l_L, ix; /* index one row of B */ \
+  INT l[ths->d]; /* multi index u<=l<=o (real index of g in array) */ \
+  INT lj[ths->d]; /* multi index 0<=lc<2m+2 */ \
+  INT ll_plain[ths->d+1]; /* postfix plain index in g */ \
+  R phi_prod[ths->d+1]; /* postfix product of PHI */ \
+  R *f, *g; /* local copy */ \
+  R *fj; /* local copy */ \
+  R y[ths->d]; \
+  R fg_psi[ths->d][2*ths->m+2]; \
+  R fg_exp_l[ths->d][2*ths->m+2]; \
+  INT l_fg,lj_fg; \
+  R tmpEXP1, tmpEXP2, tmpEXP2sq, tmp1, tmp2, tmp3; \
+  R ip_w; \
+  INT ip_u; \
+  INT ip_s = ths->K/(ths->m+2); \
+  INT lg_offset[ths->d]; /* offset in g according to u */ \
+  INT count_lg[ths->d]; /* count summands (2m+2) */ \
+\
+  f = (R*)ths->f; g = (R*)ths->g; \
+\
+  MACRO_B_init_result_ ## which_one \
+\
+  if (ths->flags & PRE_FULL_PSI) \
+  { \
+    for (ix = 0, j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      for (l_L = 0; l_L < ths->psi_index_f[j]; l_L++, ix++) \
+      { \
+        MACRO_B_PRE_FULL_PSI_compute_ ## which_one; \
+      } \
+    } \
+    return; \
+  } \
+\
+  phi_prod[0] = K(1.0); \
+  ll_plain[0] = 0; \
+\
+  for (t = 0, lprod = 1; t < ths->d; t++) \
+    lprod *= (2 * ths->m + 2); \
+\
+  if (ths->flags & PRE_PSI) \
+  { \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+ \
+      for (l_L = 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_prod_ll_plain(which_one, with_PRE_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      } /* for(l_L) */ \
+    } /* for(j) */ \
+    return; \
+  } /* if(PRE_PSI) */ \
+ \
+  if (ths->flags & PRE_FG_PSI) \
+  { \
+    for (t = 0; t < ths->d; t++) \
+    { \
+      tmpEXP2 = EXP(K(-1.0) / ths->b[t]); \
+      tmpEXP2sq = tmpEXP2 * tmpEXP2; \
+      tmp2 = K(1.0); \
+      tmp3 = K(1.0); \
+      fg_exp_l[t][0] = K(1.0); \
+ \
+      for (lj_fg = 1; lj_fg <= (2 * ths->m + 2); lj_fg++) \
+      { \
+        tmp3 = tmp2 * tmpEXP2; \
+        tmp2 *= tmpEXP2sq; \
+        fg_exp_l[t][lj_fg] = fg_exp_l[t][lj_fg-1] * tmp3; \
+      } \
+    } \
+ \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+ \
+      for (t = 0; t < ths->d; t++) \
+      { \
+        fg_psi[t][0] = ths->psi[2 * (j * ths->d + t)]; \
+        tmpEXP1 = ths->psi[2 * (j * ths->d + t) + 1]; \
+        tmp1 = K(1.0); \
+ \
+        for (l_fg = u[t] + 1, lj_fg = 1; l_fg <= o[t]; l_fg++, lj_fg++) \
+        { \
+          tmp1 *= tmpEXP1; \
+          fg_psi[t][lj_fg] = fg_psi[t][0] * tmp1 * fg_exp_l[t][lj_fg]; \
+        } \
+      } \
+ \
+      for (l_L= 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_prod_ll_plain(which_one, with_FG_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      } \
+    } \
+    return; \
+  } \
+ \
+  if (ths->flags & FG_PSI) \
+  { \
+    for (t = 0; t < ths->d; t++) \
+    { \
+      tmpEXP2 = EXP(K(-1.0) / ths->b[t]); \
+      tmpEXP2sq = tmpEXP2 * tmpEXP2; \
+      tmp2 = K(1.0); \
+      tmp3 = K(1.0); \
+      fg_exp_l[t][0] = K(1.0); \
+      for (lj_fg = 1; lj_fg <= (2 * ths->m + 2); lj_fg++) \
+      { \
+        tmp3 = tmp2 * tmpEXP2; \
+        tmp2 *= tmpEXP2sq; \
+        fg_exp_l[t][lj_fg] = fg_exp_l[t][lj_fg-1] * tmp3; \
+      } \
+    } \
+ \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+ \
+      for (t = 0; t < ths->d; t++) \
+      { \
+        fg_psi[t][0] = (PHI((2 * NN(ths->n[t])), (ths->x[j*ths->d+t] - ((R)u[t])/(2 * NN(ths->n[t]))),(t)));\
+ \
+        tmpEXP1 = EXP(K(2.0) * ((2 * NN(ths->n[t])) * ths->x[j * ths->d + t] - u[t]) / ths->b[t]); \
+        tmp1 = K(1.0); \
+        for (l_fg = u[t] + 1, lj_fg = 1; l_fg <= o[t]; l_fg++, lj_fg++) \
+        { \
+          tmp1 *= tmpEXP1; \
+          fg_psi[t][lj_fg] = fg_psi[t][0] * tmp1 * fg_exp_l[t][lj_fg]; \
+        } \
+      } \
+  \
+      for (l_L = 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_prod_ll_plain(which_one, with_FG_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      } \
+    } \
+    return; \
+  } \
+ \
+  if (ths->flags & PRE_LIN_PSI) \
+  { \
+    for (j = 0, fj = f; j < ths->M_total; j++, fj++) \
+    { \
+      MACRO_init_uo_l_lj_t; \
+  \
+      for (t = 0; t < ths->d; t++) \
+      { \
+        y[t] = (((2 * NN(ths->n[t])) * ths->x[j * ths->d + t] - (R)u[t]) \
+                * ((R)ths->K))/(ths->m + 2); \
+        ip_u  = LRINT(FLOOR(y[t])); \
+        ip_w  = y[t]-ip_u; \
+        for (l_fg = u[t], lj_fg = 0; l_fg <= o[t]; l_fg++, lj_fg++) \
+        { \
+          fg_psi[t][lj_fg] = ths->psi[(ths->K+1)*t + ABS(ip_u-lj_fg*ip_s)] \
+            * (1-ip_w) + ths->psi[(ths->K+1)*t + ABS(ip_u-lj_fg*ip_s+1)] \
+            * (ip_w); \
+        } \
+      } \
+  \
+      for (l_L = 0; l_L < lprod; l_L++) \
+      { \
+        MACRO_update_phi_prod_ll_plain(which_one, with_FG_PSI); \
+ \
+        MACRO_B_compute_ ## which_one; \
+ \
+        MACRO_count_uo_l_lj_t; \
+      }  /* for(l_L) */  \
+    } /* for(j) */  \
+    return; \
+  } /* if(PRE_LIN_PSI) */ \
+  \
+  /* no precomputed psi at all */ \
+  for (j = 0, fj = &f[0]; j < ths->M_total; j++, fj += 1) \
+  { \
+    MACRO_init_uo_l_lj_t; \
+ \
+    for (l_L = 0; l_L < lprod; l_L++) \
+    { \
+      MACRO_update_phi_prod_ll_plain(which_one, without_PRE_PSI); \
+ \
+      MACRO_B_compute_ ## which_one; \
+ \
+      MACRO_count_uo_l_lj_t; \
+    } /* for (l_L) */ \
+  } /* for (j) */ \
+} /* B */
+
+MACRO_B(A)
+MACRO_B(T)
 
 /**
  * user routines
- *
  */
-void nfst_trafo( nfst_plan *ths)
+void X(trafo)(X(plan) *ths)
 {
-  /**
-   * use ths->my_fftw_r2r_plan
-   *
-   */
-  ths->g_hat = ths->g1;
-  ths->g     = ths->g2;
-
-
-  /**
-   * form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
-   * k \in I_N \f$
-   *
-   */
-  TIC(0)
-  nfst_D_A( ths);
-  TOC(0)
-
-
-  /**
-   * compute by d-variate discrete Fourier transform
-   * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
-   * \text{ for } l \in I_n \f$
-   *
-   */
-  TIC(1)
-  fftw_execute( ths->my_fftw_r2r_plan);
-  TOC(1)
-
-
-  /**
-   * set \f$ f_j = \sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
-   * \text{ for } j=0,\hdots,M-1 \f$
-   *
-   */
-  TIC(2)
-  nfst_B_A( ths);
-  TOC(2)
-
-} /* nfst_trafo */
-
-
-
+  switch(ths->d)
+  {
+    default:
+    {
+      /* use ths->my_fftw_r2r_plan */
+      ths->g_hat = ths->g1;
+      ths->g = ths->g2;
+
+      /* form \f$ \hat g_k = \frac{\hat f_k}{c_k\left(\phi\right)} \text{ for }
+       * k \in I_N \f$ */
+      TIC(0)
+      D_A(ths);
+      TOC(0)
+
+      /* Compute by d-variate discrete Fourier transform
+       * \f$ g_l = \sum_{k \in I_N} \hat g_k {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+       * \text{ for } l \in I_n \f$ */
+      TIC_FFTW(1)
+      FFTW(execute)(ths->my_fftw_r2r_plan);
+      TOC_FFTW(1)
+
+      /*if (ths->flags & PRE_FULL_PSI)
+        full_psi__A(ths);*/
+
+      /* Set \f$ f_j = \sum_{l \in I_n,m(x_j)} g_l \psi\left(x_j-\frac{l}{n}\right)
+       * \text{ for } j=0,\hdots,M-1 \f$ */
+      TIC(2)
+      B_A(ths);
+      TOC(2)
+
+      /*if (ths->flags & PRE_FULL_PSI)
+      {
+        Y(free)(ths->psi_index_g);
+        Y(free)(ths->psi_index_f);
+      }*/
+    }
+  }
+} /* trafo */
 
-void nfst_adjoint( nfst_plan *ths)
+void X(adjoint)(X(plan) *ths)
 {
-  /**
-   * use ths->my_fftw_plan
-   *
-   **/
-  ths->g_hat = ths->g2;
-  ths->g     = ths->g1;
-
-
-  /**
-   * set \f$ g_l = \sum_{j=0}^{M-1} f_j \psi\left(x_j-\frac{l}{n}\right)
-   * \text{ for } l \in I_n,m(x_j) \f$
-   *
-   */
-  TIC(2)
-  nfst_B_T( ths);
-  TOC(2)
-
-
-  /**
-   * compute by d-variate discrete cosine transform
-   * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
-   * \text{ for }  k \in I_N\f$
-   *
-   */
-  TIC(1)
-  fftw_execute( ths->my_fftw_r2r_plan);
-  TOC(1)
-
-
-  /**
-   * form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
-   * k \in I_N \f$
-   *
-   */
-  TIC(0)
-  nfst_D_T( ths);
-  TOC(0)
-
-} /* nfst_adjoint */
-
-
+  switch(ths->d)
+  {
+    default:
+    {
+      /* use ths->my_fftw_plan */
+      ths->g_hat = ths->g2;
+      ths->g = ths->g1;
+
+      /*if (ths->flags & PRE_FULL_PSI)
+        full_psi__T(ths);*/
+
+      /* Set \f$ g_l = \sum_{j=0}^{M-1} f_j \psi\left(x_j-\frac{l}{n}\right)
+       * \text{ for } l \in I_n,m(x_j) \f$ */
+      TIC(2)
+      B_T(ths);
+      TOC(2)
+
+      /* Compute by d-variate discrete cosine transform
+       * \f$ \hat g_k = \sum_{l \in I_n} g_l {\rm e}^{-2\pi {\rm i} \frac{kl}{n}}
+       * \text{ for }  k \in I_N\f$ */
+      TIC_FFTW(1)
+      FFTW(execute)(ths->my_fftw_r2r_plan);
+      TOC_FFTW(1)
+
+      /* Form \f$ \hat f_k = \frac{\hat g_k}{c_k\left(\phi\right)} \text{ for }
+       * k \in I_N \f$ */
+      TIC(0)
+      D_T(ths);
+      TOC(0)
+    }
+  }
+} /* adjoint */
 
-/**
- * initialization of direct transform
- *
+/** initialisation of direct transform
  */
-void nfst_precompute_phi_hut( nfst_plan *ths)
+static inline void precompute_phi_hut(X(plan) *ths)
 {
-  int kg[ths->d];                      /**< index over all frequencies       */
-  int t;                               /**< index over all dimensions        */
+  INT ks[ths->d]; /* index over all frequencies */
+  INT t; /* index over all dimensions */
 
-  ths->c_phi_inv = (double**)nfft_malloc( ths->d * sizeof( double*));
+  ths->c_phi_inv = (R**) Y(malloc)((size_t)(ths->d) * sizeof(R*));
 
-  for( t = 0; t < ths->d; t++)
+  for (t = 0; t < ths->d; t++)
   {
-    ths->c_phi_inv[t] = (double*)nfft_malloc( ( ths->N[t] - 1) * sizeof( double));
+    ths->c_phi_inv[t] = (R*)Y(malloc)((size_t)(ths->N[t] - OFFSET) * sizeof(R));
 
-    for( kg[t] = 0; kg[t] < ths->N[t] - 1; kg[t]++)
+    for (ks[t] = 0; ks[t] < ths->N[t] - OFFSET; ks[t]++)
     {
-      ths->c_phi_inv[t][kg[t]] = MACRO_compute_PHI_HUT_INV;
+      ths->c_phi_inv[t][ks[t]] = (K(1.0) / (PHI_HUT((2 * NN(ths->n[t])), ks[t] + OFFSET, t)));
     }
   }
-} /* nfst_phi_hut */
-
-
+} /* phi_hut */
 
-void nfst_precompute_psi( nfst_plan *ths)
+/** create a lookup table, but NOT for each node
+ *  good idea K=2^xx
+ *  TODO: estimate K, call from init
+ *  assumes an EVEN window function
+ */
+void X(precompute_lin_psi)(X(plan) *ths)
 {
-  int t;                                /**< index over all dimensions        */
-  int j;                                /**< index over all nodes             */
-  int lc[ths->d];                       /**< index 0<=lj<u+o+1                */
-  int lb[ths->d];                       /**< depends on x_j                   */
+  INT t; /**< index over all dimensions */
+  INT j; /**< index over all nodes */
+  R step; /**< step size in [0,(m+2)/n] */
 
   for (t = 0; t < ths->d; t++)
   {
-    for(j = 0; j < ths->M_total; j++)
-    {
-      MACRO_nfst__lower_boundary( j, t);
-
-      for( lc[t] = 0; lc[t] < NFST_SUMMANDS; lc[t]++)
-        ths->psi[(j * ths->d + t) * NFST_SUMMANDS + lc[t]] = MACRO_compute_PSI;
+    step = ((R)(ths->m+2)) / (((R)ths->K) * (2 * NN(ths->n[t])));
 
+    for (j = 0; j <= ths->K; j++)
+    {
+      ths->psi[(ths->K + 1) * t + j] = PHI((2 * NN(ths->n[t])), (j * step), t);
     } /* for(j) */
-  }  /* for(t) */
-
-  /* full precomputation of psi */
-  if ( ths->nfst_flags & PRE_FULL_PSI)
-    nfst_full_psi( ths, ths->nfst_full_psi_eps);
-
-} /* nfst_precompute_psi */
-
-
+  } /* for(t) */
+}
 
-/** more memory usage, a bit faster */
-void nfst_full_psi(nfst_plan *ths, double eps)
+void X(precompute_fg_psi)(X(plan) *ths)
 {
-  int t, i;                             /**< index over all dimensions        */
-  int j;                                /**< index over all nodes             */
-  int l_L;                              /**< plain index 0<=l_L<lprod         */
-  int lc[ths->d];                       /**< multi index 0<=lj<u+o+1          */
-  int lg_plain[ths->d+1];               /**< postfix plain index              */
-  int count_lg[ths->d];
-  int lg_offset[ths->d];
-  int lg[ths->d];
-  int lprod;                            /**< 'bandwidth' of matrix B          */
-  int lb[ths->d];                       /**< depends on x_j                   */
-
-  double phi_tilde[ths->d+1];
-
-  int *index_g, *index_f;
-  double *new_psi;
-  int ix, ix_old, size_psi;
-
-  phi_tilde[0] = 1.0;
-  lg_plain[0]  =   0;
-
-  if(ths->nfst_flags & PRE_PSI)
-  {
-    size_psi = ths->M_total;
-    index_f  =    (int*)nfft_malloc( ths->M_total  * sizeof( int));
-    index_g  =    (int*)nfft_malloc( size_psi * sizeof( int));
-    new_psi  = (double*)nfft_malloc( size_psi * sizeof( double));
+  INT t; /* index over all dimensions */
+  INT u, o; /* depends on x_j */
 
-    for( t = 0,lprod = 1; t < ths->d; t++)
-    {
-      lprod *= NFST_SUMMANDS;
-      eps *= PHI( 0, t);
-    }
+//  sort(ths);
 
-    for( ix = 0, ix_old = 0, j = 0; j < ths->M_total; j++)
+  for (t = 0; t < ths->d; t++)
+  {
+    INT j;
+//    #pragma omp parallel for default(shared) private(j,u,o)
+    for (j = 0; j < ths->M_total; j++)
     {
-      MACRO_init_lb_lg_lc_phi_tilde_lg_plain( with_PRE_PSI);
+      uo(ths, j, &u, &o, t);
 
-      for( l_L = 0; l_L < lprod; l_L++)
-      {
-        MACRO_update__phi_tilde__lg_plain( with_PRE_PSI);
+      ths->psi[2 * (j*ths->d + t)] = (PHI((2 * NN(ths->n[t])),(ths->x[j * ths->d + t] - ((R)u) / (2 * NN(ths->n[t]))),(t)));
+      ths->psi[2 * (j*ths->d + t) + 1] = EXP(K(2.0) * ( (2 * NN(ths->n[t])) * ths->x[j * ths->d + t] - u) / ths->b[t]);
+      } /* for(j) */
+  }
+  /* for(t) */
+} /* nfft_precompute_fg_psi */
 
-        if( fabs(phi_tilde[ths->d]) > eps)
-        {
-          index_g[ix] =  lg_plain[ths->d];
-          new_psi[ix] = phi_tilde[ths->d];
-
-          ix++;
-          if( ix == size_psi)
-          {
-            size_psi += ths->M_total;
-            index_g   =    (int*)realloc( index_g, size_psi * sizeof( int));
-            new_psi   = (double*)realloc( new_psi, size_psi * sizeof( double));
-          }
-        }
-        MACRO_count__lg_lc;
+void X(precompute_psi)(X(plan) *ths)
+{
+  INT t; /* index over all dimensions */
+  INT lj; /* index 0<=lj<u+o+1 */
+  INT u, o; /* depends on x_j */
 
-      } /* for(l_L) */
+  //sort(ths);
 
-      index_f[j] = ix - ix_old;
-      ix_old     = ix;
+  for (t = 0; t < ths->d; t++)
+  {
+    INT j;
 
-    } /* for(j) */
+    for (j = 0; j < ths->M_total; j++)
+    {
+      uo(ths, j, &u, &o, t);
 
-    nfft_free( ths->psi);
+      for(lj = 0; lj < (2 * ths->m + 2); lj++)
+        ths->psi[(j * ths->d + t) * (2 * ths->m + 2) + lj] =
+            (PHI((2 * NN(ths->n[t])), ((ths->x[(j) * ths->d + (t)]) - ((R)(lj + u)) / (K(2.0) * ((R)NN(ths->n[t])))), t));
+    } /* for (j) */
+  } /* for (t) */
+} /* precompute_psi */
 
-    size_psi      = ix;
-    ths->size_psi = size_psi;
-    index_g       = (int*)realloc( index_g, size_psi * sizeof( int));
-    new_psi       = (double*)realloc( new_psi, size_psi * sizeof( double));
+void X(precompute_full_psi)(X(plan) *ths)
+{
+//#ifdef _OPENMP
+//  sort(ths);
+//
+//  nfft_precompute_full_psi_omp(ths);
+//#else
+  INT t, t2; /* index over all dimensions */
+  INT j; /* index over all nodes */
+  INT l_L; /* plain index 0 <= l_L < lprod */
+  INT l[ths->d]; /* multi index u<=l<=o */
+  INT lj[ths->d]; /* multi index 0<=lj<u+o+1 */
+  INT ll_plain[ths->d+1]; /* postfix plain index */
+  INT lprod; /* 'bandwidth' of matrix B */
+  INT u[ths->d], o[ths->d]; /* depends on x_j */
+  INT count_lg[ths->d];
+  INT lg_offset[ths->d];
+
+  R phi_prod[ths->d+1];
+
+  INT ix, ix_old;
+
+  //sort(ths);
+
+  phi_prod[0] = K(1.0);
+  ll_plain[0]  = 0;
+
+  for (t = 0, lprod = 1; t < ths->d; t++)
+    lprod *= 2 * ths->m + 2;
+
+  for (j = 0, ix = 0, ix_old = 0; j < ths->M_total; j++)
+  {
+    MACRO_init_uo_l_lj_t;
 
-    ths->psi         = new_psi;
-    ths->psi_index_g = index_g;
-    ths->psi_index_f = index_f;
+    for (l_L = 0; l_L < lprod; l_L++, ix++)
+    {
+      MACRO_update_phi_prod_ll_plain(A, without_PRE_PSI);
 
-  } /* if(PRE_PSI) */
-} /* nfst_full_psi */
+      ths->psi_index_g[ix] = ll_plain[ths->d];
+      ths->psi[ix] = phi_prod[ths->d];
 
+      MACRO_count_uo_l_lj_t;
+    } /* for (l_L) */
 
+    ths->psi_index_f[j] = ix - ix_old;
+    ix_old = ix;
+  } /* for(j) */
+//#endif
+}
 
+void X(precompute_one_psi)(X(plan) *ths)
+{
+  if(ths->flags & PRE_PSI)
+    X(precompute_psi)(ths);
+  if(ths->flags & PRE_FULL_PSI)
+    X(precompute_full_psi)(ths);
+  if(ths->flags & PRE_FG_PSI)
+    X(precompute_fg_psi)(ths);
+  if(ths->flags & PRE_LIN_PSI)
+    X(precompute_lin_psi)(ths);
+}
 
-void nfst_init_help( nfst_plan *ths)
+static inline void init_help(X(plan) *ths)
 {
-  int t;                                /**< index over all dimensions        */
+  INT t; /* index over all dimensions */
+  INT lprod; /* 'bandwidth' of matrix B */
 
-  ths->N_total = nfst_prod_minus_a_int( ths->N, 1, ths->d);
+  if (ths->flags & NFFT_OMP_BLOCKWISE_ADJOINT)
+    ths->flags |= NFFT_SORT_NODES;
 
-  ths->sigma   = (double*)nfft_malloc( ths->d * sizeof( double));
+  ths->N_total = intprod(ths->N, OFFSET, ths->d);
+  ths->n_total = intprod(ths->n, 0, ths->d);
 
-  for( t = 0; t < ths->d; t++)
-    /* FIXME: n/N or (n+1)/N */
-    ths->sigma[t] = ((double)ths->n[t] + 1) / ths->N[t];
+  ths->sigma = (R*)Y(malloc)((size_t)(ths->d) * sizeof(R));
 
-  /* assign r2r transform kinds for each dimension */
-  ths->r2r_kind = (fftw_r2r_kind*) nfft_malloc ( ths->d * sizeof( fftw_r2r_kind));
   for (t = 0; t < ths->d; t++)
-    ths->r2r_kind[t] = FFTW_RODFT00;
+    ths->sigma[t] = ((R)NN(ths->n[t])) / ths->N[t];
 
+  /* Assign r2r transform kinds for each dimension */
+  ths->r2r_kind = (FFTW(r2r_kind)*)Y(malloc)((size_t)(ths->d) * sizeof (FFTW(r2r_kind)));
+  for (t = 0; t < ths->d; t++)
+    ths->r2r_kind[t] = FOURIER_TRAFO;
 
   WINDOW_HELP_INIT;
 
-  if(ths->nfst_flags & MALLOC_X)
-    ths->x = (double*)nfft_malloc( ths->d * ths->M_total * sizeof( double));
+  if (ths->flags & MALLOC_X)
+    ths->x = (R*)Y(malloc)((size_t)(ths->d * ths->M_total) * sizeof(R));
 
-  if(ths->nfst_flags & MALLOC_F_HAT)
-    ths->f_hat = (double*)nfft_malloc( ths->N_total * sizeof( double));
+  if (ths->flags & MALLOC_F_HAT)
+    ths->f_hat = (R*)Y(malloc)((size_t)(ths->N_total) * sizeof(R));
 
-  if(ths->nfst_flags & MALLOC_F)
-    ths->f = (double*)nfft_malloc( ths->M_total * sizeof( double));
+  if (ths->flags & MALLOC_F)
+    ths->f = (R*)Y(malloc)((size_t)(ths->M_total) * sizeof(R));
 
-  if(ths->nfst_flags & PRE_PHI_HUT)
-    nfst_precompute_phi_hut( ths);
+  if (ths->flags & PRE_PHI_HUT)
+    precompute_phi_hut(ths);
 
-  /* NO FFTW_MALLOC HERE */
-  if(ths->nfst_flags & PRE_PSI)
+  if(ths->flags & PRE_LIN_PSI)
   {
-    ths->psi =
-      (double*)nfft_malloc( ths->M_total * ths->d * NFST_SUMMANDS * sizeof( double));
-
-    /**
-     * set default for full_psi_eps
-     **/
-    ths->nfst_full_psi_eps = pow(10, -10);
+      ths->K = (1U<< 10) * (ths->m+2);
+      ths->psi = (R*) Y(malloc)((size_t)((ths->K + 1) * ths->d) * sizeof(R));
   }
 
-  if(ths->nfst_flags & FFTW_INIT)
+  if(ths->flags & PRE_FG_PSI)
+    ths->psi = (R*) Y(malloc)((size_t)(ths->M_total * ths->d * 2) * sizeof(R));
+
+  if (ths->flags & PRE_PSI)
+    ths->psi = (R*) Y(malloc)((size_t)(ths->M_total * ths->d * (2 * ths->m + 2 )) * sizeof(R));
+
+  if(ths->flags & PRE_FULL_PSI)
   {
-      ths->g1 =
-        (double*)nfft_malloc( nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
+      for (t = 0, lprod = 1; t < ths->d; t++)
+        lprod *= 2 * ths->m + 2;
 
-      if(ths->nfst_flags & FFT_OUT_OF_PLACE)
-        ths->g2 =
-          (double*)nfft_malloc( nfst_prod_minus_a_int( ths->n, 0, ths->d) * sizeof( double));
-      else
-        ths->g2 = ths->g1;
+      ths->psi = (R*) Y(malloc)((size_t)(ths->M_total * lprod) * sizeof(R));
 
-      ths->my_fftw_r2r_plan =
-        fftw_plan_r2r( ths->d, ths->n, ths->g1, ths->g2, ths->r2r_kind, ths->fftw_flags);
+      ths->psi_index_f = (INT*) Y(malloc)((size_t)(ths->M_total) * sizeof(INT));
+      ths->psi_index_g = (INT*) Y(malloc)((size_t)(ths->M_total * lprod) * sizeof(INT));
   }
 
-  ths->mv_trafo = (void (*) (void* ))nfst_trafo;
-  ths->mv_adjoint = (void (*) (void* ))nfst_adjoint;
-}
+  if (ths->flags & FFTW_INIT)
+  {
+    ths->g1 = (R*)Y(malloc)((size_t)(ths->n_total) * sizeof(R));
 
-void nfst_init( nfst_plan *ths, int d, int *N, int M_total)
-{
-  int t;                                /**< index over all dimensions        */
+    if (ths->flags & FFT_OUT_OF_PLACE)
+      ths->g2 = (R*) Y(malloc)((size_t)(ths->n_total) * sizeof(R));
+    else
+      ths->g2 = ths->g1;
 
-  ths->d = d;
+    {
+      int *_n = Y(malloc)((size_t)(ths->d) * sizeof(int));
 
-  ths->N      = (int*)nfft_malloc( ths->d * sizeof( int));
+      for (t = 0; t < ths->d; t++)
+        _n[t] = (int)(ths->n[t]);
 
-  for(t = 0;t < d; t++)
-    ths->N[t] = N[t];
+      ths->my_fftw_r2r_plan = FFTW(plan_r2r)((int)ths->d, _n, ths->g1, ths->g2, ths->r2r_kind, ths->fftw_flags);
+      Y(free)(_n);
+    }
+  }
 
-  ths->n      = (int*)nfft_malloc( ths->d * sizeof( int));
+//  if(ths->flags & NFFT_SORT_NODES)
+//    ths->index_x = (INT*) Y(malloc)(sizeof(INT)*2*ths->M_total);
+//  else
+//    ths->index_x = NULL;
 
-  for( t = 0; t < d; t++)
-    ths->n[t] = 2 * X(next_power_of_2)( ths->N[t]) - 1;
+  ths->mv_trafo = (void (*) (void* ))X(trafo);
+  ths->mv_adjoint = (void (*) (void* ))X(adjoint);
+}
 
-  ths->M_total = M_total;
+void X(init)(X(plan) *ths, int d, int *N, int M_total)
+{
+  int t; /* index over all dimensions */
 
-/* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!
+  ths->d = (INT)d;
 
-  WINDOW_HELP_ESTIMATE_m;
-*/  
+  ths->N = (INT*) Y(malloc)((size_t)(d) * sizeof(INT));
 
-  ths->nfst_flags = NFST_DEFAULT_FLAGS;
-  ths->fftw_flags = FFTW_DEFAULT_FLAGS;
+  for (t = 0; t < d; t++)
+    ths->N[t] = (INT)N[t];
 
-  nfst_init_help( ths);
-}
+  ths->M_total = (INT)M_total;
 
+  ths->n = (INT*) Y(malloc)((size_t)(d) * sizeof(INT));
 
-void nfst_init_m( nfst_plan *ths, int d, int *N, int M_total, int m)
-{
-  int t, n[d];
+  for (t = 0; t < d; t++)
+    ths->n[t] = 2 * (Y(next_power_of_2)(ths->N[t]) - 1) + OFFSET;
 
-  for( t = 0; t < d; t++)
-    n[t] = nfst_fftw_2N( X(next_power_of_2)( N[t]));
+  ths->m = WINDOW_HELP_ESTIMATE_m;
 
-  nfst_init_guru( ths, d, N, M_total, n, m, NFST_DEFAULT_FLAGS, FFTW_DEFAULT_FLAGS);
-}
+  if (d > 1)
+  {
+//#ifdef _OPENMP
+//    ths->flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+//                      FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES |
+//          NFFT_OMP_BLOCKWISE_ADJOINT;
+//#else
+    ths->flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+                      FFTW_INIT | FFT_OUT_OF_PLACE | NFFT_SORT_NODES;
+//#endif
+  }
+  else
+    ths->flags = PRE_PHI_HUT | PRE_PSI | MALLOC_X| MALLOC_F_HAT | MALLOC_F |
+                      FFTW_INIT | FFT_OUT_OF_PLACE;
 
+  ths->fftw_flags = FFTW_ESTIMATE | FFTW_DESTROY_INPUT;
 
-void nfst_init_guru( nfst_plan *ths, int d, int *N,
-     int M_total, int *n, int m,
-     unsigned nfst_flags, unsigned fftw_flags)
-{
-  int t;             /**< index over all dimensions */
+  init_help(ths);
+}
 
-  ths->d = d;
-  ths->M_total = M_total;
+void X(init_guru)(X(plan) *ths, int d, int *N, int M_total, int *n, int m,
+  unsigned flags, unsigned fftw_flags)
+{
+  INT t; /* index over all dimensions */
 
-  ths->N      = (int*)nfft_malloc( ths->d * sizeof( int));
+  ths->d = (INT)d;
+  ths->M_total = (INT)M_total;
+  ths->N = (INT*)Y(malloc)((size_t)(ths->d) * sizeof(INT));
 
-  for( t = 0; t < d; t++)
-    ths->N[t]      = N[t];
+  for (t = 0; t < d; t++)
+    ths->N[t] = (INT)N[t];
 
-  ths->n      = (int*)nfft_malloc( ths->d * sizeof( int));
+  ths->n = (INT*)Y(malloc)((size_t)(ths->d) * sizeof(INT));
 
-  for( t = 0; t < d; t++)
-    ths->n[t]      = n[t];
+  for (t = 0; t < d; t++)
+    ths->n[t] = (INT)n[t];
 
-  ths->m = m;
+  ths->m = (INT)m;
 
-  ths->nfst_flags = nfst_flags;
+  ths->flags = flags;
   ths->fftw_flags = fftw_flags;
 
-  nfst_init_help( ths);
+  init_help(ths);
 }
 
-
-void nfst_init_1d( nfst_plan *ths, int N0, int M_total)
+void X(init_1d)(X(plan) *ths, int N1, int M_total)
 {
   int N[1];
 
-  N[0] = N0;
-  nfst_init( ths, 1, N, M_total);
+  N[0] = N1;
+
+  X(init)(ths, 1, N, M_total);
 }
 
-void nfst_init_2d( nfst_plan *ths, int N0, int N1, int M_total)
+void X(init_2d)(X(plan) *ths, int N1, int N2, int M_total)
 {
   int N[2];
 
-  N[0] = N0;
-  N[1] = N1;
-  nfst_init( ths, 2, N, M_total);
+  N[0] = N1;
+  N[1] = N2;
+
+  X(init)(ths, 2, N, M_total);
 }
 
-void nfst_init_3d( nfst_plan *ths, int N0, int N1, int N2, int M_total)
+void X(init_3d)(X(plan) *ths, int N1, int N2, int N3, int M_total)
 {
   int N[3];
 
-  N[0] = N0;
-  N[1] = N1;
-  N[2] = N2;
-  nfst_init( ths, 3, N, M_total);
+  N[0] = N1;
+  N[1] = N2;
+  N[2] = N3;
+
+  X(init)(ths, 3, N, M_total);
 }
 
-void nfst_finalize( nfst_plan *ths)
+const char* X(check)(X(plan) *ths)
 {
-  int t; /* index over dimensions */
+  INT j;
 
-  if( ths->nfst_flags & FFTW_INIT)
-  {
-    fftw_destroy_plan( ths->my_fftw_r2r_plan);
+  if (!ths->f)
+      return "Member f not initialized.";
 
-    if( ths->nfst_flags & FFT_OUT_OF_PLACE)
-      nfft_free( ths->g2);
+  if (!ths->x)
+      return "Member x not initialized.";
 
-    nfft_free( ths->g1);
-  }
+  if (!ths->f_hat)
+      return "Member f_hat not initialized.";
 
-  /* NO FFTW_FREE HERE */
-  if( ths->nfst_flags & PRE_PSI)
+  for (j = 0; j < ths->M_total * ths->d; j++)
   {
-    if( ths->nfst_flags & PRE_FULL_PSI)
+    if ((ths->x[j] < K(0.0)) || (ths->x[j] >= K(0.5)))
     {
-      nfft_free( ths->psi_index_g);
-      nfft_free( ths->psi_index_f);
+      return "ths->x out of range [0.0,0.5)";
     }
+  }
+
+  for (j = 0; j < ths->d; j++)
+  {
+    if (ths->sigma[j] <= 1)
+      return "nfft_check: oversampling factor too small";
+
+    if(ths->N[j] - 1 <= ths->m)
+      return "Polynomial degree N is smaller than cut-off m";
+
+    if(ths->N[j]%2 == 1)
+      return "polynomial degree N has to be even";
+  }
+  return 0;
+}
+
+void X(finalize)(X(plan) *ths)
+{
+  INT t; /* index over dimensions */
+
+//  if(ths->flags & NFFT_SORT_NODES)
+//    Y(free)(ths->index_x);
+
+  if (ths->flags & FFTW_INIT)
+  {
+#ifdef _OPENMP
+    #pragma omp critical (nfft_omp_critical_fftw_plan)
+#endif
+    FFTW(destroy_plan)(ths->my_fftw_r2r_plan);
 
-    nfft_free( ths->psi);
+    if (ths->flags & FFT_OUT_OF_PLACE)
+      Y(free)(ths->g2);
+
+    Y(free)(ths->g1);
   }
 
-  if( ths->nfst_flags & PRE_PHI_HUT) {
-    for( t = 0; t < ths->d; t++)
-      nfft_free( ths->c_phi_inv[t]);
-    nfft_free( ths->c_phi_inv);
+  if(ths->flags & PRE_FULL_PSI)
+  {
+    Y(free)(ths->psi_index_g);
+    Y(free)(ths->psi_index_f);
+    Y(free)(ths->psi);
   }
 
-  if( ths->nfst_flags & MALLOC_F)
-    nfft_free( ths->f);
+  if (ths->flags & PRE_PSI)
+    Y(free)(ths->psi);
 
-  if( ths->nfst_flags & MALLOC_F_HAT)
-    nfft_free( ths->f_hat);
+  if(ths->flags & PRE_FG_PSI)
+    Y(free)(ths->psi);
 
-  if( ths->nfst_flags & MALLOC_X)
-    nfft_free( ths->x);
+  if(ths->flags & PRE_LIN_PSI)
+    Y(free)(ths->psi);
 
-  WINDOW_HELP_FINALIZE;
+  if (ths->flags & PRE_PHI_HUT)
+  {
+    for (t = 0; t < ths->d; t++)
+      Y(free)(ths->c_phi_inv[t]);
+    Y(free)(ths->c_phi_inv);
+  }
+
+  if (ths->flags & MALLOC_F)
+    Y(free)(ths->f);
 
-  nfft_free( ths->N);
-  nfft_free( ths->n);
-  nfft_free( ths->sigma);
+  if(ths->flags & MALLOC_F_HAT)
+    Y(free)(ths->f_hat);
+
+  if (ths->flags & MALLOC_X)
+    Y(free)(ths->x);
+
+  WINDOW_HELP_FINALIZE;
 
-  nfft_free(ths->r2r_kind);
-} /* nfst_finalize */
+  Y(free)(ths->N);
+  Y(free)(ths->n);
+  Y(free)(ths->sigma);
 
+  Y(free)(ths->r2r_kind);
+} /* finalize */
diff --git a/kernel/nnfft/Makefile.in b/kernel/nnfft/Makefile.in
deleted file mode 100644
index 9a2e023..0000000
--- a/kernel/nnfft/Makefile.in
+++ /dev/null
@@ -1,553 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/nnfft
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libnnfft_la_LIBADD =
-am_libnnfft_la_OBJECTS = nnfft.lo
-libnnfft_la_OBJECTS = $(am_libnnfft_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libnnfft_la_SOURCES)
-DIST_SOURCES = $(libnnfft_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include 
-noinst_LTLIBRARIES = libnnfft.la
-libnnfft_la_SOURCES = nnfft.c 
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nnfft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/nnfft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libnnfft.la: $(libnnfft_la_OBJECTS) $(libnnfft_la_DEPENDENCIES) $(EXTRA_libnnfft_la_DEPENDENCIES) 
-	$(LINK)  $(libnnfft_la_OBJECTS) $(libnnfft_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nnfft.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/nnfft/nnfft.c b/kernel/nnfft/nnfft.c
index 274307f..de69e9d 100644
--- a/kernel/nnfft/nnfft.c
+++ b/kernel/nnfft/nnfft.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nnfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 #include "config.h"
 
@@ -27,7 +27,6 @@
 #ifdef HAVE_COMPLEX_H
 #include <complex.h>
 #endif
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -37,10 +36,10 @@
 #define MACRO_nndft_init_result_adjoint memset(f_hat,0,ths->N_total*sizeof(double _Complex));
 #define MACRO_nndft_init_result_transposed MACRO_nndft_init_result_adjoint
 
-#define MACRO_nndft_sign_trafo      (-2.0*PI)
-#define MACRO_nndft_sign_conjugated (+2.0*PI)
-#define MACRO_nndft_sign_adjoint    (+2.0*PI)
-#define MACRO_nndft_sign_transposed (-2.0*PI)
+#define MACRO_nndft_sign_trafo      (-2.0*KPI)
+#define MACRO_nndft_sign_conjugated (+2.0*KPI)
+#define MACRO_nndft_sign_adjoint    (+2.0*KPI)
+#define MACRO_nndft_sign_transposed (-2.0*KPI)
 
 #define MACRO_nndft_compute_trafo (*fj) += (*f_hat_k)*cexp(+ _Complex_I*omega);
 
@@ -131,7 +130,7 @@ static void nnfft_uo(nnfft_plan *ths,int j,int *up,int *op,int act_dim)
                                 ths->psi[(ths->K+1)*t2+y_u[t2]+1]*            \
                                 (y[t2]-y_u[t2]))
 #define MACRO_with_PRE_PSI     ths->psi[(j*ths->d+t2)*(2*ths->m+2)+lj[t2]]
-#define MACRO_without_PRE_PSI  PHI(-ths->v[j*ths->d+t2]+                      \
+#define MACRO_without_PRE_PSI  PHI(ths->n[t2], -ths->v[j*ths->d+t2]+                      \
                                ((double)l[t2])/ths->N1[t2], t2)
 
 #define MACRO_init_uo_l_lj_t {                                                \
@@ -283,7 +282,7 @@ static inline void nnfft_D (nnfft_plan *ths){
 	  tmp = 1.0;
 	  /* multiply with N1, because x was modified */
 	  for(t=0; t<ths->d; t++)
-	      tmp*= 1.0 /((PHI_HUT(ths->x[ths->d*j + t]*((double)ths->N[t]),t)) );
+	      tmp*= 1.0 /((PHI_HUT(ths->n[t], ths->x[ths->d*j + t]*((double)ths->N[t]),t)) );
 	  ths->f[j] *= tmp;
       }
   }
@@ -303,6 +302,7 @@ void nnfft_trafo(nnfft_plan *ths)
     }
   }
 
+
   /* allows for external swaps of ths->f */
   ths->direct_plan->f = ths->f;
 
@@ -315,6 +315,7 @@ void nnfft_trafo(nnfft_plan *ths)
   }
 
   nnfft_D(ths);
+
 } /* nnfft_trafo */
 
 void nnfft_adjoint(nnfft_plan *ths)
@@ -357,7 +358,7 @@ void nnfft_precompute_phi_hut(nnfft_plan *ths)
     {
       tmp = 1.0;
       for(t=0; t<ths->d; t++)
-        tmp*= 1.0 /(PHI_HUT(ths->x[ths->d*j + t]*((double)ths->N[t]),t));
+        tmp*= 1.0 /(PHI_HUT(ths->n[t],ths->x[ths->d*j + t]*((double)ths->N[t]),t));
       ths->c_phi_inv[j]=tmp;
     }
 } /* nnfft_phi_hut */
@@ -378,7 +379,7 @@ void nnfft_precompute_lin_psi(nnfft_plan *ths)
       step=((double)(ths->m+1))/(ths->K*ths->N1[t]);
       for(j=0;j<=ths->K;j++)
         {
-          ths->psi[(ths->K+1)*t + j] = PHI(j*step,t);
+          ths->psi[(ths->K+1)*t + j] = PHI(ths->n[t],j*step,t);
         } /* for(j) */
     } /* for(t) */
 }
@@ -398,7 +399,7 @@ void nnfft_precompute_psi(nnfft_plan *ths)
 
         for(l=u, lj=0; l <= o; l++, lj++)
           ths->psi[(j*ths->d+t)*(2*ths->m+2)+lj]=
-            (PHI((-ths->v[j*ths->d+t]+((double)l)/((double)ths->N1[t])),t));
+            (PHI(ths->n[t],(-ths->v[j*ths->d+t]+((double)l)/((double)ths->N1[t])),t));
       } /* for(j) */
 
   for(j=0;j<ths->M_total;j++) {
@@ -479,6 +480,19 @@ void nnfft_precompute_full_psi(nnfft_plan *ths)
     } /* for(j) */
 }
 
+void nnfft_precompute_one_psi(nnfft_plan *ths)
+{
+  if(ths->nnfft_flags & PRE_PSI)
+    nnfft_precompute_psi(ths);
+  if(ths->nnfft_flags & PRE_FULL_PSI)
+    nnfft_precompute_full_psi(ths);
+  if(ths->nnfft_flags & PRE_LIN_PSI)
+    nnfft_precompute_lin_psi(ths);
+  /** precompute phi_hut, the entries of the matrix D */
+  if(ths->nnfft_flags & PRE_PHI_HUT)
+	  nnfft_precompute_phi_hut(ths);
+}
+
 static void nnfft_init_help(nnfft_plan *ths, int m2, unsigned nfft_flags, unsigned fftw_flags)
 {
   int t;                                /**< index over all dimensions       */
@@ -517,22 +531,28 @@ static void nnfft_init_help(nnfft_plan *ths, int m2, unsigned nfft_flags, unsign
 
   if(ths->nnfft_flags & MALLOC_X)
     ths->x = (double*)nfft_malloc(ths->d*ths->M_total*sizeof(double));
-  if(ths->nnfft_flags & MALLOC_F)
+  if(ths->nnfft_flags & MALLOC_F){
     ths->f=(double _Complex*)nfft_malloc(ths->M_total*sizeof(double _Complex));
-
+  }
   if(ths->nnfft_flags & MALLOC_V)
     ths->v = (double*)nfft_malloc(ths->d*ths->N_total*sizeof(double));
   if(ths->nnfft_flags & MALLOC_F_HAT)
     ths->f_hat = (double _Complex*)nfft_malloc(ths->N_total*sizeof(double _Complex));
 
+  //BUGFIX SUSE 2
+  /** precompute phi_hut, the entries of the matrix D */
+//  if(ths->nnfft_flags & PRE_PHI_HUT)
+//	  nnfft_precompute_phi_hut(ths);
+
   if(ths->nnfft_flags & PRE_LIN_PSI)
   {
     ths->K=(1U<< 10)*(ths->m+1);
     ths->psi = (double*) nfft_malloc((ths->K+1)*ths->d*sizeof(double));
   }
 
-  if(ths->nnfft_flags & PRE_PSI)
+  if(ths->nnfft_flags & PRE_PSI){
     ths->psi = (double*)nfft_malloc(ths->N_total*ths->d*(2*ths->m+2)*sizeof(double));
+  }
 
   if(ths->nnfft_flags & PRE_FULL_PSI)
   {
@@ -544,13 +564,11 @@ static void nnfft_init_help(nnfft_plan *ths, int m2, unsigned nfft_flags, unsign
       ths->psi_index_f = (int*) nfft_malloc(ths->N_total*sizeof(int));
       ths->psi_index_g = (int*) nfft_malloc(ths->N_total*lprod*sizeof(int));
   }
-
   ths->direct_plan = (nfft_plan*)nfft_malloc(sizeof(nfft_plan));
-
   nfft_init_guru(ths->direct_plan, ths->d, ths->aN1, ths->M_total, N2, m2,
 		 nfft_flags, fftw_flags);
-
   ths->direct_plan->x = ths->x;
+
   ths->direct_plan->f = ths->f;
   ths->F = ths->direct_plan->f_hat;
 
@@ -599,26 +617,26 @@ void nnfft_init(nnfft_plan *ths, int d, int N_total, int M_total, int *N)
 
   unsigned nfft_flags;
   unsigned fftw_flags;
-
   ths->d = d;
   ths->M_total = M_total;
   ths->N_total = N_total;
-
   /* m should be greater to get the same accuracy as the nfft */
 /* Was soll dieser Ausdruck machen? Es handelt sich um eine Ganzzahl!
 
   WINDOW_HELP_ESTIMATE_m;
 */
+  //BUGFIX SUSE 1
+ths->m=WINDOW_HELP_ESTIMATE_m;
+
 
   ths->N = (int*) nfft_malloc(ths->d*sizeof(int));
   ths->N1 = (int*) nfft_malloc(ths->d*sizeof(int));
 
   for(t=0; t<d; t++) {
     ths->N[t] = N[t];
-
     /* the standard oversampling factor in the nnfft is 1.5 */
     ths->N1[t] = ceil(1.5*ths->N[t]);
-    
+
     /* N1 should be even */
     if(ths->N1[t]%2 != 0)
       ths->N1[t] = ths->N1[t] +1;
@@ -628,15 +646,17 @@ void nnfft_init(nnfft_plan *ths, int d, int N_total, int M_total, int *N)
   nfft_flags= PRE_PSI| PRE_PHI_HUT| MALLOC_F_HAT| FFTW_INIT| FFT_OUT_OF_PLACE;
 
   fftw_flags= FFTW_ESTIMATE| FFTW_DESTROY_INPUT;
-
   nnfft_init_help(ths,ths->m,nfft_flags,fftw_flags);
 }
 
-void nnfft_finalize(nnfft_plan *ths)
+void nnfft_init_1d(nnfft_plan *ths,int N1, int M_total)
 {
+  nnfft_init(ths,1,N1,M_total,&N1);
+}
 
+void nnfft_finalize(nnfft_plan *ths)
+{
   nfft_finalize(ths->direct_plan);
-
   nfft_free(ths->direct_plan);
 
   nfft_free(ths->aN1);
diff --git a/kernel/nsfft/Makefile.in b/kernel/nsfft/Makefile.in
deleted file mode 100644
index 2faa983..0000000
--- a/kernel/nsfft/Makefile.in
+++ /dev/null
@@ -1,553 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/nsfft
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libnsfft_la_LIBADD =
-am_libnsfft_la_OBJECTS = nsfft.lo
-libnsfft_la_OBJECTS = $(am_libnsfft_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libnsfft_la_SOURCES)
-DIST_SOURCES = $(libnsfft_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include 
-noinst_LTLIBRARIES = libnsfft.la
-libnsfft_la_SOURCES = nsfft.c 
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/nsfft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/nsfft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libnsfft.la: $(libnsfft_la_OBJECTS) $(libnsfft_la_DEPENDENCIES) $(EXTRA_libnsfft_la_DEPENDENCIES) 
-	$(LINK)  $(libnsfft_la_OBJECTS) $(libnsfft_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nsfft.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/nsfft/nsfft.c b/kernel/nsfft/nsfft.c
index 37fb337..88a875c 100644
--- a/kernel/nsfft/nsfft.c
+++ b/kernel/nsfft/nsfft.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nsfft.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #include <stdio.h>
@@ -26,7 +26,6 @@
 #ifdef HAVE_COMPLEX_H
 #include <complex.h>
 #endif
-#include "nfft3util.h"
 #include "nfft3.h"
 #include "infft.h"
 
@@ -55,7 +54,7 @@ static void short_nfft_trafo_2d(nfft_plan* ths, nfft_plan* plan_1d)
       for(j=0;j<ths->M_total;j++)
 	{
 	  omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
-          ths->f[j] += plan_1d->f[j] * cexp( - I*2*PI*omega);
+          ths->f[j] += plan_1d->f[j] * cexp( - I*2*KPI*omega);
 	}
     }
 }
@@ -73,7 +72,7 @@ static void short_nfft_adjoint_2d(nfft_plan* ths, nfft_plan* plan_1d)
       for(j=0;j<ths->M_total;j++)
 	{
 	  omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
-          plan_1d->f[j] = ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+          plan_1d->f[j] = ths->f[j] * cexp( + _Complex_I*2*KPI*omega);
 	}
 
       plan_1d->f_hat = ths->f_hat + k0*ths->N[1];
@@ -107,7 +106,7 @@ static void short_nfft_trafo_3d_1(nfft_plan* ths, nfft_plan* plan_1d)
 	  {
 	    omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0]
 	      +     ((double)(k1 - ths->N[1]/2)) * ths->x[ths->d * j + 1];
-            ths->f[j] += plan_1d->f[j] * cexp( - I*2*PI*omega);
+            ths->f[j] += plan_1d->f[j] * cexp( - I*2*KPI*omega);
 	  }
       }
 }
@@ -127,7 +126,7 @@ static void short_nfft_adjoint_3d_1(nfft_plan* ths, nfft_plan* plan_1d)
 	  {
 	    omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0]
 	      +     ((double)(k1 - ths->N[1]/2)) * ths->x[ths->d * j + 1];
-            plan_1d->f[j] = ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+            plan_1d->f[j] = ths->f[j] * cexp( + _Complex_I*2*KPI*omega);
 	  }
 
 	plan_1d->f_hat = ths->f_hat + (k0*ths->N[1]+k1)*ths->N[2];
@@ -160,7 +159,7 @@ static void short_nfft_trafo_3d_2(nfft_plan* ths, nfft_plan* plan_2d)
       for(j=0;j<ths->M_total;j++)
 	{
 	  omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
-	  ths->f[j] += plan_2d->f[j] * cexp( - I*2*PI*omega);
+	  ths->f[j] += plan_2d->f[j] * cexp( - I*2*KPI*omega);
 	}
     }
 }
@@ -181,7 +180,7 @@ static void short_nfft_adjoint_3d_2(nfft_plan* ths, nfft_plan* plan_2d)
       for(j=0;j<ths->M_total;j++)
 	{
 	  omega = ((double)(k0 - ths->N[0]/2)) * ths->x[ths->d * j + 0];
-	  plan_2d->f[j] = ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+	  plan_2d->f[j] = ths->f[j] * cexp( + _Complex_I*2*KPI*omega);
 	}
 
       plan_2d->f_hat = ths->f_hat + k0*ths->N[1]*ths->N[2];
@@ -226,8 +225,8 @@ static int index_sparse_to_full_direct_2d(int J, int k)
 	    o=j%4;                      /* kind of specific block            */
 	    a=X(exp2i)(r);
 	    b=X(exp2i)(J-r);
-	    l=NFFT_MAX(a,b);                 /* long dimension of block           */
-	    s=NFFT_MIN(a,b);                 /* short dimension of block          */
+	    l=MAX(a,b);                 /* long dimension of block           */
+	    s=MIN(a,b);                 /* short dimension of block          */
 	    m1=i/l;
 	    m2=i%l;
 
@@ -779,7 +778,7 @@ static void nsdft_trafo_2d(nsfft_plan *ths)
 	  omega =
 	    ((double)(k0 - N/2)) * ths->act_nfft_plan->x[2 * j + 0] +
 	    ((double)(k1 - N/2)) * ths->act_nfft_plan->x[2 * j + 1];
-          ths->f[j] += ths->f_hat[k_S] * cexp( - I*2*PI*omega);
+          ths->f[j] += ths->f_hat[k_S] * cexp( - I*2*KPI*omega);
 	}
     }
 } /* void nsdft_trafo_2d */
@@ -807,7 +806,7 @@ static void nsdft_trafo_3d(nsfft_plan *ths)
 	    ((double)(k0 - N/2)) * ths->act_nfft_plan->x[3 * j + 0] +
 	    ((double)(k1 - N/2)) * ths->act_nfft_plan->x[3 * j + 1] +
 	    ((double)(k2 - N/2)) * ths->act_nfft_plan->x[3 * j + 2];
-          ths->f[j] += ths->f_hat[k_S] * cexp( - I*2*PI*omega);
+          ths->f[j] += ths->f_hat[k_S] * cexp( - I*2*KPI*omega);
 	}
     }
 } /* void nsdft_trafo_3d */
@@ -839,7 +838,7 @@ static void nsdft_adjoint_2d(nsfft_plan *ths)
 	  omega =
 	    ((double)(k0 - N/2)) * ths->act_nfft_plan->x[2 * j + 0] +
 	    ((double)(k1 - N/2)) * ths->act_nfft_plan->x[2 * j + 1];
-          ths->f_hat[k_S] += ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+          ths->f_hat[k_S] += ths->f[j] * cexp( + _Complex_I*2*KPI*omega);
 	}
     }
 } /* void nsdft_adjoint_2d */
@@ -867,7 +866,7 @@ static void nsdft_adjoint_3d(nsfft_plan *ths)
 	    ((double)(k0 - N/2)) * ths->act_nfft_plan->x[3 * j + 0] +
 	    ((double)(k1 - N/2)) * ths->act_nfft_plan->x[3 * j + 1] +
 	    ((double)(k2 - N/2)) * ths->act_nfft_plan->x[3 * j + 2];
-          ths->f_hat[k_S] += ths->f[j] * cexp( + _Complex_I*2*PI*omega);
+          ths->f_hat[k_S] += ths->f[j] * cexp( + _Complex_I*2*KPI*omega);
 	}
     }
 } /* void nsdft_adjoint_3d */
@@ -901,20 +900,20 @@ static void nsfft_trafo_2d(nsfft_plan *ths)
 
   for(rr=0;rr<=(J+1)/2;rr++)
     {
-      r=NFFT_MIN(rr,J-rr);
+      r=MIN(rr,J-rr);
       ths->act_nfft_plan->my_fftw_plan1 = ths->set_fftw_plan1[r];
       ths->act_nfft_plan->N[0]=X(exp2i)(r); ths->act_nfft_plan->n[0]=ths->sigma*ths->act_nfft_plan->N[0];
       ths->act_nfft_plan->N[1]=X(exp2i)(J-r); ths->act_nfft_plan->n[1]=ths->sigma*ths->act_nfft_plan->N[1];
 
       /*printf("%d x %d\n",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1]);*/
 
-      temp=-3.0*PI*X(exp2i)(J-rr);
+      temp=-3.0*KPI*X(exp2i)(J-rr);
 
       /* right */
       ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+0)*X(exp2i)(J);
 
       if(r<rr)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -925,7 +924,7 @@ static void nsfft_trafo_2d(nsfft_plan *ths)
 	nfft_trafo(ths->act_nfft_plan);
 
       if(r<rr)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       for (j=0; j<M; j++)
         ths->f[j] +=  ths->act_nfft_plan->f[j] *
@@ -935,7 +934,7 @@ static void nsfft_trafo_2d(nsfft_plan *ths)
       ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+1)*X(exp2i)(J);
 
       if((r==rr)&&(J-rr!=rr))
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -946,7 +945,7 @@ static void nsfft_trafo_2d(nsfft_plan *ths)
 	nfft_trafo(ths->act_nfft_plan);
 
       if((r==rr)&&(J-rr!=rr))
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       for (j=0; j<M; j++)
         ths->f[j] += ths->act_nfft_plan->f[j] *
@@ -956,7 +955,7 @@ static void nsfft_trafo_2d(nsfft_plan *ths)
       ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+2)*X(exp2i)(J);
 
       if(r<rr)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -967,7 +966,7 @@ static void nsfft_trafo_2d(nsfft_plan *ths)
 	nfft_trafo(ths->act_nfft_plan);
 
       if(r<rr)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       for (j=0; j<M; j++)
         ths->f[j] += ths->act_nfft_plan->f[j] *
@@ -977,7 +976,7 @@ static void nsfft_trafo_2d(nsfft_plan *ths)
       ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+3)*X(exp2i)(J);
 
       if((r==rr)&&(J-rr!=rr))
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -988,7 +987,7 @@ static void nsfft_trafo_2d(nsfft_plan *ths)
 	nfft_trafo(ths->act_nfft_plan);
 
       if((r==rr)&&(J-rr!=rr))
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       for (j=0; j<M; j++)
         ths->f[j] += ths->act_nfft_plan->f[j] *
@@ -1017,14 +1016,14 @@ static void nsfft_adjoint_2d(nsfft_plan *ths)
 
   for(rr=0;rr<=(J+1)/2;rr++)
     {
-      r=NFFT_MIN(rr,J-rr);
+      r=MIN(rr,J-rr);
       ths->act_nfft_plan->my_fftw_plan2 = ths->set_fftw_plan2[r];
       ths->act_nfft_plan->N[0]=X(exp2i)(r); ths->act_nfft_plan->n[0]=ths->sigma*ths->act_nfft_plan->N[0];
       ths->act_nfft_plan->N[1]=X(exp2i)(J-r); ths->act_nfft_plan->n[1]=ths->sigma*ths->act_nfft_plan->N[1];
 
       /*printf("%d x %d\n",ths->act_nfft_plan->N[0],ths->act_nfft_plan->N[1]);*/
 
-      temp=-3.0*PI*X(exp2i)(J-rr);
+      temp=-3.0*KPI*X(exp2i)(J-rr);
 
       /* right */
       ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+0)*X(exp2i)(J);
@@ -1034,7 +1033,7 @@ static void nsfft_adjoint_2d(nsfft_plan *ths)
                                   cexp( - I*temp*ths->act_nfft_plan->x[2*j+1]);
 
       if(r<rr)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1045,7 +1044,7 @@ static void nsfft_adjoint_2d(nsfft_plan *ths)
 	nfft_adjoint(ths->act_nfft_plan);
 
       if(r<rr)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       /* top */
       ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+1)*X(exp2i)(J);
@@ -1055,7 +1054,7 @@ static void nsfft_adjoint_2d(nsfft_plan *ths)
                                   cexp( - I*temp*ths->act_nfft_plan->x[2*j+0]);
 
       if((r==rr)&&(J-rr!=rr))
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1066,7 +1065,7 @@ static void nsfft_adjoint_2d(nsfft_plan *ths)
 	nfft_adjoint(ths->act_nfft_plan);
 
       if((r==rr)&&(J-rr!=rr))
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       /* left */
       ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+2)*X(exp2i)(J);
@@ -1076,7 +1075,7 @@ static void nsfft_adjoint_2d(nsfft_plan *ths)
                                   cexp( + _Complex_I*temp*ths->act_nfft_plan->x[2*j+1]);
 
       if(r<rr)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1087,7 +1086,7 @@ static void nsfft_adjoint_2d(nsfft_plan *ths)
 	nfft_adjoint(ths->act_nfft_plan);
 
       if(r<rr)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       /* bottom */
       ths->act_nfft_plan->f_hat=ths->f_hat+(4*rr+3)*X(exp2i)(J);
@@ -1097,7 +1096,7 @@ static void nsfft_adjoint_2d(nsfft_plan *ths)
                                   cexp( + _Complex_I*temp*ths->act_nfft_plan->x[2*j+0]);
 
       if((r==rr)&&(J-rr!=rr))
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1108,7 +1107,7 @@ static void nsfft_adjoint_2d(nsfft_plan *ths)
 	nfft_adjoint(ths->act_nfft_plan);
 
       if((r==rr)&&(J-rr!=rr))
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_transposed);
+	RSWAP(ths->act_nfft_plan->x,ths->x_transposed);
     } /* for(rr) */
 } /* void nsfft_adjoint_2d */
 
@@ -1140,7 +1139,7 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
 
       N_B_r=a*b*b;
 
-      r=NFFT_MIN(rr,J-rr);
+      r=MIN(rr,J-rr);
       ths->act_nfft_plan->my_fftw_plan1 = ths->set_fftw_plan1[rr];
 
       ths->act_nfft_plan->N[0]=X(exp2i)(r);
@@ -1160,15 +1159,15 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
 
       /* only for right - rear - top */
       if((J==0)||((J==1)&&(rr==1)))
-	temp=-2.0*PI;
+	temp=-2.0*KPI;
       else
-	temp=-3.0*PI*X(exp2i)(J-rr);
+	temp=-3.0*KPI*X(exp2i)(J-rr);
 
       /* right */
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*0;
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+	RSWAP(ths->act_nfft_plan->x,ths->x_120);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1182,7 +1181,7 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
 	nfft_trafo(ths->act_nfft_plan);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+	RSWAP(ths->act_nfft_plan->x,ths->x_120);
 
       for (j=0; j<M; j++)
         ths->f[j] += ths->act_nfft_plan->f[j] *
@@ -1192,9 +1191,9 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*1;
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+	RSWAP(ths->act_nfft_plan->x,ths->x_021);
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+	RSWAP(ths->act_nfft_plan->x,ths->x_102);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1208,9 +1207,9 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
 	nfft_trafo(ths->act_nfft_plan);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+	RSWAP(ths->act_nfft_plan->x,ths->x_021);
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+	RSWAP(ths->act_nfft_plan->x,ths->x_102);
 
       for (j=0; j<M; j++)
         ths->f[j] += ths->act_nfft_plan->f[j] *
@@ -1220,7 +1219,7 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*2;
 
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+	RSWAP(ths->act_nfft_plan->x,ths->x_201);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1234,7 +1233,7 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
 	nfft_trafo(ths->act_nfft_plan);
 
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+	RSWAP(ths->act_nfft_plan->x,ths->x_201);
 
       for (j=0; j<M; j++)
         ths->f[j] += ths->act_nfft_plan->f[j] *
@@ -1242,15 +1241,15 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
 
       /* only for left - front - bottom */
       if((J==0)||((J==1)&&(rr==1)))
-	temp=-4.0*PI;
+	temp=-4.0*KPI;
       else
-	temp=-3.0*PI*X(exp2i)(J-rr);
+	temp=-3.0*KPI*X(exp2i)(J-rr);
 
       /* left */
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*3;
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+	RSWAP(ths->act_nfft_plan->x,ths->x_120);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1264,7 +1263,7 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
 	nfft_trafo(ths->act_nfft_plan);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+	RSWAP(ths->act_nfft_plan->x,ths->x_120);
 
       for (j=0; j<M; j++)
         ths->f[j] += ths->act_nfft_plan->f[j] *
@@ -1274,9 +1273,9 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*4;
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+	RSWAP(ths->act_nfft_plan->x,ths->x_021);
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+	RSWAP(ths->act_nfft_plan->x,ths->x_102);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1290,9 +1289,9 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
 	nfft_trafo(ths->act_nfft_plan);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+	RSWAP(ths->act_nfft_plan->x,ths->x_021);
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+	RSWAP(ths->act_nfft_plan->x,ths->x_102);
 
       for (j=0; j<M; j++)
         ths->f[j] += ths->act_nfft_plan->f[j] *
@@ -1302,7 +1301,7 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*5;
 
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+	RSWAP(ths->act_nfft_plan->x,ths->x_201);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1316,7 +1315,7 @@ static void nsfft_trafo_3d(nsfft_plan *ths)
 	nfft_trafo(ths->act_nfft_plan);
 
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+	RSWAP(ths->act_nfft_plan->x,ths->x_201);
 
       for (j=0; j<M; j++)
         ths->f[j] += ths->act_nfft_plan->f[j] *
@@ -1354,7 +1353,7 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
 
       N_B_r=a*b*b;
 
-      r=NFFT_MIN(rr,J-rr);
+      r=MIN(rr,J-rr);
       ths->act_nfft_plan->my_fftw_plan1 = ths->set_fftw_plan1[rr];
       ths->act_nfft_plan->my_fftw_plan2 = ths->set_fftw_plan2[rr];
 
@@ -1375,9 +1374,9 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
 
       /* only for right - rear - top */
       if((J==0)||((J==1)&&(rr==1)))
-	temp=-2.0*PI;
+	temp=-2.0*KPI;
       else
-	temp=-3.0*PI*X(exp2i)(J-rr);
+	temp=-3.0*KPI*X(exp2i)(J-rr);
 
       /* right */
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*0;
@@ -1387,7 +1386,7 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
                                   cexp( - I*temp*ths->act_nfft_plan->x[3*j+0]);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+	RSWAP(ths->act_nfft_plan->x,ths->x_120);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1401,7 +1400,7 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
 	nfft_adjoint(ths->act_nfft_plan);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+	RSWAP(ths->act_nfft_plan->x,ths->x_120);
 
       /* rear */
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*1;
@@ -1411,9 +1410,9 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
                                   cexp( - I*temp*ths->act_nfft_plan->x[3*j+1]);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+	RSWAP(ths->act_nfft_plan->x,ths->x_021);
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+	RSWAP(ths->act_nfft_plan->x,ths->x_102);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1427,9 +1426,9 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
 	nfft_adjoint(ths->act_nfft_plan);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+	RSWAP(ths->act_nfft_plan->x,ths->x_021);
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+	RSWAP(ths->act_nfft_plan->x,ths->x_102);
 
       /* top */
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*2;
@@ -1439,7 +1438,7 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
                                   cexp( - I*temp*ths->act_nfft_plan->x[3*j+2]);
 
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+	RSWAP(ths->act_nfft_plan->x,ths->x_201);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1453,13 +1452,13 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
 	nfft_adjoint(ths->act_nfft_plan);
 
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+	RSWAP(ths->act_nfft_plan->x,ths->x_201);
 
       /* only for left - front - bottom */
       if((J==0)||((J==1)&&(rr==1)))
-	temp=-4.0*PI;
+	temp=-4.0*KPI;
       else
-	temp=-3.0*PI*X(exp2i)(J-rr);
+	temp=-3.0*KPI*X(exp2i)(J-rr);
 
       /* left */
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*3;
@@ -1469,7 +1468,7 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
                                   cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+0]);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+	RSWAP(ths->act_nfft_plan->x,ths->x_120);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1483,7 +1482,7 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
 	nfft_adjoint(ths->act_nfft_plan);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_120);
+	RSWAP(ths->act_nfft_plan->x,ths->x_120);
 
       /* front */
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*4;
@@ -1493,9 +1492,9 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
                                   cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+1]);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+	RSWAP(ths->act_nfft_plan->x,ths->x_021);
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+	RSWAP(ths->act_nfft_plan->x,ths->x_102);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1509,9 +1508,9 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
 	nfft_adjoint(ths->act_nfft_plan);
 
       if(a>b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_021);
+	RSWAP(ths->act_nfft_plan->x,ths->x_021);
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_102);
+	RSWAP(ths->act_nfft_plan->x,ths->x_102);
 
       /* bottom */
       ths->act_nfft_plan->f_hat=ths->f_hat + sum_N_B_less_r + N_B_r*5;
@@ -1521,7 +1520,7 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
                                   cexp( + _Complex_I*temp*ths->act_nfft_plan->x[3*j+2]);
 
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+	RSWAP(ths->act_nfft_plan->x,ths->x_201);
 
       if(ths->act_nfft_plan->N[0]<=ths->act_nfft_plan->m)
 	if(ths->act_nfft_plan->N[1]<=ths->act_nfft_plan->m)
@@ -1535,7 +1534,7 @@ static void nsfft_adjoint_3d(nsfft_plan *ths)
 	nfft_adjoint(ths->act_nfft_plan);
 
       if(a<b)
-	NFFT_SWAP_double(ths->act_nfft_plan->x,ths->x_201);
+	RSWAP(ths->act_nfft_plan->x,ths->x_201);
 
       sum_N_B_less_r+=6*N_B_r;
     } /* for(rr) */
@@ -1593,7 +1592,7 @@ static void nsfft_init_2d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_f
 
   nfft_init_guru(ths->act_nfft_plan,2,N,M,n,m, FG_PSI| MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
 
-  if(ths->act_nfft_plan->nfft_flags & PRE_ONE_PSI)
+  if(ths->act_nfft_plan->flags & PRE_ONE_PSI)
     nfft_precompute_one_psi(ths->act_nfft_plan);
 
   ths->set_fftw_plan1[0]=ths->act_nfft_plan->my_fftw_plan1;
@@ -1618,7 +1617,7 @@ static void nsfft_init_2d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_f
       N[0]=X(exp2i)(J-r); n[0]=ths->sigma*N[0]; /* ==N[1] of the 2 dimensional plan */
 
       nfft_init_guru(&(ths->set_nfft_plan_1d[r]),1,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
-      ths->set_nfft_plan_1d[r].nfft_flags = ths->set_nfft_plan_1d[r].nfft_flags | FG_PSI;
+      ths->set_nfft_plan_1d[r].flags = ths->set_nfft_plan_1d[r].flags | FG_PSI;
       ths->set_nfft_plan_1d[r].K=ths->act_nfft_plan->K;
       ths->set_nfft_plan_1d[r].psi=ths->act_nfft_plan->psi;
     }
@@ -1630,7 +1629,7 @@ static void nsfft_init_2d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_f
   nfft_init_guru(ths->center_nfft_plan,2,N,M,n, m, MALLOC_F| FFTW_INIT,
                      FFTW_MEASURE);
   ths->center_nfft_plan->x= ths->act_nfft_plan->x;
-  ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags|
+  ths->center_nfft_plan->flags = ths->center_nfft_plan->flags|
                                       FG_PSI;
   ths->center_nfft_plan->K=ths->act_nfft_plan->K;
   ths->center_nfft_plan->psi=ths->act_nfft_plan->psi;
@@ -1684,7 +1683,7 @@ static void nsfft_init_3d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_f
 
   nfft_init_guru(ths->act_nfft_plan,3,N,M,n,m, FG_PSI| MALLOC_X| MALLOC_F, FFTW_MEASURE);
 
-  if(ths->act_nfft_plan->nfft_flags & PRE_ONE_PSI)
+  if(ths->act_nfft_plan->flags & PRE_ONE_PSI)
     nfft_precompute_one_psi(ths->act_nfft_plan);
 
   /* malloc g1, g2 for maximal size */
@@ -1706,7 +1705,7 @@ static void nsfft_init_3d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_f
       a=X(exp2i)(J-rr);
       b=X(exp2i)(rr);
 
-      r=NFFT_MIN(rr,J-rr);
+      r=MIN(rr,J-rr);
 
       n[0]=ths->sigma*X(exp2i)(r);
       if(a<b)
@@ -1732,11 +1731,11 @@ static void nsfft_init_3d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_f
       if(N[0]>m)
 	{
 	  nfft_init_guru(&(ths->set_nfft_plan_1d[r]),1,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
-	  ths->set_nfft_plan_1d[r].nfft_flags = ths->set_nfft_plan_1d[r].nfft_flags | FG_PSI;
+	  ths->set_nfft_plan_1d[r].flags = ths->set_nfft_plan_1d[r].flags | FG_PSI;
 	  ths->set_nfft_plan_1d[r].K=ths->act_nfft_plan->K;
 	  ths->set_nfft_plan_1d[r].psi=ths->act_nfft_plan->psi;
 	  nfft_init_guru(&(ths->set_nfft_plan_2d[r]),2,N,M,n,m, MALLOC_X| MALLOC_F| FFTW_INIT, FFTW_MEASURE);
-	  ths->set_nfft_plan_2d[r].nfft_flags = ths->set_nfft_plan_2d[r].nfft_flags | FG_PSI;
+	  ths->set_nfft_plan_2d[r].flags = ths->set_nfft_plan_2d[r].flags | FG_PSI;
 	  ths->set_nfft_plan_2d[r].K=ths->act_nfft_plan->K;
 	  ths->set_nfft_plan_2d[r].psi=ths->act_nfft_plan->psi;
 	}
@@ -1750,7 +1749,7 @@ static void nsfft_init_3d(nsfft_plan *ths, int J, int M, int m, unsigned snfft_f
   nfft_init_guru(ths->center_nfft_plan,3,N,M,n, m, MALLOC_F| FFTW_INIT,
                      FFTW_MEASURE);
   ths->center_nfft_plan->x= ths->act_nfft_plan->x;
-  ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags|
+  ths->center_nfft_plan->flags = ths->center_nfft_plan->flags|
                                       FG_PSI;
   ths->center_nfft_plan->K=ths->act_nfft_plan->K;
   ths->center_nfft_plan->psi=ths->act_nfft_plan->psi;
@@ -1799,14 +1798,14 @@ static void nsfft_finalize_2d(nsfft_plan *ths)
     nfft_free(ths->index_sparse_to_full);
 
   /* center plan */
-  ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags ^ FG_PSI;
+  ths->center_nfft_plan->flags = ths->center_nfft_plan->flags ^ FG_PSI;
   nfft_finalize(ths->center_nfft_plan);
 
   /* the 1d nffts */
   for(r=0;r<=X(log2i)(ths->act_nfft_plan->m);r++)
     {
-      ths->set_nfft_plan_1d[r].nfft_flags =
-        ths->set_nfft_plan_1d[r].nfft_flags ^ FG_PSI;
+      ths->set_nfft_plan_1d[r].flags =
+        ths->set_nfft_plan_1d[r].flags ^ FG_PSI;
       nfft_finalize(&(ths->set_nfft_plan_1d[r]));
     }
 
@@ -1842,7 +1841,7 @@ static void nsfft_finalize_3d(nsfft_plan *ths)
     nfft_free(ths->index_sparse_to_full);
 
   /* center plan */
-  ths->center_nfft_plan->nfft_flags = ths->center_nfft_plan->nfft_flags ^ FG_PSI;
+  ths->center_nfft_plan->flags = ths->center_nfft_plan->flags ^ FG_PSI;
   nfft_finalize(ths->center_nfft_plan);
 
   /* the 1d and 2d nffts */
@@ -1850,9 +1849,9 @@ static void nsfft_finalize_3d(nsfft_plan *ths)
     {
       if(X(exp2i)(ths->J-r)>ths->act_nfft_plan->m)
 	{
-	  ths->set_nfft_plan_2d[r].nfft_flags = ths->set_nfft_plan_2d[r].nfft_flags ^ FG_PSI;
+	  ths->set_nfft_plan_2d[r].flags = ths->set_nfft_plan_2d[r].flags ^ FG_PSI;
 	  nfft_finalize(&(ths->set_nfft_plan_2d[r]));
-	  ths->set_nfft_plan_1d[r].nfft_flags = ths->set_nfft_plan_1d[r].nfft_flags ^ FG_PSI;
+	  ths->set_nfft_plan_1d[r].flags = ths->set_nfft_plan_1d[r].flags ^ FG_PSI;
 	  nfft_finalize(&(ths->set_nfft_plan_1d[r]));
 	}
     }
diff --git a/kernel/solver/Makefile.in b/kernel/solver/Makefile.in
deleted file mode 100644
index d3050ee..0000000
--- a/kernel/solver/Makefile.in
+++ /dev/null
@@ -1,553 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/solver
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libsolver_la_LIBADD =
-am_libsolver_la_OBJECTS = solver.lo
-libsolver_la_OBJECTS = $(am_libsolver_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libsolver_la_SOURCES)
-DIST_SOURCES = $(libsolver_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-noinst_LTLIBRARIES = libsolver.la
-libsolver_la_SOURCES = solver.c
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/solver/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/solver/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libsolver.la: $(libsolver_la_OBJECTS) $(libsolver_la_DEPENDENCIES) $(EXTRA_libsolver_la_DEPENDENCIES) 
-	$(LINK)  $(libsolver_la_OBJECTS) $(libsolver_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/solver.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/solver/solver.c b/kernel/solver/solver.c
index 1b48c0e..9d9c7bf 100644
--- a/kernel/solver/solver.c
+++ b/kernel/solver/solver.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: solver.c 3896 2012-10-10 12:19:26Z tovo $ */
+/* $Id$ */
 
 /*! \file solver.c
  *  \brief Implementation file for the solver module
@@ -27,18 +27,28 @@
 #ifdef HAVE_COMPLEX_H
 #include <complex.h>
 #endif
-#include "nfft3util.h"
 #include "nfft3.h"
+#include "infft.h"
+
+#undef X
+#if defined(NFFT_SINGLE)
+#define X(name) CONCAT(solverf_,name)
+#elif defined(NFFT_LDOUBLE)
+#define X(name) CONCAT(solverl_,name)
+#else
+#define X(name) CONCAT(solver_,name)
+#endif
 
-void solver_init_advanced_complex(solver_plan_complex* ths, nfft_mv_plan_complex *mv, unsigned flags)
+void X(init_advanced_complex)(X(plan_complex)* ths, Y(mv_plan_complex) *mv,
+    unsigned flags)
 {
   ths->mv = mv;
   ths->flags = flags;
 
-  ths->y          = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
-  ths->r_iter     = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
-  ths->f_hat_iter = (fftw_complex*)nfft_malloc(ths->mv->N_total*sizeof(fftw_complex));
-  ths->p_hat_iter = (fftw_complex*)nfft_malloc(ths->mv->N_total*sizeof(fftw_complex));
+  ths->y          = (C*)Y(malloc)((size_t)(ths->mv->M_total) * sizeof(C));
+  ths->r_iter     = (C*)Y(malloc)((size_t)(ths->mv->M_total) * sizeof(C));
+  ths->f_hat_iter = (C*)Y(malloc)((size_t)(ths->mv->N_total) * sizeof(C));
+  ths->p_hat_iter = (C*)Y(malloc)((size_t)(ths->mv->N_total) * sizeof(C));
 
   if(ths->flags & LANDWEBER)
     ths->z_hat_iter = ths->p_hat_iter;
@@ -46,66 +56,66 @@ void solver_init_advanced_complex(solver_plan_complex* ths, nfft_mv_plan_complex
   if(ths->flags & STEEPEST_DESCENT)
     {
       ths->z_hat_iter = ths->p_hat_iter;
-      ths->v_iter     = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
+      ths->v_iter     = (C*)Y(malloc)((size_t)(ths->mv->M_total) * sizeof(C));
     }
 
   if(ths->flags & CGNR)
     {
-      ths->z_hat_iter = (fftw_complex*)nfft_malloc(ths->mv->N_total*sizeof(fftw_complex));
-      ths->v_iter     = (fftw_complex*)nfft_malloc(ths->mv->M_total*sizeof(fftw_complex));
+      ths->z_hat_iter = (C*)Y(malloc)((size_t)(ths->mv->N_total) * sizeof(C));
+      ths->v_iter     = (C*)Y(malloc)((size_t)(ths->mv->M_total) * sizeof(C));
     }
 
   if(ths->flags & CGNE)
     ths->z_hat_iter = ths->p_hat_iter;
 
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->w = (double*) nfft_malloc(ths->mv->M_total*sizeof(double));
+    ths->w = (R*) Y(malloc)((size_t)(ths->mv->M_total) * sizeof(R));
 
   if(ths->flags & PRECOMPUTE_DAMP)
-    ths->w_hat = (double*) nfft_malloc(ths->mv->N_total*sizeof(double));
+    ths->w_hat = (R*) Y(malloc)((size_t)(ths->mv->N_total) * sizeof(R));
 }
 
-void solver_init_complex(solver_plan_complex* ths, nfft_mv_plan_complex *mv)
+void X(init_complex)(X(plan_complex)* ths, Y(mv_plan_complex) *mv)
 {
-  solver_init_advanced_complex(ths, mv, CGNR);
+  X(init_advanced_complex)(ths, mv, CGNR);
 }
 
-void solver_before_loop_complex(solver_plan_complex* ths)
+void X(before_loop_complex)(X(plan_complex)* ths)
 {
-  nfft_cp_complex(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+  Y(cp_complex)(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
 
-  NFFT_SWAP_complex(ths->r_iter, ths->mv->f);
+  CSWAP(ths->r_iter, ths->mv->f);
   ths->mv->mv_trafo(ths->mv);
-  NFFT_SWAP_complex(ths->r_iter, ths->mv->f);
+  CSWAP(ths->r_iter, ths->mv->f);
 
-  nfft_upd_axpy_complex(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+  Y(upd_axpy_complex)(ths->r_iter, K(-1.0), ths->y, ths->mv->M_total);
 
   if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
     {
       if(ths->flags & PRECOMPUTE_WEIGHT)
-	ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter, ths->w,
+	ths->dot_r_iter = Y(dot_w_complex)(ths->r_iter, ths->w,
 					     ths->mv->M_total);
       else
-	ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+	ths->dot_r_iter = Y(dot_complex)(ths->r_iter, ths->mv->M_total);
     }
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+    Y(cp_w_complex)(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
   else
-    nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+    Y(cp_complex)(ths->mv->f, ths->r_iter, ths->mv->M_total);
 
-  NFFT_SWAP_complex(ths->z_hat_iter, ths->mv->f_hat);
+  CSWAP(ths->z_hat_iter, ths->mv->f_hat);
   ths->mv->mv_adjoint(ths->mv);
-  NFFT_SWAP_complex(ths->z_hat_iter, ths->mv->f_hat);
+  CSWAP(ths->z_hat_iter, ths->mv->f_hat);
 
   if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
     {
       if(ths->flags & PRECOMPUTE_DAMP)
-	ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+	ths->dot_z_hat_iter = Y(dot_w_complex)(ths->z_hat_iter, ths->w_hat,
 						 ths->mv->N_total);
       else
-	ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter,
+	ths->dot_z_hat_iter = Y(dot_complex)(ths->z_hat_iter,
 					       ths->mv->N_total);
     }
 
@@ -113,230 +123,230 @@ void solver_before_loop_complex(solver_plan_complex* ths)
     ths->dot_p_hat_iter = ths->dot_z_hat_iter;
 
   if(ths->flags & CGNR)
-    nfft_cp_complex(ths->p_hat_iter, ths->z_hat_iter, ths->mv->N_total);
+    Y(cp_complex)(ths->p_hat_iter, ths->z_hat_iter, ths->mv->N_total);
 } /* void solver_before_loop */
 
 /** void solver_loop_one_step_landweber */
-static void solver_loop_one_step_landweber_complex(solver_plan_complex* ths)
+static void solver_loop_one_step_landweber_complex(X(plan_complex)* ths)
 {
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+    Y(upd_xpawy_complex)(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
 			   ths->z_hat_iter, ths->mv->N_total);
   else
-    nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+    Y(upd_xpay_complex)(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
 			  ths->mv->N_total);
 
   /*-----------------*/
-  nfft_cp_complex(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+  Y(cp_complex)(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
 
-  NFFT_SWAP_complex(ths->r_iter,ths->mv->f);
+  CSWAP(ths->r_iter,ths->mv->f);
   ths->mv->mv_trafo(ths->mv);
-  NFFT_SWAP_complex(ths->r_iter,ths->mv->f);
+  CSWAP(ths->r_iter,ths->mv->f);
 
-  nfft_upd_axpy_complex(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+  Y(upd_axpy_complex)(ths->r_iter, K(-1.0), ths->y, ths->mv->M_total);
 
   if(ths->flags & NORMS_FOR_LANDWEBER)
     {
       if(ths->flags & PRECOMPUTE_WEIGHT)
-	ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,
+	ths->dot_r_iter = Y(dot_w_complex)(ths->r_iter,ths->w,
 					     ths->mv->M_total);
       else
-	ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+	ths->dot_r_iter = Y(dot_complex)(ths->r_iter, ths->mv->M_total);
     }
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+    Y(cp_w_complex)(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
   else
-    nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+    Y(cp_complex)(ths->mv->f, ths->r_iter, ths->mv->M_total);
 
-  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+  CSWAP(ths->z_hat_iter,ths->mv->f_hat);
   ths->mv->mv_adjoint(ths->mv);
-  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+  CSWAP(ths->z_hat_iter,ths->mv->f_hat);
 
   if(ths->flags & NORMS_FOR_LANDWEBER)
     {
       if(ths->flags & PRECOMPUTE_DAMP)
-	ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+	ths->dot_z_hat_iter = Y(dot_w_complex)(ths->z_hat_iter, ths->w_hat,
 						 ths->mv->N_total);
       else
-	ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter,
+	ths->dot_z_hat_iter = Y(dot_complex)(ths->z_hat_iter,
 					       ths->mv->N_total);
     }
 } /* void solver_loop_one_step_landweber */
 
 /** void solver_loop_one_step_steepest_descent */
-static void solver_loop_one_step_steepest_descent_complex(solver_plan_complex *ths)
+static void solver_loop_one_step_steepest_descent_complex(X(plan_complex) *ths)
 {
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_cp_w_complex(ths->mv->f_hat, ths->w_hat, ths->z_hat_iter,
+    Y(cp_w_complex)(ths->mv->f_hat, ths->w_hat, ths->z_hat_iter,
 		      ths->mv->N_total);
   else
-    nfft_cp_complex(ths->mv->f_hat, ths->z_hat_iter, ths->mv->N_total);
+    Y(cp_complex)(ths->mv->f_hat, ths->z_hat_iter, ths->mv->N_total);
 
-  NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+  CSWAP(ths->v_iter,ths->mv->f);
   ths->mv->mv_trafo(ths->mv);
-  NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+  CSWAP(ths->v_iter,ths->mv->f);
 
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->dot_v_iter = nfft_dot_w_complex(ths->v_iter,ths->w,ths->mv->M_total);
+    ths->dot_v_iter = Y(dot_w_complex)(ths->v_iter,ths->w,ths->mv->M_total);
   else
-    ths->dot_v_iter = nfft_dot_complex(ths->v_iter, ths->mv->M_total);
+    ths->dot_v_iter = Y(dot_complex)(ths->v_iter, ths->mv->M_total);
 
   /*-----------------*/
   ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+    Y(upd_xpawy_complex)(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
 			   ths->z_hat_iter, ths->mv->N_total);
   else
-    nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+    Y(upd_xpay_complex)(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
 			  ths->mv->N_total);
 
   /*-----------------*/
-  nfft_upd_xpay_complex(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+  Y(upd_xpay_complex)(ths->r_iter, -ths->alpha_iter, ths->v_iter,
 			ths->mv->M_total);
 
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_w_complex)(ths->r_iter,ths->w,ths->mv->M_total);
   else
-    ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_complex)(ths->r_iter, ths->mv->M_total);
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+    Y(cp_w_complex)(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
   else
-    nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+    Y(cp_complex)(ths->mv->f, ths->r_iter, ths->mv->M_total);
 
-  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+  CSWAP(ths->z_hat_iter,ths->mv->f_hat);
   ths->mv->mv_adjoint(ths->mv);
-  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+  CSWAP(ths->z_hat_iter,ths->mv->f_hat);
 
   if(ths->flags & PRECOMPUTE_DAMP)
-    ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+    ths->dot_z_hat_iter = Y(dot_w_complex)(ths->z_hat_iter, ths->w_hat,
 					     ths->mv->N_total);
   else
-    ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter, ths->mv->N_total);
+    ths->dot_z_hat_iter = Y(dot_complex)(ths->z_hat_iter, ths->mv->N_total);
 } /* void solver_loop_one_step_steepest_descent */
 
 /** void solver_loop_one_step_cgnr */
-static void solver_loop_one_step_cgnr_complex(solver_plan_complex *ths)
+static void solver_loop_one_step_cgnr_complex(X(plan_complex) *ths)
 {
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_cp_w_complex(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+    Y(cp_w_complex)(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
 		      ths->mv->N_total);
   else
-    nfft_cp_complex(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+    Y(cp_complex)(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
 
-  NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+  CSWAP(ths->v_iter,ths->mv->f);
   ths->mv->mv_trafo(ths->mv);
-  NFFT_SWAP_complex(ths->v_iter,ths->mv->f);
+  CSWAP(ths->v_iter,ths->mv->f);
 
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->dot_v_iter = nfft_dot_w_complex(ths->v_iter,ths->w,ths->mv->M_total);
+    ths->dot_v_iter = Y(dot_w_complex)(ths->v_iter,ths->w,ths->mv->M_total);
   else
-    ths->dot_v_iter = nfft_dot_complex(ths->v_iter, ths->mv->M_total);
+    ths->dot_v_iter = Y(dot_complex)(ths->v_iter, ths->mv->M_total);
 
   /*-----------------*/
   ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+    Y(upd_xpawy_complex)(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
 			   ths->p_hat_iter, ths->mv->N_total);
   else
-    nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+    Y(upd_xpay_complex)(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
 			  ths->mv->N_total);
 
   /*-----------------*/
-  nfft_upd_xpay_complex(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+  Y(upd_xpay_complex)(ths->r_iter, -ths->alpha_iter, ths->v_iter,
 			ths->mv->M_total);
 
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_w_complex)(ths->r_iter,ths->w,ths->mv->M_total);
   else
-    ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_complex)(ths->r_iter, ths->mv->M_total);
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+    Y(cp_w_complex)(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
   else
-    nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+    Y(cp_complex)(ths->mv->f, ths->r_iter, ths->mv->M_total);
 
-  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+  CSWAP(ths->z_hat_iter,ths->mv->f_hat);
   ths->mv->mv_adjoint(ths->mv);
-  NFFT_SWAP_complex(ths->z_hat_iter,ths->mv->f_hat);
+  CSWAP(ths->z_hat_iter,ths->mv->f_hat);
 
   ths->dot_z_hat_iter_old = ths->dot_z_hat_iter;
   if(ths->flags & PRECOMPUTE_DAMP)
-    ths->dot_z_hat_iter = nfft_dot_w_complex(ths->z_hat_iter, ths->w_hat,
+    ths->dot_z_hat_iter = Y(dot_w_complex)(ths->z_hat_iter, ths->w_hat,
 					     ths->mv->N_total);
   else
-    ths->dot_z_hat_iter = nfft_dot_complex(ths->z_hat_iter, ths->mv->N_total);
+    ths->dot_z_hat_iter = Y(dot_complex)(ths->z_hat_iter, ths->mv->N_total);
 
   /*-----------------*/
   ths->beta_iter = ths->dot_z_hat_iter / ths->dot_z_hat_iter_old;
 
   /*-----------------*/
-  nfft_upd_axpy_complex(ths->p_hat_iter, ths->beta_iter, ths->z_hat_iter,
+  Y(upd_axpy_complex)(ths->p_hat_iter, ths->beta_iter, ths->z_hat_iter,
 			ths->mv->N_total);
 } /* void solver_loop_one_step_cgnr */
 
 /** void solver_loop_one_step_cgne */
-static void solver_loop_one_step_cgne_complex(solver_plan_complex *ths)
+static void solver_loop_one_step_cgne_complex(X(plan_complex) *ths)
 {
   ths->alpha_iter = ths->dot_r_iter / ths->dot_p_hat_iter;
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_upd_xpawy_complex(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+    Y(upd_xpawy_complex)(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
 			   ths->p_hat_iter, ths->mv->N_total);
   else
-    nfft_upd_xpay_complex(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+    Y(upd_xpay_complex)(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
                           ths->mv->N_total);
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_cp_w_complex(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+    Y(cp_w_complex)(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
 		      ths->mv->N_total);
   else
-    nfft_cp_complex(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+    Y(cp_complex)(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
 
   ths->mv->mv_trafo(ths->mv);
 
-  nfft_upd_xpay_complex(ths->r_iter, -ths->alpha_iter, ths->mv->f,
+  Y(upd_xpay_complex)(ths->r_iter, -ths->alpha_iter, ths->mv->f,
 			ths->mv->M_total);
 
   ths->dot_r_iter_old = ths->dot_r_iter;
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->dot_r_iter = nfft_dot_w_complex(ths->r_iter,ths->w,ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_w_complex)(ths->r_iter,ths->w,ths->mv->M_total);
   else
-    ths->dot_r_iter = nfft_dot_complex(ths->r_iter, ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_complex)(ths->r_iter, ths->mv->M_total);
 
   /*-----------------*/
   ths->beta_iter = ths->dot_r_iter / ths->dot_r_iter_old;
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_cp_w_complex(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+    Y(cp_w_complex)(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
   else
-    nfft_cp_complex(ths->mv->f, ths->r_iter, ths->mv->M_total);
+    Y(cp_complex)(ths->mv->f, ths->r_iter, ths->mv->M_total);
 
   ths->mv->mv_adjoint(ths->mv);
 
-  nfft_upd_axpy_complex(ths->p_hat_iter, ths->beta_iter, ths->mv->f_hat,
+  Y(upd_axpy_complex)(ths->p_hat_iter, ths->beta_iter, ths->mv->f_hat,
 			ths->mv->N_total);
 
   if(ths->flags & PRECOMPUTE_DAMP)
-    ths->dot_p_hat_iter = nfft_dot_w_complex(ths->p_hat_iter, ths->w_hat,
+    ths->dot_p_hat_iter = Y(dot_w_complex)(ths->p_hat_iter, ths->w_hat,
 					     ths->mv->N_total);
   else
-    ths->dot_p_hat_iter = nfft_dot_complex(ths->p_hat_iter, ths->mv->N_total);
+    ths->dot_p_hat_iter = Y(dot_complex)(ths->p_hat_iter, ths->mv->N_total);
 } /* void solver_loop_one_step_cgne */
 
 /** void solver_loop_one_step */
-void solver_loop_one_step_complex(solver_plan_complex *ths)
+void X(loop_one_step_complex)(X(plan_complex) *ths)
 {
   if(ths->flags & LANDWEBER)
     solver_loop_one_step_landweber_complex(ths);
@@ -352,28 +362,28 @@ void solver_loop_one_step_complex(solver_plan_complex *ths)
 } /* void solver_loop_one_step */
 
 /** void solver_finalize */
-void solver_finalize_complex(solver_plan_complex *ths)
+void X(finalize_complex)(X(plan_complex) *ths)
 {
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_free(ths->w);
+    Y(free)(ths->w);
 
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_free(ths->w_hat);
+    Y(free)(ths->w_hat);
 
   if(ths->flags & CGNR)
     {
-      nfft_free(ths->v_iter);
-      nfft_free(ths->z_hat_iter);
+      Y(free)(ths->v_iter);
+      Y(free)(ths->z_hat_iter);
     }
 
   if(ths->flags & STEEPEST_DESCENT)
-    nfft_free(ths->v_iter);
+    Y(free)(ths->v_iter);
 
-  nfft_free(ths->p_hat_iter);
-  nfft_free(ths->f_hat_iter);
+  Y(free)(ths->p_hat_iter);
+  Y(free)(ths->f_hat_iter);
 
-  nfft_free(ths->r_iter);
-  nfft_free(ths->y);
+  Y(free)(ths->r_iter);
+  Y(free)(ths->y);
 } /** void solver_finalize */
 
 
@@ -381,15 +391,15 @@ void solver_finalize_complex(solver_plan_complex *ths)
 /****************************************************************************/
 /****************************************************************************/
 
-void solver_init_advanced_double(solver_plan_double* ths, nfft_mv_plan_double *mv, unsigned flags)
+void X(init_advanced_double)(X(plan_double)* ths, Y(mv_plan_double) *mv, unsigned flags)
 {
   ths->mv = mv;
   ths->flags = flags;
 
-  ths->y          = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
-  ths->r_iter     = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
-  ths->f_hat_iter = (double*)nfft_malloc(ths->mv->N_total*sizeof(double));
-  ths->p_hat_iter = (double*)nfft_malloc(ths->mv->N_total*sizeof(double));
+  ths->y          = (R*)Y(malloc)((size_t)(ths->mv->M_total) * sizeof(R));
+  ths->r_iter     = (R*)Y(malloc)((size_t)(ths->mv->M_total) * sizeof(R));
+  ths->f_hat_iter = (R*)Y(malloc)((size_t)(ths->mv->N_total) * sizeof(R));
+  ths->p_hat_iter = (R*)Y(malloc)((size_t)(ths->mv->N_total) * sizeof(R));
 
   if(ths->flags & LANDWEBER)
     ths->z_hat_iter = ths->p_hat_iter;
@@ -397,66 +407,66 @@ void solver_init_advanced_double(solver_plan_double* ths, nfft_mv_plan_double *m
   if(ths->flags & STEEPEST_DESCENT)
     {
       ths->z_hat_iter = ths->p_hat_iter;
-      ths->v_iter     = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
+      ths->v_iter     = (R*)Y(malloc)((size_t)(ths->mv->M_total) * sizeof(R));
     }
 
   if(ths->flags & CGNR)
     {
-      ths->z_hat_iter = (double*)nfft_malloc(ths->mv->N_total*sizeof(double));
-      ths->v_iter     = (double*)nfft_malloc(ths->mv->M_total*sizeof(double));
+      ths->z_hat_iter = (R*)Y(malloc)((size_t)(ths->mv->N_total) * sizeof(R));
+      ths->v_iter     = (R*)Y(malloc)((size_t)(ths->mv->M_total) * sizeof(R));
     }
 
   if(ths->flags & CGNE)
     ths->z_hat_iter = ths->p_hat_iter;
 
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->w = (double*) nfft_malloc(ths->mv->M_total*sizeof(double));
+    ths->w = (R*) Y(malloc)((size_t)(ths->mv->M_total) * sizeof(R));
 
   if(ths->flags & PRECOMPUTE_DAMP)
-    ths->w_hat = (double*) nfft_malloc(ths->mv->N_total*sizeof(double));
+    ths->w_hat = (R*) Y(malloc)((size_t)(ths->mv->N_total) * sizeof(R));
 }
 
-static void solver_init_double(solver_plan_double* ths, nfft_mv_plan_double *mv)
+void X(init_double)(X(plan_double)* ths, Y(mv_plan_double) *mv)
 {
-  solver_init_advanced_double(ths, mv, CGNR);
+  X(init_advanced_double)(ths, mv, CGNR);
 }
 
-static void solver_before_loop_double(solver_plan_double* ths)
+void X(before_loop_double)(X(plan_double)* ths)
 {
-  nfft_cp_double(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+  Y(cp_double)(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
 
-  NFFT_SWAP_double(ths->r_iter, ths->mv->f);
+  RSWAP(ths->r_iter, ths->mv->f);
   ths->mv->mv_trafo(ths->mv);
-  NFFT_SWAP_double(ths->r_iter, ths->mv->f);
+  RSWAP(ths->r_iter, ths->mv->f);
 
-  nfft_upd_axpy_double(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+  Y(upd_axpy_double)(ths->r_iter, K(-1.0), ths->y, ths->mv->M_total);
 
   if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
     {
       if(ths->flags & PRECOMPUTE_WEIGHT)
-	ths->dot_r_iter = nfft_dot_w_double(ths->r_iter, ths->w,
+	ths->dot_r_iter = Y(dot_w_double)(ths->r_iter, ths->w,
 					     ths->mv->M_total);
       else
-	ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+	ths->dot_r_iter = Y(dot_double)(ths->r_iter, ths->mv->M_total);
     }
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+    Y(cp_w_double)(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
   else
-    nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+    Y(cp_double)(ths->mv->f, ths->r_iter, ths->mv->M_total);
 
-  NFFT_SWAP_double(ths->z_hat_iter, ths->mv->f_hat);
+  RSWAP(ths->z_hat_iter, ths->mv->f_hat);
   ths->mv->mv_adjoint(ths->mv);
-  NFFT_SWAP_double(ths->z_hat_iter, ths->mv->f_hat);
+  RSWAP(ths->z_hat_iter, ths->mv->f_hat);
 
   if((!(ths->flags & LANDWEBER)) || (ths->flags & NORMS_FOR_LANDWEBER))
     {
       if(ths->flags & PRECOMPUTE_DAMP)
-	ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+	ths->dot_z_hat_iter = Y(dot_w_double)(ths->z_hat_iter, ths->w_hat,
 						 ths->mv->N_total);
       else
-	ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter,
+	ths->dot_z_hat_iter = Y(dot_double)(ths->z_hat_iter,
 					       ths->mv->N_total);
     }
 
@@ -464,230 +474,230 @@ static void solver_before_loop_double(solver_plan_double* ths)
     ths->dot_p_hat_iter = ths->dot_z_hat_iter;
 
   if(ths->flags & CGNR)
-    nfft_cp_double(ths->p_hat_iter, ths->z_hat_iter, ths->mv->N_total);
+    Y(cp_double)(ths->p_hat_iter, ths->z_hat_iter, ths->mv->N_total);
 } /* void solver_before_loop */
 
 /** void solver_loop_one_step_landweber */
-static void solver_loop_one_step_landweber_double(solver_plan_double* ths)
+static void solver_loop_one_step_landweber_double(X(plan_double)* ths)
 {
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+    Y(upd_xpawy_double)(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
 			   ths->z_hat_iter, ths->mv->N_total);
   else
-    nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+    Y(upd_xpay_double)(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
 			  ths->mv->N_total);
 
   /*-----------------*/
-  nfft_cp_double(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
+  Y(cp_double)(ths->mv->f_hat, ths->f_hat_iter, ths->mv->N_total);
 
-  NFFT_SWAP_double(ths->r_iter,ths->mv->f);
+  RSWAP(ths->r_iter,ths->mv->f);
   ths->mv->mv_trafo(ths->mv);
-  NFFT_SWAP_double(ths->r_iter,ths->mv->f);
+  RSWAP(ths->r_iter,ths->mv->f);
 
-  nfft_upd_axpy_double(ths->r_iter, -1.0, ths->y, ths->mv->M_total);
+  Y(upd_axpy_double)(ths->r_iter, K(-1.0), ths->y, ths->mv->M_total);
 
   if(ths->flags & NORMS_FOR_LANDWEBER)
     {
       if(ths->flags & PRECOMPUTE_WEIGHT)
-	ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,
+	ths->dot_r_iter = Y(dot_w_double)(ths->r_iter,ths->w,
 					     ths->mv->M_total);
       else
-	ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+	ths->dot_r_iter = Y(dot_double)(ths->r_iter, ths->mv->M_total);
     }
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+    Y(cp_w_double)(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
   else
-    nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+    Y(cp_double)(ths->mv->f, ths->r_iter, ths->mv->M_total);
 
-  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+  RSWAP(ths->z_hat_iter,ths->mv->f_hat);
   ths->mv->mv_adjoint(ths->mv);
-  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+  RSWAP(ths->z_hat_iter,ths->mv->f_hat);
 
   if(ths->flags & NORMS_FOR_LANDWEBER)
     {
       if(ths->flags & PRECOMPUTE_DAMP)
-	ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+	ths->dot_z_hat_iter = Y(dot_w_double)(ths->z_hat_iter, ths->w_hat,
 						 ths->mv->N_total);
       else
-	ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter,
+	ths->dot_z_hat_iter = Y(dot_double)(ths->z_hat_iter,
 					       ths->mv->N_total);
     }
 } /* void solver_loop_one_step_landweber */
 
 /** void solver_loop_one_step_steepest_descent */
-static void solver_loop_one_step_steepest_descent_double(solver_plan_double *ths)
+static void solver_loop_one_step_steepest_descent_double(X(plan_double) *ths)
 {
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_cp_w_double(ths->mv->f_hat, ths->w_hat, ths->z_hat_iter,
+    Y(cp_w_double)(ths->mv->f_hat, ths->w_hat, ths->z_hat_iter,
 		      ths->mv->N_total);
   else
-    nfft_cp_double(ths->mv->f_hat, ths->z_hat_iter, ths->mv->N_total);
+    Y(cp_double)(ths->mv->f_hat, ths->z_hat_iter, ths->mv->N_total);
 
-  NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+  RSWAP(ths->v_iter,ths->mv->f);
   ths->mv->mv_trafo(ths->mv);
-  NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+  RSWAP(ths->v_iter,ths->mv->f);
 
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->dot_v_iter = nfft_dot_w_double(ths->v_iter,ths->w,ths->mv->M_total);
+    ths->dot_v_iter = Y(dot_w_double)(ths->v_iter,ths->w,ths->mv->M_total);
   else
-    ths->dot_v_iter = nfft_dot_double(ths->v_iter, ths->mv->M_total);
+    ths->dot_v_iter = Y(dot_double)(ths->v_iter, ths->mv->M_total);
 
   /*-----------------*/
   ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+    Y(upd_xpawy_double)(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
 			   ths->z_hat_iter, ths->mv->N_total);
   else
-    nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
+    Y(upd_xpay_double)(ths->f_hat_iter, ths->alpha_iter, ths->z_hat_iter,
 			  ths->mv->N_total);
 
   /*-----------------*/
-  nfft_upd_xpay_double(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+  Y(upd_xpay_double)(ths->r_iter, -ths->alpha_iter, ths->v_iter,
 			ths->mv->M_total);
 
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_w_double)(ths->r_iter,ths->w,ths->mv->M_total);
   else
-    ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_double)(ths->r_iter, ths->mv->M_total);
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+    Y(cp_w_double)(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
   else
-    nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+    Y(cp_double)(ths->mv->f, ths->r_iter, ths->mv->M_total);
 
-  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+  RSWAP(ths->z_hat_iter,ths->mv->f_hat);
   ths->mv->mv_adjoint(ths->mv);
-  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+  RSWAP(ths->z_hat_iter,ths->mv->f_hat);
 
   if(ths->flags & PRECOMPUTE_DAMP)
-    ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+    ths->dot_z_hat_iter = Y(dot_w_double)(ths->z_hat_iter, ths->w_hat,
 					     ths->mv->N_total);
   else
-    ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter, ths->mv->N_total);
+    ths->dot_z_hat_iter = Y(dot_double)(ths->z_hat_iter, ths->mv->N_total);
 } /* void solver_loop_one_step_steepest_descent */
 
 /** void solver_loop_one_step_cgnr */
-static void solver_loop_one_step_cgnr_double(solver_plan_double *ths)
+static void solver_loop_one_step_cgnr_double(X(plan_double) *ths)
 {
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_cp_w_double(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+    Y(cp_w_double)(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
 		      ths->mv->N_total);
   else
-    nfft_cp_double(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+    Y(cp_double)(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
 
-  NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+  RSWAP(ths->v_iter,ths->mv->f);
   ths->mv->mv_trafo(ths->mv);
-  NFFT_SWAP_double(ths->v_iter,ths->mv->f);
+  RSWAP(ths->v_iter,ths->mv->f);
 
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->dot_v_iter = nfft_dot_w_double(ths->v_iter,ths->w,ths->mv->M_total);
+    ths->dot_v_iter = Y(dot_w_double)(ths->v_iter,ths->w,ths->mv->M_total);
   else
-    ths->dot_v_iter = nfft_dot_double(ths->v_iter, ths->mv->M_total);
+    ths->dot_v_iter = Y(dot_double)(ths->v_iter, ths->mv->M_total);
 
   /*-----------------*/
   ths->alpha_iter = ths->dot_z_hat_iter / ths->dot_v_iter;
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+    Y(upd_xpawy_double)(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
 			   ths->p_hat_iter, ths->mv->N_total);
   else
-    nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+    Y(upd_xpay_double)(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
 			  ths->mv->N_total);
 
   /*-----------------*/
-  nfft_upd_xpay_double(ths->r_iter, -ths->alpha_iter, ths->v_iter,
+  Y(upd_xpay_double)(ths->r_iter, -ths->alpha_iter, ths->v_iter,
 			ths->mv->M_total);
 
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_w_double)(ths->r_iter,ths->w,ths->mv->M_total);
   else
-    ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_double)(ths->r_iter, ths->mv->M_total);
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+    Y(cp_w_double)(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
   else
-    nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+    Y(cp_double)(ths->mv->f, ths->r_iter, ths->mv->M_total);
 
-  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+  RSWAP(ths->z_hat_iter,ths->mv->f_hat);
   ths->mv->mv_adjoint(ths->mv);
-  NFFT_SWAP_double(ths->z_hat_iter,ths->mv->f_hat);
+  RSWAP(ths->z_hat_iter,ths->mv->f_hat);
 
   ths->dot_z_hat_iter_old = ths->dot_z_hat_iter;
   if(ths->flags & PRECOMPUTE_DAMP)
-    ths->dot_z_hat_iter = nfft_dot_w_double(ths->z_hat_iter, ths->w_hat,
+    ths->dot_z_hat_iter = Y(dot_w_double)(ths->z_hat_iter, ths->w_hat,
 					     ths->mv->N_total);
   else
-    ths->dot_z_hat_iter = nfft_dot_double(ths->z_hat_iter, ths->mv->N_total);
+    ths->dot_z_hat_iter = Y(dot_double)(ths->z_hat_iter, ths->mv->N_total);
 
   /*-----------------*/
   ths->beta_iter = ths->dot_z_hat_iter / ths->dot_z_hat_iter_old;
 
   /*-----------------*/
-  nfft_upd_axpy_double(ths->p_hat_iter, ths->beta_iter, ths->z_hat_iter,
+  Y(upd_axpy_double)(ths->p_hat_iter, ths->beta_iter, ths->z_hat_iter,
 			ths->mv->N_total);
 } /* void solver_loop_one_step_cgnr */
 
 /** void solver_loop_one_step_cgne */
-static void solver_loop_one_step_cgne_double(solver_plan_double *ths)
+static void solver_loop_one_step_cgne_double(X(plan_double) *ths)
 {
   ths->alpha_iter = ths->dot_r_iter / ths->dot_p_hat_iter;
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_upd_xpawy_double(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
+    Y(upd_xpawy_double)(ths->f_hat_iter, ths->alpha_iter, ths->w_hat,
 			   ths->p_hat_iter, ths->mv->N_total);
   else
-    nfft_upd_xpay_double(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
+    Y(upd_xpay_double)(ths->f_hat_iter, ths->alpha_iter, ths->p_hat_iter,
                           ths->mv->N_total);
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_cp_w_double(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
+    Y(cp_w_double)(ths->mv->f_hat, ths->w_hat, ths->p_hat_iter,
 		      ths->mv->N_total);
   else
-    nfft_cp_double(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
+    Y(cp_double)(ths->mv->f_hat, ths->p_hat_iter, ths->mv->N_total);
 
   ths->mv->mv_trafo(ths->mv);
 
-  nfft_upd_xpay_double(ths->r_iter, -ths->alpha_iter, ths->mv->f,
+  Y(upd_xpay_double)(ths->r_iter, -ths->alpha_iter, ths->mv->f,
 			ths->mv->M_total);
 
   ths->dot_r_iter_old = ths->dot_r_iter;
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    ths->dot_r_iter = nfft_dot_w_double(ths->r_iter,ths->w,ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_w_double)(ths->r_iter,ths->w,ths->mv->M_total);
   else
-    ths->dot_r_iter = nfft_dot_double(ths->r_iter, ths->mv->M_total);
+    ths->dot_r_iter = Y(dot_double)(ths->r_iter, ths->mv->M_total);
 
   /*-----------------*/
   ths->beta_iter = ths->dot_r_iter / ths->dot_r_iter_old;
 
   /*-----------------*/
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_cp_w_double(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
+    Y(cp_w_double)(ths->mv->f, ths->w, ths->r_iter, ths->mv->M_total);
   else
-    nfft_cp_double(ths->mv->f, ths->r_iter, ths->mv->M_total);
+    Y(cp_double)(ths->mv->f, ths->r_iter, ths->mv->M_total);
 
   ths->mv->mv_adjoint(ths->mv);
 
-  nfft_upd_axpy_double(ths->p_hat_iter, ths->beta_iter, ths->mv->f_hat,
+  Y(upd_axpy_double)(ths->p_hat_iter, ths->beta_iter, ths->mv->f_hat,
 			ths->mv->N_total);
 
   if(ths->flags & PRECOMPUTE_DAMP)
-    ths->dot_p_hat_iter = nfft_dot_w_double(ths->p_hat_iter, ths->w_hat,
+    ths->dot_p_hat_iter = Y(dot_w_double)(ths->p_hat_iter, ths->w_hat,
 					     ths->mv->N_total);
   else
-    ths->dot_p_hat_iter = nfft_dot_double(ths->p_hat_iter, ths->mv->N_total);
+    ths->dot_p_hat_iter = Y(dot_double)(ths->p_hat_iter, ths->mv->N_total);
 } /* void solver_loop_one_step_cgne */
 
 /** void solver_loop_one_step */
-static void solver_loop_one_step_double(solver_plan_double *ths)
+void X(loop_one_step_double)(X(plan_double) *ths)
 {
   if(ths->flags & LANDWEBER)
     solver_loop_one_step_landweber_double(ths);
@@ -703,26 +713,26 @@ static void solver_loop_one_step_double(solver_plan_double *ths)
 } /* void solver_loop_one_step */
 
 /** void solver_finalize */
-static void solver_finalize_double(solver_plan_double *ths)
+void X(finalize_double)(X(plan_double) *ths)
 {
   if(ths->flags & PRECOMPUTE_WEIGHT)
-    nfft_free(ths->w);
+    Y(free)(ths->w);
 
   if(ths->flags & PRECOMPUTE_DAMP)
-    nfft_free(ths->w_hat);
+    Y(free)(ths->w_hat);
 
   if(ths->flags & CGNR)
     {
-      nfft_free(ths->v_iter);
-      nfft_free(ths->z_hat_iter);
+      Y(free)(ths->v_iter);
+      Y(free)(ths->z_hat_iter);
     }
 
   if(ths->flags & STEEPEST_DESCENT)
-    nfft_free(ths->v_iter);
+    Y(free)(ths->v_iter);
 
-  nfft_free(ths->p_hat_iter);
-  nfft_free(ths->f_hat_iter);
+  Y(free)(ths->p_hat_iter);
+  Y(free)(ths->f_hat_iter);
 
-  nfft_free(ths->r_iter);
-  nfft_free(ths->y);
+  Y(free)(ths->r_iter);
+  Y(free)(ths->y);
 } /** void solver_finalize */
diff --git a/kernel/util/Makefile.am b/kernel/util/Makefile.am
index fb5ad82..d8c9668 100644
--- a/kernel/util/Makefile.am
+++ b/kernel/util/Makefile.am
@@ -1,4 +1,17 @@
-AM_CPPFLAGS = -I$(top_srcdir)/include
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/3rdparty/cstripack
 
-noinst_LTLIBRARIES = libutil.la
-libutil_la_SOURCES = malloc.c sinc.c lambda.c bessel_i0.c float.c int.c error.c
\ No newline at end of file
+if HAVE_THREADS
+  LIBUTIL_THREADS_LA = libutil_threads.la
+else
+  LIBUTIL_THREADS_LA =
+endif
+
+noinst_LTLIBRARIES = libutil.la $(LIBUTIL_THREADS_LA)
+libutil_la_SOURCES = malloc.c sinc.c lambda.c bessel_i0.c float.c int.c error.c bspline.c assert.c sort.c rand.c vector1.c vector2.c vector3.c print.c voronoi.c damp.c thread.c time.c window.c
+
+if HAVE_THREADS
+  libutil_threads_la_SOURCES = $(libutil_la_SOURCES)
+if HAVE_OPENMP
+  libutil_threads_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
diff --git a/kernel/util/Makefile.in b/kernel/util/Makefile.in
deleted file mode 100644
index b7c5ce1..0000000
--- a/kernel/util/Makefile.in
+++ /dev/null
@@ -1,560 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = kernel/util
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libutil_la_LIBADD =
-am_libutil_la_OBJECTS = malloc.lo sinc.lo lambda.lo bessel_i0.lo \
-	float.lo int.lo error.lo
-libutil_la_OBJECTS = $(am_libutil_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libutil_la_SOURCES)
-DIST_SOURCES = $(libutil_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-noinst_LTLIBRARIES = libutil.la
-libutil_la_SOURCES = malloc.c sinc.c lambda.c bessel_i0.c float.c int.c error.c
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/util/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu kernel/util/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libutil.la: $(libutil_la_OBJECTS) $(libutil_la_DEPENDENCIES) $(EXTRA_libutil_la_DEPENDENCIES) 
-	$(LINK)  $(libutil_la_OBJECTS) $(libutil_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bessel_i0.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/error.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/float.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/int.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lambda.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/malloc.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/sinc.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/kernel/util/sinc.c b/kernel/util/assert.c
similarity index 63%
copy from kernel/util/sinc.c
copy to kernel/util/assert.c
index fcccba6..b4df8a9 100644
--- a/kernel/util/sinc.c
+++ b/kernel/util/assert.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -20,28 +20,19 @@
 
 #include "infft.h"
 
-R X(sinc)(const R x)
+/**
+ * Prints an error message for a failed assertion together with filename and the
+ * line where the assertion failed.
+ */
+void Y(assertion_failed)(const char *s, int line, const char *file)
 {
-  /* Based on sinc function from Boost C++ library. */
-  const R b =  EPSILON;
-  const R bs = SQRT(b);
-  const R bs2 = SQRT(bs);
-
-  if (FABS(x) >= bs2)
-    return SIN(x)/x;
-  else
-  {
-    R r = K(1.0);
-
-    if (FABS(x) >= b)
-    {
-      const R x2 = x * x;
-      r -= x2 / K(6.0);
-
-      if (FABS(x) >= bs)
-        r += (x2 * x2) / K(120.0);
-    }
-
-    return r;
-  }
+  fflush(stdout);
+  fprintf(stderr, "nfft: %s:%d: assertion failed: %s\n", file, line, s);
+#ifdef HAVE_ABORT
+  /* Use abort function. */
+  abort();
+#else
+  /* Use exit function. */
+  exit(EXIT_FAILURE);
+#endif
 }
diff --git a/kernel/util/bessel_i0.c b/kernel/util/bessel_i0.c
index 898526c..a6835b6 100644
--- a/kernel/util/bessel_i0.c
+++ b/kernel/util/bessel_i0.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -278,7 +278,7 @@ static const INT M2 = sizeof(Q2)/sizeof(Q2[0]);
 static inline R evaluate_chebyshev(const INT n, const R *c, const R x)
 {
   R a = c[n-2], b = c[n-1], t;
-  int j;
+  INT j;
   
   A(n >= 2);
   
@@ -291,7 +291,7 @@ static inline R evaluate_chebyshev(const INT n, const R *c, const R x)
   return a + x * b;
 }
 
-R X(bessel_i0)(R x)
+R Y(bessel_i0)(R x)
 {
   if (x < 0)
   {
diff --git a/kernel/util/bessel_i0.m b/kernel/util/bessel_i0.m
new file mode 100644
index 0000000..6dfd4d8
--- /dev/null
+++ b/kernel/util/bessel_i0.m
@@ -0,0 +1,72 @@
+(* ::Package:: *)
+
+(************************************************************************)
+(* This file was generated automatically by the Mathematica front end.  *)
+(* It contains Initialization cells from a Notebook file, which         *)
+(* typically will have the same name as this file except ending in      *)
+(* ".nb" instead of ".m".                                               *)
+(*                                                                      *)
+(* This file is intended to be loaded into the Mathematica kernel using *)
+(* the package loading commands Get or Needs.  Doing so is equivalent   *)
+(* to using the Evaluate Initialization Cells menu command in the front *)
+(* end.                                                                 *)
+(*                                                                      *)
+(* DO NOT EDIT THIS FILE.  This entire file is regenerated              *)
+(* automatically each time the parent Notebook file is saved in the     *)
+(* Mathematica front end.  Any changes you make to this file will be    *)
+(* overwritten.                                                         *)
+(************************************************************************)
+
+
+
+<<FunctionApproximations`
+(* Precision. *)
+p=64;
+(* Bessel function I_ 0 transplanted from [0,15] to [0,225]. *)
+f1[x_]:=BesselI[0,Sqrt[x]];
+(* Scaled Bessel function I_ 0 transplanted from [15,\[Infinity]) to [0,1/15]. *)
+f2[0]:=f2[0]=1/Sqrt[2 \[Pi]];
+f2[x_]:=With[{xx=1/x},Sqrt[xx]/Exp[xx] BesselI[0,xx]];
+(* Desired errors. *)
+SinglePrecision=5.96*10^(-08);
+DoublePrecision=1.11*10^(-16);
+ExtendedPrecision=1.00*10^(-20);
+QuadruplePrecision=9.63*10^(-35);
+(* Filters and sorts a list of results according to desired error and sorting criterion. *)
+Choose[chk_][cmp_][t_]:=Sort[Select[Flatten[t,1],chk],cmp];
+(* Build polynomial from coefficient list *)
+BuildPolynomial[c_]:=FromDigits[Reverse[c],x];
+(* Filter criteria. *)
+ErrorCheck[err_][x_]:=Not[SameQ[x,Indeterminate]]&&Head[x]==ApproximationResult&&GetError[x]<=10^(-04)*err;
+(* Sorting criteria. *)
+GenericCriterion[f_,g_][x_,y_]:=Module[{d1=GetDegrees[x],d2=GetDegrees[y]},Return[f[d1[[1]],d1[[2]]]<f[d2[[1]],d2[[2]]]||(f[d1[[1]],d1[[2]]]==f[d2[[1]],d2[[2]]] && g[d1[[1]],d1[[2]]]<g[d2[[1]],d2[[2]]])]];
+MinimumTotalCoefficients[x_,y_]:=GenericCriterion[Abs[Plus[#1,#2]]&,Abs[Subtract[#1,#2]]&];
+MaximumSymmetry[x_,y_]:=GenericCriterion[Abs[Subtract[#1,#2]]&,Abs[Plus[#1,#2]]&][x,y];
+(* Approximation functions. *)
+ApproximateMiniMax[f_,a_,b_,m_,n_,p_]:=MiniMaxApproximation[f[x],{x,{a,b},m,n},WorkingPrecision->p];
+(* Approximates a function. *)
+Approximate[f_][g_][a_,b_,m_,n_,p_]:=Module[ {r=Quiet[Check[f[g,a,b,m,n,p],Indeterminate]]},If[SameQ[r,Indeterminate],Return[r],Return[ApproximationResult[{m,n},Abs[r[[2]][[2]]],CoefficientList[Numerator[r[[2]][[1]]],x],CoefficientList[Denominator[r[[2]][[1]]],x],{a,b}]]]];
+(* Getters for different parts of approximation result. *)
+GetDegrees[x_]:=x[[1]];
+GetError[x_]:=x[[2]];
+GetNumerator[x_]:=x[[3]];
+GetDenominator[x_]:=x[[4]];
+GetInterval[x_]:=x[[5]];
+(* Compute approximations for a subset of a matrix of numerator/denominator degrees {m,n} *) 
+Compute[t_,it_,f_,g_,a_,b_,p_]:=Module[{i=it[t],j=0,tt=t},For[j=1,j<=Length[i],j++,Print[i[[j,2,1]],",",i[[j,2,2]],",",tt[[i[[j,2,1]],i[[j,2,2]]]]];tt[[i[[j,2,1]],i[[j,2,2]]]]=Approximate[f][g][a,b,i[[j,1,1]],i[[j,1,2]],p]];Return[tt]];
+(* Generic iterator. Take a matrix of numerator/denominator degrees {m,n} and return a flat list of those admissible for iteration. *)
+Iterator[f_][t_]:=Module[{tt={},i=0,j=0},For[i=1,i<=Dimensions[t][[1]],i++,For[j=1,j<=Dimensions[t][[2]],j++,If[f[t[[i,j]]]==True,tt=Append[tt,{t[[i,j]],{i,j}}]]]];Return[tt]];
+(* Iterate over elements where the difference between numerator and denominator degrees is bounded by below and from above. *)
+DiagonalIterator[a_,b_]:=Iterator[#1[[2]]-#1[[1]]>=a&&#1[[2]]-#1[[1]]<=b&];
+(* Iterate over all elements *)
+AllIterator:=Iterator[True&];
+(* Compute Chebyshev-Fourier coefficients. *)
+ChebyshevFourierCoefficients[f_][a_,b_][n_]:=Module[{x=Table[f[a+(b-a)/2 (1+Cos[(\[Pi]*(j+1/2))/(n+1)])],{j,0,n}],F=Table[(2-DiscreteDelta[i])/2 Cos[(\[Pi]*(i)*(j+1/2))/(n+1)],{i,0,n},{j,0,n}]},Return[2/(n+1) F.x]];
+(* Print coefficient list suitable for inclusion in C code. *)
+PrintCoefficients[c_]:=Module[{s="",j=0},For[j=1,j<=Length[c],j++,s=s<>"K("<>ToString[CForm[c[[j]]]]<>"),\n"];Print[s]]
+(* Print coefficients of numerator and denominator polynomials. *)
+PrintResult[r_]:=Module[{d=GetDegrees[r],iv=GetInterval[r]},Print["Numerator"];Print[d[[1]]];PrintCoefficients[GetNumerator[r]];PrintCoefficients[ChebyshevFourierCoefficients[BuildPolynomial[GetNumerator[r]]/.x->#1&][iv[[1]],iv[[2]]][d[[1]]]];
+Print["Denominator"];Print[d[[2]]];PrintCoefficients[GetDenominator[r]];PrintCoefficients[ChebyshevFourierCoefficients[BuildPolynomial[GetDenominator[r]]/.x->#1&][iv[[1]],iv[[2]]][d[[2]]]]]
+
+
+
diff --git a/kernel/util/bessel_i0.nb b/kernel/util/bessel_i0.nb
new file mode 100644
index 0000000..6c2409d
--- /dev/null
+++ b/kernel/util/bessel_i0.nb
@@ -0,0 +1,979 @@
+(* Content-type: application/mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 7.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       145,          7]
+NotebookDataLength[     37937,        970]
+NotebookOptionsPosition[     37501,        952]
+NotebookOutlinePosition[     37873,        968]
+CellTagsIndexPosition[     37830,        965]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{"<<", "FunctionApproximations`"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"Precision", "."}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"p", "=", "64"}], ";"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "Bessel", " ", "function", " ", "I_", "0", " ", "transplanted", " ", 
+    RowBox[{"from", " ", "[", 
+     RowBox[{"0", ",", "15"}], "]"}], " ", 
+    RowBox[{
+     RowBox[{"to", " ", "[", 
+      RowBox[{"0", ",", "225"}], "]"}], "."}]}], " ", 
+   "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{"f1", "[", "x_", "]"}], ":=", 
+    RowBox[{"BesselI", "[", 
+     RowBox[{"0", ",", 
+      RowBox[{"Sqrt", "[", "x", "]"}]}], "]"}]}], ";"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", 
+   RowBox[{
+    RowBox[{" ", 
+     RowBox[{
+     "Scaled", " ", "Bessel", " ", "function", " ", "I_", "0", " ", 
+      "transplanted", " ", 
+      RowBox[{"from", " ", "[", 
+       RowBox[{"15", ",", "\[Infinity]"}]}]}], ")"}], " ", 
+    RowBox[{
+     RowBox[{"to", " ", "[", 
+      RowBox[{"0", ",", 
+       RowBox[{"1", "/", "15"}]}], "]"}], "."}]}], " ", 
+   "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"f2", "[", "0", "]"}], ":=", 
+   RowBox[{
+    RowBox[{"f2", "[", "0", "]"}], "=", 
+    FractionBox["1", 
+     SqrtBox[
+      RowBox[{"2", " ", "\[Pi]"}]]]}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{"f2", "[", "x_", "]"}], ":=", 
+    RowBox[{"With", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"xx", "=", 
+        FractionBox["1", "x"]}], "}"}], ",", 
+      RowBox[{
+       FractionBox[
+        SqrtBox["xx"], 
+        RowBox[{"Exp", "[", "xx", "]"}]], 
+       RowBox[{"BesselI", "[", 
+        RowBox[{"0", ",", "xx"}], "]"}]}]}], "]"}]}], ";"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"Desired", " ", 
+    RowBox[{"errors", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"SinglePrecision", "=", 
+   RowBox[{"5.96", "*", 
+    RowBox[{"10", "^", 
+     RowBox[{"(", 
+      RowBox[{"-", "08"}], ")"}]}]}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"DoublePrecision", "=", 
+   RowBox[{"1.11", "*", 
+    RowBox[{"10", "^", 
+     RowBox[{"(", 
+      RowBox[{"-", "16"}], ")"}]}]}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"ExtendedPrecision", "=", 
+   RowBox[{"1.00", "*", 
+    RowBox[{"10", "^", 
+     RowBox[{"(", 
+      RowBox[{"-", "20"}], ")"}]}]}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"QuadruplePrecision", "=", 
+    RowBox[{"9.63", "*", 
+     RowBox[{"10", "^", 
+      RowBox[{"(", 
+       RowBox[{"-", "35"}], ")"}]}]}]}], ";"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "Filters", " ", "and", " ", "sorts", " ", "a", " ", "list", " ", "of", " ",
+     "results", " ", "according", " ", "to", " ", "desired", " ", "error", 
+    " ", "and", " ", "sorting", " ", 
+    RowBox[{"criterion", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{
+     RowBox[{
+      RowBox[{"Choose", "[", "chk_", "]"}], "[", "cmp_", "]"}], "[", "t_", 
+     "]"}], ":=", 
+    RowBox[{"Sort", "[", 
+     RowBox[{
+      RowBox[{"Select", "[", 
+       RowBox[{
+        RowBox[{"Flatten", "[", 
+         RowBox[{"t", ",", "1"}], "]"}], ",", "chk"}], "]"}], ",", "cmp"}], 
+     "]"}]}], ";"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "Build", " ", "polynomial", " ", "from", " ", "coefficient", " ", "list"}],
+    " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{"BuildPolynomial", "[", "c_", "]"}], ":=", 
+    RowBox[{"FromDigits", "[", 
+     RowBox[{
+      RowBox[{"Reverse", "[", "c", "]"}], ",", "x"}], "]"}]}], ";"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"Filter", " ", 
+    RowBox[{"criteria", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{
+     RowBox[{"ErrorCheck", "[", "err_", "]"}], "[", "x_", "]"}], ":=", 
+    RowBox[{
+     RowBox[{"Not", "[", 
+      RowBox[{"SameQ", "[", 
+       RowBox[{"x", ",", "Indeterminate"}], "]"}], "]"}], "&&", 
+     RowBox[{
+      RowBox[{"Head", "[", "x", "]"}], "==", "ApproximationResult"}], "&&", 
+     RowBox[{
+      RowBox[{"GetError", "[", "x", "]"}], "\[LessEqual]", 
+      RowBox[{
+       RowBox[{"10", "^", 
+        RowBox[{"(", 
+         RowBox[{"-", "04"}], ")"}]}], "*", "err"}]}]}]}], ";"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"Sorting", " ", 
+    RowBox[{"criteria", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{"GenericCriterion", "[", 
+     RowBox[{"f_", ",", "g_"}], "]"}], "[", 
+    RowBox[{"x_", ",", "y_"}], "]"}], ":=", 
+   RowBox[{"Module", "[", 
+    RowBox[{
+     RowBox[{"{", 
+      RowBox[{
+       RowBox[{"d1", "=", 
+        RowBox[{"GetDegrees", "[", "x", "]"}]}], ",", 
+       RowBox[{"d2", "=", 
+        RowBox[{"GetDegrees", "[", "y", "]"}]}]}], "}"}], ",", 
+     RowBox[{"Return", "[", 
+      RowBox[{
+       RowBox[{
+        RowBox[{"f", "[", 
+         RowBox[{
+          RowBox[{"d1", "[", 
+           RowBox[{"[", "1", "]"}], "]"}], ",", 
+          RowBox[{"d1", "[", 
+           RowBox[{"[", "2", "]"}], "]"}]}], "]"}], "<", 
+        RowBox[{"f", "[", 
+         RowBox[{
+          RowBox[{"d2", "[", 
+           RowBox[{"[", "1", "]"}], "]"}], ",", 
+          RowBox[{"d2", "[", 
+           RowBox[{"[", "2", "]"}], "]"}]}], "]"}]}], "||", 
+       RowBox[{"(", 
+        RowBox[{
+         RowBox[{
+          RowBox[{"f", "[", 
+           RowBox[{
+            RowBox[{"d1", "[", 
+             RowBox[{"[", "1", "]"}], "]"}], ",", 
+            RowBox[{"d1", "[", 
+             RowBox[{"[", "2", "]"}], "]"}]}], "]"}], "\[Equal]", 
+          RowBox[{"f", "[", 
+           RowBox[{
+            RowBox[{"d2", "[", 
+             RowBox[{"[", "1", "]"}], "]"}], ",", 
+            RowBox[{"d2", "[", 
+             RowBox[{"[", "2", "]"}], "]"}]}], "]"}]}], " ", "&&", " ", 
+         RowBox[{
+          RowBox[{"g", "[", 
+           RowBox[{
+            RowBox[{"d1", "[", 
+             RowBox[{"[", "1", "]"}], "]"}], ",", 
+            RowBox[{"d1", "[", 
+             RowBox[{"[", "2", "]"}], "]"}]}], "]"}], "<", 
+          RowBox[{"g", "[", 
+           RowBox[{
+            RowBox[{"d2", "[", 
+             RowBox[{"[", "1", "]"}], "]"}], ",", 
+            RowBox[{"d2", "[", 
+             RowBox[{"[", "2", "]"}], "]"}]}], "]"}]}]}], ")"}]}], "]"}]}], 
+    "]"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"MinimumTotalCoefficients", "[", 
+    RowBox[{"x_", ",", "y_"}], "]"}], ":=", 
+   RowBox[{"GenericCriterion", "[", 
+    RowBox[{
+     RowBox[{
+      RowBox[{"Abs", "[", 
+       RowBox[{"Plus", "[", 
+        RowBox[{"#1", ",", "#2"}], "]"}], "]"}], "&"}], ",", 
+     RowBox[{
+      RowBox[{"Abs", "[", 
+       RowBox[{"Subtract", "[", 
+        RowBox[{"#1", ",", "#2"}], "]"}], "]"}], "&"}]}], "]"}]}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{"MaximumSymmetry", "[", 
+     RowBox[{"x_", ",", "y_"}], "]"}], ":=", 
+    RowBox[{
+     RowBox[{"GenericCriterion", "[", 
+      RowBox[{
+       RowBox[{
+        RowBox[{"Abs", "[", 
+         RowBox[{"Subtract", "[", 
+          RowBox[{"#1", ",", "#2"}], "]"}], "]"}], "&"}], ",", 
+       RowBox[{
+        RowBox[{"Abs", "[", 
+         RowBox[{"Plus", "[", 
+          RowBox[{"#1", ",", "#2"}], "]"}], "]"}], "&"}]}], "]"}], "[", 
+     RowBox[{"x", ",", "y"}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"Approximation", " ", 
+    RowBox[{"functions", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{"ApproximateMiniMax", "[", 
+     RowBox[{"f_", ",", "a_", ",", "b_", ",", "m_", ",", "n_", ",", "p_"}], 
+     "]"}], ":=", 
+    RowBox[{"MiniMaxApproximation", "[", 
+     RowBox[{
+      RowBox[{"f", "[", "x", "]"}], ",", 
+      RowBox[{"{", 
+       RowBox[{"x", ",", 
+        RowBox[{"{", 
+         RowBox[{"a", ",", "b"}], "}"}], ",", "m", ",", "n"}], "}"}], ",", 
+      RowBox[{"WorkingPrecision", "\[Rule]", "p"}]}], "]"}]}], ";"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"Approximates", " ", "a", " ", 
+    RowBox[{"function", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{
+     RowBox[{
+      RowBox[{"Approximate", "[", "f_", "]"}], "[", "g_", "]"}], "[", 
+     RowBox[{"a_", ",", "b_", ",", "m_", ",", "n_", ",", "p_"}], "]"}], ":=", 
+    
+    RowBox[{"Module", "[", " ", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{"r", "=", 
+        RowBox[{"Quiet", "[", 
+         RowBox[{"Check", "[", 
+          RowBox[{
+           RowBox[{"f", "[", 
+            RowBox[{"g", ",", "a", ",", "b", ",", "m", ",", "n", ",", "p"}], 
+            "]"}], ",", "Indeterminate"}], "]"}], "]"}]}], "}"}], ",", 
+      RowBox[{"If", "[", 
+       RowBox[{
+        RowBox[{"SameQ", "[", 
+         RowBox[{"r", ",", "Indeterminate"}], "]"}], ",", 
+        RowBox[{"Return", "[", "r", "]"}], ",", 
+        RowBox[{"Return", "[", 
+         RowBox[{"ApproximationResult", "[", 
+          RowBox[{
+           RowBox[{"{", 
+            RowBox[{"m", ",", "n"}], "}"}], ",", 
+           RowBox[{"Abs", "[", 
+            RowBox[{
+             RowBox[{"r", "[", 
+              RowBox[{"[", "2", "]"}], "]"}], "[", 
+             RowBox[{"[", "2", "]"}], "]"}], "]"}], ",", 
+           RowBox[{"CoefficientList", "[", 
+            RowBox[{
+             RowBox[{"Numerator", "[", 
+              RowBox[{
+               RowBox[{"r", "[", 
+                RowBox[{"[", "2", "]"}], "]"}], "[", 
+               RowBox[{"[", "1", "]"}], "]"}], "]"}], ",", "x"}], "]"}], ",", 
+           
+           RowBox[{"CoefficientList", "[", 
+            RowBox[{
+             RowBox[{"Denominator", "[", 
+              RowBox[{
+               RowBox[{"r", "[", 
+                RowBox[{"[", "2", "]"}], "]"}], "[", 
+               RowBox[{"[", "1", "]"}], "]"}], "]"}], ",", "x"}], "]"}], ",", 
+           
+           RowBox[{"{", 
+            RowBox[{"a", ",", "b"}], "}"}]}], "]"}], "]"}]}], "]"}]}], 
+     "]"}]}], ";"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "Getters", " ", "for", " ", "different", " ", "parts", " ", "of", " ", 
+    "approximation", " ", 
+    RowBox[{"result", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"GetDegrees", "[", "x_", "]"}], ":=", 
+   RowBox[{"x", "[", 
+    RowBox[{"[", "1", "]"}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"GetError", "[", "x_", "]"}], ":=", 
+   RowBox[{"x", "[", 
+    RowBox[{"[", "2", "]"}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"GetNumerator", "[", "x_", "]"}], ":=", 
+   RowBox[{"x", "[", 
+    RowBox[{"[", "3", "]"}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"GetDenominator", "[", "x_", "]"}], ":=", 
+   RowBox[{"x", "[", 
+    RowBox[{"[", "4", "]"}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{"GetInterval", "[", "x_", "]"}], ":=", 
+    RowBox[{"x", "[", 
+     RowBox[{"[", "5", "]"}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "Compute", " ", "approximations", " ", "for", " ", "a", " ", "subset", " ",
+     "of", " ", "a", " ", "matrix", " ", "of", " ", 
+    RowBox[{"numerator", "/", "denominator"}], " ", "degrees", " ", 
+    RowBox[{"{", 
+     RowBox[{"m", ",", "n"}], "}"}]}], " ", "*)"}], 
+  " "}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{"Compute", "[", 
+     RowBox[{
+     "t_", ",", "it_", ",", "f_", ",", "g_", ",", "a_", ",", "b_", ",", 
+      "p_"}], "]"}], ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"i", "=", 
+         RowBox[{"it", "[", "t", "]"}]}], ",", 
+        RowBox[{"j", "=", "0"}], ",", 
+        RowBox[{"tt", "=", "t"}]}], "}"}], ",", 
+      RowBox[{
+       RowBox[{"For", "[", 
+        RowBox[{
+         RowBox[{"j", "=", "1"}], ",", 
+         RowBox[{"j", "\[LessEqual]", 
+          RowBox[{"Length", "[", "i", "]"}]}], ",", 
+         RowBox[{"j", "++"}], ",", 
+         RowBox[{
+          RowBox[{"Print", "[", 
+           RowBox[{
+            RowBox[{"i", "[", 
+             RowBox[{"[", 
+              RowBox[{"j", ",", "2", ",", "1"}], "]"}], "]"}], ",", 
+            "\"\<,\>\"", ",", 
+            RowBox[{"i", "[", 
+             RowBox[{"[", 
+              RowBox[{"j", ",", "2", ",", "2"}], "]"}], "]"}], ",", 
+            "\"\<,\>\"", ",", 
+            RowBox[{"tt", "[", 
+             RowBox[{"[", 
+              RowBox[{
+               RowBox[{"i", "[", 
+                RowBox[{"[", 
+                 RowBox[{"j", ",", "2", ",", "1"}], "]"}], "]"}], ",", 
+               RowBox[{"i", "[", 
+                RowBox[{"[", 
+                 RowBox[{"j", ",", "2", ",", "2"}], "]"}], "]"}]}], "]"}], 
+             "]"}]}], "]"}], ";", 
+          RowBox[{
+           RowBox[{"tt", "[", 
+            RowBox[{"[", 
+             RowBox[{
+              RowBox[{"i", "[", 
+               RowBox[{"[", 
+                RowBox[{"j", ",", "2", ",", "1"}], "]"}], "]"}], ",", 
+              RowBox[{"i", "[", 
+               RowBox[{"[", 
+                RowBox[{"j", ",", "2", ",", "2"}], "]"}], "]"}]}], "]"}], 
+            "]"}], "=", 
+           RowBox[{
+            RowBox[{
+             RowBox[{"Approximate", "[", "f", "]"}], "[", "g", "]"}], "[", 
+            RowBox[{"a", ",", "b", ",", 
+             RowBox[{"i", "[", 
+              RowBox[{"[", 
+               RowBox[{"j", ",", "1", ",", "1"}], "]"}], "]"}], ",", 
+             RowBox[{"i", "[", 
+              RowBox[{"[", 
+               RowBox[{"j", ",", "1", ",", "2"}], "]"}], "]"}], ",", "p"}], 
+            "]"}]}]}]}], "]"}], ";", 
+       RowBox[{"Return", "[", "tt", "]"}]}]}], "]"}]}], ";"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"Generic", " ", 
+    RowBox[{"iterator", ".", " ", "Take"}], " ", "a", " ", "matrix", " ", 
+    "of", " ", 
+    RowBox[{"numerator", "/", "denominator"}], " ", "degrees", " ", 
+    RowBox[{"{", 
+     RowBox[{"m", ",", "n"}], "}"}], " ", "and", " ", "return", " ", "a", " ",
+     "flat", " ", "list", " ", "of", " ", "those", " ", "admissible", " ", 
+    "for", " ", 
+    RowBox[{"iteration", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{
+     RowBox[{"Iterator", "[", "f_", "]"}], "[", "t_", "]"}], ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"tt", "=", 
+         RowBox[{"{", "}"}]}], ",", 
+        RowBox[{"i", "=", "0"}], ",", 
+        RowBox[{"j", "=", "0"}]}], "}"}], ",", 
+      RowBox[{
+       RowBox[{"For", "[", 
+        RowBox[{
+         RowBox[{"i", "=", "1"}], ",", 
+         RowBox[{"i", "\[LessEqual]", 
+          RowBox[{
+           RowBox[{"Dimensions", "[", "t", "]"}], "[", 
+           RowBox[{"[", "1", "]"}], "]"}]}], ",", 
+         RowBox[{"i", "++"}], ",", 
+         RowBox[{"For", "[", 
+          RowBox[{
+           RowBox[{"j", "=", "1"}], ",", 
+           RowBox[{"j", "\[LessEqual]", 
+            RowBox[{
+             RowBox[{"Dimensions", "[", "t", "]"}], "[", 
+             RowBox[{"[", "2", "]"}], "]"}]}], ",", 
+           RowBox[{"j", "++"}], ",", 
+           RowBox[{"If", "[", 
+            RowBox[{
+             RowBox[{
+              RowBox[{"f", "[", 
+               RowBox[{"t", "[", 
+                RowBox[{"[", 
+                 RowBox[{"i", ",", "j"}], "]"}], "]"}], "]"}], "\[Equal]", 
+              "True"}], ",", 
+             RowBox[{"tt", "=", 
+              RowBox[{"Append", "[", 
+               RowBox[{"tt", ",", 
+                RowBox[{"{", 
+                 RowBox[{
+                  RowBox[{"t", "[", 
+                   RowBox[{"[", 
+                    RowBox[{"i", ",", "j"}], "]"}], "]"}], ",", 
+                  RowBox[{"{", 
+                   RowBox[{"i", ",", "j"}], "}"}]}], "}"}]}], "]"}]}]}], 
+            "]"}]}], "]"}]}], "]"}], ";", 
+       RowBox[{"Return", "[", "tt", "]"}]}]}], "]"}]}], ";"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "Iterate", " ", "over", " ", "elements", " ", "where", " ", "the", " ", 
+    "difference", " ", "between", " ", "numerator", " ", "and", " ", 
+    "denominator", " ", "degrees", " ", "is", " ", "bounded", " ", "by", " ", 
+    "below", " ", "and", " ", "from", " ", 
+    RowBox[{"above", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{"DiagonalIterator", "[", 
+     RowBox[{"a_", ",", "b_"}], "]"}], ":=", 
+    RowBox[{"Iterator", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{
+        RowBox[{
+         RowBox[{"#1", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "-", 
+         RowBox[{"#1", "[", 
+          RowBox[{"[", "1", "]"}], "]"}]}], "\[GreaterEqual]", "a"}], "&&", 
+       RowBox[{
+        RowBox[{
+         RowBox[{"#1", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "-", 
+         RowBox[{"#1", "[", 
+          RowBox[{"[", "1", "]"}], "]"}]}], "\[LessEqual]", "b"}]}], "&"}], 
+     "]"}]}], ";"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{"Iterate", " ", "over", " ", "all", " ", "elements"}], " ", 
+   "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"AllIterator", ":=", 
+    RowBox[{"Iterator", "[", 
+     RowBox[{"True", "&"}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+    RowBox[{"Compute", " ", "Chebyshev"}], "-", 
+    RowBox[{"Fourier", " ", 
+     RowBox[{"coefficients", "."}]}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{
+     RowBox[{
+      RowBox[{"ChebyshevFourierCoefficients", "[", "f_", "]"}], "[", 
+      RowBox[{"a_", ",", "b_"}], "]"}], "[", "n_", "]"}], ":=", 
+    RowBox[{"Module", "[", 
+     RowBox[{
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"x", "=", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"f", "[", 
+            RowBox[{"a", "+", 
+             RowBox[{
+              FractionBox[
+               RowBox[{"b", "-", "a"}], "2"], 
+              RowBox[{"(", 
+               RowBox[{"1", "+", 
+                RowBox[{"Cos", "[", 
+                 FractionBox[
+                  RowBox[{"\[Pi]", "*", 
+                   RowBox[{"(", 
+                    RowBox[{"j", "+", 
+                    RowBox[{"1", "/", "2"}]}], ")"}]}], 
+                  RowBox[{"n", "+", "1"}]], "]"}]}], ")"}]}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "0", ",", "n"}], "}"}]}], "]"}]}], ",", 
+        RowBox[{"F", "=", 
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{
+            FractionBox[
+             RowBox[{"2", "-", 
+              RowBox[{"DiscreteDelta", "[", "i", "]"}]}], "2"], 
+            RowBox[{"Cos", "[", 
+             FractionBox[
+              RowBox[{"\[Pi]", "*", 
+               RowBox[{"(", "i", ")"}], "*", 
+               RowBox[{"(", 
+                RowBox[{"j", "+", 
+                 RowBox[{"1", "/", "2"}]}], ")"}]}], 
+              RowBox[{"n", "+", "1"}]], "]"}]}], ",", 
+           RowBox[{"{", 
+            RowBox[{"i", ",", "0", ",", "n"}], "}"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "0", ",", "n"}], "}"}]}], "]"}]}]}], "}"}], ",", 
+      RowBox[{"Return", "[", 
+       RowBox[{
+        FractionBox["2", 
+         RowBox[{"n", "+", "1"}]], 
+        RowBox[{"F", ".", "x"}]}], "]"}]}], "]"}]}], ";"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "Print", " ", "coefficient", " ", "list", " ", "suitable", " ", "for", " ",
+     "inclusion", " ", "in", " ", "C", " ", 
+    RowBox[{"code", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"PrintCoefficients", "[", "c_", "]"}], ":=", 
+   RowBox[{"Module", "[", 
+    RowBox[{
+     RowBox[{"{", 
+      RowBox[{
+       RowBox[{"s", "=", "\"\<\>\""}], ",", 
+       RowBox[{"j", "=", "0"}]}], "}"}], ",", 
+     RowBox[{
+      RowBox[{"For", "[", 
+       RowBox[{
+        RowBox[{"j", "=", "1"}], ",", 
+        RowBox[{"j", "\[LessEqual]", 
+         RowBox[{"Length", "[", "c", "]"}]}], ",", 
+        RowBox[{"j", "++"}], ",", 
+        RowBox[{"s", "=", 
+         RowBox[{"s", "<>", "\"\<K(\>\"", "<>", 
+          RowBox[{"ToString", "[", 
+           RowBox[{"CForm", "[", 
+            RowBox[{"c", "[", 
+             RowBox[{"[", "j", "]"}], "]"}], "]"}], "]"}], "<>", 
+          "\"\<),\\n\>\""}]}]}], "]"}], ";", 
+      RowBox[{"Print", "[", "s", "]"}]}]}], "]"}]}], "\[IndentingNewLine]", 
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "Print", " ", "coefficients", " ", "of", " ", "numerator", " ", "and", " ",
+     "denominator", " ", 
+    RowBox[{"polynomials", "."}]}], " ", "*)"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"PrintResult", "[", "r_", "]"}], ":=", 
+  RowBox[{"Module", "[", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"GetDegrees", "[", "r", "]"}]}], ",", 
+      RowBox[{"iv", "=", 
+       RowBox[{"GetInterval", "[", "r", "]"}]}]}], "}"}], ",", 
+    RowBox[{
+     RowBox[{"Print", "[", "\"\<Numerator\>\"", "]"}], ";", 
+     RowBox[{"Print", "[", 
+      RowBox[{"d", "[", 
+       RowBox[{"[", "1", "]"}], "]"}], "]"}], ";", 
+     RowBox[{"PrintCoefficients", "[", 
+      RowBox[{"GetNumerator", "[", "r", "]"}], "]"}], ";", 
+     RowBox[{"PrintCoefficients", "[", 
+      RowBox[{
+       RowBox[{
+        RowBox[{"ChebyshevFourierCoefficients", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"BuildPolynomial", "[", 
+            RowBox[{"GetNumerator", "[", "r", "]"}], "]"}], "/.", 
+           RowBox[{"x", "->", "#1"}]}], "&"}], "]"}], "[", 
+        RowBox[{
+         RowBox[{"iv", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], ",", 
+         RowBox[{"iv", "[", 
+          RowBox[{"[", "2", "]"}], "]"}]}], "]"}], "[", 
+       RowBox[{"d", "[", 
+        RowBox[{"[", "1", "]"}], "]"}], "]"}], "]"}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"Print", "[", "\"\<Denominator\>\"", "]"}], ";", 
+     RowBox[{"Print", "[", 
+      RowBox[{"d", "[", 
+       RowBox[{"[", "2", "]"}], "]"}], "]"}], ";", 
+     RowBox[{"PrintCoefficients", "[", 
+      RowBox[{"GetDenominator", "[", "r", "]"}], "]"}], ";", 
+     RowBox[{"PrintCoefficients", "[", 
+      RowBox[{
+       RowBox[{
+        RowBox[{"ChebyshevFourierCoefficients", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"BuildPolynomial", "[", 
+            RowBox[{"GetDenominator", "[", "r", "]"}], "]"}], "/.", 
+           RowBox[{"x", "->", "#1"}]}], "&"}], "]"}], "[", 
+        RowBox[{
+         RowBox[{"iv", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], ",", 
+         RowBox[{"iv", "[", 
+          RowBox[{"[", "2", "]"}], "]"}]}], "]"}], "[", 
+       RowBox[{"d", "[", 
+        RowBox[{"[", "2", "]"}], "]"}], "]"}], "]"}]}]}], "]"}]}]}], "Input",
+ InitializationCell->True,
+ CellChangeTimes->{{3.492869812104488*^9, 3.4928698177516623`*^9}, {
+   3.492869891570458*^9, 3.4928699097458057`*^9}, {3.492870375387167*^9, 
+   3.492870376062901*^9}, {3.492870584255968*^9, 3.4928705940308723`*^9}, {
+   3.4928706965868998`*^9, 3.492870721472663*^9}, {3.492881593558526*^9, 
+   3.492881776918681*^9}, {3.493795806530879*^9, 3.493795924456938*^9}, {
+   3.49379631199378*^9, 3.4937963145933228`*^9}, {3.493796387994608*^9, 
+   3.493796486750904*^9}, {3.4937965471897507`*^9, 3.493796558505426*^9}, {
+   3.493805739170041*^9, 3.4938057834983873`*^9}, {3.4938058881480103`*^9, 
+   3.493805925329713*^9}, {3.493874178708756*^9, 3.493874186483904*^9}, {
+   3.493874338159669*^9, 3.493874406794395*^9}, 3.493874454546054*^9, {
+   3.4938745310577593`*^9, 3.493874561117116*^9}, {3.4938926193297863`*^9, 
+   3.493892637053287*^9}, {3.493892669190502*^9, 3.4938926709524918`*^9}, {
+   3.4938928768393917`*^9, 3.493892925502527*^9}, {3.493892956291047*^9, 
+   3.4938929604528713`*^9}, {3.493893559403159*^9, 3.493893576176053*^9}, {
+   3.493894336251121*^9, 3.493894350330758*^9}, {3.493909707144492*^9, 
+   3.4939099202956047`*^9}, {3.4939105765310583`*^9, 3.493910589197607*^9}, {
+   3.493910695321988*^9, 3.493910885128817*^9}, {3.493911019614243*^9, 
+   3.493911709555645*^9}, {3.493911823559532*^9, 3.493912174282103*^9}, {
+   3.493912705384303*^9, 3.493912705845113*^9}, {3.493912752314147*^9, 
+   3.493912820162615*^9}, {3.493912857975328*^9, 3.493912893337117*^9}, {
+   3.493913082643484*^9, 3.493913088990753*^9}, {3.493913322240663*^9, 
+   3.493913358912436*^9}, {3.4939134117147827`*^9, 3.493913476321741*^9}, {
+   3.4939135324785967`*^9, 3.4939135751872177`*^9}, {3.493913645906138*^9, 
+   3.493913719030102*^9}, {3.493913752732934*^9, 3.493913830856188*^9}, {
+   3.493913917099558*^9, 3.493914040053131*^9}, 3.49391408545217*^9, {
+   3.493914154736795*^9, 3.4939142642176027`*^9}, {3.4939143189525146`*^9, 
+   3.493914683420632*^9}, 3.493914730409423*^9, {3.493915101172048*^9, 
+   3.493915102498296*^9}, {3.493915368638927*^9, 3.493915372643485*^9}, {
+   3.4939154605691853`*^9, 3.493915516253831*^9}, {3.493915759094751*^9, 
+   3.4939158923789883`*^9}, 3.493915929006215*^9, {3.493915969988257*^9, 
+   3.493916037573615*^9}, {3.493916078231243*^9, 3.493916196488854*^9}, {
+   3.493916229708518*^9, 3.4939163237988167`*^9}, {3.493916365848556*^9, 
+   3.493916374173376*^9}, {3.4939165003733387`*^9, 3.493916540169129*^9}, {
+   3.493916720694111*^9, 3.4939167247389812`*^9}, {3.4939168304844646`*^9, 
+   3.4939168372243032`*^9}, {3.49391688742059*^9, 3.493916945516487*^9}, {
+   3.493916980339246*^9, 3.493916998713822*^9}, {3.493917037560625*^9, 
+   3.493917041488573*^9}, {3.493917075737185*^9, 3.493917116018717*^9}, {
+   3.493918481099443*^9, 3.493918521637459*^9}, {3.493919342687397*^9, 
+   3.493919347030696*^9}, 3.493919443133625*^9, {3.4939195865611973`*^9, 
+   3.493919636678804*^9}, {3.4939196841054993`*^9, 3.49391969573746*^9}, {
+   3.4939197291243668`*^9, 3.493919781997229*^9}, {3.4939198656245613`*^9, 
+   3.493919907293303*^9}, {3.4939199415832243`*^9, 3.493920003743622*^9}, 
+   3.49392008087574*^9, {3.493920112450295*^9, 3.4939201152236834`*^9}, {
+   3.493920160649604*^9, 3.49392021300559*^9}, {3.493920294136874*^9, 
+   3.493920308546048*^9}, {3.4939203650172777`*^9, 3.493920636277412*^9}, {
+   3.49392066966096*^9, 3.493920730639372*^9}, {3.493920768342258*^9, 
+   3.493920983009716*^9}, {3.493921025718072*^9, 3.493921078098634*^9}, {
+   3.493921108353294*^9, 3.493921205485552*^9}, {3.4939218395930033`*^9, 
+   3.493921841723127*^9}, {3.493959792990859*^9, 3.493959808851922*^9}, {
+   3.493960541786892*^9, 3.4939605449822397`*^9}, {3.493960591161414*^9, 
+   3.493960594350234*^9}, {3.493960674212779*^9, 3.493960676587425*^9}, {
+   3.493960713262724*^9, 3.493960745560029*^9}, {3.4939609323899384`*^9, 
+   3.493960948807041*^9}, {3.4939609846888227`*^9, 3.4939609881978827`*^9}, {
+   3.493961041502603*^9, 3.493961049352743*^9}, {3.493961519971862*^9, 
+   3.493961548402898*^9}, {3.4939615790984583`*^9, 3.493961595079116*^9}, {
+   3.49396245429191*^9, 3.493962471051721*^9}, {3.493965823215475*^9, 
+   3.493965857264052*^9}, {3.493968287139833*^9, 3.493968291081657*^9}, {
+   3.493968354666209*^9, 3.493968358113456*^9}, {3.493968399866085*^9, 
+   3.49396840741356*^9}, {3.493968705902196*^9, 3.4939688128067703`*^9}, {
+   3.493969036024317*^9, 3.4939690375493307`*^9}, {3.4939692437417192`*^9, 
+   3.4939692470722313`*^9}, {3.493969453405238*^9, 3.493969461014018*^9}, {
+   3.4939701077112513`*^9, 3.4939701080594807`*^9}, {3.493970381435132*^9, 
+   3.4939704314823837`*^9}, {3.4939708733198643`*^9, 
+   3.4939708940816793`*^9}, {3.493970990795989*^9, 3.493970991019311*^9}, {
+   3.493971083733547*^9, 3.4939711002584867`*^9}, {3.493971238957334*^9, 
+   3.493971239308919*^9}, {3.4939725692921753`*^9, 3.493972587217936*^9}, {
+   3.493993783494821*^9, 3.493993786585691*^9}, {3.493993822247621*^9, 
+   3.49399383912796*^9}, {3.493993888841329*^9, 3.493993897236212*^9}, {
+   3.493993997097939*^9, 3.493994052885696*^9}, {3.493994133330653*^9, 
+   3.4939941462008543`*^9}, {3.493994229063561*^9, 3.493994230935931*^9}, {
+   3.493994860167581*^9, 3.493994876980629*^9}, {3.4940881122499247`*^9, 
+   3.494088156702479*^9}, {3.494088269871373*^9, 3.494088317644328*^9}, {
+   3.494088354285479*^9, 3.4940884363120003`*^9}, {3.494089938638357*^9, 
+   3.494090218755466*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "Build", " ", "table", " ", "with", " ", "approximations", " ", "to", " ", 
+    "the", " ", "function", " ", "f1", " ", "of", " ", "varying", " ", 
+    RowBox[{"degrees", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{"t1", "=", 
+    RowBox[{"Compute", "[", 
+     RowBox[{
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{"i", ",", "j"}], "}"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "0", ",", "30"}], "}"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"j", ",", "0", ",", "30"}], "}"}]}], "]"}], ",", 
+      RowBox[{"DiagonalIterator", "[", 
+       RowBox[{
+        RowBox[{"-", "2"}], ",", "2"}], "]"}], 
+      RowBox[{"(*", "AllIterator", "*)"}], ",", "ApproximateMiniMax", ",", 
+      "f1", ",", "0", ",", "225", ",", "64"}], "]"}]}], ";"}]}]], "Input",
+ CellChangeTimes->{{3.4939141213090467`*^9, 3.493914142087984*^9}, {
+   3.4939141731583157`*^9, 3.493914180269524*^9}, {3.493914604421954*^9, 
+   3.493914629988275*^9}, {3.493914699530487*^9, 3.493914711552185*^9}, {
+   3.493914746735099*^9, 3.493914778228085*^9}, {3.4939148264515133`*^9, 
+   3.493914838369763*^9}, {3.493914905068328*^9, 3.493914944315248*^9}, {
+   3.493915125843944*^9, 3.493915155662848*^9}, {3.493915255121297*^9, 
+   3.493915269161364*^9}, {3.493915320641284*^9, 3.493915394985353*^9}, {
+   3.493915470326496*^9, 3.493915472836515*^9}, {3.4939155271238823`*^9, 
+   3.493915663395574*^9}, {3.4939157334561653`*^9, 3.493915743087159*^9}, {
+   3.4939159612289133`*^9, 3.4939159615714893`*^9}, {3.493917056161675*^9, 
+   3.493917069942658*^9}, {3.493918506322486*^9, 3.493918510425737*^9}, {
+   3.4939192218847313`*^9, 3.493919301885673*^9}, {3.493919447285344*^9, 
+   3.4939194694195747`*^9}, {3.493919540495522*^9, 3.493919541774797*^9}, {
+   3.493921254140983*^9, 3.493921256473631*^9}, {3.493921832805325*^9, 
+   3.4939218361712923`*^9}, {3.49395812393612*^9, 3.49395815110984*^9}, {
+   3.493959816009472*^9, 3.4939598244708557`*^9}, 3.49396695012401*^9, {
+   3.493969486852585*^9, 3.493969498296987*^9}, {3.493969532653508*^9, 
+   3.493969533240308*^9}, {3.493994086913946*^9, 3.493994088450838*^9}, {
+   3.494089847236957*^9, 3.49408991398381*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{
+    RowBox[{
+     RowBox[{
+     "Build", " ", "table", " ", "with", " ", "approximations", " ", "to", 
+      " ", "the", " ", "function", " ", "f2", " ", "of", " ", "varying", " ", 
+      
+      RowBox[{"degrees", ".", " ", "We"}], " ", "cannot", " ", "take", " ", 
+      "the", " ", "left", " ", "interval", " ", "bound", " ", "to", " ", "be",
+       " ", "0", " ", "as", " ", "this", " ", "causes", " ", "overflows", " ",
+       "and", " ", "underflows", " ", "in", " ", "the", " ", "evaluation", 
+      " ", "of", " ", "f2", " ", "if", " ", "we", " ", "use", " ", 
+      "Mathematicas", " ", "built"}], "-", 
+     RowBox[{"in", " ", "MiniMax", " ", "approximation", " ", 
+      RowBox[{"function", ".", " ", "We"}], " ", "could", " ", "use", " ", 
+      "our", " ", "own", " ", "rational", " ", "Chebyshev", " ", 
+      "approximation", " ", "routine"}]}], ",", " ", 
+    RowBox[{
+    "but", " ", "this", " ", "does", " ", "not", " ", "seem", " ", "to", " ", 
+     "improve", " ", "the", " ", 
+     RowBox[{"results", "."}]}]}], " ", "*)"}], 
+  RowBox[{
+   RowBox[{"t2", "=", 
+    RowBox[{"Compute", "[", 
+     RowBox[{
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{"i", ",", "j"}], "}"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "0", ",", "30"}], "}"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"j", ",", "0", ",", "30"}], "}"}]}], "]"}], ",", 
+      RowBox[{"(*", 
+       RowBox[{"DiagonalIterator", "[", 
+        RowBox[{
+         RowBox[{"-", "2"}], ",", "2"}], "]"}], "*)"}], "AllIterator", ",", 
+      "ApproximateMiniMax", ",", "f2", ",", 
+      RowBox[{"1", "/", "100000000"}], ",", 
+      RowBox[{"1", "/", "15"}], ",", "64"}], "]"}]}], ";"}]}]], "Input",
+ CellChangeTimes->CompressedData["
+1:eJxTTMoPSmViYGCQAmIQve2x5kEZjleORy4cOgyi3wgsPQ6iP87vOAGilzX0
+/gXRn+fvZ5AF0gd+FnCC6IbVH7lA9LvWcH4QXenjLgyizxT5SYJoyaunpUD0
+Pn0lZRDdLMalAaKnM+62A9G8ZqVOIHrVw8d+IPqp5tIAEJ3WKhIOopk74hNA
+9IqiU5kgevcRqSwQfePb4wIQ3b3iTSOIfjFjXReIZjr1qBtEOwWrLwfRSzyN
+wHShDquBHJB21NpnCKLPBXo9BdGL558F0zv899jJA+n88D0eILpL8WUUiNbI
+XRsLogNv96eBaOXTO8D0+6YjNgpA+o86vy2Itjwq2QqirapbwfSmL7W2RkD6
+fPNjBxA9w5dB0BhIOwjyC4HoSyrsKSYgf1bzg+lJ8kIzi4D0OulCMH2DoWkf
+iA596XgBRAMAzSmrbA==
+  "]],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{
+   "Select", " ", "optimal", " ", "result", " ", "according", " ", "to", " ", 
+    "desired", " ", "precision", " ", "and", " ", "sorting", " ", 
+    RowBox[{"criterion", ".", " ", "Print"}], " ", "the", " ", "various", " ", 
+    RowBox[{"results", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", 
+   RowBox[{"PrintResult", "[", 
+    RowBox[{"First", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"Choose", "[", 
+        RowBox[{"ErrorCheck", "[", "SinglePrecision", "]"}], "]"}], "[", 
+       "MinimumTotalCoefficients", "]"}], "[", "t1", "]"}], "]"}], "]"}], 
+   "*)"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", 
+   RowBox[{"PrintResult", "[", 
+    RowBox[{"First", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"Choose", "[", 
+        RowBox[{"ErrorCheck", "[", "DoublePrecision", "]"}], "]"}], "[", 
+       "MaximumSymmetry", "]"}], "[", "t1", "]"}], "]"}], "]"}], "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", 
+   RowBox[{
+    RowBox[{"PrintResult", "[", 
+     RowBox[{"First", "[", 
+      RowBox[{
+       RowBox[{
+        RowBox[{"Choose", "[", 
+         RowBox[{"ErrorCheck", "[", "ExtendedPrecision", "]"}], "]"}], "[", 
+        "MinimumTotalCoefficients", "]"}], "[", "t1", "]"}], "]"}], "]"}], 
+    "\[IndentingNewLine]", 
+    RowBox[{"PrintResult", "[", 
+     RowBox[{"First", "[", 
+      RowBox[{
+       RowBox[{
+        RowBox[{"Choose", "[", 
+         RowBox[{"ErrorCheck", "[", "QuadruplePrecision", "]"}], "]"}], "[", 
+        "MinimumTotalCoefficients", "]"}], "[", "t1", "]"}], "]"}], "]"}]}], 
+   "*)"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", 
+   RowBox[{"PrintResult", "[", 
+    RowBox[{"First", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"Choose", "[", 
+        RowBox[{"ErrorCheck", "[", "SinglePrecision", "]"}], "]"}], "[", 
+       "MinimumTotalCoefficients", "]"}], "[", "t2", "]"}], "]"}], "]"}], 
+   "*)"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", 
+   RowBox[{"PrintResult", "[", 
+    RowBox[{"First", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"Choose", "[", 
+        RowBox[{"ErrorCheck", "[", "DoublePrecision", "]"}], "]"}], "[", 
+       "MaximumSymmetry", "]"}], "[", "t2", "]"}], "]"}], "]"}], "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{"(*", 
+   RowBox[{"PrintResult", "[", 
+    RowBox[{"First", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"Choose", "[", 
+        RowBox[{"ErrorCheck", "[", "ExtendedPrecision", "]"}], "]"}], "[", 
+       "MinimumTotalCoefficients", "]"}], "[", "t2", "]"}], "]"}], "]"}], 
+   "*)"}], "\[IndentingNewLine]", 
+  RowBox[{"(*", 
+   RowBox[{"PrintResult", "[", 
+    RowBox[{"First", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{"Choose", "[", 
+        RowBox[{"ErrorCheck", "[", "QuadruplePrecision", "]"}], "]"}], "[", 
+       "MaximumSymmetry", "]"}], "[", "t2", "]"}], "]"}], "]"}], 
+   "*)"}]}]], "Input",
+ CellChangeTimes->{{3.4939195154470463`*^9, 3.493919548041088*^9}, {
+   3.493919658457293*^9, 3.493919660052617*^9}, {3.493919716887143*^9, 
+   3.4939197195813932`*^9}, {3.493919787362628*^9, 3.49391979695287*^9}, {
+   3.493920275686967*^9, 3.493920278534438*^9}, {3.4939205017552*^9, 
+   3.493920505705964*^9}, {3.493921236579652*^9, 3.493921246842641*^9}, {
+   3.4939224846493607`*^9, 3.493922490535151*^9}, {3.4939596451449738`*^9, 
+   3.493959679272416*^9}, {3.4939653415076017`*^9, 3.493965353765112*^9}, {
+   3.49396826511211*^9, 3.4939682664997187`*^9}, {3.493968425934998*^9, 
+   3.493968446169962*^9}, 3.493968497173592*^9, {3.49396910568293*^9, 
+   3.493969108155958*^9}, 3.4939710012282124`*^9, {3.493971242350823*^9, 
+   3.4939712446001062`*^9}, {3.493971745313636*^9, 3.493971748961646*^9}, {
+   3.4939718451005363`*^9, 3.493971846185693*^9}, 3.493972002250676*^9, {
+   3.4939720601501102`*^9, 3.493972095862404*^9}, {3.493972755034545*^9, 
+   3.493972766919607*^9}, {3.493994110046728*^9, 3.4939941151903877`*^9}, {
+   3.49409038275976*^9, 3.494090423044764*^9}}]
+},
+AutoGeneratedPackage->Automatic,
+WindowSize->{1440, 786},
+WindowMargins->{{0, Automatic}, {Automatic, 0}},
+FrontEndVersion->"7.0 for Mac OS X x86 (32-bit) (November 10, 2008)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[545, 20, 28441, 737, 969, "Input",
+ InitializationCell->True],
+Cell[28989, 759, 2266, 42, 43, "Input"],
+Cell[31258, 803, 2273, 51, 73, "Input"],
+Cell[33534, 856, 3963, 94, 148, "Input"]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/kernel/util/bspline.c b/kernel/util/bspline.c
new file mode 100644
index 0000000..2bd318b
--- /dev/null
+++ b/kernel/util/bspline.c
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+static inline void bspline_help(const INT k, const R x, R *scratch, const INT j,
+  const INT ug, const INT og, const INT r)
+{
+  INT i; /* Row index of the de Boor scheme */
+  INT idx; /* Index in scratch */
+  R a; /* Alpha of de Boor scheme */
+
+  /* computation of one column */
+  for (i = og + r - k + 1, idx = og; idx >= ug; i--, idx--)
+  {
+    a = (x - (R)i) / ((R)(k - j));
+    scratch[idx] = (K(1.0) - a) * scratch[idx - 1] + a * scratch[idx];
+  }
+}
+
+/* Evaluate the cardinal B-Spline B_{n-1} supported on [0,n]. */
+R Y(bspline)(const INT k, const R _x, R *scratch)
+{
+  const R kk = (R)k;
+  R result_value;
+  INT r;
+  INT g1, g2; /* boundaries */
+  INT j, idx, ug, og; /* indices */
+  R a; /* Alpha of de Boor scheme*/
+  R x = _x;
+
+  result_value = K(0.0);
+
+  if (K(0.0) < x && x < kk)
+  {
+    /* Exploit symmetry around k/2, maybe. */
+    if ( (kk - x) < x)
+    {
+      x = kk - x;
+    }
+
+    r = (INT)LRINT(CEIL(x) - K(1.0));
+
+    /* Explicit case for first interval. */
+    if (r == 0)
+    {
+      result_value = K(1.0);
+      for (j = 0; j < k - 1; j++)
+        result_value *= x/((R)(j+1));
+      return result_value;
+    }
+
+
+    for (idx = 0; idx < k; idx++)
+      scratch[idx] = K(0.0);
+
+    scratch[k-r-1] = K(1.0);
+
+    /* Bounds of the algorithm. */
+    g1 = r;
+    g2 = k - 1 - r;
+    ug = g2;
+
+    /* g1 <= g2 */
+
+    for (j = 1, og = g2 + 1; j <= g1; j++, og++)
+    {
+      a = (x + (R)(k - r - og - 1)) / ((R)(k - j));
+      scratch[og] = (K(1.0) - a) * scratch[og-1];
+      bspline_help(k, x, scratch, j, ug + 1, og - 1, r);
+      a = (x + (R)(k - r - ug - 1)) / ((R)(k - j));
+      scratch[ug] = a * scratch[ug];
+    }
+
+    for (og-- ; j <= g2; j++)
+    {
+      bspline_help(k, x, scratch, j, ug + 1, og, r);
+      a = (x + (R)(k - r - ug - 1)) / ((R)(k - j));
+      scratch[ug] = a * scratch[ug];
+    }
+
+    for(; j < k; j++)
+    {
+      ug++;
+      bspline_help(k, x, scratch, j, ug, og, r);
+    }
+
+    result_value = scratch[k-1];
+  }
+
+  return(result_value);
+}
diff --git a/kernel/util/bspline.nb b/kernel/util/bspline.nb
new file mode 100644
index 0000000..151b446
--- /dev/null
+++ b/kernel/util/bspline.nb
@@ -0,0 +1,331 @@
+(* Content-type: application/vnd.wolfram.mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 8.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       157,          7]
+NotebookDataLength[     12709,        322]
+NotebookOptionsPosition[     12151,        299]
+NotebookOutlinePosition[     12506,        315]
+CellTagsIndexPosition[     12463,        312]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{"AppendTo", "[", 
+   RowBox[{"$Path", ",", " ", 
+    RowBox[{"NotebookDirectory", "[", "]"}]}], "]"}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{"<<", "PrintVector`"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"p", "=", "128"}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"$MaxExtraPrecision", " ", "=", " ", "50"}], ";"}]}], "Input",
+ InitializationCell->True,
+ CellChangeTimes->{{3.549634702210814*^9, 3.549634716094729*^9}, {
+   3.54963475060507*^9, 3.549634769956131*^9}, {3.549634805330505*^9, 
+   3.549634868328092*^9}, {3.549634905979645*^9, 3.5496349213932323`*^9}, {
+   3.549635055638236*^9, 3.549635061501844*^9}, {3.549635116950212*^9, 
+   3.5496352405796547`*^9}, {3.54963527180147*^9, 3.54963530770439*^9}, {
+   3.549635349048678*^9, 3.549635368016275*^9}, {3.549635412664104*^9, 
+   3.549635535898756*^9}, {3.549635568570756*^9, 3.54963560611071*^9}, {
+   3.549635636838379*^9, 3.549635810721334*^9}, {3.5496358541856203`*^9, 
+   3.549635855155631*^9}, {3.549635886792036*^9, 3.549635890046706*^9}, {
+   3.5496359305695744`*^9, 3.549635949377698*^9}, {3.549635986789765*^9, 
+   3.54963600448437*^9}, {3.54963603618716*^9, 3.549636064981591*^9}, {
+   3.549636096181632*^9, 3.549636172106222*^9}, {3.54963620325441*^9, 
+   3.549636225437134*^9}, {3.549969382495657*^9, 3.549969383158414*^9}, {
+   3.5499694233836393`*^9, 3.54996946084592*^9}, {3.549969535222356*^9, 
+   3.549969536789812*^9}, 3.549969635878057*^9, {3.5499696953164377`*^9, 
+   3.549969704357205*^9}, {3.549969766807899*^9, 3.5499697717009974`*^9}, {
+   3.549973560425764*^9, 3.5499735638642807`*^9}, {3.549973998320407*^9, 
+   3.549974006151249*^9}, {3.54997643532631*^9, 3.549976516049933*^9}, {
+   3.5499772913823643`*^9, 3.549977293554356*^9}, {3.550336991444936*^9, 
+   3.55033699625858*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"B", "-", 
+    RowBox[{"Spline", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"MyBSpline", "[", "n_", "]"}], "[", "x_", "]"}], ":=", 
+   RowBox[{"BSplineBasis", "[", 
+    RowBox[{"n", ",", 
+     RowBox[{"x", "/", 
+      RowBox[{"(", 
+       RowBox[{"n", "+", "1"}], ")"}]}]}], "]"}]}]}]], "Input",
+ InitializationCell->True,
+ CellChangeTimes->{{3.550337126179674*^9, 3.5503371353540993`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{
+    RowBox[{"Expand", " ", "B"}], "-", 
+    RowBox[{"Splines", " ", "on", " ", "intervals", " ", 
+     RowBox[{"explicitely", "."}]}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{"ExpandBSplineExplicit", "[", "n_", "]"}], ":=", 
+   RowBox[{"Map", "[", 
+    RowBox[{
+     RowBox[{"Function", "[", 
+      RowBox[{"y", ",", " ", 
+       RowBox[{"{", 
+        RowBox[{
+         RowBox[{"CForm", "[", 
+          RowBox[{"HornerForm", "[", 
+           RowBox[{"ReplaceAll", "[", 
+            RowBox[{
+             RowBox[{"y", "[", 
+              RowBox[{"[", "1", "]"}], "]"}], ",", 
+             RowBox[{"x", "\[Rule]", "x"}]}], 
+            RowBox[{"(*", 
+             RowBox[{"-", 
+              RowBox[{"y", "[", 
+               RowBox[{"[", 
+                RowBox[{"2", ",", "1", ",", "1"}], "]"}], "]"}]}], "*)"}], 
+            "]"}], 
+           RowBox[{"(*", 
+            RowBox[{",", 
+             RowBox[{"{", "x", "}"}]}], "*)"}], "]"}], "]"}], ",", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}]}], "}"}]}], "]"}], ",", 
+     RowBox[{"Sort", "[", 
+      RowBox[{
+       RowBox[{"Map", "[", 
+        RowBox[{
+         RowBox[{"Function", "[", 
+          RowBox[{"y", ",", 
+           RowBox[{"{", 
+            RowBox[{
+             RowBox[{"y", "[", 
+              RowBox[{"[", "1", "]"}], "]"}], ",", 
+             RowBox[{"Interval", "[", 
+              RowBox[{"{", 
+               RowBox[{
+                RowBox[{"y", "[", 
+                 RowBox[{"[", 
+                  RowBox[{"2", ",", "1"}], "]"}], "]"}], ",", " ", 
+                RowBox[{"y", "[", 
+                 RowBox[{"[", 
+                  RowBox[{"2", ",", "5"}], "]"}], "]"}]}], "}"}], "]"}]}], 
+            "}"}]}], "]"}], ",", 
+         RowBox[{
+          RowBox[{"PiecewiseExpand", "[", 
+           RowBox[{
+            RowBox[{"MyBSpline", "[", "n", "]"}], "[", "x", "]"}], "]"}], "[", 
+          RowBox[{"[", "1", "]"}], "]"}]}], "]"}], ",", 
+       RowBox[{"Function", "[", 
+        RowBox[{
+         RowBox[{"{", 
+          RowBox[{"x", ",", "y"}], "}"}], ",", 
+         RowBox[{"Greater", "[", 
+          RowBox[{
+           RowBox[{"y", "[", 
+            RowBox[{"[", "2", "]"}], "]"}], ",", 
+           RowBox[{"x", "[", 
+            RowBox[{"[", "2", "]"}], "]"}]}], "]"}]}], "]"}]}], "]"}]}], 
+    "]"}], 
+   RowBox[{"(*", 
+    RowBox[{"//", "MatrixForm"}], "*)"}]}]}]], "Input",
+ InitializationCell->True,
+ CellChangeTimes->{{3.549634702210814*^9, 3.549634716094729*^9}, {
+   3.54963475060507*^9, 3.549634769956131*^9}, {3.549634805330505*^9, 
+   3.549634868328092*^9}, {3.549634905979645*^9, 3.5496349213932323`*^9}, {
+   3.549635055638236*^9, 3.549635061501844*^9}, {3.549635116950212*^9, 
+   3.5496352405796547`*^9}, {3.54963527180147*^9, 3.54963530770439*^9}, {
+   3.549635349048678*^9, 3.549635368016275*^9}, {3.549635412664104*^9, 
+   3.549635535898756*^9}, {3.549635568570756*^9, 3.54963560611071*^9}, {
+   3.549635636838379*^9, 3.549635810721334*^9}, {3.5496358541856203`*^9, 
+   3.549635855155631*^9}, {3.549635886792036*^9, 3.549635890046706*^9}, {
+   3.5496359305695744`*^9, 3.549635949377698*^9}, {3.549635986789765*^9, 
+   3.54963600448437*^9}, {3.54963603618716*^9, 3.549636064981591*^9}, {
+   3.549636096181632*^9, 3.549636172106222*^9}, {3.54963620325441*^9, 
+   3.549636225437134*^9}, {3.549969382495657*^9, 3.549969383158414*^9}, {
+   3.5499694233836393`*^9, 3.54996946084592*^9}, {3.549969535222356*^9, 
+   3.549969536789812*^9}, 3.549969635878057*^9, {3.5499696953164377`*^9, 
+   3.549969704357205*^9}, {3.549969766807899*^9, 3.5499697717009974`*^9}, {
+   3.549973560425764*^9, 3.5499735638642807`*^9}, {3.549973998320407*^9, 
+   3.549974006151249*^9}, {3.54997643532631*^9, 3.549976516049933*^9}, {
+   3.5499772913823643`*^9, 3.549977293554356*^9}, {3.550336991444936*^9, 
+   3.550337021979643*^9}, {3.550337055667203*^9, 3.550337059627644*^9}, {
+   3.550337148768162*^9, 3.550337189200198*^9}, {3.5503372288506823`*^9, 
+   3.550337230260098*^9}}],
+
+Cell[BoxData[
+ RowBox[{"For", "[", 
+  RowBox[{
+   RowBox[{"j", "=", "0"}], ",", 
+   RowBox[{"j", "<", "5"}], ",", 
+   RowBox[{"j", "++"}], ",", 
+   RowBox[{"Print", "[", 
+    RowBox[{
+     RowBox[{"ExpandBSplineExplicit", "[", "j", "]"}], "[", 
+     RowBox[{"[", 
+      RowBox[{"1", ",", "1"}], "]"}], "]"}], "]"}]}], "]"}]], "Input",
+ CellChangeTimes->{{3.550337210230673*^9, 3.5503372342864513`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{
+    RowBox[{"Expand", " ", "B"}], "-", 
+    RowBox[{
+    "Splines", " ", "on", " ", "intervals", " ", "in", " ", "Chebyshev", " ", 
+     
+     RowBox[{"polynomials", "."}]}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{
+     RowBox[{
+      RowBox[{
+       RowBox[{"ChebyshevFourierCoefficients", "[", "f_", "]"}], "[", 
+       RowBox[{"a_", ",", "b_"}], "]"}], "[", "n_", "]"}], ":=", 
+     RowBox[{"Module", "[", 
+      RowBox[{
+       RowBox[{"{", 
+        RowBox[{
+         RowBox[{"x", "=", 
+          RowBox[{"N", "[", 
+           RowBox[{
+            RowBox[{"Table", "[", 
+             RowBox[{
+              RowBox[{"f", "[", 
+               RowBox[{"a", "+", 
+                RowBox[{
+                 FractionBox[
+                  RowBox[{"b", "-", "a"}], "2"], 
+                 RowBox[{"(", 
+                  RowBox[{"1", "+", 
+                   RowBox[{"Cos", "[", 
+                    FractionBox[
+                    RowBox[{"\[Pi]", "*", 
+                    RowBox[{"(", 
+                    RowBox[{"j", "+", 
+                    RowBox[{"1", "/", "2"}]}], ")"}]}], 
+                    RowBox[{"n", "+", "1"}]], "]"}]}], ")"}]}]}], "]"}], ",", 
+              
+              RowBox[{"{", 
+               RowBox[{"j", ",", "0", ",", "n"}], "}"}]}], "]"}], ",", "p"}], 
+           "]"}]}], ",", 
+         RowBox[{"F", "=", 
+          RowBox[{"N", "[", 
+           RowBox[{
+            RowBox[{"Table", "[", 
+             RowBox[{
+              RowBox[{
+               FractionBox[
+                RowBox[{"2", "-", 
+                 RowBox[{"DiscreteDelta", "[", "i", "]"}]}], "2"], 
+               RowBox[{"Cos", "[", 
+                FractionBox[
+                 RowBox[{"\[Pi]", "*", 
+                  RowBox[{"(", "i", ")"}], "*", 
+                  RowBox[{"(", 
+                   RowBox[{"j", "+", 
+                    RowBox[{"1", "/", "2"}]}], ")"}]}], 
+                 RowBox[{"n", "+", "1"}]], "]"}]}], ",", 
+              RowBox[{"{", 
+               RowBox[{"i", ",", "0", ",", "n"}], "}"}], ",", 
+              RowBox[{"{", 
+               RowBox[{"j", ",", "0", ",", "n"}], "}"}]}], "]"}], ",", "p"}], 
+           "]"}]}]}], "}"}], ",", 
+       RowBox[{"Return", "[", 
+        RowBox[{
+         FractionBox["2", 
+          RowBox[{"n", "+", "1"}]], 
+         RowBox[{"F", ".", "x"}]}], "]"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"ExpandBSplineChebyshev", "[", "n_", "]"}], ":=", 
+    RowBox[{"Table", "[", 
+     RowBox[{
+      RowBox[{
+       RowBox[{
+        RowBox[{"ChebyshevFourierCoefficients", "[", 
+         RowBox[{"MyBSpline", "[", "n", "]"}], "]"}], "[", 
+        RowBox[{"j", ",", 
+         RowBox[{"j", "+", "1"}]}], "]"}], "[", "n", "]"}], ",", 
+      RowBox[{"{", 
+       RowBox[{"j", ",", "0", ",", "n"}], "}"}]}], "]"}]}]}]}]], "Input",
+ InitializationCell->True,
+ CellChangeTimes->{{3.549969102845145*^9, 3.549969299396895*^9}, {
+  3.549969337126582*^9, 3.549969337321589*^9}, {3.5499697204613237`*^9, 
+  3.549969758459947*^9}, {3.5499698097967663`*^9, 3.549969809916649*^9}, {
+  3.5499699610904818`*^9, 3.549969963081028*^9}, {3.549990305049838*^9, 
+  3.549990412459839*^9}, {3.549990458456641*^9, 3.5499905121793623`*^9}, {
+  3.5499905534586554`*^9, 3.549990564757566*^9}, {3.549990623396491*^9, 
+  3.5499906590553226`*^9}, {3.5503370884412127`*^9, 3.5503370999831448`*^9}, {
+  3.5503372238964148`*^9, 3.5503372246457357`*^9}}],
+
+Cell[BoxData[
+ RowBox[{"For", "[", 
+  RowBox[{
+   RowBox[{"j", "=", "0"}], ",", 
+   RowBox[{"j", "<", "5"}], ",", 
+   RowBox[{"j", "++"}], ",", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"ExpandBSplineChebyshev", "[", "j", "]"}]}], ";", 
+    RowBox[{"Print", "[", 
+     RowBox[{"FormatVector", "[", 
+      RowBox[{
+       RowBox[{"N", "[", 
+        RowBox[{
+         RowBox[{"Flatten", "[", "x", "]"}], ",", "64"}], "]"}], ",", 
+       RowBox[{"\"\<b\>\"", " ", "<>", 
+        RowBox[{"ToString", "[", "j", "]"}], "<>", "\"\<c\>\""}]}], "]"}], 
+     "]"}]}]}], "]"}]], "Input",
+ CellChangeTimes->{{3.5499693142565327`*^9, 3.54996935018155*^9}, {
+  3.549969392511298*^9, 3.549969407882599*^9}, {3.549969446089657*^9, 
+  3.5499694521128674`*^9}, {3.549969483055113*^9, 3.549969489614726*^9}, {
+  3.549969643697307*^9, 3.549969689799439*^9}, {3.5499697912941427`*^9, 
+  3.54996989447081*^9}, {3.5499699248576*^9, 3.549969954769314*^9}, {
+  3.54997044702771*^9, 3.549970603834189*^9}, {3.5499706342271633`*^9, 
+  3.549970653825315*^9}, {3.549970689790515*^9, 3.54997076888761*^9}, {
+  3.5499730705908957`*^9, 3.549973156825615*^9}, {3.5499772633931713`*^9, 
+  3.549977266001943*^9}, {3.549990667840763*^9, 3.5499906681502943`*^9}, {
+  3.5503372454872007`*^9, 3.5503372457827473`*^9}}]
+},
+WindowSize->{1440, 765},
+WindowMargins->{{0, Automatic}, {Automatic, 0}},
+FrontEndVersion->"8.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 6, \
+2010)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[557, 20, 1822, 31, 73, "Input",
+ InitializationCell->True],
+Cell[2382, 53, 485, 14, 43, "Input",
+ InitializationCell->True],
+Cell[2870, 69, 4065, 93, 58, "Input",
+ InitializationCell->True],
+Cell[6938, 164, 402, 11, 27, "Input"],
+Cell[7343, 177, 3505, 91, 94, "Input",
+ InitializationCell->True],
+Cell[10851, 270, 1296, 27, 27, "Input"]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/kernel/util/damp.c b/kernel/util/damp.c
new file mode 100644
index 0000000..1268bf8
--- /dev/null
+++ b/kernel/util/damp.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+/**
+ * Compute damping factor for modified Fejer kernel:
+ * /f$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)/f$
+ */
+R Y(modified_fejer)(const INT N, const INT kk)
+{
+  return (K(2.0) / ((R) (N * N))
+      * (K(1.0) - FABS(K(2.0) * ((R) kk) + K(1.0) ) / ((R) N)));
+}
+
+/** Compute damping factor for modified Jackson kernel. */
+R Y(modified_jackson2)(const INT N, const INT kk)
+{
+  INT kj;
+  const R n = (((R) N) / K(2.0) + K(1.0) ) / K(2.0);
+  R result, k;
+
+  for (result = K(0.0), kj = kk; kj <= kk + 1; kj++)
+  {
+    k = (R)(ABS(kj));
+
+    if (k / n < K(1.0) )
+      result += K(1.0)
+          - (K(3.0) * k + K(6.0) * n * POW(k, K(2.0) )
+              - K(3.0) * POW(k, K(3.0) ))
+              / (K(2.0) * n * (K(2.0) * POW(n, K(2.0) ) + K(1.0) ));
+    else
+      result += (K(2.0) * n - k) * (POW(2 * n - k, K(2.0) ) - K(1.0) )
+          / (K(2.0) * n * (K(2.0) * POW(n, K(2.0) ) + K(1.0) ));
+  }
+
+  return result;
+}
+
+/** Compute damping factor for modified generalised Jackson kernel. */
+R Y(modified_jackson4)(const INT N, const INT kk)
+{
+  INT kj;
+  const R n = (((R) N) / K(2.0) + K(3.0) ) / K(4.0);
+  const R normalisation = (K(2416.0) * POW(n, K(7.0) )
+      + K(1120.0) * POW(n, K(5.0) ) + K(784.0) * POW(n, K(3.0) ) + K(720.0) * n);
+  R result, k;
+
+  for (result = K(0.0), kj = kk; kj <= kk + 1; kj++)
+  {
+    k = (R)(ABS(kj));
+
+    if (k / n < K(1.0) )
+      result += K(1.0)
+          - (K(1260.0) * k
+              + (K(1680.0) * POW(n, K(5.0) ) + K(2240.0) * POW(n, K(3.0) )
+                  + K(2940.0) * n) * POW(k, K(2.0) )
+              - K(1715.0) * POW(k, K(3.0) )
+              - (K(560.0) * POW(n, K(3.0) ) + K(1400.0) * n) * POW(k, K(4.0) )
+              + K(490.0) * POW(k, K(5.0) ) + K(140.0) * n * POW(k, K(6.0) )
+              - K(35.0) * POW(k, K(7.0) )) / normalisation;
+
+    if ((K(1.0) <= k / n) && (k / n < K(2.0) ))
+      result += ((K(2472.0) * POW(n, K(7.0) ) + K(336.0) * POW(n, K(5.0) )
+          + K(3528.0) * POW(n, K(3.0) ) - K(1296.0) * n)
+          - (K(392.0) * POW(n, K(6.0) ) - K(3920.0) * POW(n, K(4.0) )
+              + K(8232.0) * POW(n, K(2.0) ) - K(756.0) )*k
+          - (K(504.0)*POW(n, K(5.0)) + K(10080.0)*POW(n, K(3.0))
+              - K(5292.0)*n)*POW(k, K(2.0)) - (K(1960.0)*POW(n, K(4.0))
+              - K(7840.0)*POW(n, K(2.0)) + K(1029.0))*POW(k, K(3.0))
+          + (K(2520.0)*POW(n, K(3.0)) - K(2520.0)*n) * POW(k, K(4.0))
+          - (K(1176.0)*POW(n, K(2.0)) - K(294.0)) * POW(k, K(5.0))
+          + K(252.0)*n*POW(k, K(6.0)) - K(21.0)*POW(k, K(7.0)))/normalisation;
+
+    if ((K(2.0) <= k / n) && (k / n < K(3.0) ))
+      result += (-(K(1112.0) * POW(n, K(7.0) ) - K(12880.0) * POW(n, K(5.0) )
+          + K(7448.0) * POW(n, K(3.0) ) - K(720.0) * n)
+          + (K(12152.0) * POW(n, K(6.0) ) - K(27440.0) * POW(n, K(4.0) )
+              + K(8232.0) * POW(n, K(2.0) ) - K(252.0) )*k
+          - (K(19320.0)*POW(n, K(5.0)) - K(21280.0)*POW(n, K(3.0))
+              + K(2940.0)*n)*POW(k, K(2.0)) + (K(13720.0)*POW(n, K(4.0))
+              - K(7840.0)*POW(n, K(2.0)) + K(343.0))*POW(k, K(3.0))
+          - (K(5320.0)*POW(n, K(3.0)) - K(1400.0)*n)*POW(k, K(4.0))
+          + (K(1176.0)*POW(n, K(2.0)) - K(98.0))*POW(k, K(5.0))
+          - K(140.0)*n*POW(k, K(6.0)) + K(7.0) * POW(k, K(7.0)))/normalisation;
+
+    if ((K(3.0) <= k / n) && (k / n < K(4.0) ))
+      result += ((4 * n - k)
+          * (POW(4 * n - k, K(2.0) ) - K(1.0) )*(POW(4*n-k, K(2.0))
+              - K(4.0))*(POW(4*n-k, K(2.0)) - K(9.0)))/normalisation;
+        }
+
+  return result;
+}
+
+/** Compute damping factor for modified Sobolev kernel. */
+R Y(modified_sobolev)(const R mu, const INT kk)
+{
+  R result;
+  INT kj, k;
+
+  for (result = K(0.0), kj = kk; kj <= kk + 1; kj++)
+  {
+    k = ABS(kj);
+    if (k == 0)
+      result += K(1.0);
+    else
+      result += POW((R) k, -K(2.0) * mu);
+  }
+
+  return result;
+}
+
+/** Comput damping factor for modified multiquadric kernel. */
+R Y(modified_multiquadric)(const R mu, const R c, const INT kk)
+{
+  R result;
+  INT kj, k;
+
+  for (result = K(0.0), kj = kk; kj <= kk + 1; kj++)
+  {
+    k = ABS(kj);
+    result += POW((R)(k * k) + c * c, -mu);
+  }
+
+  return result;
+}
diff --git a/kernel/util/error.c b/kernel/util/error.c
index 648fe3d..5cb7e4b 100644
--- a/kernel/util/error.c
+++ b/kernel/util/error.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -33,7 +33,7 @@ static R cnrm1(const C *x, const INT n)
 
 static R nrm1(const R *x, const INT n)
 {
-  int k;
+  INT k;
   R nrm = K(0.0);
 
   for (k = 0; k < n; k++)
@@ -44,7 +44,7 @@ static R nrm1(const R *x, const INT n)
 
 static R cerr2(const C *x, const C *y, const INT n)
 {
-  int k;
+  INT k;
   R err = K(0.0);
 
   if (!y)
@@ -63,7 +63,7 @@ static R cerr2(const C *x, const C *y, const INT n)
 
 static R err2(const R *x, const R *y, const INT n)
 {
-  int k;
+  INT k;
   R err = K(0.0);
 
   if (!y)
@@ -82,7 +82,7 @@ static R err2(const R *x, const R *y, const INT n)
 
 static R cerri(const C *x, const C *y, const INT n)
 {
-  int k;
+  INT k;
   R err = K(0.0), t;
 
   if (!y)
@@ -107,7 +107,7 @@ static R cerri(const C *x, const C *y, const INT n)
 
 static R erri(const R *x, const R *y, const INT n)
 {
-  int k;
+  INT k;
   R err = K(0.0), t;
 
   if (!y)
@@ -132,21 +132,21 @@ static R erri(const R *x, const R *y, const INT n)
 
 /** computes \f$\frac{\|x-y\|_{\infty}}{\|x\|_{\infty}} \f$
  */
-R X(error_l_infty_complex)(const C *x, const C *y, const INT n)
+R Y(error_l_infty_complex)(const C *x, const C *y, const INT n)
 {
   return (cerri(x, y, n)/cerri(x, 0, n));
 }
 
 /** computes \f$\frac{\|x-y\|_{\infty}}{\|x\|_{\infty}} \f$
  */
-R X(error_l_infty_double)(const R *x, const R *y, const INT n)
+R Y(error_l_infty_double)(const R *x, const R *y, const INT n)
 {
   return (erri(x, y, n)/erri(x, 0, n));
 }
 
 /** computes \f$\frac{\|x-y\|_{\infty}}{\|z\|_1} \f$
  */
-R X(error_l_infty_1_complex)(const C *x, const C *y, const INT n,
+R Y(error_l_infty_1_complex)(const C *x, const C *y, const INT n,
   const C *z, const INT m)
 {
   return (cerri(x, y, n)/cnrm1(z, m));
@@ -154,7 +154,7 @@ R X(error_l_infty_1_complex)(const C *x, const C *y, const INT n,
 
 /** computes \f$\frac{\|x-y\|_{\infty}}{\|z\|_1} \f$
  */
-R X(error_l_infty_1_double)(const R *x, const R *y, const INT n, const R *z,
+R Y(error_l_infty_1_double)(const R *x, const R *y, const INT n, const R *z,
   const INT m)
 {
   return (erri(x, y, n)/nrm1(z, m));
@@ -162,14 +162,14 @@ R X(error_l_infty_1_double)(const R *x, const R *y, const INT n, const R *z,
 
 /** computes \f$\frac{\|x-y\|_2}{\|x\|_2} \f$
  */
-R X(error_l_2_complex)(const C *x, const C *y, const INT n)
+R Y(error_l_2_complex)(const C *x, const C *y, const INT n)
 {
   return (cerr2(x, y, n)/cerr2(x, 0, n));
 }
 
 /** computes \f$\frac{\|x-y\|_2}{\|x\|_2} \f$
  */
-R X(error_l_2_double)(const R *x, const R *y, const INT n)
+R Y(error_l_2_double)(const R *x, const R *y, const INT n)
 {
   return (err2(x, y, n)/err2(x, NULL, n));
 }
diff --git a/kernel/util/float.c b/kernel/util/float.c
index 67d9ad5..73a0eb0 100644
--- a/kernel/util/float.c
+++ b/kernel/util/float.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -20,7 +20,7 @@
 
 #include "infft.h"
 
-R X(float_property)(const float_property p)
+R Y(float_property)(const float_property p)
 {
   const R base = FLT_RADIX;
   const R eps = EPSILON;
@@ -65,7 +65,7 @@ R X(float_property)(const float_property p)
 
   if (p == NFFT_EPSILON)
     return eps;
-  else if (p == NFFT_SAFE_MIN)
+  else if (p == NFFT_SAFE__MIN)
     return sfmin;
   else if (p == NFFT_BASE)
     return base;
@@ -88,3 +88,16 @@ R X(float_property)(const float_property p)
 
   return K(-1.0);
 } /* dlamch_ */
+
+/** Computes double /f$\prod_{t=0}^{d-1} v_t/f$. */
+R Y(prod_real)(R *vec, INT d)
+{
+  INT t;
+  R prod;
+
+  prod = K(1.0);
+  for (t = 0; t < d; t++)
+    prod *= vec[t];
+
+  return prod;
+}
diff --git a/kernel/util/int.c b/kernel/util/int.c
index 8569ebf..57fb50c 100644
--- a/kernel/util/int.c
+++ b/kernel/util/int.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -20,15 +20,15 @@
 
 #include "infft.h"
 
-int X(exp2i)(const int a)
+INT Y(exp2i)(const INT a)
 {
   return (1U << a);
 }
 
-int X(log2i)(const int m)
+INT Y(log2i)(const INT m)
 {
-  int l = 0;
-  int mm = m;
+  INT l = 0;
+  INT mm = m;
 
   while (mm > 0)
   {
@@ -40,13 +40,15 @@ int X(log2i)(const int m)
 
 /** Computes /f$n\ge N/f$ such that /f$n=2^j,\, j\in\mathhb{N}_0/f$.
  */
-int X(next_power_of_2)(const int N)
+INT Y(next_power_of_2)(const INT N)
 {
-  int n,i,logn;
-  int N_is_not_power_of_2=0;
+  INT n,i,logn;
+  INT N_is_not_power_of_2=0;
 
   if (N == 0)
     return 1;
+  else if (N == 1)
+    return 2;
   else
   {
     n = N;
@@ -71,10 +73,10 @@ int X(next_power_of_2)(const int N)
 
 /** Computes /f$n\ge N/f$ such that /f$n=2^j,\, j\in\mathhb{N}_0/f$.
  */
-void X(next_power_of_2_exp)(const int N, int *N2, int *t)
+void Y(next_power_of_2_exp)(const INT N, INT *N2, INT *t)
 {
-  int n,i,logn;
-  int N_is_not_power_of_2=0;
+  INT n,i,logn;
+  INT N_is_not_power_of_2=0;
 
   if (N == 0)
   {
@@ -83,8 +85,8 @@ void X(next_power_of_2_exp)(const int N, int *N2, int *t)
   }
   else
   {
-    n=N;
-    logn=0;
+    n = N;
+    logn = 0;
     while (n != 1)
     {
       if (n%2 == 1)
diff --git a/kernel/util/lambda.c b/kernel/util/lambda.c
index 0a98438..5271dcb 100644
--- a/kernel/util/lambda.c
+++ b/kernel/util/lambda.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -192,7 +192,7 @@
 static inline R evaluate_rational(const R z_)
 {
   R z = z_, s1, s2;
-  int i;
+  INT i;
 
   if (z <= K(1.0))
   {
@@ -201,7 +201,7 @@ static inline R evaluate_rational(const R z_)
     for (i = N - 2; i >= 0; --i)
     {
       s1 *= z;
-      s2 *= (z + i);
+      s2 *= z + (R)(i);
       s1 += num[i];
     }
   }
@@ -213,14 +213,14 @@ static inline R evaluate_rational(const R z_)
     for (i = 1; i < N; ++i)
     {
       s1 *= z;
-      s2 *= K(1.0) + (i-1)*z;
+      s2 *= K(1.0) + (R)(i-1) * z;
       s1 += num[i];
     }
   }
   return s1 / s2;
 }
 
-R X(lambda)(const R z, const R eps)
+R Y(lambda)(const R z, const R eps)
 {
   const R d = K(1.0) - eps, zpg = z + g, emh = eps - K(0.5);
   return EXP(-LOG1P(d / (zpg + emh)) * (z + emh)) *
@@ -228,7 +228,7 @@ R X(lambda)(const R z, const R eps)
     (evaluate_rational(z + eps) / evaluate_rational(z + K(1.0)));
 }
 
-R X(lambda2)(const R mu, const R nu)
+R Y(lambda2)(const R mu, const R nu)
 {
   if (mu == K(0.0))
     return K(1.0);
diff --git a/kernel/util/malloc.c b/kernel/util/malloc.c
index d9b38b4..683dcb2 100644
--- a/kernel/util/malloc.c
+++ b/kernel/util/malloc.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -22,45 +22,45 @@
 
 #include "api.h"
 
-X(malloc_type_function) X(malloc_hook) = 0;
-X(free_type_function) X(free_hook) = 0;
-X(die_type_function) X(die_hook) = 0;
+Y(malloc_type_function) Y(malloc_hook) = 0;
+Y(free_type_function) Y(free_hook) = 0;
+Y(die_type_function) Y(die_hook) = 0;
 
-void *X(malloc)(size_t n)
+void *Y(malloc)(size_t n)
 {
   void *p;
 
-  if (X(malloc_hook))
-    return nfft_malloc_hook(n);
+  if (Y(malloc_hook))
+    return Y(malloc_hook)(n);
 
   if (n == 0)
     n = 1;
 
-  p = Z(malloc)(n);
+  p = FFTW(malloc)(n);
 
   if (!p)
-    X(die)(STRINGIZE(X(malloc)) ": out of memory\n");
+    Y(die)(STRINGIZE(Y(malloc)) ": out of memory\n");
 
   return p;
 }
 
-void X(free)(void *p)
+void Y(free)(void *p)
 {
   if (p)
   {
-    if (X(free_hook))
+    if (Y(free_hook))
     {
-      X(free_hook)(p);
+      Y(free_hook)(p);
       return;
     }
-    Z(free)(p);
+    FFTW(free)(p);
   }
 }
 
-void X(die)(char *s)
+void Y(die)(const char *s)
 {
-  if (X(die_hook))
-    X(die_hook)(s);
+  if (Y(die_hook))
+    Y(die_hook)(s);
 
   exit(EXIT_FAILURE);
 }
diff --git a/kernel/util/print.c b/kernel/util/print.c
new file mode 100644
index 0000000..c3338c2
--- /dev/null
+++ b/kernel/util/print.c
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include <stdio.h>
+#include "infft.h"
+
+/** Print real vector to standard output. */
+void Y(vpr_double)(R *x, const INT n, const char *text)
+{
+  INT k;
+
+  if (x == NULL)
+  {
+    printf("null pointer\n");
+    fflush(stdout);
+    exit(-1);
+  }
+
+  if (text != NULL)
+  {
+    printf ("\n %s, adr=%p\n", text, (void*)x);
+
+    for (k = 0; k < n; k++)
+    {
+      if (k%8 == 0)
+        printf("%6td.\t", k);
+
+      printf("%+.1" __FES__ ",", x[k]);
+
+      if (k%8 == 7)
+        printf("\n");
+    }
+
+    if (n%8 != 0)
+      printf("\n");
+  }
+  else
+    for (k = 0; k < n; k++)
+      printf("%+" __FES__ ",\n", x[k]);
+
+  fflush(stdout);
+}
+
+/** Print complex vector to standard output. */
+void Y(vpr_complex)(C *x, const INT n, const char *text)
+{
+  INT k;
+
+  if(text != NULL)
+  {
+    printf("\n %s, adr=%p\n", text, (void*)x);
+    for (k = 0; k < n; k++)
+    {
+      if (k%4 == 0)
+        printf("%6td.\t", k);
+
+      printf("%+.1" __FES__ "%+.1" __FES__ "i,", CREAL(x[k]), CIMAG(x[k]));
+
+      if (k%4==3)
+        printf("\n");
+    }
+    if (n%4!=0)
+      printf("\n");
+  }
+  else
+    for (k = 0; k < n; k++)
+      printf("%+" __FES__ "%+" __FES__ "i,\n", CREAL(x[k]), CIMAG(x[k]));
+
+  fflush(stdout);
+}
diff --git a/kernel/util/sinc.c b/kernel/util/rand.c
similarity index 54%
copy from kernel/util/sinc.c
copy to kernel/util/rand.c
index fcccba6..b41d17a 100644
--- a/kernel/util/sinc.c
+++ b/kernel/util/rand.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -20,28 +20,44 @@
 
 #include "infft.h"
 
-R X(sinc)(const R x)
+R Y(drand48)(void)
 {
-  /* Based on sinc function from Boost C++ library. */
-  const R b =  EPSILON;
-  const R bs = SQRT(b);
-  const R bs2 = SQRT(bs);
-
-  if (FABS(x) >= bs2)
-    return SIN(x)/x;
-  else
-  {
-    R r = K(1.0);
-
-    if (FABS(x) >= b)
-    {
-      const R x2 = x * x;
-      r -= x2 / K(6.0);
-
-      if (FABS(x) >= bs)
-        r += (x2 * x2) / K(120.0);
-    }
-
-    return r;
-  }
+#ifdef HAVE_DRAND48
+  return (R)(drand48());
+#else
+  return ((R)rand())/((R)RAND_MAX);
+#endif
+}
+
+void Y(srand48)(long int seed)
+{
+#ifdef HAVE_SRAND48
+  srand48(seed);
+#else
+  srand((unsigned int)seed);
+#endif
+}
+
+void Y(vrand_unit_complex)(C *x, const INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = Y(drand48)() + II * Y(drand48)();
+}
+
+void Y(vrand_shifted_unit_double)(R *x, const INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = Y(drand48)() - K(0.5);
+}
+
+void Y(vrand_real)(R *x, const INT n, const R a, const R b)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = a + Y(drand48)() * (b - a);
 }
diff --git a/kernel/util/sinc.c b/kernel/util/sinc.c
index fcccba6..a55966e 100644
--- a/kernel/util/sinc.c
+++ b/kernel/util/sinc.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -20,7 +20,7 @@
 
 #include "infft.h"
 
-R X(sinc)(const R x)
+R Y(sinc)(const R x)
 {
   /* Based on sinc function from Boost C++ library. */
   const R b =  EPSILON;
diff --git a/kernel/util/sort.c b/kernel/util/sort.c
new file mode 100644
index 0000000..3e8c714
--- /dev/null
+++ b/kernel/util/sort.c
@@ -0,0 +1,257 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+#include "infft.h"
+
+#define z_swap(_a_, _b_, _t_) do { (_t_) = (_a_); (_a_) = (_b_); (_b_) = (_t_); } while (0)
+
+/**
+ * Auxiliary function of radix sort for node indices.
+ *
+ * \author Michael Hofmann
+ */
+static inline void sort_node_indices_sort_bubble(INT n, INT *keys)
+{
+  INT i, j, ti;
+
+  for (i = 0; i < n; ++i)
+  {
+    j = i;
+    while (j > 0 && keys[2 * j + 0] < keys[2 * (j - 1) + 0])
+    {
+      z_swap(keys[2 * j + 0], keys[2 * (j - 1) + 0], ti);
+      z_swap(keys[2 * j + 1], keys[2 * (j - 1) + 1], ti);
+      --j;
+    }
+  }
+}
+
+/**
+ * Auxiliary function of radix sort for node indices.
+ *
+ * \author Michael Hofmann
+ */
+static inline void sort_node_indices_radix_count(INT n, INT *keys, INT shift, INT mask, INT *counts)
+{
+  INT i, k;
+
+  for (i = 0; i < n; ++i)
+  {
+    k = (keys[2 * i + 0] >> shift) & mask;
+    ++counts[k];
+  }
+}
+
+/**
+ * Auxiliary function of radix sort for node indices.
+ *
+ * \author Michael Hofmann
+ */
+static inline void sort_node_indices_radix_rearrange(INT n, INT *keys_in, INT *keys_out, INT shift, INT mask, INT *displs)
+{
+  INT i, k;
+
+  for (i = 0; i < n; ++i)
+  {
+    k = (keys_in[2 * i + 0] >> shift) & mask;
+    keys_out[2 * displs[k] + 0] = keys_in[2 * i + 0];
+    keys_out[2 * displs[k] + 1] = keys_in[2 * i + 1];
+    ++displs[k];
+  }
+}
+
+#define rwidth 9
+#define radix_n (1 << rwidth)
+
+/**
+ * Radix sort for node indices with OpenMP support.
+ *
+ * \author Michael Hofmann
+ */
+void Y(sort_node_indices_radix_lsdf)(INT n, INT *keys0, INT *keys1, INT rhigh)
+{
+  const INT radix_mask = radix_n - 1;
+  const INT rhigh_in = rhigh;
+
+  const INT tmax =
+#ifdef _OPENMP
+    omp_get_max_threads();
+#else
+    1;
+#endif
+
+  INT *from, *to, *tmp;
+
+  INT i, k, l, h;
+  INT *lcounts;
+
+  INT tid = 0, tnum = 1;
+
+  STACK_MALLOC(INT*, lcounts, (size_t)(tmax * radix_n) * sizeof(INT));
+
+  from = keys0;
+  to = keys1;
+
+  while (rhigh >= 0)
+  {
+#ifdef _OPENMP
+    #pragma omp parallel private(tid, tnum, i, l, h)
+    {
+      tid = omp_get_thread_num();
+      tnum = omp_get_num_threads();
+#endif
+
+      for (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;
+
+      l = (tid * n) / tnum;
+      h = ((tid + 1) * n) / tnum;
+
+      sort_node_indices_radix_count(h - l, from + (2 * l), rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+    }
+#endif
+
+    k = 0;
+    for (i = 0; i < radix_n; ++i)
+    {
+      for (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];
+    }
+
+#ifdef _OPENMP
+    #pragma omp parallel private(tid, tnum, i, l, h)
+    {
+      tid = omp_get_thread_num();
+      tnum = omp_get_num_threads();
+#endif
+
+      l = (tid * n) / tnum;
+      h = ((tid + 1) * n) / tnum;
+
+      sort_node_indices_radix_rearrange(h - l, from + (2 * l), to, rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+    }
+#endif
+
+/*    print_keys(n, to);*/
+
+    tmp = from;
+    from = to;
+    to = tmp;
+
+    rhigh -= rwidth;
+  }
+
+  if (to == keys0) memcpy(to, from, (size_t)(n) * 2 * sizeof(INT));
+
+  STACK_FREE(lcounts);
+}
+
+/**
+ * Radix sort for node indices with OpenMP support.
+ *
+ * \author Michael Hofmann
+ */
+void Y(sort_node_indices_radix_msdf)(INT n, INT *keys0, INT *keys1, INT rhigh)
+{
+  const INT radix_mask = radix_n - 1;
+
+  const INT tmax =
+#ifdef _OPENMP
+    omp_get_max_threads();
+#else
+    1;
+#endif
+
+  INT i, k, l, h;
+  INT *lcounts;
+
+  INT counts[radix_n], displs[radix_n];
+
+  INT tid = 0, tnum = 1;
+
+  STACK_MALLOC(INT*, lcounts, (size_t)(tmax * radix_n) * sizeof(INT));
+
+  rhigh -= rwidth;
+
+#ifdef _OPENMP
+  #pragma omp parallel private(tid, tnum, i, l, h)
+  {
+    tid = omp_get_thread_num();
+    tnum = omp_get_num_threads();
+#endif
+
+    for (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;
+
+    l = (tid * n) / tnum;
+    h = ((tid + 1) * n) / tnum;
+
+    sort_node_indices_radix_count(h - l, keys0 + (2 * l), rhigh + 1, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+  }
+#endif
+
+  k = 0;
+  for (i = 0; i < radix_n; ++i)
+  {
+    for (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];
+
+    displs[i] = lcounts[0 * radix_n + i];
+    if (i > 0) counts[i - 1] = displs[i] - displs[i - 1];
+  }
+  counts[radix_n - 1] = n - displs[radix_n - 1];
+
+#ifdef _OPENMP
+  #pragma omp parallel private(tid, tnum, i, l, h)
+  {
+    tid = omp_get_thread_num();
+    tnum = omp_get_num_threads();
+#endif
+
+    l = (tid * n) / tnum;
+    h = ((tid + 1) * n) / tnum;
+
+    sort_node_indices_radix_rearrange(h - l, keys0 + (2 * l), keys1, rhigh + 1, radix_mask, &lcounts[tid * radix_n]);
+#ifdef _OPENMP
+  }
+#endif
+
+  memcpy(keys0, keys1, (size_t)(n) * 2 * sizeof(INT));
+
+  if (rhigh >= 0)
+  {
+    for (i = 0; i < radix_n; ++i)
+    {
+      if (counts[i] > 1)
+      {
+        if (counts[i] > 256)
+          Y(sort_node_indices_radix_msdf)(counts[i], keys0 + 2 * displs[i], keys1 + 2 * displs[i], rhigh);
+        else
+          sort_node_indices_sort_bubble(counts[i], keys0 + 2 * displs[i]);
+      }
+    }
+  }
+
+  STACK_FREE(lcounts);
+}
diff --git a/kernel/util/sinc.c b/kernel/util/thread.c
similarity index 65%
copy from kernel/util/sinc.c
copy to kernel/util/thread.c
index fcccba6..b68fca4 100644
--- a/kernel/util/sinc.c
+++ b/kernel/util/thread.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -20,28 +20,24 @@
 
 #include "infft.h"
 
-R X(sinc)(const R x)
-{
-  /* Based on sinc function from Boost C++ library. */
-  const R b =  EPSILON;
-  const R bs = SQRT(b);
-  const R bs2 = SQRT(bs);
+#ifdef _OPENMP
+#include <omp.h>
+#endif
 
-  if (FABS(x) >= bs2)
-    return SIN(x)/x;
-  else
+INT Y(get_num_threads)(void)
+{
+#ifdef _OPENMP
+  INT nthreads;
+  #pragma omp parallel default(shared)
   {
-    R r = K(1.0);
-
-    if (FABS(x) >= b)
+    INT n = (INT)omp_get_num_threads();
+    #pragma omp master
     {
-      const R x2 = x * x;
-      r -= x2 / K(6.0);
-
-      if (FABS(x) >= bs)
-        r += (x2 * x2) / K(120.0);
+      nthreads = n;
     }
-
-    return r;
   }
+  return nthreads;
+#else
+  return 1;
+#endif
 }
diff --git a/include/api.h b/kernel/util/time.c
similarity index 75%
copy from include/api.h
copy to kernel/util/time.c
index 4eb2476..72e563c 100644
--- a/include/api.h
+++ b/kernel/util/time.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,12 +16,13 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: infft.h 3483 2010-04-23 19:02:34Z keiner $ */
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
 
-#ifndef __API_H__
-#define __API_H__
-
-#include "nfft3.h"
 #include "infft.h"
 
-#endif /* __API_H__ */
+R Y(elapsed_seconds)(ticks t1, ticks t0)
+{
+  UNUSED(t1);
+  UNUSED(t0);
+  return (R)(elapsed(t1,t0)) / (R)(TICKS_PER_SECOND);
+}
diff --git a/kernel/util/vector1.c b/kernel/util/vector1.c
new file mode 100644
index 0000000..706f793
--- /dev/null
+++ b/kernel/util/vector1.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+/** Computes the inner/dot product \f$x^H x\f$. */
+R Y(dot_complex)(C *x, INT n)
+{
+  INT k;
+  R dot;
+
+  for (k = 0, dot = K(0.0); k < n; k++)
+    dot += CONJ(x[k])*x[k];
+
+  return dot;
+}
+
+/** Computes the inner/dot product \f$x^H x\f$. */
+R Y(dot_double)(R *x, INT n)
+{
+  INT k;
+  R dot;
+
+  for (k = 0, dot = K(0.0); k < n; k++)
+    dot += x[k]*x[k];
+
+  return dot;
+}
+
+
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$. */
+R Y(dot_w_complex)(C *x, R *w, INT n)
+{
+  INT k;
+  R dot;
+
+  for (k = 0, dot = K(0.0); k < n; k++)
+    dot += w[k]*CONJ(x[k])*x[k];
+
+  return dot;
+}
+
+/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$. */
+R Y(dot_w_double)(R *x, R *w, INT n)
+{
+  INT k;
+  R dot;
+
+  for (k = 0, dot = K(0.0); k < n; k++)
+    dot += w[k]*x[k]*x[k];
+
+  return dot;
+}
+
+
+/** Computes the weighted inner/dot product \f$x^H (w\odot w2\odot w2 \odot x)\f$. */
+R Y(dot_w_w2_complex)(C *x, R *w, R *w2, INT n)
+{
+  INT k;
+  R dot;
+
+  for (k = 0, dot = K(0.0); k < n; k++)
+    dot += w[k]*w2[k]*w2[k]*CONJ(x[k])*x[k];
+
+  return dot;
+}
+
+/** Computes the weighted inner/dot product \f$x^H (w2\odot w2 \odot x)\f$. */
+R Y(dot_w2_complex)(C *x, R *w2, INT n)
+{
+  INT k;
+  R dot;
+
+  for (k = 0, dot = K(0.0); k < n; k++)
+    dot+=w2[k]*w2[k]*CONJ(x[k])*x[k];
+
+  return dot;
+}
diff --git a/kernel/util/vector2.c b/kernel/util/vector2.c
new file mode 100644
index 0000000..82ccecd
--- /dev/null
+++ b/kernel/util/vector2.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+/** Copies \f$x \leftarrow y\f$. */
+void Y(cp_complex)(C *x, C *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = y[k];
+}
+
+/** Copies \f$x \leftarrow y\f$. */
+void Y(cp_double)(R *x, R *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = y[k];
+}
+
+/** Copies \f$x \leftarrow a y\f$. */
+void Y(cp_a_complex)(C *x, R a, C *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = a * y[k];
+}
+
+/** Copies \f$x \leftarrow a y\f$. */
+void Y(cp_a_double)(R *x, R a, R *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = a * y[k];
+}
+
+
+/** Copies \f$x \leftarrow w\odot y\f$. */
+void Y(cp_w_complex)(C *x, R *w, C *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = w[k]*y[k];
+}
+
+/** Copies \f$x \leftarrow w\odot y\f$. */
+void Y(cp_w_double)(R *x, R *w, R *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = w[k] * y[k];
+}
diff --git a/kernel/util/vector3.c b/kernel/util/vector3.c
new file mode 100644
index 0000000..7d3d017
--- /dev/null
+++ b/kernel/util/vector3.c
@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
+
+#include "infft.h"
+
+/** Updates \f$x \leftarrow a x + y\f$. */
+void Y(upd_axpy_complex)(C *x, R a, C *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = a * x[k] + y[k];
+}
+
+/** Updates \f$x \leftarrow a x + y\f$. */
+void Y(upd_axpy_double)(R *x, R a, R *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = a * x[k] + y[k];
+}
+
+
+/** Updates \f$x \leftarrow x + a y\f$. */
+void Y(upd_xpay_complex)(C *x, R a, C *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] += a * y[k];
+}
+
+/** Updates \f$x \leftarrow x + a y\f$. */
+void Y(upd_xpay_double)(R *x, R a, R *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] += a * y[k];
+}
+
+/** Updates \f$x \leftarrow a x + b y\f$. */
+void Y(upd_axpby_complex)(C *x, R a, C *y, R b, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = a * x[k] + b * y[k];
+}
+
+/** Updates \f$x \leftarrow a x + b y\f$. */
+void Y(upd_axpby_double)(R *x, R a, R *y, R b, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = a * x[k] + b * y[k];
+}
+
+/** Updates \f$x \leftarrow x + a w\odot y\f$. */
+void Y(upd_xpawy_complex)(C *x, R a, R *w, C *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] += a * w[k] * y[k];
+}
+
+/** Updates \f$x \leftarrow x + a w\odot y\f$. */
+void Y(upd_xpawy_double)(R *x, R a, R *w, R *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] += a * w[k] * y[k];
+}
+
+/** Updates \f$x \leftarrow a x +  w\odot y\f$. */
+void Y(upd_axpwy_complex)(C *x, R a, R *w, C *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = a * x[k] + w[k] * y[k];
+}
+
+/** Updates \f$x \leftarrow a x +  w\odot y\f$. */
+void Y(upd_axpwy_double)(R *x, R a, R *w, R *y, INT n)
+{
+  INT k;
+
+  for (k = 0; k < n; k++)
+    x[k] = a * x[k] + w[k] * y[k];
+}
+
+/** Swaps each half over N[d]/2. */
+void Y(fftshift_complex)(C *x, INT d, INT* N)
+{
+  INT d_pre, d_act, d_post;
+  INT N_pre, N_act, N_post;
+  INT k_pre, k_act, k_post;
+  INT k, k_swap;
+
+  C x_swap;
+
+  for (d_act = 0; d_act < d; d_act++)
+  {
+    for (d_pre = 0, N_pre = 1; d_pre < d_act; d_pre++)
+      N_pre *= N[d_pre];
+
+    N_act = N[d_act];
+
+    for (d_post = d_act + 1, N_post = 1; d_post < d; d_post++)
+      N_post *= N[d_post];
+
+    for (k_pre = 0; k_pre < N_pre; k_pre++)
+      for (k_act = 0; k_act < N_act / 2; k_act++)
+        for (k_post = 0; k_post < N_post; k_post++)
+        {
+          k = (k_pre * N_act + k_act) * N_post + k_post;
+          k_swap = (k_pre * N_act + k_act + N_act / 2) * N_post + k_post;
+
+          x_swap = x[k];
+          x[k] = x[k_swap];
+          x[k_swap] = x_swap;
+        }
+  }
+}
+
+/** Swaps each half over N[d]/2. */
+void Y(fftshift_complex_int)(C *x, int d, int* N)
+{
+  int d_pre, d_act, d_post;
+  int N_pre, N_act, N_post;
+  int k_pre, k_act, k_post;
+  int k, k_swap;
+
+  C x_swap;
+
+  for (d_act = 0; d_act < d; d_act++)
+  {
+    for (d_pre = 0, N_pre = 1; d_pre < d_act; d_pre++)
+      N_pre *= N[d_pre];
+
+    N_act = N[d_act];
+
+    for (d_post = d_act + 1, N_post = 1; d_post < d; d_post++)
+      N_post *= N[d_post];
+
+    for (k_pre = 0; k_pre < N_pre; k_pre++)
+      for (k_act = 0; k_act < N_act / 2; k_act++)
+        for (k_post = 0; k_post < N_post; k_post++)
+        {
+          k = (k_pre * N_act + k_act) * N_post + k_post;
+          k_swap = (k_pre * N_act + k_act + N_act / 2) * N_post + k_post;
+
+          x_swap = x[k];
+          x[k] = x[k_swap];
+          x[k_swap] = x_swap;
+        }
+  }
+}
diff --git a/include/ticks.h.in b/kernel/util/voronoi.c
similarity index 64%
copy from include/ticks.h.in
copy to kernel/util/voronoi.c
index 292e677..95f28c8 100644
--- a/include/ticks.h.in
+++ b/kernel/util/voronoi.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2009 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,19 +16,20 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: infft.h 3471 2010-04-08 21:43:41Z keiner $ */
+/* $Id: util.c 3483 2010-04-23 19:02:34Z keiner $ */
 
-#ifndef TICKS_H_
-#define TICKS_H_
+#include "api.h"
+#include "cstripack.h"
 
-#include "cycle.h"
+/** Compute non periodic voronoi weights for ordered nodes x_j */
+void Y(voronoi_weights_1d)(R *w, R *x, const INT M)
+{
+  INT j;
 
-#define TICKS_PER_SECOND @TICKS_PER_SECOND@
+  w[0] = (x[1]-x[0])/K(2.0);
 
-#ifndef HAVE_TICK_COUNTER
-  typedef unsigned ticks;
-  #define getticks() 0U;
-  INLINE_ELAPSED(__inline__)
-#endif
+  for(j = 1; j < M-1; j++)
+    w[j] = (x[j+1]-x[j-1])/K(2.0);
 
-#endif /* TICKS_H_ */
+  w[M-1] = (x[M-1]-x[M-2])/K(2.0);
+}
diff --git a/kernel/util/sinc.c b/kernel/util/window.c
similarity index 50%
copy from kernel/util/sinc.c
copy to kernel/util/window.c
index fcccba6..2c701a5 100644
--- a/kernel/util/sinc.c
+++ b/kernel/util/window.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -20,28 +20,23 @@
 
 #include "infft.h"
 
-R X(sinc)(const R x)
-{
-  /* Based on sinc function from Boost C++ library. */
-  const R b =  EPSILON;
-  const R bs = SQRT(b);
-  const R bs2 = SQRT(bs);
-
-  if (FABS(x) >= bs2)
-    return SIN(x)/x;
-  else
-  {
-    R r = K(1.0);
-
-    if (FABS(x) >= b)
-    {
-      const R x2 = x * x;
-      r -= x2 / K(6.0);
+#if defined(DIRAC_DELTA)
+#elif defined(GAUSSIAN)
+  static const INT m2K_[] = {0, 1, 3, 6, 7, 9, 11, 13, 15, 17, 19, 21, 22, 23, 24};
+#elif defined(B_SPLINE)
+  static const INT m2K_[] = {0, 0, 4, 7, 10, 13, 15, 17, 19, 22, 24};
+#elif defined(SINC_POWER)
+  static const INT m2K_[] = {0, 0, 2, 5, 8, 11, 12, 14, 16, 18, 21, 23, 24, 24};
+#else /* Kaiser-Bessel is the default. */
+  static const INT m2K_[] = {1, 3, 7, 9, 14, 17, 20, 23, 24};
+#endif
 
-      if (FABS(x) >= bs)
-        r += (x2 * x2) / K(120.0);
-    }
-
-    return r;
-  }
+/**
+ * Returns an appropriate value of the parameter K used with the PRE_LIN_PSI
+ * flag for a given value of the cut-off parameter m.
+ */
+INT Y(m2K)(const INT m)
+{
+  int j = MIN(((int)(m)), ((int)((sizeof(m2K_) / sizeof(m2K_[0])) - 1)));
+  return (INT)((1U << m2K_[j]) * (m + 2));
 }
diff --git a/m4/amx_prog_as.m4 b/m4/amx_prog_as.m4
new file mode 100644
index 0000000..097b330
--- /dev/null
+++ b/m4/amx_prog_as.m4
@@ -0,0 +1,11 @@
+AC_DEFUN([AMX_PROG_AS],
+[# By default we simply use the C compiler to build assembly code.
+AC_REQUIRE([AC_PROG_CC])
+AS="$CC"
+ASFLAGS=""
+AC_SUBST(AS)
+AC_SUBST(ASFLAGS)
+CCAS="$CC"
+CCASFLAGS=""
+AC_SUBST(CCAS)
+AC_SUBST(CCASFLAGS)])
diff --git a/m4/ax_cc_blocks.m4 b/m4/ax_cc_blocks.m4
new file mode 100644
index 0000000..3b92a19
--- /dev/null
+++ b/m4/ax_cc_blocks.m4
@@ -0,0 +1,27 @@
+dnl @synopsis AX_CC_BLOCKS
+dnl @summary check if compiler supports blocks
+dnl @category Misc
+dnl
+dnl This macro checks whether the C compiler supports blocks. If it does, the
+dnl cache variable $ax_cv_c_cc_blocks is set to "yes", otherwise it is set to 
+dnl "no".
+dnl
+dnl @version 2009-09-14
+dnl @license GPLWithACException
+dnl @author Jens Keiner <jens at nfft.org>.
+AC_DEFUN([AX_CC_BLOCKS],
+[
+  AC_CACHE_CHECK([whether $CC supports blocks], ax_cv_c_cc_blocks,
+  [
+    AC_COMPILE_IFELSE(
+    [AC_LANG_SOURCE(
+      [AC_LANG_PROGRAM(,[[
+void (^my_block)(void);
+my_block = ^(void){};
+my_block();
+      ]])],
+      [ax_cv_c_cc_blocks="yes"],
+      [ax_cv_c_cc_blocks="no"])
+    ])
+  ])
+])
diff --git a/m4/ax_count_cpus.m4 b/m4/ax_count_cpus.m4
new file mode 100644
index 0000000..330348d
--- /dev/null
+++ b/m4/ax_count_cpus.m4
@@ -0,0 +1,46 @@
+# ===========================================================================
+#          http://www.nongnu.org/autoconf-archive/ax_count_cpus.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_COUNT_CPUS
+#
+# DESCRIPTION
+#
+#   Attempt to count the number of processors present on the machine. If the
+#   detection fails, then a value of 1 is assumed.
+#
+#   The value is placed in the cpu_count variable.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Michael Paul Bailey <jinxidoru at byu.net>
+#   Copyright (c) 2008 Christophe Tournayre <turn3r at users.sourceforge.net>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.
+
+AC_DEFUN([AX_COUNT_CPUS], [
+    AC_REQUIRE([AC_PROG_EGREP])
+    AC_MSG_CHECKING(the number of available CPUs)
+    cpu_count="0"
+
+    #On MacOS
+    if test -x /usr/sbin/sysctl -a `/sbin/sysctl -a 2>/dev/null| grep -c hw.cpu`; then
+        cpu_count=`/usr/sbin/sysctl -n hw.ncpu`
+    fi
+
+    #On Linux
+    if test "x$cpu_count" = "x0" -a -e /proc/cpuinfo; then
+        cpu_count=`$EGREP -c '^processor' /proc/cpuinfo`
+    fi
+
+    if test "x$cpu_count" = "x0"; then
+        cpu_count="1"
+        AC_MSG_RESULT( [unable to detect (assuming 1)] )
+    else
+        AC_MSG_RESULT( $cpu_count )
+    fi
+])
diff --git a/m4/ax_cunit.m4 b/m4/ax_cunit.m4
new file mode 100644
index 0000000..29e9e83
--- /dev/null
+++ b/m4/ax_cunit.m4
@@ -0,0 +1,82 @@
+# ===========================================================================
+#         http://www.gnu.org/software/autoconf-archive/ax_openmp.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_OPENMP([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+#   This macro tries to find out how to compile programs that use OpenMP a
+#   standard API and set of compiler directives for parallel programming
+#   (see http://www-unix.mcs/)
+#
+#   On success, it sets the OPENMP_CFLAGS/OPENMP_CXXFLAGS/OPENMP_F77FLAGS
+#   output variable to the flag (e.g. -omp) used both to compile *and* link
+#   OpenMP programs in the current language.
+#
+#   NOTE: You are assumed to not only compile your program with these flags,
+#   but also link it with them as well.
+#
+#   If you want to compile everything with OpenMP, you should set:
+#
+#     CFLAGS="$CFLAGS $OPENMP_CFLAGS"
+#     #OR#  CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
+#     #OR#  FFLAGS="$FFLAGS $OPENMP_FFLAGS"
+#
+#   (depending on the selected language).
+#
+#   The user can override the default choice by setting the corresponding
+#   environment variable (e.g. OPENMP_CFLAGS).
+#
+#   ACTION-IF-FOUND is a list of shell commands to run if an OpenMP flag is
+#   found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is
+#   not found. If ACTION-IF-FOUND is not specified, the default action will
+#   define HAVE_OPENMP.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Steven G. Johnson <stevenj at alum.mit.edu>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 8
+
+AC_DEFUN([AX_CUNIT],
+[
+  AC_CHECK_HEADER([fftw3.h], [ax_cv_cunit_header=yes], [ax_cv_cunit_header=no])
+  AC_CHECK_LIB([cunit], [CU_initialize_registry], [ax_cv_cunit_link=yes], [ax_cv_cunit_link=no])
+  AC_MSG_CHECKING([for cunit])
+  if test "x$ax_cv_cunit_header" == "xyes" -a "x$ax_cv_cunit_link" == "xyes"; then
+    ax_cv_cunit=yes
+  else
+    ax_cv_cunit=no
+  fi
+  AC_MSG_RESULT([$ax_cv_cunit])
+  AC_SUBST(ax_cv_cunit)
+])dnl AX_CUNIT
diff --git a/m4/ax_gcc_aligns_stack.m4 b/m4/ax_gcc_aligns_stack.m4
new file mode 100644
index 0000000..5188f6d
--- /dev/null
+++ b/m4/ax_gcc_aligns_stack.m4
@@ -0,0 +1,50 @@
+dnl @synopsis AX_GCC_ALIGNS_STACK([ACTION-IF-YES], [ACTION-IF-NO])
+dnl @summary check whether gcc can align stack to 8-byte boundary
+dnl @category Misc
+dnl
+dnl Check to see if we are using a version of gcc that aligns the stack
+dnl (true in gcc-2.95+, which have the -mpreferred-stack-boundary flag).
+dnl Also, however, checks whether main() is correctly aligned by the
+dnl OS/libc/..., as well as for a bug in the stack alignment of gcc-2.95.x
+dnl (see http://gcc.gnu.org/ml/gcc-bugs/1999-11/msg00259.html).
+dnl
+dnl ACTION-IF-YES/ACTION-IF-NO are shell commands to execute if we are
+dnl using gcc and the stack is/isn't aligned, respectively.
+dnl
+dnl Requires macro: AX_CHECK_COMPILER_FLAGS, AX_GCC_VERSION
+dnl
+dnl @version 2005-05-30
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu>
+AC_DEFUN([AX_GCC_ALIGNS_STACK],
+[
+AC_REQUIRE([AC_PROG_CC])
+ax_gcc_aligns_stack=no
+if test "$GCC" = "yes"; then
+AX_CHECK_COMPILER_FLAGS(-mpreferred-stack-boundary=4, [
+	AC_MSG_CHECKING([whether the stack is at least 8-byte aligned by gcc])
+	save_CFLAGS="$CFLAGS"
+	CFLAGS="-O"
+	AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
+	AC_TRY_RUN([#include <stdlib.h>
+#       include <stdio.h>
+	struct yuck { int blechh; };
+	int one(void) { return 1; }
+	struct yuck ick(void) { struct yuck y; y.blechh = 3; return y; }
+#       define CHK_ALIGN(x) if ((((long) &(x)) & 0x7)) { fprintf(stderr, "bad alignment of " #x "\n"); exit(1); }
+	void blah(int foo) { double foobar; CHK_ALIGN(foobar); }
+	int main2(void) {double ok1; struct yuck y; double ok2; CHK_ALIGN(ok1);
+                         CHK_ALIGN(ok2); y = ick(); blah(one()); return 0;}
+	int main(void) { if ((((long) (__builtin_alloca(0))) & 0x7)) __builtin_alloca(4); return main2(); }
+	], [ax_gcc_aligns_stack=yes; ax_gcc_stack_align_bug=no], 
+	ax_gcc_stack_align_bug=yes, [AX_GCC_VERSION(3,0,0, ax_gcc_stack_align_bug=no, ax_gcc_stack_align_bug=yes)])
+	CFLAGS="$save_CFLAGS"
+	AC_MSG_RESULT($ax_gcc_aligns_stack)
+])
+fi
+if test "$ax_gcc_aligns_stack" = yes; then
+	m4_default([$1], :)
+else
+	m4_default([$2], :)
+fi
+])
diff --git a/m4/ax_gcc_version.m4 b/m4/ax_gcc_version.m4
new file mode 100644
index 0000000..4aed421
--- /dev/null
+++ b/m4/ax_gcc_version.m4
@@ -0,0 +1,38 @@
+dnl @synopsis AX_GCC_VERSION(MAJOR, MINOR, PATCHLEVEL, [ACTION-SUCCESS], [ACTION-FAILURE])
+dnl @summary check wither gcc is at least version MAJOR.MINOR.PATCHLEVEL
+dnl @category InstalledPackages
+dnl
+dnl Check whether we are using gcc and, if so, whether its version
+dnl is at least MAJOR.MINOR.PATCHLEVEL
+dnl
+dnl ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+dnl success/failure.
+dnl
+dnl @version 2005-05-30
+dnl @license GPLWithACException
+dnl @author Steven G. Johnson <stevenj at alum.mit.edu> and Matteo Frigo.
+AC_DEFUN([AX_GCC_VERSION],
+[
+AC_REQUIRE([AC_PROG_CC])
+AC_CACHE_CHECK(whether we are using gcc $1.$2.$3 or later, ax_cv_gcc_$1_$2_$3,
+[
+ax_cv_gcc_$1_$2_$3=no
+if test "$GCC" = "yes"; then
+dnl The semicolon after "yes" below is to pacify NeXT's syntax-checking cpp.
+AC_EGREP_CPP(yes, [
+#ifdef __GNUC__
+#  if (__GNUC__ > $1) || (__GNUC__ == $1 && __GNUC_MINOR__ > $2) \
+   || (__GNUC__ == $1 && __GNUC_MINOR__ == $2 && __GNUC_PATCHLEVEL__ >= $3)
+     yes;
+#  endif
+#endif
+], [ax_cv_gcc_$1_$2_$3=yes])
+fi
+])
+if test "$ax_cv_gcc_$1_$2_$3" = yes; then
+	m4_default([$4], :)
+else
+	m4_default([$5], :)
+fi
+])
+
diff --git a/m4/ax_lib_fftw3.m4 b/m4/ax_lib_fftw3.m4
index fe35328..8f7cc83 100644
--- a/m4/ax_lib_fftw3.m4
+++ b/m4/ax_lib_fftw3.m4
@@ -1,6 +1,6 @@
 # $Id: matlab.m4 2652 2008-12-04 13:19:40Z keiner $
 #
-# Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+# Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 #
 # This program is free software; you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software
@@ -71,47 +71,19 @@ AC_DEFUN([AX_LIB_FFTW3],
   LDFLAGS="$LDFLAGS $fftw3_LDFLAGS"
 
   # Check if header is present and usable.
-  ax_lib_fftw3=yes
-  ax_lib_fftw3_threads=yes
-  AC_CHECK_HEADER([fftw3.h], [], [ax_lib_fftw3=no;ax_lib_fftw3_threads=no])
+  AC_CHECK_HEADER([fftw3.h], [ax_lib_fftw3=yes;ax_lib_fftw3_threads=yes], [ax_lib_fftw3=no;ax_lib_fftw3_threads=no])
 
   if test "x$ax_lib_fftw3" = "xyes"; then
     saved_LIBS="$LIBS"
-    AC_CHECK_LIB([fftw3], [fftw_execute], [], [ax_lib_fftw3=no])
-    fftw3_LIBS="-lfftw3"
+    AC_SEARCH_LIBS([fftw${PREC_SUFFIX}_execute], [fftw3${PREC_SUFFIX}], [ax_lib_fftw3=yes], [ax_lib_fftw3=no], [-lm])
+    fftw3_LIBS="-lfftw3${PREC_SUFFIX} -lm"
     LIBS="$saved_LIBS"
   fi
 
-  if test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3" = "xyes"; then
-    fftw3_threads_LIBS=""
-    # Combined lib
-    LIBS="-lfftw3 $LIBS"
-    fftw3_threads_LIBS="-lfftw3"
-    AC_MSG_CHECKING([for fftw_init_threads in -lfftw3])
-    AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no])
-    AC_MSG_RESULT([$ax_lib_fftw3_threads])
-    LIBS="$saved_LIBS"
-
-    if test "x$ax_lib_fftw3_threads" = "xno"; then
-      AC_CHECK_LIB([fftw3], [fftw_init_threads],[ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no], [-lpthread -lm])
-      fftw3_threads_LIBS="-lfftw3 -lpthread -lm"
-    fi
-
-    if test "x$ax_lib_fftw3_threads" = "xno"; then
-      LIBS="-lfftw3_threads -lfftw3 $LIBS"
-      fftw3_threads_LIBS="-lfftw3_threads -lfftw3"
-      AC_MSG_CHECKING([for fftw_init_threads in -lfftw3_threads])
-      AC_LINK_IFELSE([AC_LANG_CALL([], [fftw_init_threads])], [ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no])
-      AC_MSG_RESULT([$ax_lib_fftw3_threads])
-      LIBS="$saved_LIBS"
-    fi
-
-    if test "x$ax_lib_fftw3_threads" = "xno"; then
-      LIBS="-lfftw3 -lpthread -lm $LIBS"
-      fftw3_threads_LIBS="-lfftw3_threads -lfftw3 -lpthread -lm"
-      AC_CHECK_LIB([fftw3_threads], [fftw_init_threads],[ax_lib_fftw3_threads=yes],[ax_lib_fftw3_threads=no])
-    fi
-
+  if test "x$enable_threads" = "xyes" -a "x$ax_lib_fftw3" = "xyes" -a "x$ax_lib_fftw3_threads" = "xyes"; then
+    saved_LIBS="$LIBS"
+    AC_SEARCH_LIBS([fftw${PREC_SUFFIX}_init_threads], [fftw3${PREC_SUFFIX}_threads], [ax_lib_fftw3_threads=yes], [ax_lib_fftw3_threads=no], [-lfftw3${PREC_SUFFIX} -lpthread -lm])
+    fftw3_threads_LIBS="-lfftw3${PREC_SUFFIX}_threads -lfftw3${PREC_SUFFIX} -lpthread -lm"
     LIBS="$saved_LIBS"
   fi
 
diff --git a/m4/ax_nfft_module.m4 b/m4/ax_nfft_module.m4
index 6779576..bc8d856 100644
--- a/m4/ax_nfft_module.m4
+++ b/m4/ax_nfft_module.m4
@@ -1,14 +1,29 @@
 AC_DEFUN([AX_NFFT_MODULE],
 [
+  nfft_module_default_local=$nfft_module_default
+  if test "x$PRECISION" = "xs" -o "x$PRECISION" = "xl"; then
+    if test "x$4" = "xno"; then
+      nfft_module_default_local="no"
+    fi
+  fi
   AC_ARG_ENABLE($1, [AC_HELP_STRING([--enable-]$1,[build ]$2[ module (]$3[)])], 
-    ok=$enableval, ok=$nfft_module_default)
-  if m4_default($6,test "x$ok" = "xyes"); then
+    ok=$enableval, ok=$nfft_module_default_local)
+  AC_MSG_CHECKING([Whether to compile $2 module])
+  if m4_default($7,test "x$ok" = "xyes"); then
+    AC_MSG_RESULT([yes])
+    if test "x$PRECISION" = "xs" -o "x$PRECISION" = "xl"; then
+      if test "x$4" = "xno"; then
+        AC_MSG_ERROR([The $2 module cannot be used with the selected floating point precision.])
+      fi
+    fi
+    AC_DEFINE(HAVE_$2, 1, [Define to enable ]$2[module.])
     HAVE_$2="#define HAVE_$2 1"
-    $4
+    $5
   else
+    AC_MSG_RESULT([no])
     HAVE_$2="#undef HAVE_$2"
-    $5
+    $6
   fi
-  AM_CONDITIONAL(HAVE_$2, m4_default($6,test "x$ok" = "xyes"))
+  AM_CONDITIONAL(HAVE_$2, m4_default($7,test "x$ok" = "xyes"))
   AC_SUBST(HAVE_$2)
 ])
\ No newline at end of file
diff --git a/m4/ax_prog_matlab.m4 b/m4/ax_prog_matlab.m4
index 2d35a7a..2d5c9b7 100644
--- a/m4/ax_prog_matlab.m4
+++ b/m4/ax_prog_matlab.m4
@@ -1,6 +1,6 @@
-# $Id: ax_prog_matlab.m4 3892 2012-09-28 18:52:59Z keiner $
+# $Id$
 # 
-# Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+# Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 #
 # This program is free software; you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software
diff --git a/m4/libtool.m4 b/m4/libtool.m4
deleted file mode 100644
index 44e0ecf..0000000
--- a/m4/libtool.m4
+++ /dev/null
@@ -1,7982 +0,0 @@
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-#                 Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-m4_define([_LT_COPYING], [dnl
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-#                 Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-])
-
-# serial 57 LT_INIT
-
-
-# LT_PREREQ(VERSION)
-# ------------------
-# Complain and exit if this libtool version is less that VERSION.
-m4_defun([LT_PREREQ],
-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
-       [m4_default([$3],
-		   [m4_fatal([Libtool version $1 or higher is required],
-		             63)])],
-       [$2])])
-
-
-# _LT_CHECK_BUILDDIR
-# ------------------
-# Complain if the absolute build directory name contains unusual characters
-m4_defun([_LT_CHECK_BUILDDIR],
-[case `pwd` in
-  *\ * | *\	*)
-    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
-esac
-])
-
-
-# LT_INIT([OPTIONS])
-# ------------------
-AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
-AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
-AC_BEFORE([$0], [LT_LANG])dnl
-AC_BEFORE([$0], [LT_OUTPUT])dnl
-AC_BEFORE([$0], [LTDL_INIT])dnl
-m4_require([_LT_CHECK_BUILDDIR])dnl
-
-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
-dnl unless we require an AC_DEFUNed macro:
-AC_REQUIRE([LTOPTIONS_VERSION])dnl
-AC_REQUIRE([LTSUGAR_VERSION])dnl
-AC_REQUIRE([LTVERSION_VERSION])dnl
-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
-m4_require([_LT_PROG_LTMAIN])dnl
-
-_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
-
-dnl Parse OPTIONS
-_LT_SET_OPTIONS([$0], [$1])
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-_LT_SETUP
-
-# Only expand once:
-m4_define([LT_INIT])
-])# LT_INIT
-
-# Old names:
-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
-m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
-  case $cc_temp in
-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
-])
-
-
-# _LT_FILEUTILS_DEFAULTS
-# ----------------------
-# It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
-m4_defun([_LT_FILEUTILS_DEFAULTS],
-[: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-])# _LT_FILEUTILS_DEFAULTS
-
-
-# _LT_SETUP
-# ---------
-m4_defun([_LT_SETUP],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
-AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
-
-_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
-dnl
-_LT_DECL([], [host_alias], [0], [The host system])dnl
-_LT_DECL([], [host], [0])dnl
-_LT_DECL([], [host_os], [0])dnl
-dnl
-_LT_DECL([], [build_alias], [0], [The build system])dnl
-_LT_DECL([], [build], [0])dnl
-_LT_DECL([], [build_os], [0])dnl
-dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-test -z "$LN_S" && LN_S="ln -s"
-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
-dnl
-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
-dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
-m4_require([_LT_CMD_RELOAD])dnl
-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
-m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-m4_require([_LT_WITH_SYSROOT])dnl
-
-_LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-])
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-_LT_CHECK_OBJDIR
-
-m4_require([_LT_TAG_COMPILER])dnl
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    _LT_PATH_MAGIC
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-LT_SUPPORTED_TAG([CC])
-_LT_LANG_C_CONFIG
-_LT_LANG_DEFAULT_CONFIG
-_LT_CONFIG_COMMANDS
-])# _LT_SETUP
-
-
-# _LT_PREPARE_SED_QUOTE_VARS
-# --------------------------
-# Define a few sed substitution that help us do robust quoting.
-m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
-[# Backslashify metacharacters that are still active within
-# double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-])
-
-# _LT_PROG_LTMAIN
-# ---------------
-# Note that this code is called both from `configure', and `config.status'
-# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
-# so we pass a copy along to make sure it has a sensible value anyway.
-m4_defun([_LT_PROG_LTMAIN],
-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
-])# _LT_PROG_LTMAIN
-
-
-## ------------------------------------- ##
-## Accumulate code for creating libtool. ##
-## ------------------------------------- ##
-
-# So that we can recreate a full libtool script including additional
-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
-# label.
-
-
-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
-# ----------------------------------------
-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL_INIT],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
-
-
-# _LT_CONFIG_LIBTOOL([COMMANDS])
-# ------------------------------
-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
-
-
-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
-# -----------------------------------------------------
-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
-[_LT_CONFIG_LIBTOOL([$1])
-_LT_CONFIG_LIBTOOL_INIT([$2])
-])
-
-
-# _LT_FORMAT_COMMENT([COMMENT])
-# -----------------------------
-# Add leading comment marks to the start of each line, and a trailing
-# full-stop to the whole comment if one is not present already.
-m4_define([_LT_FORMAT_COMMENT],
-[m4_ifval([$1], [
-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
-              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
-)])
-
-
-
-## ------------------------ ##
-## FIXME: Eliminate VARNAME ##
-## ------------------------ ##
-
-
-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
-# -------------------------------------------------------------------
-# CONFIGNAME is the name given to the value in the libtool script.
-# VARNAME is the (base) name used in the configure script.
-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
-# VARNAME.  Any other value will be used directly.
-m4_define([_LT_DECL],
-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
-    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
-	[m4_ifval([$1], [$1], [$2])])
-    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
-    m4_ifval([$4],
-	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
-    lt_dict_add_subkey([lt_decl_dict], [$2],
-	[tagged?], [m4_ifval([$5], [yes], [no])])])
-])
-
-
-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
-# --------------------------------------------------------
-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
-
-
-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_tag_varnames],
-[_lt_decl_filter([tagged?], [yes], $@)])
-
-
-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
-# ---------------------------------------------------------
-m4_define([_lt_decl_filter],
-[m4_case([$#],
-  [0], [m4_fatal([$0: too few arguments: $#])],
-  [1], [m4_fatal([$0: too few arguments: $#: $1])],
-  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
-  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
-  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
-])
-
-
-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
-# --------------------------------------------------
-m4_define([lt_decl_quote_varnames],
-[_lt_decl_filter([value], [1], $@)])
-
-
-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_dquote_varnames],
-[_lt_decl_filter([value], [2], $@)])
-
-
-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_varnames_tagged],
-[m4_assert([$# <= 2])dnl
-_$0(m4_quote(m4_default([$1], [[, ]])),
-    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
-    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
-m4_define([_lt_decl_varnames_tagged],
-[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
-
-
-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_all_varnames],
-[_$0(m4_quote(m4_default([$1], [[, ]])),
-     m4_if([$2], [],
-	   m4_quote(lt_decl_varnames),
-	m4_quote(m4_shift($@))))[]dnl
-])
-m4_define([_lt_decl_all_varnames],
-[lt_join($@, lt_decl_varnames_tagged([$1],
-			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
-])
-
-
-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
-# ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'.  VARNAME
-# must have a single quote delimited value for this to work.
-m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
-
-
-# _LT_CONFIG_STATUS_DECLARATIONS
-# ------------------------------
-# We delimit libtool config variables with single quotes, so when
-# we write them to config.status, we have to be sure to quote all
-# embedded single quotes properly.  In configure, this macro expands
-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
-#
-#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
-    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAGS
-# ----------------
-# Output comment and list of tags supported by the script
-m4_defun([_LT_LIBTOOL_TAGS],
-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
-])
-
-
-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
-# -----------------------------------
-# Extract the dictionary values for VARNAME (optionally with TAG) and
-# expand to a commented shell variable setting:
-#
-#    # Some comment about what VAR is for.
-#    visible_name=$lt_internal_name
-m4_define([_LT_LIBTOOL_DECLARE],
-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
-					   [description])))[]dnl
-m4_pushdef([_libtool_name],
-    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
-    [0], [_libtool_name=[$]$1],
-    [1], [_libtool_name=$lt_[]$1],
-    [2], [_libtool_name=$lt_[]$1],
-    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
-])
-
-
-# _LT_LIBTOOL_CONFIG_VARS
-# -----------------------
-# Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
-# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
-# section) are produced by _LT_LIBTOOL_TAG_VARS.
-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
-[m4_foreach([_lt_var],
-    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAG_VARS(TAG)
-# -------------------------
-m4_define([_LT_LIBTOOL_TAG_VARS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
-
-
-# _LT_TAGVAR(VARNAME, [TAGNAME])
-# ------------------------------
-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
-
-
-# _LT_CONFIG_COMMANDS
-# -------------------
-# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
-# variables for single and double quote escaping we saved from calls
-# to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'.  Finally, any additional code accumulated
-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
-m4_defun([_LT_CONFIG_COMMANDS],
-[AC_PROVIDE_IFELSE([LT_OUTPUT],
-	dnl If the libtool generation code has been placed in $CONFIG_LT,
-	dnl instead of duplicating it all over again into config.status,
-	dnl then we will have config.status run $CONFIG_LT later, so it
-	dnl needs to know what name is stored there:
-        [AC_CONFIG_COMMANDS([libtool],
-            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
-    dnl If the libtool generation code is destined for config.status,
-    dnl expand the accumulated commands and init code now:
-    [AC_CONFIG_COMMANDS([libtool],
-        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
-])#_LT_CONFIG_COMMANDS
-
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
-[
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-_LT_CONFIG_STATUS_DECLARATIONS
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
-  eval 'cat <<_LTECHO_EOF
-\$[]1
-_LTECHO_EOF'
-}
-
-# Quote evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-_LT_OUTPUT_LIBTOOL_INIT
-])
-
-# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
-# ------------------------------------
-# Generate a child script FILE with all initialization necessary to
-# reuse the environment learned by the parent script, and make the
-# file executable.  If COMMENT is supplied, it is inserted after the
-# `#!' sequence but before initialization text begins.  After this
-# macro, additional text can be appended to FILE to form the body of
-# the child script.  The macro ends with non-zero status if the
-# file could not be fully written (such as if the disk is full).
-m4_ifdef([AS_INIT_GENERATED],
-[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
-[m4_defun([_LT_GENERATED_FILE_INIT],
-[m4_require([AS_PREPARE])]dnl
-[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
-[lt_write_fail=0
-cat >$1 <<_ASEOF || lt_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-$2
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$1 <<\_ASEOF || lt_write_fail=1
-AS_SHELL_SANITIZE
-_AS_PREPARE
-exec AS_MESSAGE_FD>&1
-_ASEOF
-test $lt_write_fail = 0 && chmod +x $1[]dnl
-m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
-
-# LT_OUTPUT
-# ---------
-# This macro allows early generation of the libtool script (before
-# AC_OUTPUT is called), incase it is used in configure for compilation
-# tests.
-AC_DEFUN([LT_OUTPUT],
-[: ${CONFIG_LT=./config.lt}
-AC_MSG_NOTICE([creating $CONFIG_LT])
-_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
-[# Run this file to recreate a libtool stub with the current configuration.])
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-lt_cl_silent=false
-exec AS_MESSAGE_LOG_FD>>config.log
-{
-  echo
-  AS_BOX([Running $as_me.])
-} >&AS_MESSAGE_LOG_FD
-
-lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
-for use in further configure time tests before the real libtool is
-generated.
-
-Usage: $[0] [[OPTIONS]]
-
-  -h, --help      print this help, then exit
-  -V, --version   print version number, then exit
-  -q, --quiet     do not print progress messages
-  -d, --debug     don't remove temporary files
-
-Report bugs to <bug-libtool at gnu.org>."
-
-lt_cl_version="\
-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
-configured by $[0], generated by m4_PACKAGE_STRING.
-
-Copyright (C) 2011 Free Software Foundation, Inc.
-This config.lt script is free software; the Free Software Foundation
-gives unlimited permision to copy, distribute and modify it."
-
-while test $[#] != 0
-do
-  case $[1] in
-    --version | --v* | -V )
-      echo "$lt_cl_version"; exit 0 ;;
-    --help | --h* | -h )
-      echo "$lt_cl_help"; exit 0 ;;
-    --debug | --d* | -d )
-      debug=: ;;
-    --quiet | --q* | --silent | --s* | -q )
-      lt_cl_silent=: ;;
-
-    -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
-
-    *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
-  esac
-  shift
-done
-
-if $lt_cl_silent; then
-  exec AS_MESSAGE_FD>/dev/null
-fi
-_LTEOF
-
-cat >>"$CONFIG_LT" <<_LTEOF
-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AC_MSG_NOTICE([creating $ofile])
-_LT_OUTPUT_LIBTOOL_COMMANDS
-AS_EXIT(0)
-_LTEOF
-chmod +x "$CONFIG_LT"
-
-# configure is writing to config.log, but config.lt does its own redirection,
-# appending to config.log, which fails on DOS, as config.log is still kept
-# open by configure.  Here we exec the FD to /dev/null, effectively closing
-# config.log, so it can be properly (re)opened and appended to by config.lt.
-lt_cl_success=:
-test "$silent" = yes &&
-  lt_config_lt_args="$lt_config_lt_args --quiet"
-exec AS_MESSAGE_LOG_FD>/dev/null
-$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-exec AS_MESSAGE_LOG_FD>>config.log
-$lt_cl_success || AS_EXIT(1)
-])# LT_OUTPUT
-
-
-# _LT_CONFIG(TAG)
-# ---------------
-# If TAG is the built-in tag, create an initial libtool script with a
-# default configuration from the untagged config vars.  Otherwise add code
-# to config.status for appending the configuration named by TAG from the
-# matching tagged config vars.
-m4_defun([_LT_CONFIG],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_CONFIG_SAVE_COMMANDS([
-  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
-  m4_if(_LT_TAG, [C], [
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-_LT_COPYING
-_LT_LIBTOOL_TAGS
-
-# ### BEGIN LIBTOOL CONFIG
-_LT_LIBTOOL_CONFIG_VARS
-_LT_LIBTOOL_TAG_VARS
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-  _LT_PROG_LTMAIN
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '$q' "$ltmain" >> "$cfgfile" \
-     || (rm -f "$cfgfile"; exit 1)
-
-  _LT_PROG_REPLACE_SHELLFNS
-
-   mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-],
-[cat <<_LT_EOF >> "$ofile"
-
-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
-dnl in a comment (ie after a #).
-# ### BEGIN LIBTOOL TAG CONFIG: $1
-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
-# ### END LIBTOOL TAG CONFIG: $1
-_LT_EOF
-])dnl /m4_if
-],
-[m4_if([$1], [], [
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'], [])
-])dnl /_LT_CONFIG_SAVE_COMMANDS
-])# _LT_CONFIG
-
-
-# LT_SUPPORTED_TAG(TAG)
-# ---------------------
-# Trace this macro to discover what tags are supported by the libtool
-# --tag option, using:
-#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
-AC_DEFUN([LT_SUPPORTED_TAG], [])
-
-
-# C support is built-in for now
-m4_define([_LT_LANG_C_enabled], [])
-m4_define([_LT_TAGS], [])
-
-
-# LT_LANG(LANG)
-# -------------
-# Enable libtool support for the given language if not already enabled.
-AC_DEFUN([LT_LANG],
-[AC_BEFORE([$0], [LT_OUTPUT])dnl
-m4_case([$1],
-  [C],			[_LT_LANG(C)],
-  [C++],		[_LT_LANG(CXX)],
-  [Go],			[_LT_LANG(GO)],
-  [Java],		[_LT_LANG(GCJ)],
-  [Fortran 77],		[_LT_LANG(F77)],
-  [Fortran],		[_LT_LANG(FC)],
-  [Windows Resource],	[_LT_LANG(RC)],
-  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
-    [_LT_LANG($1)],
-    [m4_fatal([$0: unsupported language: "$1"])])])dnl
-])# LT_LANG
-
-
-# _LT_LANG(LANGNAME)
-# ------------------
-m4_defun([_LT_LANG],
-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
-  [LT_SUPPORTED_TAG([$1])dnl
-  m4_append([_LT_TAGS], [$1 ])dnl
-  m4_define([_LT_LANG_]$1[_enabled], [])dnl
-  _LT_LANG_$1_CONFIG($1)])dnl
-])# _LT_LANG
-
-
-m4_ifndef([AC_PROG_GO], [
-############################################################
-# NOTE: This macro has been submitted for inclusion into   #
-#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
-#  a released version of Autoconf we should remove this    #
-#  macro and use it instead.                               #
-############################################################
-m4_defun([AC_PROG_GO],
-[AC_LANG_PUSH(Go)dnl
-AC_ARG_VAR([GOC],     [Go compiler command])dnl
-AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
-_AC_ARG_VAR_LDFLAGS()dnl
-AC_CHECK_TOOL(GOC, gccgo)
-if test -z "$GOC"; then
-  if test -n "$ac_tool_prefix"; then
-    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
-  fi
-fi
-if test -z "$GOC"; then
-  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
-fi
-])#m4_defun
-])#m4_ifndef
-
-
-# _LT_LANG_DEFAULT_CONFIG
-# -----------------------
-m4_defun([_LT_LANG_DEFAULT_CONFIG],
-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
-  [LT_LANG(CXX)],
-  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_F77],
-  [LT_LANG(F77)],
-  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_FC],
-  [LT_LANG(FC)],
-  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
-
-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
-dnl pulling things in needlessly.
-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-  [LT_LANG(GCJ)],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-    [LT_LANG(GCJ)],
-    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
-      [LT_LANG(GCJ)],
-      [m4_ifdef([AC_PROG_GCJ],
-	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([A][M_PROG_GCJ],
-	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([LT_PROG_GCJ],
-	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
-
-AC_PROVIDE_IFELSE([AC_PROG_GO],
-  [LT_LANG(GO)],
-  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
-
-AC_PROVIDE_IFELSE([LT_PROG_RC],
-  [LT_LANG(RC)],
-  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
-])# _LT_LANG_DEFAULT_CONFIG
-
-# Obsolete macros:
-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
-AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
-dnl AC_DEFUN([AC_LIBTOOL_RC], [])
-
-
-# _LT_TAG_COMPILER
-# ----------------
-m4_defun([_LT_TAG_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_TAG_COMPILER
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-m4_defun([_LT_COMPILER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-m4_defun([_LT_LINKER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# -------------------------
-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
-  case $host_os in
-    rhapsody* | darwin*)
-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-    AC_CHECK_TOOL([LIPO], [lipo], [:])
-    AC_CHECK_TOOL([OTOOL], [otool], [:])
-    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
-    _LT_DECL([], [DSYMUTIL], [1],
-      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
-    _LT_DECL([], [NMEDIT], [1],
-      [Tool to change global to local symbols on Mac OS X])
-    _LT_DECL([], [LIPO], [1],
-      [Tool to manipulate fat objects and archives on Mac OS X])
-    _LT_DECL([], [OTOOL], [1],
-      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
-    _LT_DECL([], [OTOOL64], [1],
-      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
-
-    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
-      [lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-	# By default we will add the -single_module flag. You can override
-	# by either setting the environment variable LT_MULTI_MODULE
-	# non-empty at configure time, or by adding -multi_module to the
-	# link flags.
-	rm -rf libconftest.dylib*
-	echo "int foo(void){return 1;}" > conftest.c
-	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
-	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-	# If there is a non-empty error log, and "single_module"
-	# appears in it, assume the flag caused a linker warning
-        if test -s conftest.err && $GREP single_module conftest.err; then
-	  cat conftest.err >&AS_MESSAGE_LOG_FD
-	# Otherwise, if the output was created with a 0 exit code from
-	# the compiler, it worked.
-	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
-	  lt_cv_apple_cc_single_mod=yes
-	else
-	  cat conftest.err >&AS_MESSAGE_LOG_FD
-	fi
-	rm -rf libconftest.dylib*
-	rm -f conftest.*
-      fi])
-
-    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
-      [lt_cv_ld_exported_symbols_list],
-      [lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-	[lt_cv_ld_exported_symbols_list=yes],
-	[lt_cv_ld_exported_symbols_list=no])
-	LDFLAGS="$save_LDFLAGS"
-    ])
-
-    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
-      [lt_cv_ld_force_load=no
-      cat > conftest.c << _LT_EOF
-int forced_loaded() { return 2;}
-_LT_EOF
-      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
-      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
-      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
-      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
-      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
-      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
-      cat > conftest.c << _LT_EOF
-int main() { return 0;}
-_LT_EOF
-      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
-      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
-      _lt_result=$?
-      if test -s conftest.err && $GREP force_load conftest.err; then
-	cat conftest.err >&AS_MESSAGE_LOG_FD
-      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
-	lt_cv_ld_force_load=yes
-      else
-	cat conftest.err >&AS_MESSAGE_LOG_FD
-      fi
-        rm -f conftest.err libconftest.a conftest conftest.c
-        rm -rf conftest.dSYM
-    ])
-    case $host_os in
-    rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[[012]]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-])
-
-
-# _LT_DARWIN_LINKER_FEATURES([TAG])
-# ---------------------------------
-# Checks for linker and compiler features on darwin
-m4_defun([_LT_DARWIN_LINKER_FEATURES],
-[
-  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_automatic, $1)=yes
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  if test "$lt_cv_ld_force_load" = "yes"; then
-    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
-    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
-                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
-  else
-    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
-  fi
-  _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=func_echo_all
-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-    m4_if([$1], [CXX],
-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
-    fi
-],[])
-  else
-  _LT_TAGVAR(ld_shlibs, $1)=no
-  fi
-])
-
-# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
-# ----------------------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-# Store the results from the different compilers for each TAGNAME.
-# Allow to override them for all tags through lt_cv_aix_libpath.
-m4_defun([_LT_SYS_MODULE_PATH_AIX],
-[m4_require([_LT_DECL_SED])dnl
-if test "${lt_cv_aix_libpath+set}" = set; then
-  aix_libpath=$lt_cv_aix_libpath
-else
-  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
-  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
-  lt_aix_libpath_sed='[
-      /Import File Strings/,/^$/ {
-	  /^0/ {
-	      s/^0  *\([^ ]*\) *$/\1/
-	      p
-	  }
-      }]'
-  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-  # Check for a 64-bit object if we didn't find anything.
-  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
-    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-  fi],[])
-  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
-    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
-  fi
-  ])
-  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
-fi
-])# _LT_SYS_MODULE_PATH_AIX
-
-
-# _LT_SHELL_INIT(ARG)
-# -------------------
-m4_define([_LT_SHELL_INIT],
-[m4_divert_text([M4SH-INIT], [$1
-])])# _LT_SHELL_INIT
-
-
-
-# _LT_PROG_ECHO_BACKSLASH
-# -----------------------
-# Find how we can fake an echo command that does not interpret backslash.
-# In particular, with Autoconf 2.60 or later we add some code to the start
-# of the generated configure script which will find a shell with a builtin
-# printf (which we can use as an echo command).
-m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
-ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
-
-AC_MSG_CHECKING([how to print strings])
-# Test print first, because it will be a builtin if present.
-if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
-   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
-  ECHO='print -r --'
-elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
-  ECHO='printf %s\n'
-else
-  # Use this function as a fallback that always works.
-  func_fallback_echo ()
-  {
-    eval 'cat <<_LTECHO_EOF
-$[]1
-_LTECHO_EOF'
-  }
-  ECHO='func_fallback_echo'
-fi
-
-# func_echo_all arg...
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
-    $ECHO "$*" 
-}
-
-case "$ECHO" in
-  printf*) AC_MSG_RESULT([printf]) ;;
-  print*) AC_MSG_RESULT([print -r]) ;;
-  *) AC_MSG_RESULT([cat]) ;;
-esac
-
-m4_ifdef([_AS_DETECT_SUGGESTED],
-[_AS_DETECT_SUGGESTED([
-  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
-    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
-    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
-    PATH=/empty FPATH=/empty; export PATH FPATH
-    test "X`printf %s $ECHO`" = "X$ECHO" \
-      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
-
-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
-])# _LT_PROG_ECHO_BACKSLASH
-
-
-# _LT_WITH_SYSROOT
-# ----------------
-AC_DEFUN([_LT_WITH_SYSROOT],
-[AC_MSG_CHECKING([for sysroot])
-AC_ARG_WITH([sysroot],
-[  --with-sysroot[=DIR] Search for dependent libraries within DIR
-                        (or the compiler's sysroot if not specified).],
-[], [with_sysroot=no])
-
-dnl lt_sysroot will always be passed unquoted.  We quote it here
-dnl in case the user passed a directory name.
-lt_sysroot=
-case ${with_sysroot} in #(
- yes)
-   if test "$GCC" = yes; then
-     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
-   fi
-   ;; #(
- /*)
-   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
-   ;; #(
- no|'')
-   ;; #(
- *)
-   AC_MSG_RESULT([${with_sysroot}])
-   AC_MSG_ERROR([The sysroot must be an absolute path.])
-   ;;
-esac
-
- AC_MSG_RESULT([${lt_sysroot:-no}])
-_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
-[dependent libraries, and in which our libraries should be installed.])])
-
-# _LT_ENABLE_LOCK
-# ---------------
-m4_defun([_LT_ENABLE_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-  [AS_HELP_STRING([--disable-libtool-lock],
-    [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-	HPUX_IA64_MODE="32"
-	;;
-      *ELF-64*)
-	HPUX_IA64_MODE="64"
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -melf32bsmip"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -melf32bmipn32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -melf64bmip"
-	;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -32"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -n32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -64"
-	  ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_i386_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_i386"
-	    ;;
-	  ppc64-*linux*|powerpc64-*linux*)
-	    LD="${LD-ld} -m elf32ppclinux"
-	    ;;
-	  s390x-*linux*)
-	    LD="${LD-ld} -m elf_s390"
-	    ;;
-	  sparc64-*linux*)
-	    LD="${LD-ld} -m elf32_sparc"
-	    ;;
-	esac
-	;;
-      *64-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_x86_64_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_x86_64"
-	    ;;
-	  ppc*-*linux*|powerpc*-*linux*)
-	    LD="${LD-ld} -m elf64ppc"
-	    ;;
-	  s390*-*linux*|s390*-*tpf*)
-	    LD="${LD-ld} -m elf64_s390"
-	    ;;
-	  sparc*-*linux*)
-	    LD="${LD-ld} -m elf64_sparc"
-	    ;;
-	esac
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-    [AC_LANG_PUSH(C)
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-     AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*)
-        case $host in
-        i?86-*-solaris*)
-          LD="${LD-ld} -m elf_x86_64"
-          ;;
-        sparc*-*-solaris*)
-          LD="${LD-ld} -m elf64_sparc"
-          ;;
-        esac
-        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
-        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
-          LD="${LD-ld}_sol2"
-        fi
-        ;;
-      *)
-	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-	  LD="${LD-ld} -64"
-	fi
-	;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-])# _LT_ENABLE_LOCK
-
-
-# _LT_PROG_AR
-# -----------
-m4_defun([_LT_PROG_AR],
-[AC_CHECK_TOOLS(AR, [ar], false)
-: ${AR=ar}
-: ${AR_FLAGS=cru}
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
-
-AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
-  [lt_cv_ar_at_file=no
-   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
-     [echo conftest.$ac_objext > conftest.lst
-      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
-      AC_TRY_EVAL([lt_ar_try])
-      if test "$ac_status" -eq 0; then
-	# Ensure the archiver fails upon bogus file names.
-	rm -f conftest.$ac_objext libconftest.a
-	AC_TRY_EVAL([lt_ar_try])
-	if test "$ac_status" -ne 0; then
-          lt_cv_ar_at_file=@
-        fi
-      fi
-      rm -f conftest.* libconftest.a
-     ])
-  ])
-
-if test "x$lt_cv_ar_at_file" = xno; then
-  archiver_list_spec=
-else
-  archiver_list_spec=$lt_cv_ar_at_file
-fi
-_LT_DECL([], [archiver_list_spec], [1],
-  [How to feed a file listing to the archiver])
-])# _LT_PROG_AR
-
-
-# _LT_CMD_OLD_ARCHIVE
-# -------------------
-m4_defun([_LT_CMD_OLD_ARCHIVE],
-[_LT_PROG_AR
-
-AC_CHECK_TOOL(STRIP, strip, :)
-test -z "$STRIP" && STRIP=:
-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-test -z "$RANLIB" && RANLIB=:
-_LT_DECL([], [RANLIB], [1],
-    [Commands used to install an old-style archive])
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
-fi
-
-case $host_os in
-  darwin*)
-    lock_old_archive_extraction=yes ;;
-  *)
-    lock_old_archive_extraction=no ;;
-esac
-_LT_DECL([], [old_postinstall_cmds], [2])
-_LT_DECL([], [old_postuninstall_cmds], [2])
-_LT_TAGDECL([], [old_archive_cmds], [2],
-    [Commands used to build an old-style archive])
-_LT_DECL([], [lock_old_archive_extraction], [0],
-    [Whether to use a lock for old archive extraction])
-])# _LT_CMD_OLD_ARCHIVE
-
-
-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([_LT_COMPILER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       $2=yes
-     fi
-   fi
-   $RM conftest*
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$5], , :, [$5])
-else
-    m4_if([$6], , :, [$6])
-fi
-])# _LT_COMPILER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
-
-
-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                  [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------
-# Check whether the given linker option works
-AC_DEFUN([_LT_LINKER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $3"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         $2=yes
-       fi
-     else
-       $2=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$4], , :, [$4])
-else
-    m4_if([$5], , :, [$5])
-fi
-])# _LT_LINKER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
-
-
-# LT_CMD_MAX_LEN
-#---------------
-AC_DEFUN([LT_CMD_MAX_LEN],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
-  i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  mint*)
-    # On MiNT this can take a long time and run out of memory.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  os2*)
-    # The test takes a long time on OS/2.
-    lt_cv_sys_max_cmd_len=8192
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
-	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
-	      test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
-  AC_MSG_RESULT(none)
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-_LT_DECL([], [max_cmd_len], [0],
-    [What is the maximum length of a command?])
-])# LT_CMD_MAX_LEN
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
-
-
-# _LT_HEADER_DLFCN
-# ----------------
-m4_defun([_LT_HEADER_DLFCN],
-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
-])# _LT_HEADER_DLFCN
-
-
-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ----------------------------------------------------------------
-m4_defun([_LT_TRY_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
-  [$4]
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-[#line $LINENO "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL		RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL		DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL		0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW		DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW	DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW	0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-/* When -fvisbility=hidden is used, assume the code has been annotated
-   correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 42; }
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else
-        {
-	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
-          else puts (dlerror ());
-	}
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}]
-_LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) $1 ;;
-      x$lt_dlneed_uscore) $2 ;;
-      x$lt_dlunknown|x*) $3 ;;
-    esac
-  else :
-    # compilation failed
-    $3
-  fi
-fi
-rm -fr conftest*
-])# _LT_TRY_DLOPEN_SELF
-
-
-# LT_SYS_DLOPEN_SELF
-# ------------------
-AC_DEFUN([LT_SYS_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ])
-    ;;
-
-  *)
-    AC_CHECK_FUNC([shl_load],
-	  [lt_cv_dlopen="shl_load"],
-      [AC_CHECK_LIB([dld], [shl_load],
-	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
-	[AC_CHECK_FUNC([dlopen],
-	      [lt_cv_dlopen="dlopen"],
-	  [AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
-	    [AC_CHECK_LIB([svld], [dlopen],
-		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
-	      [AC_CHECK_LIB([dld], [dld_link],
-		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
-	      ])
-	    ])
-	  ])
-	])
-      ])
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    AC_CACHE_CHECK([whether a program can dlopen itself],
-	  lt_cv_dlopen_self, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
-	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
-    ])
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-	  lt_cv_dlopen_self_static, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
-	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
-      ])
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-_LT_DECL([dlopen_support], [enable_dlopen], [0],
-	 [Whether dlopen is supported])
-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
-	 [Whether dlopen of programs is supported])
-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
-	 [Whether dlopen of statically linked programs is supported])
-])# LT_SYS_DLOPEN_SELF
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
-
-
-# _LT_COMPILER_C_O([TAGNAME])
-# ---------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler.
-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
-m4_defun([_LT_COMPILER_C_O],
-[m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-     fi
-   fi
-   chmod u+w . 2>&AS_MESSAGE_LOG_FD
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-])
-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
-	[Does compiler simultaneously support -c and -o options?])
-])# _LT_COMPILER_C_O
-
-
-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
-# ----------------------------------
-# Check to see if we can do hard links to lock some files if needed
-m4_defun([_LT_COMPILER_FILE_LOCKS],
-[m4_require([_LT_ENABLE_LOCK])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_COMPILER_C_O([$1])
-
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  AC_MSG_CHECKING([if we can lock with hard links])
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
-])# _LT_COMPILER_FILE_LOCKS
-
-
-# _LT_CHECK_OBJDIR
-# ----------------
-m4_defun([_LT_CHECK_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-_LT_DECL([], [objdir], [0],
-         [The name of the directory that contains temporary libtool files])dnl
-m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
-])# _LT_CHECK_OBJDIR
-
-
-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
-# --------------------------------------
-# Check hardcoding attributes.
-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
-   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-_LT_TAGDECL([], [hardcode_action], [0],
-    [How to hardcode a shared library path into an executable])
-])# _LT_LINKER_HARDCODE_LIBPATH
-
-
-# _LT_CMD_STRIPLIB
-# ----------------
-m4_defun([_LT_CMD_STRIPLIB],
-[m4_require([_LT_DECL_EGREP])
-striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      AC_MSG_RESULT([yes])
-    else
-      AC_MSG_RESULT([no])
-    fi
-    ;;
-  *)
-    AC_MSG_RESULT([no])
-    ;;
-  esac
-fi
-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
-_LT_DECL([], [striplib], [1])
-])# _LT_CMD_STRIPLIB
-
-
-# _LT_SYS_DYNAMIC_LINKER([TAG])
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-m4_defun([_LT_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_OBJDUMP])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-m4_if([$1],
-	[], [
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  case $host_os in
-    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
-    *) lt_sed_strip_eq="s,=/,/,g" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
-  case $lt_search_path_spec in
-  *\;*)
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
-    ;;
-  *)
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
-    ;;
-  esac
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
-  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
-  # AWK program above erroneously prepends '/' to C:/dos/paths
-  # for these hosts.
-  case $host_os in
-    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
-      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
-  esac
-  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[[4-9]]*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[[01]] | aix4.[[01]].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-	:
-      else
-	can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[[45]]*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$cc_basename in
-  yes,*)
-    # gcc
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-m4_if([$1], [],[
-      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    dynamic_linker='Win32 ld.exe'
-    ;;
-
-  *,cl*)
-    # Native MSVC
-    libname_spec='$name'
-    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-    library_names_spec='${libname}.dll.lib'
-
-    case $build_os in
-    mingw*)
-      sys_lib_search_path_spec=
-      lt_save_ifs=$IFS
-      IFS=';'
-      for lt_path in $LIB
-      do
-        IFS=$lt_save_ifs
-        # Let DOS variable expansion print the short 8.3 style file name.
-        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
-        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
-      done
-      IFS=$lt_save_ifs
-      # Convert to MSYS style.
-      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
-      ;;
-    cygwin*)
-      # Convert to unix form, then to dos form, then back to unix form
-      # but this time dos style (no spaces!) so that the unix form looks
-      # like /cygdrive/c/PROGRA~1:/cygdr...
-      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
-      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
-      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-      ;;
-    *)
-      sys_lib_search_path_spec="$LIB"
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      # FIXME: find the short name or the path components, as spaces are
-      # common. (e.g. "Program Files" -> "PROGRA~1")
-      ;;
-    esac
-
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-    dynamic_linker='Win32 link.exe'
-    ;;
-
-  *)
-    # Assume MSVC wrapper
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    dynamic_linker='Win32 ld.exe'
-    ;;
-  esac
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-m4_if([$1], [],[
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[[23]].*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2.*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
-  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-haiku*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  dynamic_linker="$host_os runtime_loader"
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
-  postinstall_cmds='chmod 555 $lib'
-  # or fails outright, so override atomically:
-  install_override_mode=555
-  ;;
-
-interix[[3-9]]*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux # correct to gnu/linux during the next big refactor
-	else
-		version_type=irix
-	fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-
-  # Some binutils ld are patched to set DT_RUNPATH
-  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
-    [lt_cv_shlibpath_overrides_runpath=no
-    save_LDFLAGS=$LDFLAGS
-    save_libdir=$libdir
-    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-	 [lt_cv_shlibpath_overrides_runpath=yes])])
-    LDFLAGS=$save_LDFLAGS
-    libdir=$save_libdir
-    ])
-  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux # correct to gnu/linux during the next big refactor
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-	;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux # correct to gnu/linux during the next big refactor
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-_LT_DECL([], [variables_saved_for_relink], [1],
-    [Variables whose values should be saved in libtool wrapper scripts and
-    restored at link time])
-_LT_DECL([], [need_lib_prefix], [0],
-    [Do we need the "lib" prefix for modules?])
-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
-_LT_DECL([], [version_type], [0], [Library versioning type])
-_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
-_LT_DECL([], [shlibpath_overrides_runpath], [0],
-    [Is shlibpath searched before the hard-coded library search path?])
-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
-_LT_DECL([], [library_names_spec], [1],
-    [[List of archive names.  First name is the real one, the rest are links.
-    The last name is the one that the linker finds with -lNAME]])
-_LT_DECL([], [soname_spec], [1],
-    [[The coded name of the library, if different from the real name]])
-_LT_DECL([], [install_override_mode], [1],
-    [Permission mode override for installation of shared libraries])
-_LT_DECL([], [postinstall_cmds], [2],
-    [Command to use after installation of a shared archive])
-_LT_DECL([], [postuninstall_cmds], [2],
-    [Command to use after uninstallation of a shared archive])
-_LT_DECL([], [finish_cmds], [2],
-    [Commands used to finish a libtool library installation in a directory])
-_LT_DECL([], [finish_eval], [1],
-    [[As "finish_cmds", except a single script fragment to be evaled but
-    not shown]])
-_LT_DECL([], [hardcode_into_libs], [0],
-    [Whether we should hardcode library paths into libraries])
-_LT_DECL([], [sys_lib_search_path_spec], [2],
-    [Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
-    [Run-time system search path for libraries])
-])# _LT_SYS_DYNAMIC_LINKER
-
-
-# _LT_PATH_TOOL_PREFIX(TOOL)
-# --------------------------
-# find a file program which can recognize shared library
-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
-[m4_require([_LT_DECL_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word.  This closes a longstanding sh security hole.
-  ac_dummy="m4_if([$2], , $PATH, [$2])"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
-      if test -n "$file_magic_test_file"; then
-	case $deplibs_check_method in
-	"file_magic "*)
-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-	    $EGREP "$file_magic_regex" > /dev/null; then
-	    :
-	  else
-	    cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-_LT_EOF
-	  fi ;;
-	esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  AC_MSG_RESULT($MAGIC_CMD)
-else
-  AC_MSG_RESULT(no)
-fi
-_LT_DECL([], [MAGIC_CMD], [0],
-	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
-])# _LT_PATH_TOOL_PREFIX
-
-# Old name:
-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
-
-
-# _LT_PATH_MAGIC
-# --------------
-# find a file program which can recognize a shared library
-m4_defun([_LT_PATH_MAGIC],
-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# _LT_PATH_MAGIC
-
-
-# LT_PATH_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([LT_PATH_LD],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
-
-AC_ARG_WITH([gnu-ld],
-    [AS_HELP_STRING([--with-gnu-ld],
-	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
-    [with_gnu_ld=no])dnl
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by $CC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]]* | ?:[[\\/]]*)
-      re_direlt='/[[^/]][[^/]]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
-	;;
-      *)
-	test "$with_gnu_ld" != yes && break
-	;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-_LT_PATH_LD_GNU
-AC_SUBST([LD])
-
-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
-])# LT_PATH_LD
-
-# Old names:
-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_LD], [])
-dnl AC_DEFUN([AC_PROG_LD], [])
-
-
-# _LT_PATH_LD_GNU
-#- --------------
-m4_defun([_LT_PATH_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# _LT_PATH_LD_GNU
-
-
-# _LT_CMD_RELOAD
-# --------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-m4_defun([_LT_CMD_RELOAD],
-[AC_CACHE_CHECK([for $LD option to reload object files],
-  lt_cv_ld_reload_flag,
-  [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    if test "$GCC" != yes; then
-      reload_cmds=false
-    fi
-    ;;
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_TAGDECL([], [reload_cmds], [2])dnl
-])# _LT_CMD_RELOAD
-
-
-# _LT_CHECK_MAGIC_METHOD
-# ----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-m4_defun([_LT_CHECK_MAGIC_METHOD],
-[m4_require([_LT_DECL_EGREP])
-m4_require([_LT_DECL_OBJDUMP])
-AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[[45]]*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
-  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    # Keep this pattern in sync with the one in func_win32_libid.
-    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc*)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-haiku*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[[3-9]]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-
-file_magic_glob=
-want_nocaseglob=no
-if test "$build" = "$host"; then
-  case $host_os in
-  mingw* | pw32*)
-    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
-      want_nocaseglob=yes
-    else
-      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
-    fi
-    ;;
-  esac
-fi
-
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-_LT_DECL([], [deplibs_check_method], [1],
-    [Method to check whether dependent libraries are shared objects])
-_LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method = "file_magic"])
-_LT_DECL([], [file_magic_glob], [1],
-    [How to find potential files when deplibs_check_method = "file_magic"])
-_LT_DECL([], [want_nocaseglob], [1],
-    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
-])# _LT_CHECK_MAGIC_METHOD
-
-
-# LT_PATH_NM
-# ----------
-# find the pathname to a BSD- or MS-compatible name lister
-AC_DEFUN([LT_PATH_NM],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
-	  lt_cv_path_NM="$tmp_nm -B"
-	  break
-	  ;;
-	*)
-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-	  */dev/null*)
-	    lt_cv_path_NM="$tmp_nm -p"
-	    break
-	    ;;
-	  *)
-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-	    continue # so that we can try to find one that supports BSD flags
-	    ;;
-	  esac
-	  ;;
-	esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  if test -n "$DUMPBIN"; then :
-    # Let the user override the test.
-  else
-    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
-    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
-    *COFF*)
-      DUMPBIN="$DUMPBIN -symbols"
-      ;;
-    *)
-      DUMPBIN=:
-      ;;
-    esac
-  fi
-  AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-AC_SUBST([NM])
-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
-
-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
-  [lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
-  cat conftest.out >&AS_MESSAGE_LOG_FD
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*])
-])# LT_PATH_NM
-
-# Old names:
-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_NM], [])
-dnl AC_DEFUN([AC_PROG_NM], [])
-
-# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
-# --------------------------------
-# how to determine the name of the shared library
-# associated with a specific link library.
-#  -- PORTME fill in with the dynamic library characteristics
-m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
-[m4_require([_LT_DECL_EGREP])
-m4_require([_LT_DECL_OBJDUMP])
-m4_require([_LT_DECL_DLLTOOL])
-AC_CACHE_CHECK([how to associate runtime and link libraries],
-lt_cv_sharedlib_from_linklib_cmd,
-[lt_cv_sharedlib_from_linklib_cmd='unknown'
-
-case $host_os in
-cygwin* | mingw* | pw32* | cegcc*)
-  # two different shell functions defined in ltmain.sh
-  # decide which to use based on capabilities of $DLLTOOL
-  case `$DLLTOOL --help 2>&1` in
-  *--identify-strict*)
-    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
-    ;;
-  *)
-    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
-    ;;
-  esac
-  ;;
-*)
-  # fallback: assume linklib IS sharedlib
-  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
-  ;;
-esac
-])
-sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-
-_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
-    [Command to associate shared and link libraries])
-])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
-
-
-# _LT_PATH_MANIFEST_TOOL
-# ----------------------
-# locate the manifest tool
-m4_defun([_LT_PATH_MANIFEST_TOOL],
-[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
-test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
-  [lt_cv_path_mainfest_tool=no
-  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
-  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
-    lt_cv_path_mainfest_tool=yes
-  fi
-  rm -f conftest*])
-if test "x$lt_cv_path_mainfest_tool" != xyes; then
-  MANIFEST_TOOL=:
-fi
-_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
-])# _LT_PATH_MANIFEST_TOOL
-
-
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
-  ;;
-esac
-AC_SUBST([LIBM])
-])# LT_LIB_M
-
-# Old name:
-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_CHECK_LIBM], [])
-
-
-# _LT_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------
-m4_defun([_LT_COMPILER_NO_RTTI],
-[m4_require([_LT_TAG_COMPILER])dnl
-
-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  case $cc_basename in
-  nvcc*)
-    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
-  *)
-    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
-  esac
-
-  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
-	[Compiler flag to turn off builtin functions])
-])# _LT_COMPILER_NO_RTTI
-
-
-# _LT_CMD_GLOBAL_SYMBOLS
-# ----------------------
-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[[BCDEGRST]]'
-  ;;
-osf*)
-  symcode='[[BCDEGQRST]]'
-  ;;
-solaris*)
-  symcode='[[BDRT]]'
-  ;;
-sco3.2v5*)
-  symcode='[[DT]]'
-  ;;
-sysv4.2uw2*)
-  symcode='[[DT]]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[[ABDT]]'
-  ;;
-sysv4)
-  symcode='[[DFNSTU]]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK ['"\
-"     {last_section=section; section=\$ 3};"\
-"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx]"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if AC_TRY_EVAL(ac_compile); then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<_LT_EOF > conftest.$ac_ext
-/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
-   relocations are performed -- see ld's documentation on pseudo-relocs.  */
-# define LT@&t at _DLSYM_CONST
-#elif defined(__osf__)
-/* This system does not cope well with relocations in const data.  */
-# define LT@&t at _DLSYM_CONST
-#else
-# define LT@&t at _DLSYM_CONST const
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-	  # Now generate the symbol file.
-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-	  cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-LT@&t at _DLSYM_CONST struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[[]] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-	  cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-	  # Now try linking the two files.
-	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_globsym_save_LIBS=$LIBS
-	  lt_globsym_save_CFLAGS=$CFLAGS
-	  LIBS="conftstm.$ac_objext"
-	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
-	    pipe_works=yes
-	  fi
-	  LIBS=$lt_globsym_save_LIBS
-	  CFLAGS=$lt_globsym_save_CFLAGS
-	else
-	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
-    fi
-  else
-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  AC_MSG_RESULT(failed)
-else
-  AC_MSG_RESULT(ok)
-fi
-
-# Response file support.
-if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-  nm_file_list_spec='@'
-elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
-  nm_file_list_spec='@'
-fi
-
-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
-    [Take the output of nm and produce a listing of raw symbols and C names])
-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
-    [Transform the output of nm in a proper C declaration])
-_LT_DECL([global_symbol_to_c_name_address],
-    [lt_cv_sys_global_symbol_to_c_name_address], [1],
-    [Transform the output of nm in a C name address pair])
-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
-    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
-    [Transform the output of nm in a C name address pair when lib prefix is needed])
-_LT_DECL([], [nm_file_list_spec], [1],
-    [Specify filename containing input files for $NM])
-]) # _LT_CMD_GLOBAL_SYMBOLS
-
-
-# _LT_COMPILER_PIC([TAGNAME])
-# ---------------------------
-m4_defun([_LT_COMPILER_PIC],
-[m4_require([_LT_TAG_COMPILER])dnl
-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_TAGVAR(lt_prog_compiler_static, $1)=
-
-m4_if([$1], [CXX], [
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-      ;;
-    haiku*)
-      # PIC is the default for Haiku.
-      # The "-static" flag exists, but is broken.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)=
-      ;;
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-    *qnx* | *nto*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[[4-9]]*)
-	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
-	  # AIX 5 now supports IA64 processor
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	else
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-	fi
-	;;
-      chorus*)
-	case $cc_basename in
-	cxch68*)
-	  # Green Hills C++ Compiler
-	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-	  ;;
-	esac
-	;;
-      mingw* | cygwin* | os2* | pw32* | cegcc*)
-	# This hack is so that the source file can tell whether it is being
-	# built for inclusion in a dll (and should export symbols for example).
-	m4_if([$1], [GCJ], [],
-	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-	;;
-      dgux*)
-	case $cc_basename in
-	  ec++*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  ghcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      freebsd* | dragonfly*)
-	# FreeBSD uses GNU C++
-	;;
-      hpux9* | hpux10* | hpux11*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    if test "$host_cpu" != ia64; then
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	    fi
-	    ;;
-	  aCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    case $host_cpu in
-	    hppa*64*|ia64*)
-	      # +Z the default
-	      ;;
-	    *)
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	      ;;
-	    esac
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      interix*)
-	# This is c89, which is MS Visual C++ (no shared libs)
-	# Anyone wants to do a port?
-	;;
-      irix5* | irix6* | nonstopux*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    # CC pic flag -KPIC is the default.
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
-	case $cc_basename in
-	  KCC*)
-	    # KAI C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    ;;
-	  ecpc* )
-	    # old Intel C++ for x86_64 which still supported -KPIC.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  icpc* )
-	    # Intel C++, used to be incompatible with GCC.
-	    # ICC 10 doesn't accept -KPIC any more.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  pgCC* | pgcpp*)
-	    # Portland Group C++ compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  cxx*)
-	    # Compaq C++
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
-	    # IBM XL 8.0, 9.0 on PPC and BlueGene
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-      lynxos*)
-	;;
-      m88k*)
-	;;
-      mvs*)
-	case $cc_basename in
-	  cxx*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      netbsd*)
-	;;
-      *qnx* | *nto*)
-        # QNX uses GNU C++, but need to define -shared option too, otherwise
-        # it will coredump.
-        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-        ;;
-      osf3* | osf4* | osf5*)
-	case $cc_basename in
-	  KCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    ;;
-	  RCC*)
-	    # Rational C++ 2.4.1
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  cxx*)
-	    # Digital/Compaq C++
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      psos*)
-	;;
-      solaris*)
-	case $cc_basename in
-	  CC* | sunCC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	    ;;
-	  gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sunos4*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.x
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  lcc*)
-	    # Lucid
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	esac
-	;;
-      tandem*)
-	case $cc_basename in
-	  NCC*)
-	    # NonStop-UX NCC 3.20
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      vxworks*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-	;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    haiku*)
-      # PIC is the default for Haiku.
-      # The "-static" flag exists, but is broken.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)=
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-
-    case $cc_basename in
-    nvcc*) # Cuda Compiler Driver 2.2
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
-      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
-        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
-      fi
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
-	;;
-      nagfor*)
-	# NAG Fortran compiler
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	;;
-      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-        ;;
-      ccc*)
-        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      xl* | bgxl* | bgf* | mpixl*)
-	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	;;
-      *)
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
-	  ;;
-	*Sun\ F* | *Sun*Fortran*)
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	  ;;
-	*Sun\ C*)
-	  # Sun C 5.9
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	  ;;
-        *Intel*\ [[CF]]*Compiler*)
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	  ;;
-	*Portland\ Group*)
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  ;;
-	esac
-	;;
-      esac
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    rdos*)
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    unicos*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-
-AC_CACHE_CHECK([for $compiler option to produce PIC],
-  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
-  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
-    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
-    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
-	[Additional compiler flags for building library objects])
-
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-	[How to pass a linker flag through the compiler])
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
-  $lt_tmp_static_flag,
-  [],
-  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
-	[Compiler flag to prevent dynamic linking])
-])# _LT_COMPILER_PIC
-
-
-# _LT_LINKER_SHLIBS([TAGNAME])
-# ----------------------------
-# See if the linker supports building shared libraries.
-m4_defun([_LT_LINKER_SHLIBS],
-[AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-m4_require([_LT_PATH_MANIFEST_TOOL])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-m4_if([$1], [CXX], [
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-  case $host_os in
-  aix[[4-9]]*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    # Also, AIX nm treats weak defined symbols like other global defined
-    # symbols, whereas GNU nm marks them as "W".
-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    else
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-    ;;
-  cygwin* | mingw* | cegcc*)
-    case $cc_basename in
-    cl*)
-      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
-      ;;
-    *)
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
-      ;;
-    esac
-    ;;
-  *)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-    ;;
-  esac
-], [
-  runpath_var=
-  _LT_TAGVAR(allow_undefined_flag, $1)=
-  _LT_TAGVAR(always_export_symbols, $1)=no
-  _LT_TAGVAR(archive_cmds, $1)=
-  _LT_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_TAGVAR(compiler_needs_object, $1)=no
-  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  _LT_TAGVAR(hardcode_automatic, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
-  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(inherit_rpath, $1)=no
-  _LT_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_TAGVAR(module_cmds, $1)=
-  _LT_TAGVAR(module_expsym_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_TAGVAR(include_expsyms, $1)=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  _LT_TAGVAR(ld_shlibs, $1)=yes
-
-  # On some targets, GNU ld is compatible enough with the native linker
-  # that we're better off using the native interface for both.
-  lt_use_gnu_ld_interface=no
-  if test "$with_gnu_ld" = yes; then
-    case $host_os in
-      aix*)
-	# The AIX port of GNU ld has always aspired to compatibility
-	# with the native linker.  However, as the warning in the GNU ld
-	# block says, versions before 2.19.5* couldn't really create working
-	# shared libraries, regardless of the interface used.
-	case `$LD -v 2>&1` in
-	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
-	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
-	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
-	  *)
-	    lt_use_gnu_ld_interface=yes
-	    ;;
-	esac
-	;;
-      *)
-	lt_use_gnu_ld_interface=yes
-	;;
-    esac
-  fi
-
-  if test "$lt_use_gnu_ld_interface" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *GNU\ gold*) supports_anon_versioning=yes ;;
-      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[[3-9]]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.19, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to install binutils
-*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
-*** You will then need to restart the configuration process.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	# support --undefined.  This deserves some investigation.  FIXME
-	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=no
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	  cp $export_symbols $output_objdir/$soname.def;
-	else
-	  echo EXPORTS > $output_objdir/$soname.def;
-	  cat $export_symbols >> $output_objdir/$soname.def;
-	fi~
-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    haiku*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    interix[[3-9]]*)
-      _LT_TAGVAR(hardcode_direct, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-	case $cc_basename in
-	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
-	esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-	 && test "$tmp_diet" = no
-      then
-	tmp_addflag=' $pic_flag'
-	tmp_sharedflag='-shared'
-	case $cc_basename,$host_cpu in
-        pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* | pgf95* | pgfortran*)
-					# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag -Mnomain' ;;
-	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
-	  tmp_addflag=' -i_dynamic' ;;
-	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
-	  tmp_addflag=' -i_dynamic -nofor_main' ;;
-	ifc* | ifort*)			# Intel Fortran compiler
-	  tmp_addflag=' -nofor_main' ;;
-	lf95*)				# Lahey Fortran 8.1
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-	  tmp_sharedflag='--shared' ;;
-	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
-	  tmp_sharedflag='-qmkshrobj'
-	  tmp_addflag= ;;
-	nvcc*)	# Cuda Compiler Driver 2.2
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
-	  _LT_TAGVAR(compiler_needs_object, $1)=yes
-	  ;;
-	esac
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
-	  _LT_TAGVAR(compiler_needs_object, $1)=yes
-	  tmp_sharedflag='-G' ;;
-	*Sun\ F*)			# Sun Fortran 8.3
-	  tmp_sharedflag='-G' ;;
-	esac
-	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	    echo "local: *; };" >> $output_objdir/$libname.ver~
-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-	case $cc_basename in
-	xlf* | bgf* | bgxlf* | mpixlf*)
-	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
-	  if test "x$supports_anon_versioning" = xyes; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-	  fi
-	  ;;
-	esac
-      else
-        _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-	;;
-	*)
-	  # For security reasons, it is highly recommended that you always
-	  # use absolute paths for naming shared libraries, and exclude the
-	  # DT_RUNPATH tag from executables and libraries.  But doing so
-	  # requires that you compile everything twice, which is a pain.
-	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-	  else
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	  fi
-	;;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
-      runpath_var=
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	_LT_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
-	# On IA64, the linker does run time linking by default, so we don't
-	# have to do anything special.
-	aix_use_runtimelinking=no
-	exp_sym_flag='-Bexport'
-	no_entry_flag=""
-      else
-	# If we're using GNU nm, then we don't want the "-C" option.
-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
-	# Also, AIX nm treats weak defined symbols like other global
-	# defined symbols, whereas GNU nm marks them as "W".
-	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	else
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	fi
-	aix_use_runtimelinking=no
-
-	# Test if we are trying to use run time linking or normal
-	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
-	# need to do runtime linking.
-	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	  for ld_flag in $LDFLAGS; do
-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-	    aix_use_runtimelinking=yes
-	    break
-	  fi
-	  done
-	  ;;
-	esac
-
-	exp_sym_flag='-bexport'
-	no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      _LT_TAGVAR(archive_cmds, $1)=''
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-      if test "$GCC" = yes; then
-	case $host_os in aix4.[[012]]|aix4.[[012]].*)
-	# We only want to do this on AIX 4.2 and lower, the check
-	# below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	  # We have reworked collect2
-	  :
-	  else
-	  # We have old collect2
-	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	  # It fails to find uninstalled libraries when the uninstalled
-	  # path is not listed in the libpath.  Setting hardcode_minus_L
-	  # to unsupported forces relinking
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-	  ;;
-	esac
-	shared_flag='-shared'
-	if test "$aix_use_runtimelinking" = yes; then
-	  shared_flag="$shared_flag "'${wl}-G'
-	fi
-      else
-	# not using gcc
-	if test "$host_cpu" = ia64; then
-	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	# chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-	else
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag='${wl}-G'
-	  else
-	    shared_flag='${wl}-bM:SRE'
-	  fi
-	fi
-      fi
-
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
-	# Warning - without using the other runtime loading flags (-brtl),
-	# -berok will link without error, but may produce a broken library.
-	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        _LT_SYS_MODULE_PATH_AIX([$1])
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-	if test "$host_cpu" = ia64; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an
-	 # empty executable.
-	 _LT_SYS_MODULE_PATH_AIX([$1])
-	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	  # Warning - without using the other run time loading flags,
-	  # -berok will link without error, but may produce a broken library.
-	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  if test "$with_gnu_ld" = yes; then
-	    # We only use this code for GNU lds that support --whole-archive.
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	  else
-	    # Exported symbols can be pulled into shared objects from archives
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	  fi
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	  # This is similar to how AIX traditionally builds its shared libraries.
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[[45]]*)
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      case $cc_basename in
-      cl*)
-	# Native MSVC
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	_LT_TAGVAR(always_export_symbols, $1)=yes
-	_LT_TAGVAR(file_list_spec, $1)='@'
-	# Tell ltmain to make .lib files, not .a files.
-	libext=lib
-	# Tell ltmain to make .dll files, not .so files.
-	shrext_cmds=".dll"
-	# FIXME: Setting linknames here is a bad hack.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-	  else
-	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-	  fi~
-	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-	  linknames='
-	# The linker will not automatically build a static lib if we build a DLL.
-	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-	_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
-	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-	# Don't use ranlib
-	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
-	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
-	  lt_tool_outputfile="@TOOL_OUTPUT@"~
-	  case $lt_outputfile in
-	    *.exe|*.EXE) ;;
-	    *)
-	      lt_outputfile="$lt_outputfile.exe"
-	      lt_tool_outputfile="$lt_tool_outputfile.exe"
-	      ;;
-	  esac~
-	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-	    $RM "$lt_outputfile.manifest";
-	  fi'
-	;;
-      *)
-	# Assume MSVC wrapper
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	# Tell ltmain to make .lib files, not .a files.
-	libext=lib
-	# Tell ltmain to make .dll files, not .so files.
-	shrext_cmds=".dll"
-	# FIXME: Setting linknames here is a bad hack.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
-	# The linker will automatically build a .lib file if we build a DLL.
-	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-	# FIXME: Should let the user specify the lib program.
-	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-	;;
-      esac
-      ;;
-
-    darwin* | rhapsody*)
-      _LT_DARWIN_LINKER_FEATURES($1)
-      ;;
-
-    dgux*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2.*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# hardcode_minus_L: Not really in the search PATH,
-	# but as the default location of the library.
-	_LT_TAGVAR(hardcode_minus_L, $1)=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	m4_if($1, [], [
-	  # Older versions of the 11.00 compiler do not understand -b yet
-	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
-	  _LT_LINKER_OPTION([if $CC understands -b],
-	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
-	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
-	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
-	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	case $host_cpu in
-	hppa*64*|ia64*)
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  ;;
-	*)
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	# Try to use the -exported_symbol ld option, if it does not
-	# work, assume that -exports_file does not work either and
-	# implicitly export all symbols.
-	# This should be the same for all languages, so no per-tag cache variable.
-	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
-	  [lt_cv_irix_exported_symbol],
-	  [save_LDFLAGS="$LDFLAGS"
-	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-	   AC_LINK_IFELSE(
-	     [AC_LANG_SOURCE(
-	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
-			      [C++], [[int foo (void) { return 0; }]],
-			      [Fortran 77], [[
-      subroutine foo
-      end]],
-			      [Fortran], [[
-      subroutine foo
-      end]])])],
-	      [lt_cv_irix_exported_symbol=yes],
-	      [lt_cv_irix_exported_symbol=no])
-           LDFLAGS="$save_LDFLAGS"])
-	if test "$lt_cv_irix_exported_symbol" = yes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-	fi
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(inherit_rpath, $1)=yes
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd*)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	else
-	  case $host_os in
-	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	     ;;
-	   *)
-	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	     ;;
-	  esac
-	fi
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    os2*)
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-	# Both c and cxx compiler support -rpath directly
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-	case `$CC -V 2>&1` in
-	*"Compilers 5.0"*)
-	  wlarc=''
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-	  ;;
-	*)
-	  wlarc='${wl}'
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-	  ;;
-	esac
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      case $host_os in
-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-      *)
-	# The compiler driver will combine and reorder linker options,
-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
-	# but is careful enough not to reorder.
-	# Supported since Solaris 2.6 (maybe 2.5.1?)
-	if test "$GCC" = yes; then
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-	else
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	fi
-	;;
-      esac
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-	# Use $CC to link under sequent, because it throws in some extra .o
-	# files that make .init and .fini sections work.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-        ;;
-	motorola)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	_LT_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
-	;;
-      esac
-    fi
-  fi
-])
-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
-
-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
-_LT_DECL([], [extract_expsyms_cmds], [2],
-    [The commands to extract the exported symbol list from a shared archive])
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_TAGVAR(archive_cmds, $1) in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
-	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
-	[$RM conftest*
-	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-	  soname=conftest
-	  lib=conftest
-	  libobjs=conftest.$ac_objext
-	  deplibs=
-	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-	  compiler_flags=-v
-	  linker_flags=-v
-	  verstring=
-	  output_objdir=.
-	  libname=conftest
-	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-	  _LT_TAGVAR(allow_undefined_flag, $1)=
-	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-	  then
-	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	  else
-	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	  fi
-	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-	else
-	  cat conftest.err 1>&5
-	fi
-	$RM conftest*
-	])
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
-    [Whether or not to add -lc for building shared libraries])
-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
-    [enable_shared_with_static_runtimes], [0],
-    [Whether or not to disallow shared libs when runtime libs are static])
-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
-    [Compiler flag to allow reflexive dlopens])
-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
-    [Compiler flag to generate shared objects directly from archives])
-_LT_TAGDECL([], [compiler_needs_object], [1],
-    [Whether the compiler copes with passing no objects directly])
-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
-    [Create an old-style archive from a shared archive])
-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
-    [Create a temporary old-style archive to link instead of a shared archive])
-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
-_LT_TAGDECL([], [archive_expsym_cmds], [2])
-_LT_TAGDECL([], [module_cmds], [2],
-    [Commands used to build a loadable module if different from building
-    a shared archive.])
-_LT_TAGDECL([], [module_expsym_cmds], [2])
-_LT_TAGDECL([], [with_gnu_ld], [1],
-    [Whether we are building with GNU ld or not])
-_LT_TAGDECL([], [allow_undefined_flag], [1],
-    [Flag that allows shared libraries with undefined symbols to be built])
-_LT_TAGDECL([], [no_undefined_flag], [1],
-    [Flag that enforces no undefined symbols])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
-    [Flag to hardcode $libdir into a binary during linking.
-    This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
-    [Whether we need a single "-rpath" flag with a separated argument])
-_LT_TAGDECL([], [hardcode_direct], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary])
-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary and the resulting library dependency is
-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
-    library is relocated])
-_LT_TAGDECL([], [hardcode_minus_L], [0],
-    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
-    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_automatic], [0],
-    [Set to "yes" if building a shared library automatically hardcodes DIR
-    into the library and all subsequent libraries and executables linked
-    against it])
-_LT_TAGDECL([], [inherit_rpath], [0],
-    [Set to yes if linker adds runtime paths of dependent libraries
-    to runtime path list])
-_LT_TAGDECL([], [link_all_deplibs], [0],
-    [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [always_export_symbols], [0],
-    [Set to "yes" if exported symbols are required])
-_LT_TAGDECL([], [export_symbols_cmds], [2],
-    [The commands to list exported symbols])
-_LT_TAGDECL([], [exclude_expsyms], [1],
-    [Symbols that should not be listed in the preloaded symbols])
-_LT_TAGDECL([], [include_expsyms], [1],
-    [Symbols that must always be exported])
-_LT_TAGDECL([], [prelink_cmds], [2],
-    [Commands necessary for linking programs (against libraries) with templates])
-_LT_TAGDECL([], [postlink_cmds], [2],
-    [Commands necessary for finishing linking programs])
-_LT_TAGDECL([], [file_list_spec], [1],
-    [Specify filename containing input files])
-dnl FIXME: Not yet implemented
-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
-dnl    [Compiler flag to generate thread safe objects])
-])# _LT_LINKER_SHLIBS
-
-
-# _LT_LANG_C_CONFIG([TAG])
-# ------------------------
-# Ensure that the configuration variables for a C compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_C_CONFIG],
-[m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_TAG_COMPILER
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_SYS_DYNAMIC_LINKER($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-  LT_SYS_DLOPEN_SELF
-  _LT_CMD_STRIPLIB
-
-  # Report which library types will actually be built
-  AC_MSG_CHECKING([if libtool supports shared libraries])
-  AC_MSG_RESULT([$can_build_shared])
-
-  AC_MSG_CHECKING([whether to build shared libraries])
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  AC_MSG_RESULT([$enable_shared])
-
-  AC_MSG_CHECKING([whether to build static libraries])
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  AC_MSG_RESULT([$enable_static])
-
-  _LT_CONFIG($1)
-fi
-AC_LANG_POP
-CC="$lt_save_CC"
-])# _LT_LANG_C_CONFIG
-
-
-# _LT_LANG_CXX_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a C++ compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_CXX_CONFIG],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_PATH_MANIFEST_TOOL])dnl
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-
-AC_LANG_PUSH(C++)
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(compiler_needs_object, $1)=no
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(reload_flag, $1)=$reload_flag
-_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="int some_variable = 0;"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC=$CC
-  lt_save_CFLAGS=$CFLAGS
-  lt_save_LD=$LD
-  lt_save_GCC=$GCC
-  GCC=$GXX
-  lt_save_with_gnu_ld=$with_gnu_ld
-  lt_save_path_LD=$lt_cv_path_LD
-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-  else
-    $as_unset lt_cv_prog_gnu_ld
-  fi
-  if test -n "${lt_cv_path_LDCXX+set}"; then
-    lt_cv_path_LD=$lt_cv_path_LDCXX
-  else
-    $as_unset lt_cv_path_LD
-  fi
-  test -z "${LDCXX+set}" || LD=$LDCXX
-  CC=${CXX-"c++"}
-  CFLAGS=$CXXFLAGS
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    # We don't want -fno-exception when compiling C++ code, so set the
-    # no_builtin_flag separately
-    if test "$GXX" = yes; then
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-    else
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-    fi
-
-    if test "$GXX" = yes; then
-      # Set up default GNU C++ configuration
-
-      LT_PATH_LD
-
-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
-      # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-        # If archive_cmds runs LD, not CC, wlarc should be empty
-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-        #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
-
-        # ancient GNU ld didn't support --whole-archive et. al.
-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
-	  $GREP 'no-whole-archive' > /dev/null; then
-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-        else
-          _LT_TAGVAR(whole_archive_flag_spec, $1)=
-        fi
-      else
-        with_gnu_ld=no
-        wlarc=
-
-        # A generic and very simple default shared library creation
-        # command for GNU C++ for the case where it uses the native
-        # linker, instead of GNU ld.  If possible, this setting should
-        # overridden to take advantage of the native linker features on
-        # the platform it is being used on.
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      fi
-
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
-
-    else
-      GXX=no
-      with_gnu_ld=no
-      wlarc=
-    fi
-
-    # PORTME: fill in a description of your system's C++ link characteristics
-    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-    _LT_TAGVAR(ld_shlibs, $1)=yes
-    case $host_os in
-      aix3*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-      aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
-          # On IA64, the linker does run time linking by default, so we don't
-          # have to do anything special.
-          aix_use_runtimelinking=no
-          exp_sym_flag='-Bexport'
-          no_entry_flag=""
-        else
-          aix_use_runtimelinking=no
-
-          # Test if we are trying to use run time linking or normal
-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
-          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	    for ld_flag in $LDFLAGS; do
-	      case $ld_flag in
-	      *-brtl*)
-	        aix_use_runtimelinking=yes
-	        break
-	        ;;
-	      esac
-	    done
-	    ;;
-          esac
-
-          exp_sym_flag='-bexport'
-          no_entry_flag='-bnoentry'
-        fi
-
-        # When large executables or shared objects are built, AIX ld can
-        # have problems creating the table of contents.  If linking a library
-        # or program results in "error TOC overflow" add -mminimal-toc to
-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-        _LT_TAGVAR(archive_cmds, $1)=''
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-        _LT_TAGVAR(link_all_deplibs, $1)=yes
-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-        if test "$GXX" = yes; then
-          case $host_os in aix4.[[012]]|aix4.[[012]].*)
-          # We only want to do this on AIX 4.2 and lower, the check
-          # below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	    # We have reworked collect2
-	    :
-	  else
-	    # We have old collect2
-	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	    # It fails to find uninstalled libraries when the uninstalled
-	    # path is not listed in the libpath.  Setting hardcode_minus_L
-	    # to unsupported forces relinking
-	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-          esac
-          shared_flag='-shared'
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag="$shared_flag "'${wl}-G'
-	  fi
-        else
-          # not using gcc
-          if test "$host_cpu" = ia64; then
-	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	  # chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-          else
-	    if test "$aix_use_runtimelinking" = yes; then
-	      shared_flag='${wl}-G'
-	    else
-	      shared_flag='${wl}-bM:SRE'
-	    fi
-          fi
-        fi
-
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-        # It seems that -bexpall does not export symbols beginning with
-        # underscore (_), so it is better to generate a list of symbols to
-	# export.
-        _LT_TAGVAR(always_export_symbols, $1)=yes
-        if test "$aix_use_runtimelinking" = yes; then
-          # Warning - without using the other runtime loading flags (-brtl),
-          # -berok will link without error, but may produce a broken library.
-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-          # Determine the default libpath from the value encoded in an empty
-          # executable.
-          _LT_SYS_MODULE_PATH_AIX([$1])
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-        else
-          if test "$host_cpu" = ia64; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-          else
-	    # Determine the default libpath from the value encoded in an
-	    # empty executable.
-	    _LT_SYS_MODULE_PATH_AIX([$1])
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	    # Warning - without using the other run time loading flags,
-	    # -berok will link without error, but may produce a broken library.
-	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    if test "$with_gnu_ld" = yes; then
-	      # We only use this code for GNU lds that support --whole-archive.
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	    else
-	      # Exported symbols can be pulled into shared objects from archives
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	    fi
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	    # This is similar to how AIX traditionally builds its shared
-	    # libraries.
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-          fi
-        fi
-        ;;
-
-      beos*)
-	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	  # support --undefined.  This deserves some investigation.  FIXME
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      chorus*)
-        case $cc_basename in
-          *)
-	  # FIXME: insert proper C++ library support
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	  ;;
-        esac
-        ;;
-
-      cygwin* | mingw* | pw32* | cegcc*)
-	case $GXX,$cc_basename in
-	,cl* | no,cl*)
-	  # Native MSVC
-	  # hardcode_libdir_flag_spec is actually meaningless, as there is
-	  # no search path for DLLs.
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	  _LT_TAGVAR(always_export_symbols, $1)=yes
-	  _LT_TAGVAR(file_list_spec, $1)='@'
-	  # Tell ltmain to make .lib files, not .a files.
-	  libext=lib
-	  # Tell ltmain to make .dll files, not .so files.
-	  shrext_cmds=".dll"
-	  # FIXME: Setting linknames here is a bad hack.
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-	    else
-	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-	    fi~
-	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-	    linknames='
-	  # The linker will not automatically build a static lib if we build a DLL.
-	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-	  # Don't use ranlib
-	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
-	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
-	    lt_tool_outputfile="@TOOL_OUTPUT@"~
-	    case $lt_outputfile in
-	      *.exe|*.EXE) ;;
-	      *)
-		lt_outputfile="$lt_outputfile.exe"
-		lt_tool_outputfile="$lt_tool_outputfile.exe"
-		;;
-	    esac~
-	    func_to_tool_file "$lt_outputfile"~
-	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-	      $RM "$lt_outputfile.manifest";
-	    fi'
-	  ;;
-	*)
-	  # g++
-	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-	  # as there is no search path for DLLs.
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
-	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	  _LT_TAGVAR(always_export_symbols, $1)=no
-	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	    # If the export-symbols file already is a .def file (1st line
-	    # is EXPORTS), use it as is; otherwise, prepend...
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	      cp $export_symbols $output_objdir/$soname.def;
-	    else
-	      echo EXPORTS > $output_objdir/$soname.def;
-	      cat $export_symbols >> $output_objdir/$soname.def;
-	    fi~
-	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	  else
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	  fi
-	  ;;
-	esac
-	;;
-      darwin* | rhapsody*)
-        _LT_DARWIN_LINKER_FEATURES($1)
-	;;
-
-      dgux*)
-        case $cc_basename in
-          ec++*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          ghcx*)
-	    # Green Hills C++ Compiler
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      freebsd2.*)
-        # C++ shared libraries reported to be fairly broken before
-	# switch to ELF
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      freebsd-elf*)
-        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        ;;
-
-      freebsd* | dragonfly*)
-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-        # conventions
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-        ;;
-
-      gnu*)
-        ;;
-
-      haiku*)
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(link_all_deplibs, $1)=yes
-        ;;
-
-      hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-				             # but as the default
-				             # location of the library.
-
-        case $cc_basename in
-          CC*)
-            # FIXME: insert proper C++ library support
-            _LT_TAGVAR(ld_shlibs, $1)=no
-            ;;
-          aCC*)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            # Commands to make compiler produce verbose output that lists
-            # what "hidden" libraries, object files and flags are used when
-            # linking a shared library.
-            #
-            # There doesn't appear to be a way to prevent this compiler from
-            # explicitly linking system object files so we need to strip them
-            # from the output so that they don't get included in the library
-            # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
-            ;;
-          *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            else
-              # FIXME: insert proper C++ library support
-              _LT_TAGVAR(ld_shlibs, $1)=no
-            fi
-            ;;
-        esac
-        ;;
-
-      hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-          case $host_cpu in
-            hppa*64*|ia64*)
-              ;;
-            *)
-	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-              ;;
-          esac
-        fi
-        case $host_cpu in
-          hppa*64*|ia64*)
-            _LT_TAGVAR(hardcode_direct, $1)=no
-            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-            ;;
-          *)
-            _LT_TAGVAR(hardcode_direct, $1)=yes
-            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-					         # but as the default
-					         # location of the library.
-            ;;
-        esac
-
-        case $cc_basename in
-          CC*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          aCC*)
-	    case $host_cpu in
-	      hppa*64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      ia64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      *)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	    esac
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test $with_gnu_ld = no; then
-	        case $host_cpu in
-	          hppa*64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	        esac
-	      fi
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      interix[[3-9]]*)
-	_LT_TAGVAR(hardcode_direct, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-	# Instead, shared libraries are loaded at an image base (0x10000000 by
-	# default) and relocated if they conflict, which is a slow very memory
-	# consuming and fragmenting process.  To avoid this, we pick a random,
-	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	;;
-      irix5* | irix6*)
-        case $cc_basename in
-          CC*)
-	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
-	      fi
-	    fi
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-	    ;;
-        esac
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(inherit_rpath, $1)=yes
-        ;;
-
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-	    ;;
-	  icpc* | ecpc* )
-	    # Intel C++
-	    with_gnu_ld=yes
-	    # version 8.0 and above of icpc choke on multiply defined symbols
-	    # if we add $predep_objects and $postdep_objects, however 7.1 and
-	    # earlier do not add the objects themselves.
-	    case `$CC -V 2>&1` in
-	      *"Version 7."*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	      *)  # Version 8.0 or newer
-	        tmp_idyn=
-	        case $host_cpu in
-		  ia64*) tmp_idyn=' -i_dynamic';;
-		esac
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	    esac
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	    ;;
-          pgCC* | pgcpp*)
-            # Portland Group C++ compiler
-	    case `$CC -V` in
-	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
-	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
-	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
-		$RANLIB $oldlib'
-	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    *) # Version 6 and above use weak symbols
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
-            ;;
-	  cxx*)
-	    # Compaq C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-	    runpath_var=LD_RUN_PATH
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
-	    ;;
-	  xl* | mpixl* | bgxl*)
-	    # IBM XL 8.0 on PPC, with GNU ld
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    if test "x$supports_anon_versioning" = xyes; then
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-		echo "local: *; };" >> $output_objdir/$libname.ver~
-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	    fi
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
-	      _LT_TAGVAR(compiler_needs_object, $1)=yes
-
-	      # Not sure whether something based on
-	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-	      # would be better.
-	      output_verbose_link_cmd='func_echo_all'
-
-	      # Archives containing C++ object files must be created using
-	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	      # necessary to make sure instantiated templates are included
-	      # in the archive.
-	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-
-      lynxos*)
-        # FIXME: insert proper C++ library support
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      m88k*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      mvs*)
-        case $cc_basename in
-          cxx*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	  *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	esac
-	;;
-
-      netbsd*)
-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-	  wlarc=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	fi
-	# Workaround some broken pre-1.5 toolchains
-	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-	;;
-
-      *nto* | *qnx*)
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-	;;
-
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      openbsd*)
-	if test -f /usr/libexec/ld.so; then
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-	  fi
-	  output_verbose_link_cmd=func_echo_all
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      osf3* | osf4* | osf5*)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Archives containing C++ object files must be created using
-	    # the KAI C++ compiler.
-	    case $host in
-	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
-	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
-	    esac
-	    ;;
-          RCC*)
-	    # Rational C++ 2.4.1
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          cxx*)
-	    case $host in
-	      osf3*)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-		;;
-	      *)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
-	          $RM $lib.exp'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-		;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
-	    ;;
-	  *)
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	      case $host in
-	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	      esac
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	      # Commands to make compiler produce verbose output that lists
-	      # what "hidden" libraries, object files and flags are used when
-	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
-
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      psos*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      sunos4*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.x
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          lcc*)
-	    # Lucid
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      solaris*)
-        case $cc_basename in
-          CC* | sunCC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
-	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	    case $host_os in
-	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-	      *)
-		# The compiler driver will combine and reorder linker options,
-		# but understands `-z linker_flag'.
-	        # Supported since Solaris 2.6 (maybe 2.5.1?)
-		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	        ;;
-	    esac
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-
-	    output_verbose_link_cmd='func_echo_all'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	    ;;
-          gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-	    # The C++ compiler must be used to create the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    # GNU C++ compiler with Solaris linker
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
-	      else
-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
-	        # platform.
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
-	      fi
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-	      case $host_os in
-		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-		*)
-		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-		  ;;
-	      esac
-	    fi
-	    ;;
-        esac
-        ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      case $cc_basename in
-        CC*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-      esac
-      ;;
-
-      sysv5* | sco3.2v5* | sco5v6*)
-	# Note: We can NOT use -z defs as we might desire, because we do not
-	# link with -lc, and that would cause any symbols used from libc to
-	# always be unresolved, which means just about no library would
-	# ever link correctly.  If we're not using GNU ld we use -z text
-	# though, which does catch some bad symbols but isn't as heavy-handed
-	# as -z defs.
-	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-	_LT_TAGVAR(link_all_deplibs, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-	runpath_var='LD_RUN_PATH'
-
-	case $cc_basename in
-          CC*)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
-	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
-	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
-	      '"$_LT_TAGVAR(reload_cmds, $1)"
-	    ;;
-	  *)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	esac
-      ;;
-
-      tandem*)
-        case $cc_basename in
-          NCC*)
-	    # NonStop-UX NCC 3.20
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      vxworks*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      *)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-    esac
-
-    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  CC=$lt_save_CC
-  CFLAGS=$lt_save_CFLAGS
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-AC_LANG_POP
-])# _LT_LANG_CXX_CONFIG
-
-
-# _LT_FUNC_STRIPNAME_CNF
-# ----------------------
-# func_stripname_cnf prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-#
-# This function is identical to the (non-XSI) version of func_stripname,
-# except this one can be used by m4 code that may be executed by configure,
-# rather than the libtool script.
-m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
-AC_REQUIRE([_LT_DECL_SED])
-AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
-func_stripname_cnf ()
-{
-  case ${2} in
-  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-  esac
-} # func_stripname_cnf
-])# _LT_FUNC_STRIPNAME_CNF
-
-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
-# ---------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
-# Dependencies to place before and after the object being linked:
-_LT_TAGVAR(predep_objects, $1)=
-_LT_TAGVAR(postdep_objects, $1)=
-_LT_TAGVAR(predeps, $1)=
-_LT_TAGVAR(postdeps, $1)=
-_LT_TAGVAR(compiler_lib_search_path, $1)=
-
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library.  It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
-int a;
-void foo (void) { a = 0; }
-_LT_EOF
-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-_LT_EOF
-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-_LT_EOF
-], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
-package foo
-func foo() {
-}
-_LT_EOF
-])
-
-_lt_libdeps_save_CFLAGS=$CFLAGS
-case "$CC $CFLAGS " in #(
-*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
-*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
-*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
-esac
-
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  for p in `eval "$output_verbose_link_cmd"`; do
-    case ${prev}${p} in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
-	 prev=$p
-	 continue
-       fi
-
-       # Expand the sysroot to ease extracting the directories later.
-       if test -z "$prev"; then
-         case $p in
-         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
-         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
-         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
-         esac
-       fi
-       case $p in
-       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
-       esac
-       if test "$pre_test_object_deps_done" = no; then
-	 case ${prev} in
-	 -L | -R)
-	   # Internal compiler library paths should come after those
-	   # provided the user.  The postdeps already come after the
-	   # user supplied libs so there is no need to process them.
-	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-	   else
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
-	   fi
-	   ;;
-	 # The "-l" case would never come before the object being
-	 # linked, so don't bother handling this case.
-	 esac
-       else
-	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
-	 else
-	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
-	 fi
-       fi
-       prev=
-       ;;
-
-    *.lto.$objext) ;; # Ignore GCC LTO objects
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-	 pre_test_object_deps_done=yes
-	 continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-	   _LT_TAGVAR(predep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
-	 fi
-       else
-	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
-	   _LT_TAGVAR(postdep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
-	 fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$RM -f confest.$objext
-CFLAGS=$_lt_libdeps_save_CFLAGS
-
-# PORTME: override above test on systems where it is broken
-m4_if([$1], [CXX],
-[case $host_os in
-interix[[3-9]]*)
-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
-  # hack all around it, let's just trust "g++" to DTRT.
-  _LT_TAGVAR(predep_objects,$1)=
-  _LT_TAGVAR(postdep_objects,$1)=
-  _LT_TAGVAR(postdeps,$1)=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC* | sunCC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-])
-
-case " $_LT_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
-    [The directories searched by this compiler when creating a shared library])
-_LT_TAGDECL([], [predep_objects], [1],
-    [Dependencies to place before and after the objects being linked to
-    create a shared library])
-_LT_TAGDECL([], [postdep_objects], [1])
-_LT_TAGDECL([], [predeps], [1])
-_LT_TAGDECL([], [postdeps], [1])
-_LT_TAGDECL([], [compiler_lib_search_path], [1],
-    [The library search path used internally by the compiler when linking
-    a shared library])
-])# _LT_SYS_HIDDEN_LIBDEPS
-
-
-# _LT_LANG_F77_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a Fortran 77 compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_F77_CONFIG],
-[AC_LANG_PUSH(Fortran 77)
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(reload_flag, $1)=$reload_flag
-_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the F77 compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  lt_save_CFLAGS=$CFLAGS
-  CC=${F77-"f77"}
-  CFLAGS=$FFLAGS
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-  GCC=$G77
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-  CFLAGS="$lt_save_CFLAGS"
-fi # test "$_lt_disable_F77" != yes
-
-AC_LANG_POP
-])# _LT_LANG_F77_CONFIG
-
-
-# _LT_LANG_FC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for a Fortran compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_FC_CONFIG],
-[AC_LANG_PUSH(Fortran)
-
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(reload_flag, $1)=$reload_flag
-_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for fc test sources.
-ac_ext=${ac_fc_srcext-f}
-
-# Object file extension for compiled fc test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the FC compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  lt_save_CFLAGS=$CFLAGS
-  CC=${FC-"f95"}
-  CFLAGS=$FCFLAGS
-  compiler=$CC
-  GCC=$ac_cv_fc_compiler_gnu
-
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC=$lt_save_CC
-  CFLAGS=$lt_save_CFLAGS
-fi # test "$_lt_disable_FC" != yes
-
-AC_LANG_POP
-])# _LT_LANG_FC_CONFIG
-
-
-# _LT_LANG_GCJ_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for the GNU Java Compiler compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_GCJ_CONFIG],
-[AC_REQUIRE([LT_PROG_GCJ])dnl
-AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC=$CC
-lt_save_CFLAGS=$CFLAGS
-lt_save_GCC=$GCC
-GCC=yes
-CC=${GCJ-"gcj"}
-CFLAGS=$GCJFLAGS
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(reload_flag, $1)=$reload_flag
-_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-
-  _LT_CONFIG($1)
-fi
-
-AC_LANG_RESTORE
-
-GCC=$lt_save_GCC
-CC=$lt_save_CC
-CFLAGS=$lt_save_CFLAGS
-])# _LT_LANG_GCJ_CONFIG
-
-
-# _LT_LANG_GO_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for the GNU Go compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_GO_CONFIG],
-[AC_REQUIRE([LT_PROG_GO])dnl
-AC_LANG_SAVE
-
-# Source file extension for Go test sources.
-ac_ext=go
-
-# Object file extension for compiled Go test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="package main; func main() { }"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='package main; func main() { }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC=$CC
-lt_save_CFLAGS=$CFLAGS
-lt_save_GCC=$GCC
-GCC=yes
-CC=${GOC-"gccgo"}
-CFLAGS=$GOFLAGS
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
-_LT_CC_BASENAME([$compiler])
-
-# Go did not exist at the time GCC didn't implicitly link libc in.
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(reload_flag, $1)=$reload_flag
-_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-
-  _LT_CONFIG($1)
-fi
-
-AC_LANG_RESTORE
-
-GCC=$lt_save_GCC
-CC=$lt_save_CC
-CFLAGS=$lt_save_CFLAGS
-])# _LT_LANG_GO_CONFIG
-
-
-# _LT_LANG_RC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for the Windows resource compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_RC_CONFIG],
-[AC_REQUIRE([LT_PROG_RC])dnl
-AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_CFLAGS=$CFLAGS
-lt_save_GCC=$GCC
-GCC=
-CC=${RC-"windres"}
-CFLAGS=
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-if test -n "$compiler"; then
-  :
-  _LT_CONFIG($1)
-fi
-
-GCC=$lt_save_GCC
-AC_LANG_RESTORE
-CC=$lt_save_CC
-CFLAGS=$lt_save_CFLAGS
-])# _LT_LANG_RC_CONFIG
-
-
-# LT_PROG_GCJ
-# -----------
-AC_DEFUN([LT_PROG_GCJ],
-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
-  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
-    [AC_CHECK_TOOL(GCJ, gcj,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-      AC_SUBST(GCJFLAGS)])])[]dnl
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
-
-
-# LT_PROG_GO
-# ----------
-AC_DEFUN([LT_PROG_GO],
-[AC_CHECK_TOOL(GOC, gccgo,)
-])
-
-
-# LT_PROG_RC
-# ----------
-AC_DEFUN([LT_PROG_RC],
-[AC_CHECK_TOOL(RC, windres,)
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_RC], [])
-
-
-# _LT_DECL_EGREP
-# --------------
-# If we don't have a new enough Autoconf to choose the best grep
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_EGREP],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_REQUIRE([AC_PROG_FGREP])dnl
-test -z "$GREP" && GREP=grep
-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
-_LT_DECL([], [EGREP], [1], [An ERE matcher])
-_LT_DECL([], [FGREP], [1], [A literal string matcher])
-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
-AC_SUBST([GREP])
-])
-
-
-# _LT_DECL_OBJDUMP
-# --------------
-# If we don't have a new enough Autoconf to choose the best objdump
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_OBJDUMP],
-[AC_CHECK_TOOL(OBJDUMP, objdump, false)
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
-AC_SUBST([OBJDUMP])
-])
-
-# _LT_DECL_DLLTOOL
-# ----------------
-# Ensure DLLTOOL variable is set.
-m4_defun([_LT_DECL_DLLTOOL],
-[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
-AC_SUBST([DLLTOOL])
-])
-
-# _LT_DECL_SED
-# ------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-m4_defun([_LT_DECL_SED],
-[AC_PROG_SED
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
-    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
-])# _LT_DECL_SED
-
-m4_ifndef([AC_PROG_SED], [
-############################################################
-# NOTE: This macro has been submitted for inclusion into   #
-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
-#  a released version of Autoconf we should remove this    #
-#  macro and use it instead.                               #
-############################################################
-
-m4_defun([AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for lt_ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-      fi
-    done
-  done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && continue
-  cat /dev/null > conftest.in
-  lt_ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-  # Check for GNU sed and select it if it is found.
-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-    lt_cv_path_SED=$lt_ac_sed
-    break
-  fi
-  while true; do
-    cat conftest.in conftest.in >conftest.tmp
-    mv conftest.tmp conftest.in
-    cp conftest.in conftest.nl
-    echo >>conftest.nl
-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-    cmp -s conftest.out conftest.nl || break
-    # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
-    lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
-      lt_ac_max=$lt_ac_count
-      lt_cv_path_SED=$lt_ac_sed
-    fi
-  done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])#AC_PROG_SED
-])#m4_ifndef
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_SED], [])
-
-
-# _LT_CHECK_SHELL_FEATURES
-# ------------------------
-# Find out whether the shell is Bourne or XSI compatible,
-# or has some other useful features.
-m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,b/c, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
-])# _LT_CHECK_SHELL_FEATURES
-
-
-# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
-# ------------------------------------------------------
-# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
-# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
-m4_defun([_LT_PROG_FUNCTION_REPLACE],
-[dnl {
-sed -e '/^$1 ()$/,/^} # $1 /c\
-$1 ()\
-{\
-m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
-} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-])
-
-
-# _LT_PROG_REPLACE_SHELLFNS
-# -------------------------
-# Replace existing portable implementations of several shell functions with
-# equivalent extended shell implementations where those features are available..
-m4_defun([_LT_PROG_REPLACE_SHELLFNS],
-[if test x"$xsi_shell" = xyes; then
-  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
-    case ${1} in
-      */*) func_dirname_result="${1%/*}${2}" ;;
-      *  ) func_dirname_result="${3}" ;;
-    esac])
-
-  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
-    func_basename_result="${1##*/}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
-    case ${1} in
-      */*) func_dirname_result="${1%/*}${2}" ;;
-      *  ) func_dirname_result="${3}" ;;
-    esac
-    func_basename_result="${1##*/}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
-    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-    # positional parameters, so assign one to ordinary parameter first.
-    func_stripname_result=${3}
-    func_stripname_result=${func_stripname_result#"${1}"}
-    func_stripname_result=${func_stripname_result%"${2}"}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
-    func_split_long_opt_name=${1%%=*}
-    func_split_long_opt_arg=${1#*=}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
-    func_split_short_opt_arg=${1#??}
-    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
-    case ${1} in
-      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-      *)    func_lo2o_result=${1} ;;
-    esac])
-
-  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
-
-  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
-
-  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
-fi
-
-if test x"$lt_shell_append" = xyes; then
-  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
-    func_quote_for_eval "${2}"
-dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
-    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
-
-  # Save a `func_append' function call where possible by direct use of '+='
-  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-else
-  # Save a `func_append' function call even when '+=' is not available
-  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-fi
-
-if test x"$_lt_function_replace_fail" = x":"; then
-  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
-fi
-])
-
-# _LT_PATH_CONVERSION_FUNCTIONS
-# -----------------------------
-# Determine which file name conversion functions should be used by
-# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
-# for certain cross-compile configurations and native mingw.
-m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_MSG_CHECKING([how to convert $build file names to $host format])
-AC_CACHE_VAL(lt_cv_to_host_file_cmd,
-[case $host in
-  *-*-mingw* )
-    case $build in
-      *-*-mingw* ) # actually msys
-        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-        ;;
-      *-*-cygwin* )
-        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-        ;;
-      * ) # otherwise, assume *nix
-        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
-        ;;
-    esac
-    ;;
-  *-*-cygwin* )
-    case $build in
-      *-*-mingw* ) # actually msys
-        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-        ;;
-      *-*-cygwin* )
-        lt_cv_to_host_file_cmd=func_convert_file_noop
-        ;;
-      * ) # otherwise, assume *nix
-        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
-        ;;
-    esac
-    ;;
-  * ) # unhandled hosts (and "normal" native builds)
-    lt_cv_to_host_file_cmd=func_convert_file_noop
-    ;;
-esac
-])
-to_host_file_cmd=$lt_cv_to_host_file_cmd
-AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
-_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
-         [0], [convert $build file names to $host format])dnl
-
-AC_MSG_CHECKING([how to convert $build file names to toolchain format])
-AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
-[#assume ordinary cross tools, or native build.
-lt_cv_to_tool_file_cmd=func_convert_file_noop
-case $host in
-  *-*-mingw* )
-    case $build in
-      *-*-mingw* ) # actually msys
-        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
-        ;;
-    esac
-    ;;
-esac
-])
-to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
-_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
-         [0], [convert $build files to toolchain format])dnl
-])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
deleted file mode 100644
index 5d9acd8..0000000
--- a/m4/ltoptions.m4
+++ /dev/null
@@ -1,384 +0,0 @@
-# Helper functions for option handling.                    -*- Autoconf -*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
-#   Inc.
-#   Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 7 ltoptions.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-
-
-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
-# ------------------------------------------
-m4_define([_LT_MANGLE_OPTION],
-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
-
-
-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
-# ---------------------------------------
-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
-# saved as a flag.
-m4_define([_LT_SET_OPTION],
-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
-        _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
-])
-
-
-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
-# ------------------------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-m4_define([_LT_IF_OPTION],
-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
-
-
-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
-# -------------------------------------------------------
-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
-# are set.
-m4_define([_LT_UNLESS_OPTIONS],
-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
-		      [m4_define([$0_found])])])[]dnl
-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
-])[]dnl
-])
-
-
-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
-# ----------------------------------------
-# OPTION-LIST is a space-separated list of Libtool options associated
-# with MACRO-NAME.  If any OPTION has a matching handler declared with
-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
-# the unknown option and exit.
-m4_defun([_LT_SET_OPTIONS],
-[# Set options
-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-    [_LT_SET_OPTION([$1], _LT_Option)])
-
-m4_if([$1],[LT_INIT],[
-  dnl
-  dnl Simply set some default values (i.e off) if boolean options were not
-  dnl specified:
-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
-  ])
-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
-  ])
-  dnl
-  dnl If no reference was made to various pairs of opposing options, then
-  dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
-  dnl archives by default:
-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-  		   [_LT_ENABLE_FAST_INSTALL])
-  ])
-])# _LT_SET_OPTIONS
-
-
-## --------------------------------- ##
-## Macros to handle LT_INIT options. ##
-## --------------------------------- ##
-
-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
-# -----------------------------------------
-m4_define([_LT_MANGLE_DEFUN],
-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
-
-
-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
-# -----------------------------------------------
-m4_define([LT_OPTION_DEFINE],
-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
-])# LT_OPTION_DEFINE
-
-
-# dlopen
-# ------
-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
-])
-
-AU_DEFUN([AC_LIBTOOL_DLOPEN],
-[_LT_SET_OPTION([LT_INIT], [dlopen])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
-
-
-# win32-dll
-# ---------
-# Declare package support for building win32 dll's.
-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
-[enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-esac
-
-test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [1], [Assembler program])dnl
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
-])# win32-dll
-
-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-_LT_SET_OPTION([LT_INIT], [win32-dll])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
-
-
-# _LT_ENABLE_SHARED([DEFAULT])
-# ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_SHARED],
-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([shared],
-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
-
-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
-	[Whether or not to build shared libraries])
-])# _LT_ENABLE_SHARED
-
-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
-])
-
-AC_DEFUN([AC_DISABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], [disable-shared])
-])
-
-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
-
-
-
-# _LT_ENABLE_STATIC([DEFAULT])
-# ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_STATIC],
-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([static],
-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_static=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
-
-    _LT_DECL([build_old_libs], [enable_static], [0],
-	[Whether or not to build static libraries])
-])# _LT_ENABLE_STATIC
-
-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
-])
-
-AC_DEFUN([AC_DISABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], [disable-static])
-])
-
-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
-
-
-
-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
-# ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_FAST_INSTALL],
-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([fast-install],
-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_fast_install=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
-
-_LT_DECL([fast_install], [enable_fast_install], [0],
-	 [Whether or not to optimize for fast installation])dnl
-])# _LT_ENABLE_FAST_INSTALL
-
-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
-
-# Old names:
-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
-])
-
-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
-
-
-# _LT_WITH_PIC([MODE])
-# --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
-# LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-m4_define([_LT_WITH_PIC],
-[AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
-	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [lt_p=${PACKAGE-default}
-    case $withval in
-    yes|no) pic_mode=$withval ;;
-    *)
-      pic_mode=default
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for lt_pkg in $withval; do
-	IFS="$lt_save_ifs"
-	if test "X$lt_pkg" = "X$lt_p"; then
-	  pic_mode=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
-
-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
-])# _LT_WITH_PIC
-
-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
-
-# Old name:
-AU_DEFUN([AC_LIBTOOL_PICMODE],
-[_LT_SET_OPTION([LT_INIT], [pic-only])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
-
-## ----------------- ##
-## LTDL_INIT Options ##
-## ----------------- ##
-
-m4_define([_LTDL_MODE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
-		 [m4_define([_LTDL_MODE], [nonrecursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
-		 [m4_define([_LTDL_MODE], [recursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
-		 [m4_define([_LTDL_MODE], [subproject])])
-
-m4_define([_LTDL_TYPE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [installable],
-		 [m4_define([_LTDL_TYPE], [installable])])
-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
-		 [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
deleted file mode 100644
index 9000a05..0000000
--- a/m4/ltsugar.m4
+++ /dev/null
@@ -1,123 +0,0 @@
-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
-       [$#], [2], [[$2]],
-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
-       [$#], 1, [],
-       [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
-	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-# Needed until we can rely on m4_combine added in Autoconf 2.62.
-m4_define([lt_combine],
-[m4_if(m4_eval([$# > 3]), [1],
-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
-[[m4_foreach([_Lt_prefix], [$2],
-	     [m4_foreach([_Lt_suffix],
-		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
-	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
-	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
-		 [lt_append([$1], [$2], [$3])$4],
-		 [$5])],
-	  [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
-	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
-	[$5],
-    [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
-		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
deleted file mode 100644
index 07a8602..0000000
--- a/m4/ltversion.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-# ltversion.m4 -- version numbers			-*- Autoconf -*-
-#
-#   Copyright (C) 2004 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# @configure_input@
-
-# serial 3337 ltversion.m4
-# This file is part of GNU Libtool
-
-m4_define([LT_PACKAGE_VERSION], [2.4.2])
-m4_define([LT_PACKAGE_REVISION], [1.3337])
-
-AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4.2'
-macro_revision='1.3337'
-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
-_LT_DECL(, macro_revision, 0)
-])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
deleted file mode 100644
index c573da9..0000000
--- a/m4/lt~obsolete.m4
+++ /dev/null
@@ -1,98 +0,0 @@
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 5 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
-m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
-m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
-m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
-m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
-m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
diff --git a/matlab/Makefile.am b/matlab/Makefile.am
index 3aa1ac6..3c15a61 100644
--- a/matlab/Makefile.am
+++ b/matlab/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+# $Id$
 
 if HAVE_NFSFT
   DIR_NFSFT=nfsft
@@ -6,9 +6,16 @@ else
   DIR_NFSFT=
 endif
 
+if HAVE_NFSOFT
+  DIR_NFSOFT=nfsoft
+else
+  DIR_NFSOFT=
+endif
+
 DIR_NFFT=nfft
+DIR_NNFFT=nnfft
 
-SUBDIRS = . $(DIR_NFFT) $(DIR_NFSFT)
+SUBDIRS = . $(DIR_NFFT) $(DIR_NFSFT) $(DIR_NFSOFT) $(DIR_NNFFT)
 
 AM_CPPFLAGS = -I$(top_srcdir)/include $(matlab_CPPFLAGS)
 
diff --git a/matlab/Makefile.in b/matlab/Makefile.in
deleted file mode 100644
index a0b6aa6..0000000
--- a/matlab/Makefile.in
+++ /dev/null
@@ -1,733 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = matlab
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libmatlab_la_LIBADD =
-am_libmatlab_la_OBJECTS = libmatlab_la-args.lo libmatlab_la-malloc.lo
-libmatlab_la_OBJECTS = $(am_libmatlab_la_OBJECTS)
-libmatlab_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libmatlab_la_CFLAGS) \
-	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libmatlab_la_SOURCES)
-DIST_SOURCES = $(libmatlab_la_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = . nfft nfsft
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
- at HAVE_NFSFT_FALSE@DIR_NFSFT = 
- at HAVE_NFSFT_TRUE@DIR_NFSFT = nfsft
-DIR_NFFT = nfft
-SUBDIRS = . $(DIR_NFFT) $(DIR_NFSFT)
-AM_CPPFLAGS = -I$(top_srcdir)/include $(matlab_CPPFLAGS)
-noinst_LTLIBRARIES = libmatlab.la
-libmatlab_la_SOURCES = args.c malloc.c imex.h
- at HAVE_MATLAB_THREADS_TRUE@libmatlab_la_CFLAGS = $(OPENMP_CFLAGS)
-EXTRA_DIST = README
-all: all-recursive
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu matlab/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libmatlab.la: $(libmatlab_la_OBJECTS) $(libmatlab_la_DEPENDENCIES) $(EXTRA_libmatlab_la_DEPENDENCIES) 
-	$(libmatlab_la_LINK)  $(libmatlab_la_OBJECTS) $(libmatlab_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmatlab_la-args.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmatlab_la-malloc.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-libmatlab_la-args.lo: args.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -MT libmatlab_la-args.lo -MD -MP -MF $(DEPDIR)/libmatlab_la-args.Tpo -c -o libmatlab_la-args.lo `test -f 'args.c' || echo '$(srcdir)/'`args.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libmatlab_la-args.Tpo $(DEPDIR)/libmatlab_la-args.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='args.c' object='libmatlab_la-args.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -c -o libmatlab_la-args.lo `test -f 'args.c' || echo '$(srcdir)/'`args.c
-
-libmatlab_la-malloc.lo: malloc.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -MT libmatlab_la-malloc.lo -MD -MP -MF $(DEPDIR)/libmatlab_la-malloc.Tpo -c -o libmatlab_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libmatlab_la-malloc.Tpo $(DEPDIR)/libmatlab_la-malloc.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='malloc.c' object='libmatlab_la-malloc.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmatlab_la_CFLAGS) $(CFLAGS) -c -o libmatlab_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(LTLIBRARIES)
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
-	cscopelist-recursive ctags-recursive install-am install-strip \
-	tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \
-	ctags-recursive distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/matlab/args.c b/matlab/args.c
index 5c65257..c731b46 100644
--- a/matlab/args.c
+++ b/matlab/args.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: args.c 3967 2013-04-23 08:59:35Z tovo $ */
+/* $Id$ */
 
 #include "config.h"
 #include "imex.h"
diff --git a/matlab/imex.h b/matlab/imex.h
index 2e79169..335f4f6 100644
--- a/matlab/imex.h
+++ b/matlab/imex.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: imex.h 3967 2013-04-23 08:59:35Z tovo $ */
+/* $Id$ */
 
 /* NFFT mex internal header file */
 #ifndef MEXUTIL_H
diff --git a/matlab/malloc.c b/matlab/malloc.c
index acc59d6..2653a00 100644
--- a/matlab/malloc.c
+++ b/matlab/malloc.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: malloc.c 3967 2013-04-23 08:59:35Z tovo $ */
+/* $Id$ */
 
 #include "config.h"
 #include "imex.h"
diff --git a/matlab/nfft/FFTW_ESTIMATE.m b/matlab/nfft/FFTW_ESTIMATE.m
index 9f59800..23d18e3 100644
--- a/matlab/nfft/FFTW_ESTIMATE.m
+++ b/matlab/nfft/FFTW_ESTIMATE.m
@@ -1,9 +1,9 @@
 % FFTW_ESTIMATE FFT flag
 %   Valid for FFTW3
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -19,7 +19,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: FFTW_ESTIMATE.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = FFTW_ESTIMATE()
 
 f = bitshift(1, 6);
diff --git a/matlab/nfft/FFTW_MEASURE.m b/matlab/nfft/FFTW_MEASURE.m
index fd13945..c77e92a 100644
--- a/matlab/nfft/FFTW_MEASURE.m
+++ b/matlab/nfft/FFTW_MEASURE.m
@@ -1,9 +1,9 @@
 %FFTW_MEASURE FFT flag
 %   Valid for FFTW3
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -19,7 +19,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: FFTW_MEASURE.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = FFTW_MEASURE()
 
 f = 0;
diff --git a/matlab/nfft/FFT_OUT_OF_PLACE.m b/matlab/nfft/FFT_OUT_OF_PLACE.m
index 1a4e656..056ae99 100644
--- a/matlab/nfft/FFT_OUT_OF_PLACE.m
+++ b/matlab/nfft/FFT_OUT_OF_PLACE.m
@@ -1,9 +1,9 @@
 %FFT_OUT_OF_PLACE FFT flag
 %   If this flag is set, FFTW uses disjoint input/output vectors.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -19,7 +19,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: FFT_OUT_OF_PLACE.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = FFT_OUT_OF_PLACE()
 
 f = bitshift(1, 9);
diff --git a/matlab/nfft/FG_PSI.m b/matlab/nfft/FG_PSI.m
index 638864b..8afd218 100644
--- a/matlab/nfft/FG_PSI.m
+++ b/matlab/nfft/FG_PSI.m
@@ -3,9 +3,9 @@
 %   sparse matrix B) uses particular properties of the Gaussian window function
 %   to trade multiplications for direct calls to exponential function.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -21,7 +21,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: FG_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = FG_PSI()
 
 f = bitshift(1, 1);
diff --git a/matlab/nfft/Makefile.am b/matlab/nfft/Makefile.am
index 5980fbb..26162a3 100644
--- a/matlab/nfft/Makefile.am
+++ b/matlab/nfft/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3842 2012-07-18 12:14:23Z tovo $
+# $Id$
 
 # compiler flags
 AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
diff --git a/matlab/nfft/Makefile.in b/matlab/nfft/Makefile.in
deleted file mode 100644
index 0c3dfa4..0000000
--- a/matlab/nfft/Makefile.in
+++ /dev/null
@@ -1,679 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3842 2012-07-18 12:14:23Z tovo $
-
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = matlab/nfft
-DIST_COMMON = $(dist_nfftmatlab_DATA) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfftmatlabdir)"
-LTLIBRARIES = $(lib_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libnfft_la_DEPENDENCIES = $(top_builddir)/libnfft3_matlab.la \
-	$(top_builddir)/matlab/libmatlab.la $(am__DEPENDENCIES_1)
-am_libnfft_la_OBJECTS = libnfft_la-nfftmex.lo
-libnfft_la_OBJECTS = $(am_libnfft_la_OBJECTS)
-libnfft_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libnfft_la_CFLAGS) \
-	$(CFLAGS) $(libnfft_la_LDFLAGS) $(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libnfft_la_SOURCES)
-DIST_SOURCES = $(libnfft_la_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-DATA = $(dist_nfftmatlab_DATA)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-
-# compiler flags
-AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
-
-# matlab wrapper directory
-nfftmatlabdir = $(datadir)/nfft/matlab/nfft
-
-# library
-lib_LTLIBRARIES = libnfft.la
-libnfft_la_SOURCES = nfftmex.c
-libnfft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
-libnfft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
- at HAVE_MATLAB_THREADS_TRUE@libnfft_la_CFLAGS = $(OPENMP_CFLAGS)
-dist_nfftmatlab_DATA = FFT_OUT_OF_PLACE.m FFTW_ESTIMATE.m FFTW_MEASURE.m FG_PSI.m Contents.m ndft_adjoint.m ndft_trafo.m \
-	nfft_adjoint.m nfft_finalize.m nfft_get_f.m nfft_get_f_hat.m nfft_get_x.m nfft_init_1d.m nfft_init_2d.m \
-        nfft_init_3d.m nfft_init_guru.m nfft_precompute_psi.m nfft_set_f.m nfft_set_f_hat.m nfft_set_x.m nfft_trafo.m \
-        PRE_FG_PSI.m PRE_FULL_PSI.m PRE_LIN_PSI.m PRE_PHI_HUT.m PRE_PSI.m simple_test.m \
-	nfft_get_num_threads.m nfft.m test_nfft1d.m test_nfft2d.m test_nfft3d.m
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/nfft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu matlab/nfft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-	@$(NORMAL_INSTALL)
-	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
-	list2=; for p in $$list; do \
-	  if test -f $$p; then \
-	    list2="$$list2 $$p"; \
-	  else :; fi; \
-	done; \
-	test -z "$$list2" || { \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
-	}
-
-uninstall-libLTLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
-	done
-
-clean-libLTLIBRARIES:
-	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-	@list='$(lib_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libnfft.la: $(libnfft_la_OBJECTS) $(libnfft_la_DEPENDENCIES) $(EXTRA_libnfft_la_DEPENDENCIES) 
-	$(libnfft_la_LINK) -rpath $(libdir) $(libnfft_la_OBJECTS) $(libnfft_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfft_la-nfftmex.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-libnfft_la-nfftmex.lo: nfftmex.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_la_CFLAGS) $(CFLAGS) -MT libnfft_la-nfftmex.lo -MD -MP -MF $(DEPDIR)/libnfft_la-nfftmex.Tpo -c -o libnfft_la-nfftmex.lo `test -f 'nfftmex.c' || echo '$(srcdir)/'`nfftmex.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libnfft_la-nfftmex.Tpo $(DEPDIR)/libnfft_la-nfftmex.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfftmex.c' object='libnfft_la-nfftmex.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfft_la_CFLAGS) $(CFLAGS) -c -o libnfft_la-nfftmex.lo `test -f 'nfftmex.c' || echo '$(srcdir)/'`nfftmex.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-install-dist_nfftmatlabDATA: $(dist_nfftmatlab_DATA)
-	@$(NORMAL_INSTALL)
-	@list='$(dist_nfftmatlab_DATA)'; test -n "$(nfftmatlabdir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(nfftmatlabdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(nfftmatlabdir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nfftmatlabdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(nfftmatlabdir)" || exit $$?; \
-	done
-
-uninstall-dist_nfftmatlabDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(dist_nfftmatlab_DATA)'; test -n "$(nfftmatlabdir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	dir='$(DESTDIR)$(nfftmatlabdir)'; $(am__uninstall_files_from_dir)
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES) $(DATA)
-installdirs:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfftmatlabdir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-dist_nfftmatlabDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am: install-libLTLIBRARIES
-	@$(NORMAL_INSTALL)
-	$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-dist_nfftmatlabDATA uninstall-libLTLIBRARIES
-	@$(NORMAL_INSTALL)
-	$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
-.MAKE: install-am install-exec-am install-strip uninstall-am
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am \
-	install-dist_nfftmatlabDATA install-dvi install-dvi-am \
-	install-exec install-exec-am install-exec-hook install-html \
-	install-html-am install-info install-info-am \
-	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-dist_nfftmatlabDATA \
-	uninstall-hook uninstall-libLTLIBRARIES
-
-
-# target all-am builds .libs/libnfft at matlab_mexext@
-nfftmex at matlab_mexext@: all-am
-	rm -f ./nfftmex at matlab_mexext@
-	$(LN_S) .libs/libnfft at matlab_mexext@ ./nfftmex at matlab_mexext@
-
-all: all-am nfftmex at matlab_mexext@
-
-clean: clean-am
-	rm -f ./nfftmex at matlab_mexext@
-
-install-exec-hook:
-	rm -f $(libdir)/nfftmex at matlab_mexext@
-	$(LN_S) $(libdir)/libnfft at matlab_mexext@ $(libdir)/nfftmex at matlab_mexext@
-
-uninstall-hook:
-	rm -f $(libdir)/nfftmex at matlab_mexext@
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/matlab/nfft/PRE_FG_PSI.m b/matlab/nfft/PRE_FG_PSI.m
index 8324451..c82a094 100644
--- a/matlab/nfft/PRE_FG_PSI.m
+++ b/matlab/nfft/PRE_FG_PSI.m
@@ -4,9 +4,9 @@
 %   multiplications for direct calls to exponential function (the remaining 2dM
 %   direct calls are precomputed).
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -22,7 +22,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: PRE_FG_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = PRE_FG_PSI()
 
 f = bitshift(1, 3);
diff --git a/matlab/nfft/PRE_FULL_PSI.m b/matlab/nfft/PRE_FULL_PSI.m
index 6eec515..3a1befb 100644
--- a/matlab/nfft/PRE_FULL_PSI.m
+++ b/matlab/nfft/PRE_FULL_PSI.m
@@ -3,9 +3,9 @@
 %   matrix B) uses (2m+2)^dM precomputed values of the window function, in
 %   addition indices of source and target vectors are stored.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -21,7 +21,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: PRE_FULL_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = PRE_FULL_PSI()
 
 f = bitshift(1, 5);
diff --git a/matlab/nfft/PRE_LIN_PSI.m b/matlab/nfft/PRE_LIN_PSI.m
index bfed81c..25c7cdd 100644
--- a/matlab/nfft/PRE_LIN_PSI.m
+++ b/matlab/nfft/PRE_LIN_PSI.m
@@ -3,9 +3,9 @@
 %   matrix B) uses linear interpolation from a lookup table of equispaced samples
 %   of the window function instead of exact values of the window function.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -21,7 +21,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: PRE_LIN_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = PRE_LIN_PSI()
 
 f = bitshift(1, 2);
diff --git a/matlab/nfft/PRE_PHI_HUT.m b/matlab/nfft/PRE_PHI_HUT.m
index ea8f2bc..2d7ae41 100644
--- a/matlab/nfft/PRE_PHI_HUT.m
+++ b/matlab/nfft/PRE_PHI_HUT.m
@@ -3,9 +3,9 @@
 %   diagonal matrix D) uses precomputed values of the Fourier transformed window
 %   function.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -21,7 +21,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: PRE_PHI_HUT.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = PRE_PHI_HUT()
 
 f = bitshift(1, 0);
diff --git a/matlab/nfft/PRE_PSI.m b/matlab/nfft/PRE_PSI.m
index b49b799..7f68148 100644
--- a/matlab/nfft/PRE_PSI.m
+++ b/matlab/nfft/PRE_PSI.m
@@ -1,9 +1,9 @@
 %PRE_PSI Precomputation flag
 %   If this flag is set, the convolution step (the multiplication with the sparse
 %   matrix B uses (2m+2)dM precomputed values of the window function.
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -19,7 +19,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: PRE_PSI.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = PRE_PSI()
 
 f = bitshift(1, 4);
diff --git a/matlab/nfft/ndft_adjoint.m b/matlab/nfft/ndft_adjoint.m
index ec8328f..04ee829 100644
--- a/matlab/nfft/ndft_adjoint.m
+++ b/matlab/nfft/ndft_adjoint.m
@@ -1,7 +1,7 @@
 %NDFT_ADJOINT Adjoint nonequispaced discrete Fourier transform (direct algorithm)
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: ndft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function ndft_adjoint(p)
 
 nfftmex('adjoint_direct',p)
diff --git a/matlab/nfft/ndft_trafo.m b/matlab/nfft/ndft_trafo.m
index 895933c..683771e 100644
--- a/matlab/nfft/ndft_trafo.m
+++ b/matlab/nfft/ndft_trafo.m
@@ -1,7 +1,7 @@
 %NDFT_TRAFO  Nonequispaced discrete Fourier transformation (direct algorithm)
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: ndft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function ndft_trafo(p)
 
 nfftmex('trafo_direct',p)
diff --git a/matlab/nfft/nfft.m b/matlab/nfft/nfft.m
index 5d018e5..484573a 100644
--- a/matlab/nfft/nfft.m
+++ b/matlab/nfft/nfft.m
@@ -1,5 +1,5 @@
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -179,7 +179,9 @@ function set.N3(h,N)
 end %function
 
 function set.M(h,M)
-	if( isempty(M) || ~isnumeric(M) || ~isreal(M) || mod(M,1)~=0 || ~(M>0) )
+	if( ndims(M)~=2 || size(M,1)~=1 || size(M,2)~=1)
+		error('The number of sampling pints M has to be an positive integer.');
+	elseif( isempty(M) || ~isnumeric(M) || ~isreal(M) || mod(M,1)~=0 || ~(M>0) )
 		error('The number of sampling pints M has to be an positive integer.');
 	else
 		h.M=M;
@@ -191,11 +193,12 @@ function set.x(h,x)
 		error('The sampling points x have to be real numbers.');
 	elseif( ~isnumeric(x) || ~isreal(x) )
 		error('The sampling points x have to be real numbers.');
-	elseif( min(x(:))<-1/2 || ~(max(x(:))<1/2) )
-		error('The sampling points x have to be in the two dimensional Torus [-0.5,0.5)^2');
+	%elseif( min(x(:))<-1/2 || ~(max(x(:))<1/2) )
+	%	error('The sampling points x have to be in the two dimensional Torus [-0.5,0.5)^2');
 	elseif( size(x,1)~=h.M || size(x,2)~=h.d )
 		error('The sampling points have to be a %ux%u matrix',h.M,h.d);
 	else
+		x=mod(x+0.5,1)-0.5;
 		nfftmex('set_x',h.plan,x.');
 		h.x_is_set=true;
 		h.precomputations_done=false;
diff --git a/matlab/nfft/nfft_adjoint.m b/matlab/nfft/nfft_adjoint.m
index a37e591..9487982 100644
--- a/matlab/nfft/nfft_adjoint.m
+++ b/matlab/nfft/nfft_adjoint.m
@@ -1,7 +1,7 @@
 %NFFT_ADJOINT Adjoint nonequispaced fast Fourier transform
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfft_adjoint(p)
 
 nfftmex('adjoint',p)
diff --git a/matlab/nfft/nfft_finalize.m b/matlab/nfft/nfft_finalize.m
index c9d06bc..18cf573 100644
--- a/matlab/nfft/nfft_finalize.m
+++ b/matlab/nfft/nfft_finalize.m
@@ -1,7 +1,7 @@
 %NFFT_FINALIZE Finalize plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_finalize.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfft_finalize(p)
 
 nfftmex('finalize',p)
diff --git a/matlab/nfft/nfft_get_f.m b/matlab/nfft/nfft_get_f.m
index dc08478..bd48dc8 100644
--- a/matlab/nfft/nfft_get_f.m
+++ b/matlab/nfft/nfft_get_f.m
@@ -1,7 +1,7 @@
 %NFFT_GET_F Get function values from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_get_f.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = nfft_get_f(p)
 
 f = nfftmex('get_f',p);
diff --git a/matlab/nfft/nfft_get_f_hat.m b/matlab/nfft/nfft_get_f_hat.m
index 0b18968..1e07725 100644
--- a/matlab/nfft/nfft_get_f_hat.m
+++ b/matlab/nfft/nfft_get_f_hat.m
@@ -1,7 +1,7 @@
 %NFFT_GET_F_HAT Get Fourier coefficients from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_get_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f_hat = nfft_get_f_hat(p)
 
 f_hat = nfftmex('get_f_hat',p);
diff --git a/matlab/nfft/nfft_get_num_threads.m b/matlab/nfft/nfft_get_num_threads.m
index 8d6882c..ae55429 100644
--- a/matlab/nfft/nfft_get_num_threads.m
+++ b/matlab/nfft/nfft_get_num_threads.m
@@ -1,7 +1,7 @@
 %NFFT_GET_NUM_THREADS Get number of threads (at most) used for computation
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/nfft_get_x.m b/matlab/nfft/nfft_get_x.m
index d7aba9f..44549a6 100644
--- a/matlab/nfft/nfft_get_x.m
+++ b/matlab/nfft/nfft_get_x.m
@@ -1,7 +1,7 @@
 %NFFT_GET_X Get nodes from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_get_x.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function x = nfft_get_x(p)
 
 x = nfftmex('get_x',p);
diff --git a/matlab/nfft/nfft_init_1d.m b/matlab/nfft/nfft_init_1d.m
index 00c3075..488b389 100644
--- a/matlab/nfft/nfft_init_1d.m
+++ b/matlab/nfft/nfft_init_1d.m
@@ -1,7 +1,7 @@
 %NFFT_INIT_1D Initialise plans
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_init_1d.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function p = nfft_init_1d(N,M)
 
 p = nfftmex('init_1d',N,M);
diff --git a/matlab/nfft/nfft_init_2d.m b/matlab/nfft/nfft_init_2d.m
index 890bf26..5b8b402 100644
--- a/matlab/nfft/nfft_init_2d.m
+++ b/matlab/nfft/nfft_init_2d.m
@@ -1,7 +1,7 @@
 %NFFT_INIT_2D Initialise plans
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_init_2d.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function p = nfft_init_2d(N1,N2,M)
 
 p = nfftmex('init_2d',N1,N2,M);
diff --git a/matlab/nfft/nfft_init_3d.m b/matlab/nfft/nfft_init_3d.m
index 48396ae..8c10ec0 100644
--- a/matlab/nfft/nfft_init_3d.m
+++ b/matlab/nfft/nfft_init_3d.m
@@ -1,7 +1,7 @@
 %NFFT_INIT_3D Initialise plans
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_init_3d.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function p = nfft_init_3d(N1,N2,N3,M)
 
 p = nfftmex('init_3d',N1,N2,N3,M);
diff --git a/matlab/nfft/nfft_init_guru.m b/matlab/nfft/nfft_init_guru.m
index f84dfe9..1c913c1 100644
--- a/matlab/nfft/nfft_init_guru.m
+++ b/matlab/nfft/nfft_init_guru.m
@@ -1,20 +1,20 @@
 %NFFT_INIT_GURU Initialise plans, no error handling
 %   Matlab might run into a segmentation violation for wrong parameters
 %
-%   nfft_init_guru(d,N1,...,Nd,M,n1,...,nd,m,nfft_flags,fftw_flags)
+%   nfft_init_guru(d,N1,...,Nd,M,n1,...,nd,m,flags,fftw_flags)
 %
 %   d            spatial dimension
 %   N1,...,Nd    bandwidths
 %   M            number of nodes
 %   n1,...,nd    fft lengths
 %   m            cut-off parameter
-%   nfft_flags   PRE_PHI_HUT | {FG_PSI, PRE_LIN_PSI, PRE_FG_PSI, PRE_PSI,
+%   flags   PRE_PHI_HUT | {FG_PSI, PRE_LIN_PSI, PRE_FG_PSI, PRE_PSI,
 %	             PRE_FULL_PSI} | FFT_OUT_OF_PLACE
 %   fftw_flags   {FFTW_ESTIMATE, FFTW_MEASURE}
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -30,7 +30,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_init_guru.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function p = nfft_init_guru(varargin)
 
 p = nfftmex('init_guru',varargin);
diff --git a/matlab/nfft/nfft_precompute_psi.m b/matlab/nfft/nfft_precompute_psi.m
index 148241e..c912638 100644
--- a/matlab/nfft/nfft_precompute_psi.m
+++ b/matlab/nfft/nfft_precompute_psi.m
@@ -1,7 +1,7 @@
 %NFFT_PRECOMPUTE_PSI Precompute psi, dependent on nodes x
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_precompute_psi.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfft_precompute_psi(p)
 
 nfftmex('precompute_psi',p)
diff --git a/matlab/nfft/nfft_set_f.m b/matlab/nfft/nfft_set_f.m
index 971ac25..bc9333d 100644
--- a/matlab/nfft/nfft_set_f.m
+++ b/matlab/nfft/nfft_set_f.m
@@ -1,7 +1,7 @@
 %NFFT_SET_F Set function values in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_set_f.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfft_set_f(p,f)
 
 nfftmex('set_f',p,f)
diff --git a/matlab/nfft/nfft_set_f_hat.m b/matlab/nfft/nfft_set_f_hat.m
index f081cc5..f73cafa 100644
--- a/matlab/nfft/nfft_set_f_hat.m
+++ b/matlab/nfft/nfft_set_f_hat.m
@@ -1,7 +1,7 @@
 %NFFT_SET_F_HAT Set Fourier coefficients in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_set_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfft_set_f_hat(p,f_hat)
 
 nfftmex('set_f_hat',p,f_hat)
diff --git a/matlab/nfft/nfft_set_x.m b/matlab/nfft/nfft_set_x.m
index a0b810d..bd3637c 100644
--- a/matlab/nfft/nfft_set_x.m
+++ b/matlab/nfft/nfft_set_x.m
@@ -1,7 +1,7 @@
 %NFFT_SET_X Set nodes in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfft_set_x(p,x)
 
 nfftmex('set_x',p,x)
diff --git a/matlab/nfft/nfft_trafo.m b/matlab/nfft/nfft_trafo.m
index 02d4cc1..0196085 100644
--- a/matlab/nfft/nfft_trafo.m
+++ b/matlab/nfft/nfft_trafo.m
@@ -1,7 +1,7 @@
 %NFFT_TRAFO nonequispaced fast Fourier transformat
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfft_trafo(p)
 
 nfftmex('trafo',p)
diff --git a/matlab/nfft/nfftmex.c b/matlab/nfft/nfftmex.c
index 722e490..a5f37b6 100644
--- a/matlab/nfft/nfftmex.c
+++ b/matlab/nfft/nfftmex.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nfftmex.c 3967 2013-04-23 08:59:35Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #ifdef HAVE_COMPLEX_H
@@ -27,7 +27,6 @@
 #include <stdint.h>
 #include "nfft3.h"
 #include "infft.h"
-#include "nfft3util.h"
 #include "imex.h"
 
 #ifdef HAVE_MEXVERSION_C
@@ -462,13 +461,13 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
       mexPrintf("        x: %p\n",plans[i]->x);
       mexPrintf("        f: %p\n",plans[i]->f);
       mexPrintf("    f_hat: %p\n",plans[i]->f_hat);
-      mexPrintf("    flags: %d\n",plans[i]->nfft_flags);
+      mexPrintf("    flags: %d\n",plans[i]->flags);
     }
     return;
   }
   else if(strcmp(cmd,"get_num_threads") == 0)
   {
-    int32_t nthreads = nfft_get_num_threads();
+    int32_t nthreads = X(get_num_threads)();
     plhs[0] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL);
     *((int32_t *)mxGetData(plhs[0])) = nthreads;
 
diff --git a/matlab/nfft/nfft_set_x.m b/matlab/nfft/nfftmex.m
similarity index 73%
copy from matlab/nfft/nfft_set_x.m
copy to matlab/nfft/nfftmex.m
index a0b810d..edd4ad9 100644
--- a/matlab/nfft/nfft_set_x.m
+++ b/matlab/nfft/nfftmex.m
@@ -1,7 +1,7 @@
-%NFFT_SET_X Set nodes in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%NFFTMEX Gateway function to NFFT module from NFFT3
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,5 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_set_x(p,x)
+% $Id$
 
-nfftmex('set_x',p,x)
diff --git a/matlab/nfft/simple_test.m b/matlab/nfft/simple_test.m
index acaa665..bc17382 100644
--- a/matlab/nfft/simple_test.m
+++ b/matlab/nfft/simple_test.m
@@ -1,8 +1,8 @@
 %SIMPLE_TEST Example program: Basic usage principles
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,7 +18,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: simple_test.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 
 disp(sprintf('Number of threads: %d\n', nfft_get_num_threads()));
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/matlab/nfft/test_nfft1d.m b/matlab/nfft/test_nfft1d.m
index a7f04d0..22093cd 100644
--- a/matlab/nfft/test_nfft1d.m
+++ b/matlab/nfft/test_nfft1d.m
@@ -1,5 +1,5 @@
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/test_nfft2d.m b/matlab/nfft/test_nfft2d.m
index 0fa752b..6285fb0 100644
--- a/matlab/nfft/test_nfft2d.m
+++ b/matlab/nfft/test_nfft2d.m
@@ -1,5 +1,5 @@
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/test_nfft3d.m b/matlab/nfft/test_nfft3d.m
index 27ffecb..03bac61 100644
--- a/matlab/nfft/test_nfft3d.m
+++ b/matlab/nfft/test_nfft3d.m
@@ -1,5 +1,5 @@
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfsft/@f_hat/Makefile.in b/matlab/nfsft/@f_hat/Makefile.in
deleted file mode 100644
index 4db9166..0000000
--- a/matlab/nfsft/@f_hat/Makefile.in
+++ /dev/null
@@ -1,480 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = matlab/nfsft/@f_hat
-DIST_COMMON = $(dist_nfsftmatlab_DATA) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__installdirs = "$(DESTDIR)$(nfsftmatlabdir)"
-DATA = $(dist_nfsftmatlab_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-nfsftmatlabdir = $(datadir)/nfft/matlab/nfsft/@f_hat
-dist_nfsftmatlab_DATA = char.m display.m double.m f_hat.m minus.m mtimes.m mtimesr.m norm.m plus.m subsasgn.m subsref.m
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/nfsft/@f_hat/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu matlab/nfsft/@f_hat/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-install-dist_nfsftmatlabDATA: $(dist_nfsftmatlab_DATA)
-	@$(NORMAL_INSTALL)
-	@list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(nfsftmatlabdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(nfsftmatlabdir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nfsftmatlabdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(nfsftmatlabdir)" || exit $$?; \
-	done
-
-uninstall-dist_nfsftmatlabDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	dir='$(DESTDIR)$(nfsftmatlabdir)'; $(am__uninstall_files_from_dir)
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-cscope cscopelist:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
-	for dir in "$(DESTDIR)$(nfsftmatlabdir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-dist_nfsftmatlabDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-dist_nfsftmatlabDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dist_nfsftmatlabDATA \
-	install-dvi install-dvi-am install-exec install-exec-am \
-	install-html install-html-am install-info install-info-am \
-	install-man install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-dist_nfsftmatlabDATA
-
-
-# EXTRA_DIST = char.m display.m double.m f_hat.m minus.m mtimes.m mtimesr.m norm.m plus.m subsasgn.m subsref.m
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/matlab/nfsft/@f_hat/char.m b/matlab/nfsft/@f_hat/char.m
index 8858f4b..c949c64 100644
--- a/matlab/nfsft/@f_hat/char.m
+++ b/matlab/nfsft/@f_hat/char.m
@@ -1,7 +1,7 @@
 %CHAR Conversion to string for f_hat class
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: char.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function s = char(p)
 
 if (p.N == -1)
diff --git a/matlab/nfsft/@f_hat/display.m b/matlab/nfsft/@f_hat/display.m
index 5bb0e86..35b3c63 100644
--- a/matlab/nfsft/@f_hat/display.m
+++ b/matlab/nfsft/@f_hat/display.m
@@ -1,7 +1,7 @@
 %DISPLAY Display function for f_hat class
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: display.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function display(p)
 
 if (p.N == -1)
diff --git a/matlab/nfsft/@f_hat/double.m b/matlab/nfsft/@f_hat/double.m
index f28b6b8..1efde39 100644
--- a/matlab/nfsft/@f_hat/double.m
+++ b/matlab/nfsft/@f_hat/double.m
@@ -1,7 +1,7 @@
 %DOUBLE Double conversion for f_hat class
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: double.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function d = double(p)
 
 d = zeros(2*p.N+1,p.N+1);
diff --git a/matlab/nfsft/@f_hat/f_hat.m b/matlab/nfsft/@f_hat/f_hat.m
index 485d1c8..aed40a4 100644
--- a/matlab/nfsft/@f_hat/f_hat.m
+++ b/matlab/nfsft/@f_hat/f_hat.m
@@ -1,7 +1,7 @@
 %F_HAT Constructor for f_hat class
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function p = f_hat(a)
 
 if (nargin == 0)
diff --git a/matlab/nfsft/@f_hat/plus.m b/matlab/nfsft/@f_hat/get.m
similarity index 68%
copy from matlab/nfsft/@f_hat/plus.m
copy to matlab/nfsft/@f_hat/get.m
index b1831a0..d1a4c6d 100644
--- a/matlab/nfsft/@f_hat/plus.m
+++ b/matlab/nfsft/@f_hat/get.m
@@ -1,7 +1,7 @@
-%PLUS Plus for f_hat
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%GET Get f_hat properties from the specified object
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,11 +17,11 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: plus.m 3776 2012-06-03 13:29:25Z keiner $
-function r = plus(p,q)
-p = f_hat(p);
-q = f_hat(q);
-if (p.N ~= q.N)
-  error('Dimensions must agree.')
+% $Id$
+function val = get(p, propName)
+switch propName
+case 'Data'
+    val = p.f_hat;
+otherwise
+    error([propName,' Is not a valid f_hat property']);
 end
-r = f_hat(p.f_hat + q.f_hat);
diff --git a/matlab/nfsft/@f_hat/minus.m b/matlab/nfsft/@f_hat/minus.m
index 2b39770..d2e1365 100644
--- a/matlab/nfsft/@f_hat/minus.m
+++ b/matlab/nfsft/@f_hat/minus.m
@@ -1,8 +1,8 @@
 %MINUS Minus for f_hat
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,7 +18,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: minus.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function r = minus(p,q)
 p = f_hat(p);
 q = f_hat(q);
diff --git a/matlab/nfsft/@f_hat/mtimes.m b/matlab/nfsft/@f_hat/mtimes.m
index ff899be..68380b9 100644
--- a/matlab/nfsft/@f_hat/mtimes.m
+++ b/matlab/nfsft/@f_hat/mtimes.m
@@ -1,7 +1,7 @@
 %MTIMES Multiply for f_hat
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: mtimes.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function r = mtimes(p,q)
 
 p = f_hat(p);
diff --git a/matlab/nfsft/@f_hat/mtimesr.m b/matlab/nfsft/@f_hat/mtimesr.m
index 606dee8..c63a6f3 100644
--- a/matlab/nfsft/@f_hat/mtimesr.m
+++ b/matlab/nfsft/@f_hat/mtimesr.m
@@ -1,7 +1,7 @@
 %MTIMESR Multiply for f_hat
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: mtimesr.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function r = mtimesr(p,q)
 if (isa(p,'f_hat') && isnumeric(q))
   p = f_hat(p);
diff --git a/matlab/nfsft/@f_hat/norm.m b/matlab/nfsft/@f_hat/norm.m
index 915c865..3d3cbf5 100644
--- a/matlab/nfsft/@f_hat/norm.m
+++ b/matlab/nfsft/@f_hat/norm.m
@@ -1,7 +1,7 @@
 %NORM Norm for f_hat class
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: norm.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function y = norm(p,n)
 % Norm for f_hat class
 p = f_hat(p);
diff --git a/matlab/nfsft/@f_hat/plus.m b/matlab/nfsft/@f_hat/plus.m
index b1831a0..6b97ad2 100644
--- a/matlab/nfsft/@f_hat/plus.m
+++ b/matlab/nfsft/@f_hat/plus.m
@@ -1,7 +1,7 @@
 %PLUS Plus for f_hat
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: plus.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function r = plus(p,q)
 p = f_hat(p);
 q = f_hat(q);
diff --git a/matlab/nfsft/@f_hat/subsasgn.m b/matlab/nfsft/@f_hat/subsasgn.m
index 8eec894..19f4587 100644
--- a/matlab/nfsft/@f_hat/subsasgn.m
+++ b/matlab/nfsft/@f_hat/subsasgn.m
@@ -1,7 +1,7 @@
 %SUBSASGN Index assignment function for f_hat class
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: subsasgn.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function p = subsasgn(p,s,v)
 switch s.type
 case '()'
diff --git a/matlab/nfsft/@f_hat/subsref.m b/matlab/nfsft/@f_hat/subsref.m
index e514c8f..0363e28 100644
--- a/matlab/nfsft/@f_hat/subsref.m
+++ b/matlab/nfsft/@f_hat/subsref.m
@@ -1,7 +1,7 @@
 %SUBSREF Indexing funcction for f_hat class
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: subsref.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function b = subsref(p,s)
 switch s.type
 case '()'
diff --git a/matlab/nfsft/Makefile.am b/matlab/nfsft/Makefile.am
index f3b295d..ade0fe2 100644
--- a/matlab/nfsft/Makefile.am
+++ b/matlab/nfsft/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
+# $Id$
 
 SUBDIRS = @f_hat
 
diff --git a/matlab/nfsft/Makefile.in b/matlab/nfsft/Makefile.in
deleted file mode 100644
index f3ef809..0000000
--- a/matlab/nfsft/Makefile.in
+++ /dev/null
@@ -1,840 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3774 2012-06-01 07:41:57Z tovo $
-
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = matlab/nfsft
-DIST_COMMON = $(dist_nfsftmatlab_DATA) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfsftmatlabdir)"
-LTLIBRARIES = $(lib_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libnfsft_la_DEPENDENCIES = $(top_builddir)/libnfft3_matlab.la \
-	$(top_builddir)/matlab/libmatlab.la $(am__DEPENDENCIES_1)
-am_libnfsft_la_OBJECTS = libnfsft_la-nfsftmex.lo
-libnfsft_la_OBJECTS = $(am_libnfsft_la_OBJECTS)
-libnfsft_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libnfsft_la_CFLAGS) \
-	$(CFLAGS) $(libnfsft_la_LDFLAGS) $(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libnfsft_la_SOURCES)
-DIST_SOURCES = $(libnfsft_la_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-DATA = $(dist_nfsftmatlab_DATA)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = @f_hat
-
-# compiler flags
-AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
-
-# matlab wrapper directory
-nfsftmatlabdir = $(datadir)/nfft/matlab/nfsft
-
-# library
-lib_LTLIBRARIES = libnfsft.la
-libnfsft_la_SOURCES = nfsftmex.c
-libnfsft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
-libnfsft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
- at HAVE_MATLAB_THREADS_TRUE@libnfsft_la_CFLAGS = $(OPENMP_CFLAGS)
-dist_nfsftmatlab_DATA = cc.m Contents.m f_hat_index.m ndsft_adjoint.m ndsft_trafo.m \
-        nfsft_adjoint.m nfsft_finalize.m nfsft_forget.m nfsft_get_f_hat.m \
-        nfsft_get_f.m nfsft_get_x.m nfsft_init_advanced.m nfsft_init_guru.m \
-        nfsft_init.m NFSFT_NO_DIRECT_ALGORITHM.m NFSFT_NO_FAST_ALGORITHM.m \
-        NFSFT_NORMALIZED.m nfsft_precompute_x.m nfsft_precompute.m \
-        NFSFT_PRESERVE_F_HAT.m nfsft_set_f_hat.m nfsft_set_f.m nfsft_set_x.m \
-        nfsft_trafo.m NFSFT_USE_DPT.m NFSFT_USE_NDFT.m gl.m simple_test.m \
-        nfsft_get_f_hat_linear.m nfsft_set_f_hat_linear.m projection.m \
-	nfsft_get_num_threads.m
-
-all: all-recursive
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu matlab/nfsft/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu matlab/nfsft/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-	@$(NORMAL_INSTALL)
-	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
-	list2=; for p in $$list; do \
-	  if test -f $$p; then \
-	    list2="$$list2 $$p"; \
-	  else :; fi; \
-	done; \
-	test -z "$$list2" || { \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
-	}
-
-uninstall-libLTLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
-	for p in $$list; do \
-	  $(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
-	done
-
-clean-libLTLIBRARIES:
-	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-	@list='$(lib_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libnfsft.la: $(libnfsft_la_OBJECTS) $(libnfsft_la_DEPENDENCIES) $(EXTRA_libnfsft_la_DEPENDENCIES) 
-	$(libnfsft_la_LINK) -rpath $(libdir) $(libnfsft_la_OBJECTS) $(libnfsft_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libnfsft_la-nfsftmex.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-libnfsft_la-nfsftmex.lo: nfsftmex.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_la_CFLAGS) $(CFLAGS) -MT libnfsft_la-nfsftmex.lo -MD -MP -MF $(DEPDIR)/libnfsft_la-nfsftmex.Tpo -c -o libnfsft_la-nfsftmex.lo `test -f 'nfsftmex.c' || echo '$(srcdir)/'`nfsftmex.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libnfsft_la-nfsftmex.Tpo $(DEPDIR)/libnfsft_la-nfsftmex.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='nfsftmex.c' object='libnfsft_la-nfsftmex.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libnfsft_la_CFLAGS) $(CFLAGS) -c -o libnfsft_la-nfsftmex.lo `test -f 'nfsftmex.c' || echo '$(srcdir)/'`nfsftmex.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-install-dist_nfsftmatlabDATA: $(dist_nfsftmatlab_DATA)
-	@$(NORMAL_INSTALL)
-	@list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(nfsftmatlabdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(nfsftmatlabdir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nfsftmatlabdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(nfsftmatlabdir)" || exit $$?; \
-	done
-
-uninstall-dist_nfsftmatlabDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(dist_nfsftmatlab_DATA)'; test -n "$(nfsftmatlabdir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	dir='$(DESTDIR)$(nfsftmatlabdir)'; $(am__uninstall_files_from_dir)
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(LTLIBRARIES) $(DATA)
-installdirs: installdirs-recursive
-installdirs-am:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(nfsftmatlabdir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
-	mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-dist_nfsftmatlabDATA
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am: install-libLTLIBRARIES
-	@$(NORMAL_INSTALL)
-	$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-dist_nfsftmatlabDATA uninstall-libLTLIBRARIES
-	@$(NORMAL_INSTALL)
-	$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
-	cscopelist-recursive ctags-recursive install-am \
-	install-exec-am install-strip tags-recursive uninstall-am
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool cscopelist \
-	cscopelist-recursive ctags ctags-recursive distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am \
-	install-dist_nfsftmatlabDATA install-dvi install-dvi-am \
-	install-exec install-exec-am install-exec-hook install-html \
-	install-html-am install-info install-info-am \
-	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-recursive uninstall uninstall-am \
-	uninstall-dist_nfsftmatlabDATA uninstall-hook \
-	uninstall-libLTLIBRARIES
-
-
-# target all-am builds .libs/libnfsft at matlab_mexext@
-nfsftmex at matlab_mexext@: all-am 
-	rm -f ./nfsftmex at matlab_mexext@
-	$(LN_S) .libs/libnfsft at matlab_mexext@ ./nfsftmex at matlab_mexext@
-
-all: all-am nfsftmex at matlab_mexext@
-
-clean: clean-am
-	rm -f ./nfsftmex at matlab_mexext@
-
-install-exec-hook:
-	rm -f $(libdir)/nfsftmex at matlab_mexext@
-	$(LN_S) $(libdir)/libnfsft at matlab_mexext@ $(libdir)/nfsftmex at matlab_mexext@
-
-uninstall-hook:
-	rm -f $(libdir)/nfsftmex at matlab_mexext@
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/matlab/nfsft/NFSFT_NORMALIZED.m b/matlab/nfsft/NFSFT_NORMALIZED.m
index 1d6ed49..a416dec 100644
--- a/matlab/nfsft/NFSFT_NORMALIZED.m
+++ b/matlab/nfsft/NFSFT_NORMALIZED.m
@@ -1,7 +1,7 @@
 %NFSFT_NORMALIZED Flag for using L^2-normalized Spherical harmonics
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: NFSFT_NORMALIZED.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = NFSFT_NORMALIZED()
 f = 1;
diff --git a/matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m b/matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m
index 2b69944..61568a0 100644
--- a/matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m
+++ b/matlab/nfsft/NFSFT_NO_DIRECT_ALGORITHM.m
@@ -1,7 +1,7 @@
 %NFSFT_NO_DIRECT_ALGORITHM Flag for not precomputing for the direct algorithm
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: NFSFT_NO_DIRECT_ALGORITHM.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = NFSFT_NO_DIRECT_ALGORITHM()
 f = 8192;
diff --git a/matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m b/matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m
index abc1dfa..c404b26 100644
--- a/matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m
+++ b/matlab/nfsft/NFSFT_NO_FAST_ALGORITHM.m
@@ -1,7 +1,7 @@
 %NFSFT_NO_FAST_ALGORITHM Flag for not precomputing for the fast algorithm
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: NFSFT_NO_FAST_ALGORITHM.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = NFSFT_NO_FAST_ALGORITHM()
 f = 16384;
diff --git a/matlab/nfsft/NFSFT_PRESERVE_F_HAT.m b/matlab/nfsft/NFSFT_PRESERVE_F_HAT.m
index fc1f1da..89589e9 100644
--- a/matlab/nfsft/NFSFT_PRESERVE_F_HAT.m
+++ b/matlab/nfsft/NFSFT_PRESERVE_F_HAT.m
@@ -1,7 +1,7 @@
 %NFSFT_PRESERVE_F_HAT Flag for NFSFT not destroying input in f_hat
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: NFSFT_PRESERVE_F_HAT.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = NFSFT_PRESERVE_F_HAT()
 f = 128;
diff --git a/matlab/nfsft/NFSFT_USE_DPT.m b/matlab/nfsft/NFSFT_USE_DPT.m
index 5a0f78c..6fe6e53 100644
--- a/matlab/nfsft/NFSFT_USE_DPT.m
+++ b/matlab/nfsft/NFSFT_USE_DPT.m
@@ -1,7 +1,7 @@
 %NFSFT_USE_DPT Flag for using the DPT algorithm internally
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: NFSFT_USE_DPT.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = NFSFT_USE_DPT()
 
 f = 4;
diff --git a/matlab/nfsft/NFSFT_USE_NDFT.m b/matlab/nfsft/NFSFT_USE_NDFT.m
index 5f915c0..9f3e57e 100644
--- a/matlab/nfsft/NFSFT_USE_NDFT.m
+++ b/matlab/nfsft/NFSFT_USE_NDFT.m
@@ -1,7 +1,7 @@
 %NFSFT_USE_NDFT Flag for using the NDFT algorithm internally
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: NFSFT_USE_NDFT.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = NFSFT_USE_NDFT()
 f = 2;
diff --git a/matlab/nfsft/cc.m b/matlab/nfsft/cc.m
old mode 100644
new mode 100755
index 4b7beca..3da6186
--- a/matlab/nfsft/cc.m
+++ b/matlab/nfsft/cc.m
@@ -28,9 +28,9 @@
 %   References
 %   TODO Add references.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -46,7 +46,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: cc.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [x,w] = cc(n)
 
 % correctness conditions
diff --git a/matlab/nfsft/f_hat_index.m b/matlab/nfsft/f_hat_index.m
index 74db6ce..58fc66f 100644
--- a/matlab/nfsft/f_hat_index.m
+++ b/matlab/nfsft/f_hat_index.m
@@ -1,7 +1,7 @@
 %F_HAT_INDEX Return indices of Fourier coefficients
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: f_hat_index.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function ind = f_hat_index(f_hat,j,k)
 [m,n] = size(f_hat);
 N = (m-1)/2;
diff --git a/matlab/nfsft/gl.m b/matlab/nfsft/gl.m
index 21f0aa2..80685b8 100644
--- a/matlab/nfsft/gl.m
+++ b/matlab/nfsft/gl.m
@@ -22,9 +22,9 @@
 %   References
 %   TODO Add references.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -40,7 +40,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: gl.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function [x,w] = gl(n)
 
 % correctness conditions
diff --git a/matlab/nfsft/ndsft_adjoint.m b/matlab/nfsft/ndsft_adjoint.m
index fb84628..d2ef2a0 100644
--- a/matlab/nfsft/ndsft_adjoint.m
+++ b/matlab/nfsft/ndsft_adjoint.m
@@ -1,7 +1,7 @@
 %NDSFT_ADJOINT Adjoint discrete spherical Fourier transform (direct alg.)
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: ndsft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function ndsft_adjoint(p)
 nfsftmex('adjoint_direct',p)
diff --git a/matlab/nfsft/ndsft_trafo.m b/matlab/nfsft/ndsft_trafo.m
index ccb7db7..2daca13 100644
--- a/matlab/nfsft/ndsft_trafo.m
+++ b/matlab/nfsft/ndsft_trafo.m
@@ -1,7 +1,7 @@
 %NDSFT_TRAFO Discrete spherical Fourier transform (direct algorithm)
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: ndsft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function ndsft_trafo(p)
 nfsftmex('trafo_direct',p)
diff --git a/matlab/nfsft/nfsft_adjoint.m b/matlab/nfsft/nfsft_adjoint.m
index f7913a3..87954ae 100644
--- a/matlab/nfsft/nfsft_adjoint.m
+++ b/matlab/nfsft/nfsft_adjoint.m
@@ -1,7 +1,7 @@
 %NFSFT_ADJOINT Adjoint fast spherical Fourier transform
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfsft_adjoint(p)
 nfsftmex('adjoint',p)
diff --git a/matlab/nfsft/nfsft_finalize.m b/matlab/nfsft/nfsft_finalize.m
index 6a1eed6..627b4cd 100644
--- a/matlab/nfsft/nfsft_finalize.m
+++ b/matlab/nfsft/nfsft_finalize.m
@@ -1,7 +1,7 @@
 %NFSFT_FINALIZE Finalize plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_finalize.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfsft_finalize(p)
 nfsftmex('finalize',p)
diff --git a/matlab/nfsft/nfsft_forget.m b/matlab/nfsft/nfsft_forget.m
index f9e06ff..0e6d59c 100644
--- a/matlab/nfsft/nfsft_forget.m
+++ b/matlab/nfsft/nfsft_forget.m
@@ -1,7 +1,7 @@
 %NFSFT_FORGET Forget precomputed data
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_forget.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfsft_forget
 nfsftmex('forget');
diff --git a/matlab/nfsft/nfsft_get_f.m b/matlab/nfsft/nfsft_get_f.m
index e6c3f12..421ea55 100644
--- a/matlab/nfsft/nfsft_get_f.m
+++ b/matlab/nfsft/nfsft_get_f.m
@@ -1,7 +1,7 @@
 %NFSFT_GET_F Get function values from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_get_f.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f = nfsft_get_f(p)
 f = nfsftmex('get_f',p);
diff --git a/matlab/nfsft/nfsft_get_f_hat.m b/matlab/nfsft/nfsft_get_f_hat.m
index 28c33e1..8eb0318 100644
--- a/matlab/nfsft/nfsft_get_f_hat.m
+++ b/matlab/nfsft/nfsft_get_f_hat.m
@@ -1,7 +1,7 @@
 %NFSFT_GET_F_HAT Get Fourier coefficients in a matrix from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_get_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f_hat = nfsft_get_f_hat(p)
 f_hat = nfsftmex('get_f_hat',p);
diff --git a/matlab/nfsft/nfsft_get_f_hat_linear.m b/matlab/nfsft/nfsft_get_f_hat_linear.m
index 8edf27c..5edf218 100644
--- a/matlab/nfsft/nfsft_get_f_hat_linear.m
+++ b/matlab/nfsft/nfsft_get_f_hat_linear.m
@@ -1,7 +1,7 @@
 %NFSFT_GET_F_HAT_LINEAR Get Fourier coefficients in a linear vector from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_get_f_hat_linear.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function f_hat = nfsft_get_f_hat_linear(p)
 f_hat = nfsftmex('get_f_hat_linear',p);
diff --git a/matlab/nfsft/nfsft_get_num_threads.m b/matlab/nfsft/nfsft_get_num_threads.m
index c48e8f3..abbae65 100644
--- a/matlab/nfsft/nfsft_get_num_threads.m
+++ b/matlab/nfsft/nfsft_get_num_threads.m
@@ -1,7 +1,7 @@
 %NFSFT_GET_NUM_THREADS Get number of threads (at most) used for computation
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfsft/nfsft_get_x.m b/matlab/nfsft/nfsft_get_x.m
index 0c01151..8fa6088 100644
--- a/matlab/nfsft/nfsft_get_x.m
+++ b/matlab/nfsft/nfsft_get_x.m
@@ -1,7 +1,7 @@
 %NFSFT_GET_X Get nodes from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_get_x.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function x = nfsft_get_x(p)
 x = nfsftmex('get_x',p);
diff --git a/matlab/nfsft/nfsft_init.m b/matlab/nfsft/nfsft_init.m
index 4dd2c80..6eb6a50 100644
--- a/matlab/nfsft/nfsft_init.m
+++ b/matlab/nfsft/nfsft_init.m
@@ -1,7 +1,7 @@
 %NFSFT_INIT Plan initialization
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_init.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function p = nfsft_init(N,M)
 p = nfsftmex('init',N,M);
diff --git a/matlab/nfsft/nfsft_init_advanced.m b/matlab/nfsft/nfsft_init_advanced.m
index 0ecb48c..e970a39 100644
--- a/matlab/nfsft/nfsft_init_advanced.m
+++ b/matlab/nfsft/nfsft_init_advanced.m
@@ -1,7 +1,7 @@
 %NFSFT_INIT_ADVANCED Advanced plan initialization routine
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_init_advanced.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function p = nfsft_init_advanced(N,M,flags)
 p = nfsftmex('init_advanced',N,M,flags);
diff --git a/matlab/nfsft/nfsft_init_guru.m b/matlab/nfsft/nfsft_init_guru.m
index 71571ca..6d53152 100644
--- a/matlab/nfsft/nfsft_init_guru.m
+++ b/matlab/nfsft/nfsft_init_guru.m
@@ -1,7 +1,7 @@
 %NFSFT_INIT_GURU Guru plan initialization
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_init_guru.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function p = nfsft_init_guru(N,M,flags,nfft_flags,nfft_cutoff)
 p = nfsftmex('init_guru',N,M,flags,nfft_flags,nfft_cutoff);
diff --git a/matlab/nfsft/nfsft_precompute.m b/matlab/nfsft/nfsft_precompute.m
index c4e7e4a..bf9940f 100644
--- a/matlab/nfsft/nfsft_precompute.m
+++ b/matlab/nfsft/nfsft_precompute.m
@@ -1,7 +1,7 @@
 %NFSFT_PRECOMPUTE Node-independent precomputation (for FPT)
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_precompute.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfsft_precompute(N,kappa,nfsft_flags,fpt_flags)
 if ~exist('nfsft_flags','var')
   nfsft_flags = 0;
diff --git a/matlab/nfsft/nfsft_precompute_x.m b/matlab/nfsft/nfsft_precompute_x.m
index 1975945..16405c1 100644
--- a/matlab/nfsft/nfsft_precompute_x.m
+++ b/matlab/nfsft/nfsft_precompute_x.m
@@ -1,7 +1,7 @@
 %NFSFT_PRECOMPUTE_X Node-dependent precomputation (for NFFT)
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_precompute_x.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfsft_precompute_x(p)
 nfsftmex('precompute_x',p)
diff --git a/matlab/nfsft/nfsft_set_f.m b/matlab/nfsft/nfsft_set_f.m
index 93dfebd..2663c02 100644
--- a/matlab/nfsft/nfsft_set_f.m
+++ b/matlab/nfsft/nfsft_set_f.m
@@ -1,7 +1,7 @@
 %NFSFT_SET_F Set function values in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_set_f.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfsft_set_f(p,f)
 nfsftmex('set_f',p,f)
diff --git a/matlab/nfsft/nfsft_set_f_hat.m b/matlab/nfsft/nfsft_set_f_hat.m
index 2db341a..efd9c7c 100644
--- a/matlab/nfsft/nfsft_set_f_hat.m
+++ b/matlab/nfsft/nfsft_set_f_hat.m
@@ -1,7 +1,7 @@
 %NFSFT_SET_F_HAT Set Fourier coefficients in plan from a matrix
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_set_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfsft_set_f_hat(p,f_hat)
 nfsftmex('set_f_hat',p,f_hat)
diff --git a/matlab/nfsft/nfsft_set_f_hat_linear.m b/matlab/nfsft/nfsft_set_f_hat_linear.m
index ce3e869..de92ca4 100644
--- a/matlab/nfsft/nfsft_set_f_hat_linear.m
+++ b/matlab/nfsft/nfsft_set_f_hat_linear.m
@@ -1,7 +1,7 @@
 %NFSFT_SET_F_HAT_LINEAR Set Fourier coefficients in plan from a linear vector
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_set_f_hat_linear.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfsft_set_f_hat_linear(p,f_hat)
 nfsftmex('set_f_hat_linear',p,f_hat)
diff --git a/matlab/nfsft/nfsft_set_x.m b/matlab/nfsft/nfsft_set_x.m
index 886ed00..6bcbbcc 100644
--- a/matlab/nfsft/nfsft_set_x.m
+++ b/matlab/nfsft/nfsft_set_x.m
@@ -1,7 +1,7 @@
 %NFSFT_SET_X Set nodes in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfsft_set_x(p,x)
 nfsftmex('set_x',p,x)
diff --git a/matlab/nfsft/nfsft_trafo.m b/matlab/nfsft/nfsft_trafo.m
index 2d43759..698338a 100644
--- a/matlab/nfsft/nfsft_trafo.m
+++ b/matlab/nfsft/nfsft_trafo.m
@@ -1,7 +1,7 @@
 %NFSFT_TRAFO Fast spherical Fourier transform
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,6 +17,6 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfsft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function nfsft_trafo(p)
 nfsftmex('trafo',p)
diff --git a/matlab/nfsft/nfsftmex.c b/matlab/nfsft/nfsftmex.c
index 8a2060f..da3b517 100644
--- a/matlab/nfsft/nfsftmex.c
+++ b/matlab/nfsft/nfsftmex.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nfsftmex.c 3967 2013-04-23 08:59:35Z tovo $ */
+/* $Id$ */
 #include "config.h"
 
 #ifdef HAVE_COMPLEX_H
@@ -27,7 +27,6 @@
 #include <stdint.h>
 #include "nfft3.h"
 #include "infft.h"
-#include "nfft3util.h"
 #include "imex.h"
 
 #ifdef HAVE_MEXVERSION_C
@@ -286,10 +285,10 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
         int j;
         for (j = 0; j < m; j++)
         {
-          x[2*j] = PI2*plans[i]->x[2*j];
+          x[2*j] = K2PI*plans[i]->x[2*j];
           if (x[2*j] < 0.0)
-            x[2*j] += PI2;
-          x[2*j+1] = PI2*plans[i]->x[2*j+1];
+            x[2*j] += K2PI;
+          x[2*j+1] = K2PI*plans[i]->x[2*j+1];
         }
       }
     }
@@ -369,8 +368,8 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
         int j;
         for (j = 0; j < m; j++)
         {
-          plans[i]->x[2*j] = ((x[2*j] > PI)?(x[2*j] - PI2):(x[2*j]))/PI2;
-          plans[i]->x[2*j+1] = x[2*j+1]/PI2;
+          plans[i]->x[2*j] = ((x[2*j] > KPI)?(x[2*j] - K2PI):(x[2*j]))/K2PI;
+          plans[i]->x[2*j+1] = x[2*j+1]/K2PI;
         }
       }
     }
@@ -471,7 +470,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   }
   else if(strcmp(cmd,"get_num_threads") == 0)
   {
-    int32_t nthreads = nfft_get_num_threads();
+    int32_t nthreads = X(get_num_threads)();
     plhs[0] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL);
     *((int32_t *)mxGetData(plhs[0])) = nthreads;
 
diff --git a/matlab/nfft/nfft_set_x.m b/matlab/nfsft/nfsftmex.m
similarity index 73%
copy from matlab/nfft/nfft_set_x.m
copy to matlab/nfsft/nfsftmex.m
index a0b810d..612a921 100644
--- a/matlab/nfft/nfft_set_x.m
+++ b/matlab/nfsft/nfsftmex.m
@@ -1,7 +1,7 @@
-%NFFT_SET_X Set nodes in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%NFSFTMEX Gateway routine to the NFSFT module
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,4 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_set_x(p,x)
-
-nfftmex('set_x',p,x)
+% $Id$
diff --git a/matlab/nfsft/projection.m b/matlab/nfsft/projection.m
index 2ee592e..6559e38 100644
--- a/matlab/nfsft/projection.m
+++ b/matlab/nfsft/projection.m
@@ -1,8 +1,8 @@
 %PROJECTION Example program: Project a function onto spherical harmonics.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,7 +18,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: projection.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 function err = projection()
 disp(sprintf('Number of threads: %d\n', nfsft_get_num_threads()));
 % threshold
diff --git a/matlab/nfsft/simple_test.m b/matlab/nfsft/simple_test.m
index 4a8c1ea..03689b0 100644
--- a/matlab/nfsft/simple_test.m
+++ b/matlab/nfsft/simple_test.m
@@ -1,7 +1,7 @@
 %SIMPLE_TEST Example program: Basic usage principles
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: simple_test.m 3776 2012-06-03 13:29:25Z keiner $
+% $Id$
 
 disp(sprintf('Number of threads: %d\n', nfsft_get_num_threads()));
 
diff --git a/matlab/nfsoft/Contents.m b/matlab/nfsoft/Contents.m
new file mode 100644
index 0000000..24712bf
--- /dev/null
+++ b/matlab/nfsoft/Contents.m
@@ -0,0 +1,4 @@
+%
+% Files
+%   nfsoft_get_num_threads    - Get number of threads used for computation
+%   nfsoftmex                 - Gateway routine to the NFSOFT module
diff --git a/matlab/nfsoft/Makefile.am b/matlab/nfsoft/Makefile.am
new file mode 100644
index 0000000..a0b4f79
--- /dev/null
+++ b/matlab/nfsoft/Makefile.am
@@ -0,0 +1,41 @@
+# $Id$
+
+#SUBDIRS = @f_hat
+
+# compiler flags
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
+
+# matlab wrapper directory
+nfsoftmatlabdir = $(datadir)/nfft/matlab/nfsoft
+
+# library
+lib_LTLIBRARIES = libnfsoft.la
+libnfsoft_la_SOURCES = nfsoftmex.c
+libnfsoft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
+libnfsoft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
+
+if HAVE_MATLAB_THREADS
+libnfsoft_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+
+
+dist_nfsoftmatlab_DATA = Contents.m \
+	nfsoft_get_num_threads.m
+
+# target all-am builds .libs/libnfsoft at matlab_mexext@
+nfsoftmex at matlab_mexext@: all-am 
+	rm -f ./nfsoftmex at matlab_mexext@
+	$(LN_S) .libs/libnfsoft at matlab_mexext@ ./nfsoftmex at matlab_mexext@
+
+all: all-am nfsoftmex at matlab_mexext@
+
+clean: clean-am
+	rm -f ./nfsoftmex at matlab_mexext@
+
+install-exec-hook:
+	rm -f $(libdir)/nfsoftmex at matlab_mexext@
+	$(LN_S) $(libdir)/libnfsoft at matlab_mexext@ $(libdir)/nfsoftmex at matlab_mexext@
+
+uninstall-hook:
+	rm -f $(libdir)/nfsoftmex at matlab_mexext@
+
diff --git a/matlab/nfft/nfft_set_x.m b/matlab/nfsoft/nfsoft_get_num_threads.m
similarity index 72%
copy from matlab/nfft/nfft_set_x.m
copy to matlab/nfsoft/nfsoft_get_num_threads.m
index a0b810d..d62797c 100644
--- a/matlab/nfft/nfft_set_x.m
+++ b/matlab/nfsoft/nfsoft_get_num_threads.m
@@ -1,7 +1,5 @@
-%NFFT_SET_X Set nodes in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
-
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%NFSOFT_GET_NUM_THREADS Get number of threads (at most) used for computation
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +15,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_set_x(p,x)
+% $Id$
+function nthreads = nfsoft_get_num_threads()
 
-nfftmex('set_x',p,x)
+nthreads = nfsoftmex('get_num_threads');
diff --git a/matlab/nfsoft/nfsoftmex.c b/matlab/nfsoft/nfsoftmex.c
new file mode 100644
index 0000000..bcf2244
--- /dev/null
+++ b/matlab/nfsoft/nfsoftmex.c
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id$ */
+#include "config.h"
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#include <string.h>
+#include <stdio.h>
+#include <stdint.h>
+#include "nfft3.h"
+#include "infft.h"
+#include "imex.h"
+
+#ifdef HAVE_MEXVERSION_C
+  #include "mexversion.c"
+#endif
+
+#define PLANS_MAX 100 /* maximum number of plans */
+#define CMD_LEN_MAX 20 /* maximum length of command argument */
+
+/* global flags */
+#define NFSOFT_MEX_FIRST_CALL (1U << 0)
+unsigned short gflags = NFSOFT_MEX_FIRST_CALL;
+
+nfsoft_plan* plans[PLANS_MAX]; /* plans */
+int n_max = -1; /* maximum degree precomputed */
+char cmd[CMD_LEN_MAX];
+
+static inline void get_nm(const mxArray *prhs[], int *n, int *m)
+{
+  int t = nfft_mex_get_int(prhs[1],"nfsoft: Input argument N must be a scalar.");
+  DM(if (t < 0)
+    mexErrMsgTxt("nfsoft: Input argument N must be non-negative.");)
+  *n = t;
+  t = nfft_mex_get_int(prhs[2],"nfsoft: Input argument M must be a scalar.");
+  DM(if (t < 1)
+    mexErrMsgTxt("nfsoft: Input argument M must be positive.");)
+  *m = t;
+}
+
+static inline void get_nmf(const mxArray *prhs[], int *n, int *m,
+  unsigned int *f)
+{
+  get_nm(prhs,n,m);
+  *f = nfft_mex_get_int(prhs[3],"nfsoft: Input argument flags must be a scalar.");
+}
+
+static inline void get_nmffc(const mxArray *prhs[], int *n, int *m,
+  unsigned int *f, unsigned int *f2, int *c)
+{
+  get_nmf(prhs,n,m,f);
+  *f2 = nfft_mex_get_int(prhs[4],"nfsoft: Input argument flags2 must be a scalar.");
+  {
+    int t = nfft_mex_get_int(prhs[5],"nfsoft: Input argument c must be a scalar.");
+    DM(if (t < 1)
+      mexErrMsgTxt("nfsoft: Input argument c must be positive.");)
+    *c = t;
+  }
+}
+
+static inline void check_nargs(const int nrhs, const int n, const char* errmsg)
+{
+  DM(if (nrhs != n)
+    mexErrMsgTxt(errmsg);)
+}
+
+static inline int mkplan()
+{
+  int i = 0;
+  while (i < PLANS_MAX && plans[i] != 0) i++;
+  if (i == PLANS_MAX)
+    mexErrMsgTxt("nfsoft: Too many plans already allocated.");
+  plans[i] = nfft_malloc(sizeof(nfsoft_plan));
+  return i;
+}
+
+/* cleanup on mex function unload */
+static void cleanup(void)
+{
+  int i;
+
+  if (!(gflags & NFSOFT_MEX_FIRST_CALL))
+  {
+    for (i = 0; i < PLANS_MAX; i++)
+      if (plans[i])
+      {
+        nfsoft_finalize(plans[i]);
+        nfft_free(plans[i]);
+        plans[i] = 0;
+      }
+    gflags |= NFSOFT_MEX_FIRST_CALL;
+    n_max = -1;
+  }
+}
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+  if (gflags & NFSOFT_MEX_FIRST_CALL)
+  {
+    /* Force Matlab to load libfftw3. There is at least one version of Matlab
+     * which otherwise crashes upon invocation of this mex function. */
+    mexEvalString("fft([1,2,3,4]);");
+
+    nfft_mex_install_mem_hooks();
+
+    /* plan pointers to zeros */
+    {
+      int i;
+      for (i = 0; i < PLANS_MAX; i++)
+        plans[i] = 0;
+    }
+
+    mexAtExit(cleanup);
+    gflags &= ~NFSOFT_MEX_FIRST_CALL;
+  }
+
+  /* command string */
+  DM(if (nrhs == 0)
+    mexErrMsgTxt("At least one input required.");)
+
+  DM(if (!mxIsChar(prhs[0]))
+    mexErrMsgTxt("First argument must be a string.");)
+
+  if (mxGetString(prhs[0], cmd, CMD_LEN_MAX))
+    mexErrMsgTxt("Could not get command string.");
+
+  if(strcmp(cmd,"get_num_threads") == 0)
+  {
+    int32_t nthreads = X(get_num_threads)();
+    plhs[0] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL);
+    *((int32_t *)mxGetData(plhs[0])) = nthreads;
+
+    return;
+  }
+  else
+    mexErrMsgTxt("nfsoft: Unknown command.\n");
+}
+
diff --git a/matlab/nnfft/Contents.m b/matlab/nnfft/Contents.m
new file mode 100644
index 0000000..f37f852
--- /dev/null
+++ b/matlab/nnfft/Contents.m
@@ -0,0 +1,28 @@
+% NNFFT
+%
+% Files
+%   FFT_OUT_OF_PLACE    - FFT flag
+%   FFTW_ESTIMATE       - FFT flag
+%   FFTW_MEASURE        - FFT flag
+%   FG_PSI              - Precompuation flag
+%   nnfft_display	- display plan values
+%   nnfft_finalize       - Finalize plan
+%   nnfft_get_f          - Get function values from plan
+%   nnfft_get_f_hat      - Get Fourier coefficients from plan
+%   nnfft_get_x          - Get nodes from plan
+%   nnfft_init        - Initialise plans
+%   nnfft_init_guru        - Initialise plans
+%   nnfft_init_1d        - Initialise plans
+%   nnfft_set_f          - Set function values in plan
+%   nnfft_set_f_hat      - Set Fourier coefficients in plan
+%   nnfft_set_x          - Set nodes in plan
+%   nnfft_set_v          - Set nodes in plan
+%   nnfft_trafo          - nonequispaced fast Fourier transformat
+%   nnfft_trafo_direct   - nonequispaced fast diskret Fourie transformat
+%   nnfftmex             - Gateway function to NFFT module from NFFT3
+%   PRE_FG_PSI          - Precomputation flag
+%   PRE_FULL_PSI        - Precomputation flag
+%   PRE_LIN_PSI         - Precomputation flag
+%   PRE_PHI_HUT         - Precomputation flag
+%   PRE_PSI             - Precomputation flag
+%   simple_test         - Example program: Basic usage principles
diff --git a/matlab/nfft/FFTW_ESTIMATE.m b/matlab/nnfft/FFTW_ESTIMATE.m
similarity index 87%
copy from matlab/nfft/FFTW_ESTIMATE.m
copy to matlab/nnfft/FFTW_ESTIMATE.m
index 9f59800..4892047 100644
--- a/matlab/nfft/FFTW_ESTIMATE.m
+++ b/matlab/nnfft/FFTW_ESTIMATE.m
@@ -1,9 +1,9 @@
 % FFTW_ESTIMATE FFT flag
 %   Valid for FFTW3
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/FFTW_MEASURE.m b/matlab/nnfft/FFTW_MEASURE.m
similarity index 86%
copy from matlab/nfft/FFTW_MEASURE.m
copy to matlab/nnfft/FFTW_MEASURE.m
index fd13945..5553de5 100644
--- a/matlab/nfft/FFTW_MEASURE.m
+++ b/matlab/nnfft/FFTW_MEASURE.m
@@ -1,9 +1,9 @@
 %FFTW_MEASURE FFT flag
 %   Valid for FFTW3
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/FFT_OUT_OF_PLACE.m b/matlab/nnfft/FFT_OUT_OF_PLACE.m
similarity index 87%
copy from matlab/nfft/FFT_OUT_OF_PLACE.m
copy to matlab/nnfft/FFT_OUT_OF_PLACE.m
index 1a4e656..dac4ab6 100644
--- a/matlab/nfft/FFT_OUT_OF_PLACE.m
+++ b/matlab/nnfft/FFT_OUT_OF_PLACE.m
@@ -1,9 +1,9 @@
 %FFT_OUT_OF_PLACE FFT flag
 %   If this flag is set, FFTW uses disjoint input/output vectors.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/FG_PSI.m b/matlab/nnfft/FG_PSI.m
similarity index 89%
copy from matlab/nfft/FG_PSI.m
copy to matlab/nnfft/FG_PSI.m
index 638864b..4104144 100644
--- a/matlab/nfft/FG_PSI.m
+++ b/matlab/nnfft/FG_PSI.m
@@ -3,9 +3,9 @@
 %   sparse matrix B) uses particular properties of the Gaussian window function
 %   to trade multiplications for direct calls to exponential function.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nnfft/Makefile.am b/matlab/nnfft/Makefile.am
new file mode 100644
index 0000000..898af3e
--- /dev/null
+++ b/matlab/nnfft/Makefile.am
@@ -0,0 +1,45 @@
+# $Id: Makefile.am 3842 2012-07-18 12:14:23Z tovo $
+
+# compiler flags
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/matlab $(matlab_CPPFLAGS)
+
+# matlab wrapper directory
+nnfftmatlabdir = $(datadir)/nnfft/matlab/nnfft
+
+# library
+lib_LTLIBRARIES = libnnfft.la
+libnnfft_la_SOURCES = nnfftmex.c
+
+libnnfft_la_LIBADD = $(top_builddir)/libnfft3_matlab.la @matlab_fftw3_LIBS@ $(top_builddir)/matlab/libmatlab.la $(matlab_LIBS)
+
+libnnfft_la_LDFLAGS = -no-undefined -module -shared -shrext $(matlab_mexext) -avoid-version @matlab_fftw3_LDFLAGS@ $(matlab_LDFLAGS)
+
+if HAVE_MATLAB_THREADS
+libnnfft_la_CFLAGS = $(OPENMP_CFLAGS)
+endif
+
+
+dist_nnfftmatlab_DATA = FFT_OUT_OF_PLACE.m FFTW_ESTIMATE.m FFTW_MEASURE.m FG_PSI.m Contents.m \
+	nnfft_finalize.m nnfft_get_f.m nnfft_get_f_hat.m nnfft_get_x.m nnfft_init_1d.m \
+        nnfft_init_guru.m nnfft_precompute_psi.m nnfft_set_f.m nnfft_set_f_hat.m nnfft_set_x.m nnfft_trafo.m \
+        PRE_FG_PSI.m PRE_FULL_PSI.m PRE_LIN_PSI.m PRE_PHI_HUT.m PRE_PSI.m simple_test.m \
+	nnfft_get_num_threads.m nnfft.m 
+
+# target all-am builds .libs/libnnfft at matlab_mexext@
+nnfftmex at matlab_mexext@: all-am
+	rm -f ./nnfftmex at matlab_mexext@
+	$(LN_S) .libs/libnnfft at matlab_mexext@ ./nnfftmex at matlab_mexext@
+
+all: all-am nnfftmex at matlab_mexext@
+
+clean: clean-am
+	rm -f ./nnfftmex at matlab_mexext@
+
+install-exec-hook:
+	rm -f $(libdir)/nnfftmex at matlab_mexext@
+	$(LN_S) $(libdir)/libnnfft at matlab_mexext@ $(libdir)/nnfftmex at matlab_mexext@
+
+uninstall-hook:
+	rm -f $(libdir)/nnfftmex at matlab_mexext@
+
+
diff --git a/matlab/nfft/PRE_FG_PSI.m b/matlab/nnfft/PRE_FG_PSI.m
similarity index 89%
copy from matlab/nfft/PRE_FG_PSI.m
copy to matlab/nnfft/PRE_FG_PSI.m
index 8324451..430dd60 100644
--- a/matlab/nfft/PRE_FG_PSI.m
+++ b/matlab/nnfft/PRE_FG_PSI.m
@@ -4,9 +4,9 @@
 %   multiplications for direct calls to exponential function (the remaining 2dM
 %   direct calls are precomputed).
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/PRE_FULL_PSI.m b/matlab/nnfft/PRE_FULL_PSI.m
similarity index 89%
copy from matlab/nfft/PRE_FULL_PSI.m
copy to matlab/nnfft/PRE_FULL_PSI.m
index 6eec515..af2d219 100644
--- a/matlab/nfft/PRE_FULL_PSI.m
+++ b/matlab/nnfft/PRE_FULL_PSI.m
@@ -3,9 +3,9 @@
 %   matrix B) uses (2m+2)^dM precomputed values of the window function, in
 %   addition indices of source and target vectors are stored.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/PRE_LIN_PSI.m b/matlab/nnfft/PRE_LIN_PSI.m
similarity index 89%
copy from matlab/nfft/PRE_LIN_PSI.m
copy to matlab/nnfft/PRE_LIN_PSI.m
index bfed81c..c9ca933 100644
--- a/matlab/nfft/PRE_LIN_PSI.m
+++ b/matlab/nnfft/PRE_LIN_PSI.m
@@ -3,9 +3,9 @@
 %   matrix B) uses linear interpolation from a lookup table of equispaced samples
 %   of the window function instead of exact values of the window function.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/PRE_PHI_HUT.m b/matlab/nnfft/PRE_PHI_HUT.m
similarity index 88%
copy from matlab/nfft/PRE_PHI_HUT.m
copy to matlab/nnfft/PRE_PHI_HUT.m
index ea8f2bc..4839bbc 100644
--- a/matlab/nfft/PRE_PHI_HUT.m
+++ b/matlab/nnfft/PRE_PHI_HUT.m
@@ -3,9 +3,9 @@
 %   diagonal matrix D) uses precomputed values of the Fourier transformed window
 %   function.
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/PRE_PSI.m b/matlab/nnfft/PRE_PSI.m
similarity index 88%
copy from matlab/nfft/PRE_PSI.m
copy to matlab/nnfft/PRE_PSI.m
index b49b799..bd80755 100644
--- a/matlab/nfft/PRE_PSI.m
+++ b/matlab/nnfft/PRE_PSI.m
@@ -1,9 +1,9 @@
 %PRE_PSI Precomputation flag
 %   If this flag is set, the convolution step (the multiplication with the sparse
 %   matrix B uses (2m+2)dM precomputed values of the window function.
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nnfft/nnfft.m b/matlab/nnfft/nnfft.m
new file mode 100644
index 0000000..770adaf
--- /dev/null
+++ b/matlab/nnfft/nnfft.m
@@ -0,0 +1,437 @@
+
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% This class provides robust a Matlab interface to the NFFT library.
+%
+% Examples
+%   See Matlab scripts test_nnfft*d.m.
+classdef nnfft < handle
+
+properties(Dependent=true)
+	x;     % nodes in time/spatial domain (real Mxd matrix)
+	v;		% nodes in fourier domain (real N_totalxd matrix)
+	fhat;  % fourier coefficients (complex column vector of length N_1, N_1*N_2 or N_1*N_2*N_3, for d=2 columnwise linearisation of N_1xN_2 matrix and for d=3 columnwise linearisation of N_1xN_2xN_3 array)
+	f;     % samples (complex column vector of length M)
+end %properties
+
+properties(Dependent=true,SetAccess='private');
+	N; %cut-off-frequencies
+	N1; %sigma*N
+end %properties
+
+properties(SetAccess='private')
+	d=[];   % spatial dimension (d=1, d=2 or d=3)
+	N_total=[];
+	M=[];   % number of sampling points (positive integer)
+end %properties
+
+properties(Hidden=true,SetAccess='private',GetAccess='private');
+	plan=[];
+	N_1=[];  % number of nodes in first direction (positive even integer)
+	N_2=[];  % number of nodes in second direction (positive even integer)
+	N_3=[];  % number of nodes in third direction (positive even integer)
+	N1_1=[]; % number of nodes in first direction (positive even integer)
+	N1_2=[]; % number of nodes in second direction (positive even integer)
+	N1_3=[]; % number of nodes in third direction (positive even integer)
+
+	x_is_set=false;             % flag if x is set
+	v_is_set=false;			    % flag if v is set
+	fhat_is_set=false;          % flag if fhat is set
+	f_is_set=false;             % flag if f is set
+	plan_is_set=false;          % flag if plan was created
+	precomputations_done=false; % flag if precomputations were done
+end %properties
+
+methods
+
+% Constructer and destructor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function h=nnfft(d,N_total,M,N,varargin)
+% Constructor
+%
+% h=nnfft(1,N_total,M,N) for spatial dimension d=1
+% h=nnfft(2,N_total,M,N) for spatial dimension d=2
+% h=nnfft(3,N_total,M,N) for spatial dimension d=3
+%
+% h=nnfft(d,N_total,M,N,varargin) for use of nnfft_init_guru
+% For example
+% h=nnfft(1,N_total,M,N,N1,7,'PRE_PHI_HUT')     for d=1
+% h=nnfft(2,N_total,M,N,N,N1,N1,7,'PRE_PHI_HUT')   for d=2
+% h=nnfft(3,N_total,M,N,N,N,N1,N1,N1,7,'PRE_PHI_HUT') for d=3
+% with N1=sigma*N   ; n=N1
+% NOT IMPLEMENTED: Be careful: There is no error handling with using nfft_init_guru.
+% Incorrect inputs can cause a Matlab crash!
+%
+% INPUT
+%   d         spatial dimension (d=1, d=2 or d=3)
+%	N_total  Total number of Fourier coefficients.
+%   M         number of sampling points (positive integer)
+%   N			cutt-off-frequencies, numbers of nodes in each direction (column vector of length d with positive even integers)
+%   varargin  parameters for use of nnfft_init_guru (see documentation of NFFT for more details)
+%
+% OUTPUT
+%   h   object of class type nfft
+
+	h.d=d;
+	h.N_total=N_total;
+	h.M=M;
+	if( isempty(N) || size(N,1)~=d || size(N,2)~=1)
+		error('The numbers of nodes N have to be an integer column vector of length %u for spatial dimension d=%u',d,d);
+	else
+		h.N=N;
+	end %if
+
+	if( 4>nargin )
+		error('Wrong number of inputs.');
+	elseif( 4==nargin )
+		
+		switch d
+		case 1
+			h.plan=nnfftmex('init_1d',N_total,M,N);
+			h.plan_is_set=true;
+		case 2
+			h.plan=nnfftmex('init_2d',N_total,M,N(1),N(2));
+			h.plan_is_set=true;
+		case 3
+			h.plan=nnfftmex('init_3d',N_total,M,N(1),N(2),N(3));
+			h.plan_is_set=true;
+		otherwise
+			error('Invalid spatial dimension d.');
+		end %switch
+	else % nnfft_init_guru
+		disp('You are using nnfft_init_guru. This is on your own risk. There will be no error handling. Incorrect inputs can cause a Matlab crash.');
+		
+		switch d
+		case 1
+			args=[{d,N_total,M,N(1)},varargin];
+		case 2
+			%disp(N_total);disp(N);
+			args=[{d,N_total,M,N(1),N(2)},varargin];
+		case 3
+			args=[{d,N_total,M,N(1),N(2),N(3)},varargin];
+		otherwise
+			error('Unknown error.');
+		end %switch
+		h.plan=nnfftmex('init_guru',args);
+		h.plan_is_set=true;
+	end %if
+end %function
+
+function delete(h)
+% Destructor
+	if(h.plan_is_set)
+		nnfftmex('finalize',h.plan);
+	end %if
+end %function
+
+% Set functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function set.d(h,d)
+	if( isempty(d) || (d~=1 && d~=2 && d~=3) )
+		error('The spatial dimension d has to be d=1, d=2 or d=3.');
+	else
+		h.d=d;
+	end %if
+end %function
+
+function set.N_total(h,k)
+	if( ndims(k)~=2 || size(k,1)~=1 || size(k,2)~=1)
+		error('The number of sampling pints N_total has to be an positive integer.');
+	elseif( isempty(k) || ~isnumeric(k) || ~isreal(k) || mod(k,1)~=0 || ~(k>0) )
+		error('The number of sampling pints N_total has to be an positive integer.');
+	else
+		h.N_total=k;
+	end %if
+end %function
+
+function set.N(h,N)
+	switch length(N)
+	case 1
+		h.N_1=N;
+	case 2
+		h.N_1=N(1);
+		h.N_2=N(2);
+	case 3
+		h.N_1=N(1);
+		h.N_2=N(2);
+		h.N_3=N(3);
+	otherwise
+		error('Unknown error');
+	end %switch
+end %function
+
+function set.N_1(h,N_1)
+	if( isempty(N_1) || ~isnumeric(N_1) || ~isreal(N_1) || (mod(N_1,2)~=0) || ~(N_1>0))
+		error('The number of the nodes N_1 has to be an even positive integer.');
+	else
+		h.N_1=N_1;
+	end %if
+end %function
+
+function set.N_2(h,N_2)
+	if( isempty(N_2) || ~isnumeric(N_2) || ~isreal(N_2) || (mod(N_2,2)~=0) || ~(N_2>0))
+		error('The number of the nodes N_2 has to be an even positive integer.');
+	else
+		h.N_2=N_2;
+	end %if
+end %function
+
+function set.N_3(h,N_3)
+	if( isempty(N_3) || ~isnumeric(N_3) || ~isreal(N_3) || (mod(N_3,2)~=0) || ~(N_3>0))
+		error('The number of the nodes N_3 has to be an even positive integer.');
+	else
+		h.N_3=N_3;
+	end %if
+end %function
+
+
+function set.N1(h,N1)
+	switch length(N1)
+	case 1
+		h.N1_1=N1;
+	case 2
+		h.N1_1=N1(1);
+		h.N1_2=N1(2);
+	case 3
+		h.N1_1=N1(1);
+		h.N1_2=N1(2);
+		h.N1_3=N1(3);
+	otherwise
+		error('Unknown error');
+	end %switch
+end %function
+
+function set.N1_1(h,N1_1)
+	if( isempty(N1_1) || ~isnumeric(N1_1) || ~isreal(N1_1) || (mod(N1_1,2)~=0) || ~(N1_1>0))
+		error('The number of the nodes N1_1 has to be an even positive integer.');
+	else
+		h.N1_1=N1_1;
+	end %if
+end %function
+
+function set.N1_2(h,N1_2)
+	if( isempty(N1_2) || ~isnumeric(N1_2) || ~isreal(N1_2) || (mod(N1_2,2)~=0) || ~(N1_2>0))
+		error('The number of the nodes N1_2 has to be an even positive integer.');
+	else
+		h.N1_2=N1_2;
+	end %if
+end %function
+
+function set.N1_3(h,N1_3)
+	if( isempty(N1_3) || ~isnumeric(N1_3) || ~isreal(N1_3) || (mod(N1_3,2)~=0) || ~(N1_3>0))
+		error('The number of the nodes N1_3 has to be an even positive integer.');
+	else
+		h.N1_3=N1_3;
+	end %if
+end %function
+
+function set.M(h,M)
+	if( ndims(M)~=2 || size(M,1)~=1 || size(M,2)~=1)
+		error('The number of sampling pints M has to be an positive integer.');
+	elseif( isempty(M) || ~isnumeric(M) || ~isreal(M) || mod(M,1)~=0 || ~(M>0) )
+		error('The number of sampling pints M has to be an positive integer.');
+	else
+		h.M=M;
+	end %if
+end %function
+
+function set.x(h,x)
+	if( isempty(x) )
+		error('The sampling points x have to be real numbers.');
+	elseif( ~isnumeric(x) || ~isreal(x) )
+		error('The sampling points x have to be real numbers.');
+	%elseif( min(x(:))<-1/2 || ~(max(x(:))<1/2) )
+	%	error('The sampling points x have to be in the two dimensional Torus [-0.5,0.5)^2');
+	elseif( size(x,1)~=h.M || size(x,2)~=h.d )
+		error('The sampling points have to be a %ux%u matrix',h.M,h.d);
+	else
+		x=mod(x+0.5,1)-0.5;
+		nnfftmex('set_x',h.plan,x.');
+		h.x_is_set=true;
+		h.precomputations_done=false;
+	end %if
+end %function
+
+function set.v(h,v)
+	if( isempty(v) )
+		error('The sampling points v for fourier domain have to be real numbers.');
+	elseif( ~isnumeric(v) || ~isreal(v) )
+		error('The sampling points v for fourier domain have to be real numbers.');
+	%elseif( min(v(:))<-1/2 || ~(max(v(:))<1/2) )
+	%	error('The sampling points v for fourier domain have to be in the two dimensional Torus [-0.5,0.5)^2');
+	elseif( size(v,1)~=h.N_total || size(v,2)~=h.d )
+		error('The sampling points for fourier domain have to be a %uv%u matrix',h.N_total,h.d);
+	else
+		v=mod(v+0.5,1)-0.5;
+		nnfftmex('set_v',h.plan,v.');
+		h.v_is_set=true;
+		h.precomputations_done=false;
+	end %if
+end %function
+
+function set.fhat(h,fhat)
+	switch h.d
+	case 1
+		n=h.N_1;
+	case 2
+		n=h.N_1*h.N_2;
+	case 3
+		n=h.N_1*h.N_2*h.N_3;
+	otherwise
+		error('Unknown error.');
+	end % switch
+
+	if( isempty(fhat) || ~isnumeric(fhat))
+		error('The Fourier coefficients fhat have to be complex numbers.');
+	elseif( size(fhat,1)~=(n) || size(fhat,2)~=1 )
+		error('The Fourier coefficients fhat have to be a column vector of length %u.',n);
+	else
+		switch h.d
+		case 1
+			% Do nothing.
+		case 2
+			% linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+			fhat=reshape(fhat,h.N_1,h.N_2).';
+			fhat=fhat(:);
+		case 3
+			% linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+			fhat=reshape(fhat,h.N_1,h.N_2,h.N_3);
+			fhat=permute(fhat,[3,2,1]);
+			fhat=fhat(:);
+		otherwise
+			error('Unknown error.');
+		end %switch
+
+		nnfftmex('set_f_hat',h.plan,fhat);
+		h.fhat_is_set=true;
+	end %if
+end %function
+
+function set.f(h,f)
+	if(isempty(f) || ~isnumeric(f))
+		error('The samples f have to be complex numbers.');
+	elseif( size(f,1)~=h.M || size(f,2)~=1 )
+		error('The samples f have to be an column vector of length M=%u',h.M);
+	else
+		nnfftmex('set_f',h.plan,f);
+		h.f_is_set=true;
+	end %if
+end %function
+
+% Get functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function x=get.x(h)
+	if(h.x_is_set)
+		x=nnfftmex('get_x',h.plan).';
+	else
+		x=[];
+	end %if
+end %function
+
+function fhat=get.fhat(h)
+	if(h.fhat_is_set)
+		fhat=nnfftmex('get_f_hat',h.plan);
+
+		switch h.d
+		case 1
+			% Do nothing.
+		case 2
+			% linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+			fhat=reshape(fhat,h.N_2,h.N_1).';
+			fhat=fhat(:);
+		case 3
+			% linearization in matlab with column (:) operator is columnwise, in NFFT it is rowwise
+			fhat=reshape(fhat,h.N_3,h.N_2,h.N_1);
+			fhat=permute(fhat,[3,2,1]);
+			fhat=fhat(:);
+		otherwise
+			error('Unknown error.');
+		end %switch
+	else
+		fhat=[];
+	end %if
+end %funcition
+
+function f=get.f(h)
+	if(h.f_is_set)
+		f=nnfftmex('get_f',h.plan);
+	else
+		f=[];
+	end %if
+end %function
+
+function N=get.N(h)
+	N=[h.N_1;h.N_2;h.N_3];
+end %function
+
+function N=get.N1(h)
+	N=[h.N1_1;h.N1_2;h.N1_3];
+end %function
+
+% User methods %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function nnfft_precompute_psi(h)
+% Precomputations for NNFFT.
+	if(~h.x_is_set)
+		error('Before doing precomputations you have to set nodes in x.');
+	else
+		nnfftmex('precompute_psi',h.plan)
+		h.precomputations_done=true;
+	end %if
+end %function
+
+function nnfft_trafo_direct(h)
+%% NNDFT.
+%%
+%% nnfft_trafo_direct(h)
+%%
+%% INPUT
+%%   h  object of class type nnfft
+
+	if(~h.precomputations_done)
+		error('Before doing a NNFFT transform you have to do precomputations.');
+	elseif(~h.fhat_is_set)
+		error('Before doing a NNFFT transform you have to set Fourier coefficients in fhat.');
+	else
+		nnfftmex('trafo_direct',h.plan);
+		h.f_is_set=true;
+	end %if
+end %function
+
+function nnfft_trafo(h)
+% NFFT.
+%
+% nfft_trafo(h)
+%
+% INPUT
+%   h  object of class type nnfft
+
+	if(~h.precomputations_done)
+		error('Before doing a NNFFT transform you have to do precomputations.');
+	elseif(~h.fhat_is_set)
+		error('Before doing a NNFFT transform you have to set Fourier coefficients in fhat.');
+	else
+		nnfftmex('trafo',h.plan);
+		h.f_is_set=true;
+	end %if
+end %function
+
+
+end %methods
+
+end %classdef
+
diff --git a/matlab/nfft/nfft_init_guru.m b/matlab/nnfft/nnfft_display.m
similarity index 69%
copy from matlab/nfft/nfft_init_guru.m
copy to matlab/nnfft/nnfft_display.m
index f84dfe9..1267ec4 100644
--- a/matlab/nfft/nfft_init_guru.m
+++ b/matlab/nnfft/nnfft_display.m
@@ -1,20 +1,20 @@
-%NFFT_INIT_GURU Initialise plans, no error handling
+%NFFT_DISPLAY Initialise plans, no error handling
 %   Matlab might run into a segmentation violation for wrong parameters
 %
-%   nfft_init_guru(d,N1,...,Nd,M,n1,...,nd,m,nfft_flags,fftw_flags)
+%   nfft_init_guru(d,N1,...,Nd,M,n1,...,nd,m,flags,fftw_flags)
 %
 %   d            spatial dimension
 %   N1,...,Nd    bandwidths
 %   M            number of nodes
 %   n1,...,nd    fft lengths
 %   m            cut-off parameter
-%   nfft_flags   PRE_PHI_HUT | {FG_PSI, PRE_LIN_PSI, PRE_FG_PSI, PRE_PSI,
+%   flags   PRE_PHI_HUT | {FG_PSI, PRE_LIN_PSI, PRE_FG_PSI, PRE_PSI,
 %	             PRE_FULL_PSI} | FFT_OUT_OF_PLACE
 %   fftw_flags   {FFTW_ESTIMATE, FFTW_MEASURE}
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -30,7 +30,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_init_guru.m 3776 2012-06-03 13:29:25Z keiner $
-function p = nfft_init_guru(varargin)
+% $Id: nfft_init_guru.m 4086 2014-03-12 19:09:50Z keiner $
+function p = nnfft_display(p)
 
-p = nfftmex('init_guru',varargin);
+p = nnfftmex('display',p);
diff --git a/matlab/nfft/nfft_finalize.m b/matlab/nnfft/nnfft_finalize.m
similarity index 81%
copy from matlab/nfft/nfft_finalize.m
copy to matlab/nnfft/nnfft_finalize.m
index c9d06bc..6855885 100644
--- a/matlab/nfft/nfft_finalize.m
+++ b/matlab/nnfft/nnfft_finalize.m
@@ -1,7 +1,7 @@
 %NFFT_FINALIZE Finalize plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_finalize.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_finalize(p)
+function nnfft_finalize(p)
 
-nfftmex('finalize',p)
+nnfftmex('finalize',p)
diff --git a/matlab/nfft/nfft_get_f.m b/matlab/nnfft/nnfft_get_f.m
similarity index 81%
copy from matlab/nfft/nfft_get_f.m
copy to matlab/nnfft/nnfft_get_f.m
index dc08478..bea307c 100644
--- a/matlab/nfft/nfft_get_f.m
+++ b/matlab/nnfft/nnfft_get_f.m
@@ -1,7 +1,7 @@
 %NFFT_GET_F Get function values from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_get_f.m 3776 2012-06-03 13:29:25Z keiner $
-function f = nfft_get_f(p)
+function f = nnfft_get_f(p)
 
-f = nfftmex('get_f',p);
+f = nnfftmex('get_f',p);
diff --git a/matlab/nfft/nfft_get_f_hat.m b/matlab/nnfft/nnfft_get_f_hat.m
similarity index 80%
copy from matlab/nfft/nfft_get_f_hat.m
copy to matlab/nnfft/nnfft_get_f_hat.m
index 0b18968..5225a98 100644
--- a/matlab/nfft/nfft_get_f_hat.m
+++ b/matlab/nnfft/nnfft_get_f_hat.m
@@ -1,7 +1,7 @@
 %NFFT_GET_F_HAT Get Fourier coefficients from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_get_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
-function f_hat = nfft_get_f_hat(p)
+function f_hat = nnfft_get_f_hat(p)
 
-f_hat = nfftmex('get_f_hat',p);
+f_hat = nnfftmex('get_f_hat',p);
diff --git a/matlab/nfft/nfft_get_num_threads.m b/matlab/nnfft/nnfft_get_num_threads.m
similarity index 80%
copy from matlab/nfft/nfft_get_num_threads.m
copy to matlab/nnfft/nnfft_get_num_threads.m
index 8d6882c..36c499c 100644
--- a/matlab/nfft/nfft_get_num_threads.m
+++ b/matlab/nnfft/nnfft_get_num_threads.m
@@ -1,7 +1,7 @@
 %NFFT_GET_NUM_THREADS Get number of threads (at most) used for computation
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_get_x.m 3124 2009-03-18 13:44:27Z kunis $
-function nthreads = nfft_get_num_threads()
+function nthreads = nnfft_get_num_threads()
 
-nthreads = nfftmex('get_num_threads');
+nthreads = nnfftmex('get_num_threads');
diff --git a/matlab/nfft/nfft_get_x.m b/matlab/nnfft/nnfft_get_x.m
similarity index 81%
copy from matlab/nfft/nfft_get_x.m
copy to matlab/nnfft/nnfft_get_x.m
index d7aba9f..119a417 100644
--- a/matlab/nfft/nfft_get_x.m
+++ b/matlab/nnfft/nnfft_get_x.m
@@ -1,7 +1,7 @@
 %NFFT_GET_X Get nodes from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_get_x.m 3776 2012-06-03 13:29:25Z keiner $
-function x = nfft_get_x(p)
+function x = nnfft_get_x(p)
 
-x = nfftmex('get_x',p);
+x = nnfftmex('get_x',p);
diff --git a/matlab/nfft/nfft_init_1d.m b/matlab/nnfft/nnfft_init.m
similarity index 77%
copy from matlab/nfft/nfft_init_1d.m
copy to matlab/nnfft/nnfft_init.m
index 00c3075..2b70d2e 100644
--- a/matlab/nfft/nfft_init_1d.m
+++ b/matlab/nnfft/nnfft_init.m
@@ -1,7 +1,7 @@
-%NFFT_INIT_1D Initialise plans
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%NFFT_INIT Initialise plans
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_init_1d.m 3776 2012-06-03 13:29:25Z keiner $
-function p = nfft_init_1d(N,M)
+function p = nnfft_init(varargin)
 
-p = nfftmex('init_1d',N,M);
+p = nnfftmex('init',varargin);
diff --git a/matlab/nfft/nfft_get_f.m b/matlab/nnfft/nnfft_init_1d.m
similarity index 71%
copy from matlab/nfft/nfft_get_f.m
copy to matlab/nnfft/nnfft_init_1d.m
index dc08478..5dd56d0 100644
--- a/matlab/nfft/nfft_get_f.m
+++ b/matlab/nnfft/nnfft_init_1d.m
@@ -1,7 +1,7 @@
-%NFFT_GET_F Get function values from plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%NNFFT_INIT_1D Initialise plans
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_get_f.m 3776 2012-06-03 13:29:25Z keiner $
-function f = nfft_get_f(p)
+% $Id: nnfft_init_1d.m 4229 2014-12-14 sukunis $
+function p = nnfft_init_1d(N_total,M,N)
 
-f = nfftmex('get_f',p);
+p = nnfftmex('init_1d',N_total,M,N);
diff --git a/matlab/nfft/nfft_adjoint.m b/matlab/nnfft/nnfft_init_2d.m
similarity index 70%
copy from matlab/nfft/nfft_adjoint.m
copy to matlab/nnfft/nnfft_init_2d.m
index a37e591..ceb490d 100644
--- a/matlab/nfft/nfft_adjoint.m
+++ b/matlab/nnfft/nnfft_init_2d.m
@@ -1,7 +1,7 @@
-%NFFT_ADJOINT Adjoint nonequispaced fast Fourier transform
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%NNFFT_INIT_2D Initialise plans
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_adjoint(p)
+% $Id: nnfft_init_3d.m 4229 2014-12-14 sukunis $
+function p = nnfft_init_2d(N_total,M,N1,N2)
 
-nfftmex('adjoint',p)
+p = nnfftmex('init_2d',N_total,M,N1,N2);
diff --git a/matlab/nfft/nfft_adjoint.m b/matlab/nnfft/nnfft_init_3d.m
similarity index 70%
copy from matlab/nfft/nfft_adjoint.m
copy to matlab/nnfft/nnfft_init_3d.m
index a37e591..7699edf 100644
--- a/matlab/nfft/nfft_adjoint.m
+++ b/matlab/nnfft/nnfft_init_3d.m
@@ -1,7 +1,7 @@
-%NFFT_ADJOINT Adjoint nonequispaced fast Fourier transform
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%NNFFT_INIT_3D Initialise plans
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_adjoint.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_adjoint(p)
+% $Id: nnfft_init_3d.m 4229 2014-12-14 sukunis $
+function p = nnfft_init_3d(N_total,M,N1,N2,N3)
 
-nfftmex('adjoint',p)
+p = nnfftmex('init_3d',N_total,M,N1,N2,N3);
diff --git a/matlab/nfft/nfft_init_guru.m b/matlab/nnfft/nnfft_init_guru.m
similarity index 66%
copy from matlab/nfft/nfft_init_guru.m
copy to matlab/nnfft/nnfft_init_guru.m
index f84dfe9..405482c 100644
--- a/matlab/nfft/nfft_init_guru.m
+++ b/matlab/nnfft/nnfft_init_guru.m
@@ -1,20 +1,19 @@
-%NFFT_INIT_GURU Initialise plans, no error handling
+%NNFFT_INIT_GURU Initialise plans, no error handling
 %   Matlab might run into a segmentation violation for wrong parameters
 %
-%   nfft_init_guru(d,N1,...,Nd,M,n1,...,nd,m,nfft_flags,fftw_flags)
+%   nnfft_init_guru(d,N1,...,Nd,M,n1,...,nd,m,flags)
 %
 %   d            spatial dimension
 %   N1,...,Nd    bandwidths
 %   M            number of nodes
 %   n1,...,nd    fft lengths
 %   m            cut-off parameter
-%   nfft_flags   PRE_PHI_HUT | {FG_PSI, PRE_LIN_PSI, PRE_FG_PSI, PRE_PSI,
+%   flags   PRE_PHI_HUT | {FG_PSI, PRE_LIN_PSI, PRE_FG_PSI, PRE_PSI,
 %	             PRE_FULL_PSI} | FFT_OUT_OF_PLACE
-%   fftw_flags   {FFTW_ESTIMATE, FFTW_MEASURE}
 %
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -30,7 +29,7 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_init_guru.m 3776 2012-06-03 13:29:25Z keiner $
-function p = nfft_init_guru(varargin)
+% $Id: nnfft_init_guru.m 4086 2014-12-11 19:09:50Z kunis $
+function p = nnfft_init_guru(varargin)
 
-p = nfftmex('init_guru',varargin);
+p = nnfftmex('init_guru',varargin);
diff --git a/matlab/nfft/nfft_precompute_psi.m b/matlab/nnfft/nnfft_precompute_psi.m
similarity index 75%
copy from matlab/nfft/nfft_precompute_psi.m
copy to matlab/nnfft/nnfft_precompute_psi.m
index 148241e..07987e9 100644
--- a/matlab/nfft/nfft_precompute_psi.m
+++ b/matlab/nnfft/nnfft_precompute_psi.m
@@ -1,7 +1,7 @@
-%NFFT_PRECOMPUTE_PSI Precompute psi, dependent on nodes x
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%NFFT_PRECOMPUTE_PSI Precompute one psi, dependent on nodes x
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_precompute_psi.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_precompute_psi(p)
+function nnfft_precompute_psi(p)
 
-nfftmex('precompute_psi',p)
+nnfftmex('precompute_psi',p)
diff --git a/matlab/nfft/nfft_set_f.m b/matlab/nnfft/nnfft_set_f.m
similarity index 82%
copy from matlab/nfft/nfft_set_f.m
copy to matlab/nnfft/nnfft_set_f.m
index 971ac25..ef94c37 100644
--- a/matlab/nfft/nfft_set_f.m
+++ b/matlab/nnfft/nnfft_set_f.m
@@ -1,7 +1,7 @@
 %NFFT_SET_F Set function values in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_set_f.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_set_f(p,f)
+function nnfft_set_f(p,f)
 
-nfftmex('set_f',p,f)
+nnfftmex('set_f',p,f)
diff --git a/matlab/nfft/nfft_set_f_hat.m b/matlab/nnfft/nnfft_set_f_hat.m
similarity index 81%
copy from matlab/nfft/nfft_set_f_hat.m
copy to matlab/nnfft/nnfft_set_f_hat.m
index f081cc5..97b426c 100644
--- a/matlab/nfft/nfft_set_f_hat.m
+++ b/matlab/nnfft/nnfft_set_f_hat.m
@@ -1,7 +1,7 @@
 %NFFT_SET_F_HAT Set Fourier coefficients in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_set_f_hat.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_set_f_hat(p,f_hat)
+function nnfft_set_f_hat(p,f_hat)
 
-nfftmex('set_f_hat',p,f_hat)
+nnfftmex('set_f_hat',p,f_hat)
diff --git a/matlab/nfft/nfft_set_x.m b/matlab/nnfft/nnfft_set_v.m
similarity index 81%
copy from matlab/nfft/nfft_set_x.m
copy to matlab/nnfft/nnfft_set_v.m
index a0b810d..e61a3b6 100644
--- a/matlab/nfft/nfft_set_x.m
+++ b/matlab/nnfft/nnfft_set_v.m
@@ -1,7 +1,8 @@
+
 %NFFT_SET_X Set nodes in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +19,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_set_x(p,x)
+function nnfft_set_v(p,v)
 
-nfftmex('set_x',p,x)
+nnfftmex('set_v',p,v)
diff --git a/matlab/nfft/nfft_set_x.m b/matlab/nnfft/nnfft_set_x.m
similarity index 82%
copy from matlab/nfft/nfft_set_x.m
copy to matlab/nnfft/nnfft_set_x.m
index a0b810d..119ad14 100644
--- a/matlab/nfft/nfft_set_x.m
+++ b/matlab/nnfft/nnfft_set_x.m
@@ -1,7 +1,7 @@
 %NFFT_SET_X Set nodes in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_set_x(p,x)
+function nnfft_set_x(p,x)
 
-nfftmex('set_x',p,x)
+nnfftmex('set_x',p,x)
diff --git a/matlab/nfft/nfft_trafo.m b/matlab/nnfft/nnfft_trafo.m
similarity index 82%
copy from matlab/nfft/nfft_trafo.m
copy to matlab/nnfft/nnfft_trafo.m
index 02d4cc1..0338e14 100644
--- a/matlab/nfft/nfft_trafo.m
+++ b/matlab/nnfft/nnfft_trafo.m
@@ -1,7 +1,7 @@
 %NFFT_TRAFO nonequispaced fast Fourier transformat
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_trafo(p)
+function nnfft_trafo(p)
 
-nfftmex('trafo',p)
+nnfftmex('trafo',p)
diff --git a/matlab/nfft/nfft_trafo.m b/matlab/nnfft/nnfft_trafo_direct.m
similarity index 81%
copy from matlab/nfft/nfft_trafo.m
copy to matlab/nnfft/nnfft_trafo_direct.m
index 02d4cc1..b344bd2 100644
--- a/matlab/nfft/nfft_trafo.m
+++ b/matlab/nnfft/nnfft_trafo_direct.m
@@ -1,7 +1,8 @@
+
 %NFFT_TRAFO nonequispaced fast Fourier transformat
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +19,6 @@
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
 % $Id: nfft_trafo.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_trafo(p)
+function nnfft_trafo_direct(p)
 
-nfftmex('trafo',p)
+nnfftmex('trafo_direct',p)
diff --git a/matlab/nfft/nfftmex.c b/matlab/nnfft/nnfftmex.c
similarity index 56%
copy from matlab/nfft/nfftmex.c
copy to matlab/nnfft/nnfftmex.c
index 722e490..ba8c617 100644
--- a/matlab/nfft/nfftmex.c
+++ b/matlab/nnfft/nnfftmex.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: nfftmex.c 3967 2013-04-23 08:59:35Z tovo $ */
+/* $Id: nnfftmex.c 4086 2014-06-23 19:09:50Z sukunis $ */
 #include "config.h"
 
 #ifdef HAVE_COMPLEX_H
@@ -27,7 +27,6 @@
 #include <stdint.h>
 #include "nfft3.h"
 #include "infft.h"
-#include "nfft3util.h"
 #include "imex.h"
 
 #ifdef HAVE_MEXVERSION_C
@@ -38,85 +37,85 @@
 #define CMD_LEN_MAX 20 /* maximum length of command argument */
 
 /* global flags */
-#define NFFT_MEX_FIRST_CALL (1U << 0)
-unsigned short gflags = NFFT_MEX_FIRST_CALL;
+#define NNFFT_MEX_FIRST_CALL (1U << 0)
+unsigned short gflags = NNFFT_MEX_FIRST_CALL;
 
-nfft_plan* plans[PLANS_MAX]; /* plans */
+nnfft_plan* plans[PLANS_MAX]; /* plans */
 char cmd[CMD_LEN_MAX];
 
-static inline void get_nm(const mxArray *prhs[], int *n, int *m)
+static inline void get_initArg(const mxArray *prhs[], int d,int *N_total, int *M,int *N)
 {
-  int t = nfft_mex_get_int(prhs[1],"nfft: Input argument N must be a scalar.");
-  DM(if ((t < 0) || (t%2!=0))
-    mexErrMsgTxt("nfft: Input argument N must be non-negative and multiple of two.");)
-  *n = t;
-  t = nfft_mex_get_int(prhs[2],"nfft: Input argument M must be a scalar.");
-  DM(if (t < 1)
-    mexErrMsgTxt("nfft: Input argument M must be positive.");)
-  *m = t;
+//TODO: Input check conditions correct
+	int t=-1;
+	int k=0;
+
+	//read N_total
+	t = nfft_mex_get_int(prhs[1],"nnfft: Input argument N_total must be a scalar.");
+	//mexPrintf("read cell %d :N=%d\n",1,t);
+	DM(if ((t < 0) || (t%2!=0))
+    	mexErrMsgTxt("nnfft: Input argument N must be non-negative and multiple of two.");)
+	*N_total=t;
+
+
+	t = nfft_mex_get_int(prhs[2], "nnfft Input argument M_total must be a scalar.");
+	//mexPrintf("read cell %d :M=%d\n",2,t);
+	DM(if (t < 1)
+		mexErrMsgTxt("nnfft: Input argument M_total must be positive.");)
+	*M = t;
+
+	// read N array
+	for(k=0;k<d;k++){
+		t = nfft_mex_get_int(prhs[3+k],"nnfft: Input argument N must be a scalar.");
+		//mexPrintf("read cell %d :n[%d]=%d\n",3+k,k,t);
+		DM(if ((t < 0) || (t%2!=0))
+			mexErrMsgTxt("nnfft: Input argument N must be non-negative and multiple of two.");)
+		N[k]=t;
+	}
 }
 
-static inline void get_n1n2m(const mxArray *prhs[], int *n1, int *n2, int *m)
-{
-  int t = nfft_mex_get_int(prhs[1],"nfft: Input argument N1 must be a scalar.");
-  DM(if ((t < 0) || (t%2!=0))
-    mexErrMsgTxt("nfft: Input argument N1 must be non-negative and even.");)
-  *n1 = t;
-
-  t = nfft_mex_get_int(prhs[2],"nfft: Input argument N2 must be a scalar.");
-  DM(if ((t < 0) || (t%2!=0))
-    mexErrMsgTxt("nfft: Input argument N2 must be non-negative and even.");)
-  *n2 = t;
-
-  t = nfft_mex_get_int(prhs[3],"nfft: Input argument M must be a scalar.");
-  DM(if (t < 1)
-    mexErrMsgTxt("nfft: Input argument M must be positive.");)
-  *m = t;
-}
 
-static inline void get_n1n2n3m(const mxArray *prhs[], int *n1, int *n2, int *n3, int *m)
-{
-  int t = nfft_mex_get_int(prhs[1],"nfft: Input argument N1 must be a scalar.");
-  DM(if ((t < 0) || (t%2!=0))
-    mexErrMsgTxt("nfft: Input argument N1 must be non-negative and even.");)
-  *n1 = t;
-
-  t = nfft_mex_get_int(prhs[2],"nfft: Input argument N2 must be a scalar.");
-  DM(if ((t < 0) || (t%2!=0))
-    mexErrMsgTxt("nfft: Input argument N2 must be non-negative and even.");)
-  *n2 = t;
-
-  t = nfft_mex_get_int(prhs[3],"nfft: Input argument N3 must be a scalar.");
-  DM(if ((t < 0) || (t%2!=0))
-    mexErrMsgTxt("nfft: Input argument N3 must be non-negative and even.");)
-  *n3 = t;
-
-  t = nfft_mex_get_int(prhs[4],"nfft: Input argument M must be a scalar.");
-  DM(if (t < 1)
-    mexErrMsgTxt("nfft: Input argument M must be positive.");)
-  *m = t;
-}
+//static inline void get_nm(const mxArray *prhs[], int *n, int *m)
+//{
+//  int t = nfft_mex_get_int(prhs[1],"nnfft: Input argument N must be a scalar.");
+//  DM(if ((t < 0) || (t%2!=0))
+//    mexErrMsgTxt("nnfft: Input argument N must be non-negative and multiple of two.");)
+//  *n = t;
+//  t = nfft_mex_get_int(prhs[2],"nnfft: Input argument M must be a scalar.");
+//  DM(if (t < 1)
+//    mexErrMsgTxt("nnfft: Input argument M must be positive.");)
+//  *m = t;
+//}
 
-static inline void get_guru(const mxArray *prhs[], int d, int *N, int *M, int *n, int *m, unsigned int *f1, unsigned int *f2)
+static inline void get_guru(const mxArray *prhs[], int d, int *N_total, int *M, int *N,int *N1, int *m, unsigned int *f)
 {
   /** NO ERROR HANDLING !!*/
   int k;
-
+  int t=-1;
+	
+  t=mxGetScalar(mxGetCell(prhs[1], (unsigned int)(1)));
+  *N_total=t;
+  
+  t = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2)));
+  *M=t;
+  
   for(k=0;k<d;k++)
-    N[k] = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(1+k)));
+    N[k] = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(3+k)));
 
-  *M = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(d+1)));
 
   for(k=0;k<d;k++)
-    n[k] = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(d+2+k)));
+    N1[k] = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(d+3+k)));
 
-  *m = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+2)));
 
-  *f1 = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+3)));
+  t= mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+3)));
+ 
+ *m=t;
+  t = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+4)));
+ *f=t;
 
-  *f2 = mxGetScalar(mxGetCell(prhs[1], (unsigned int)(2*d+4)));
 }
 
+
+
 static inline void check_nargs(const int nrhs, const int n, const char* errmsg)
 {
   DM(if (nrhs != n)
@@ -137,8 +136,8 @@ static inline int mkplan(void)
   int i = 0;
   while (i < PLANS_MAX && plans[i] != 0) i++;
   if (i == PLANS_MAX)
-    mexErrMsgTxt("nfft: Too many plans already allocated.");
-  plans[i] = nfft_malloc(sizeof(nfft_plan));
+    mexErrMsgTxt("nnfft: Too many plans already allocated.");
+  plans[i] = nfft_malloc(sizeof(nnfft_plan));
   return i;
 }
 
@@ -149,21 +148,21 @@ static void cleanup(void)
 
   mexUnlock();
 
-  if (!(gflags & NFFT_MEX_FIRST_CALL))
+  if (!(gflags & NNFFT_MEX_FIRST_CALL))
   {
     for (i = 0; i < PLANS_MAX; i++)
       if (plans[i])
       {
-        nfft_finalize(plans[i]);
+        nnfft_finalize(plans[i]);
         plans[i] = 0;
       }
-    gflags |= NFFT_MEX_FIRST_CALL;
+    gflags |= NNFFT_MEX_FIRST_CALL;
   }
 }
 
 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
 {
-  if (gflags & NFFT_MEX_FIRST_CALL)
+  if (gflags & NNFFT_MEX_FIRST_CALL)
   {
     /* Force Matlab to load libfftw3. There is at least one version of Matlab
      * which otherwise crashes upon invocation of this mex function. */
@@ -179,7 +178,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
     }
 
     mexAtExit(cleanup);
-    gflags &= ~NFFT_MEX_FIRST_CALL;
+    gflags &= ~NNFFT_MEX_FIRST_CALL;
   }
 
   /* command string */
@@ -192,62 +191,84 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   if (mxGetString(prhs[0], cmd, CMD_LEN_MAX))
     mexErrMsgTxt("Could not get command string.");
 
-  if (strcmp(cmd,"init_1d") == 0)
+  if(strcmp(cmd,"init") == 0)
+  {
+   /** NO ERROR HANDLING FOR COMPLETE INPUT!!*/
+    
+	 int i;
+    const int d = mxGetScalar(mxGetCell(prhs[1], 0));
+
+    int N_total,N[d],M;
+
+    DM(if ((d < 1) || (d>4))
+	 mexErrMsgTxt("nnfft: Input argument d must be positive and smaller than 5.");)
+
+    get_initArg(prhs,d,&N_total,&M,N);
+    
+    i = mkplan();
+    nnfft_init(plans[i],d,N_total,M,N);
+
+    plhs[0] = mxCreateDoubleScalar((double)i);
+   
+    return;	
+  }
+
+  else if (strcmp(cmd,"init_1d") == 0)
   {
-    check_nargs(nrhs,3,"Wrong number of arguments for init.");
+    check_nargs(nrhs,4,"Wrong number of arguments for init_1d.");
     {
       int i;
-      int n, m;
-      get_nm(prhs,&n,&m);
+      int N_total, M,N[1];
+      get_initArg(prhs,1,&N_total,&M,N);
       i = mkplan();
-      nfft_init_1d(plans[i],n,m);
+      nnfft_init(plans[i],1,N_total,M,N);
       plhs[0] = mxCreateDoubleScalar((double)i);
     }
     return;
   }
   else if (strcmp(cmd,"init_2d") == 0)
-  {
-    check_nargs(nrhs,4,"Wrong number of arguments for init.");
+  {	  
+    check_nargs(nrhs,5,"Wrong number of arguments for init_2d.");
     {
       int i;
-      int n1, n2, m;
-      get_n1n2m(prhs,&n1,&n2,&m);
+      int N_total,M,N[2];
+      get_initArg(prhs,2,&N_total,&M,N);
       i = mkplan();
-      nfft_init_2d(plans[i],n1,n2,m);
+      nnfft_init(plans[i],2,N_total,M,N);
       plhs[0] = mxCreateDoubleScalar((double)i);
     }
     return;
   }
   else if (strcmp(cmd,"init_3d") == 0)
   {
-    check_nargs(nrhs,5,"Wrong number of arguments for init.");
+    check_nargs(nrhs,6,"Wrong number of arguments for init_3d.");
     {
       int i;
-      int n1, n2, n3, m;
-      get_n1n2n3m(prhs,&n1,&n2,&n3,&m);
+     int N_total,M,N[3];
+      get_initArg(prhs,3,&N_total,&M,N);
       i = mkplan();
-      nfft_init_3d(plans[i],n1,n2,n3,m);
+      nnfft_init(plans[i],3,N_total,M,N);
       plhs[0] = mxCreateDoubleScalar((double)i);
     }
     return;
   }
   else if (strcmp(cmd,"init_guru") == 0)
   {
+//	  mexErrMsgTxt("No implementation available.");
     /** NO ERROR HANDLING !!*/
     int i;
     const int d = mxGetScalar(mxGetCell(prhs[1], 0));
 
-    int N[d],n[d],m,M;
-    unsigned int f1,f2;
-
-    DM(if ((d < 1) || (d>4)) 
-	 mexErrMsgTxt("nfft: Input argument d must be positive and smaller than 5.");)
+    int N[d],n[d],m,M, N_total;
+    unsigned int f;
 
-    get_guru(prhs,d,N,&M,n,&m,&f1,&f2);
+    DM(if ((d < 1) || (d>4))
+	 mexErrMsgTxt("nnfft: Input argument d must be positive and smaller than 5.");)
+ 
+    get_guru(prhs,d,&N_total,&M,N,n,&m,&f);
+   
     i = mkplan();
-    nfft_init_guru(plans[i],d,N,M,n,m,
-		   f1 | MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT,
-		   f2);
+    nnfft_init_guru(plans[i],d,N_total,M,N,n,m,f |MALLOC_X |MALLOC_V |MALLOC_F_HAT | MALLOC_F);
 
     plhs[0] = mxCreateDoubleScalar((double)i);
 
@@ -255,11 +276,11 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   }
   else if (strcmp(cmd,"precompute_psi") == 0)
   {
-    check_nargs(nrhs,2,"Wrong number of arguments for precompute_one_psi.");
+    check_nargs(nrhs,2,"Wrong number of arguments for precompute_psi.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       check_plan(i);
-      nfft_precompute_one_psi(plans[i]);
+      nnfft_precompute_one_psi(plans[i]);
     }
     return;
   }
@@ -267,29 +288,30 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   {
     check_nargs(nrhs,2,"Wrong number of arguments for trafo.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       check_plan(i);
-      nfft_trafo(plans[i]);
+      nnfft_trafo(plans[i]);
     }
     return;
   }
   else if (strcmp(cmd,"adjoint") == 0)
   {
-    check_nargs(nrhs,2,"Wrong number of arguments for adjoint.");
-    {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
-      check_plan(i);
-      nfft_adjoint(plans[i]);
-    }
-    return;
+	  mexErrMsgTxt("No implementation available.");
+//    check_nargs(nrhs,2,"Wrong number of arguments for adjoint.");
+//    {
+//      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+//      check_plan(i);
+//      nfft_adjoint(plans[i]);
+//    }
+//    return;
   }
   else if (strcmp(cmd,"finalize") == 0)
   {
     check_nargs(nrhs,2,"Wrong number of arguments for finalize.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       check_plan(i);
-      nfft_finalize(plans[i]);
+      nnfft_finalize(plans[i]);
       nfft_free(plans[i]);
       plans[i] = 0;
     }
@@ -297,29 +319,31 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   }
   else if (strcmp(cmd,"trafo_direct") == 0)
   {
+//	  mexErrMsgTxt("No implementation available.");
     check_nargs(nrhs,2,"Wrong number of arguments for trafo direct.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       check_plan(i);
-      nfft_trafo_direct(plans[i]);
+      nnfft_trafo_direct(plans[i]);
     }
     return;
   }
   else if (strcmp(cmd,"adjoint_direct") == 0)
   {
-    check_nargs(nrhs,2,"Wrong number of arguments for adjoint direct.");
-    {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
-      check_plan(i);
-      nfft_adjoint_direct(plans[i]);
-    }
-    return;
+	  mexErrMsgTxt("No implementation available.");
+//    check_nargs(nrhs,2,"Wrong number of arguments for adjoint direct.");
+//    {
+//      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+//      check_plan(i);
+//      nfft_adjoint_direct(plans[i]);
+//    }
+//    return;
   }
   else if (strcmp(cmd,"get_x") == 0)
   {
     check_nargs(nrhs,2,"Wrong number of arguments for get_x.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       int m, d;
       check_plan(i);
       m = plans[i]->M_total;
@@ -339,7 +363,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   {
     check_nargs(nrhs,2,"Wrong number of arguments for get_f.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       int m;
       check_plan(i);
       m = plans[i]->M_total;
@@ -360,7 +384,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   {
     check_nargs(nrhs,2,"Wrong number of arguments for get_f_hat.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       int n;
       check_plan(i);
       n = plans[i]->N_total;
@@ -381,11 +405,12 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   {
     check_nargs(nrhs,3,"Wrong number of arguments for set_x.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       int m, d;
       check_plan(i);
       m = plans[i]->M_total;
       d = plans[i]->d;
+
       DM(if (!mxIsDouble(prhs[2]) || mxGetNumberOfDimensions(prhs[2]) > 2)
         mexErrMsgTxt("Input argument x must be a d x M double array");)
       DM(if (mxGetM(prhs[2]) != (unsigned int)d || mxGetN(prhs[2]) != (unsigned int)m)
@@ -400,11 +425,34 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
     }
     return;
   }
+  else if (strcmp(cmd,"set_v") == 0)
+  {
+    check_nargs(nrhs,3,"Wrong number of arguments for set_v.");
+    {
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
+      int m, d;
+      check_plan(i);
+      m = plans[i]->N_total;
+      d = plans[i]->d;
+      DM(if (!mxIsDouble(prhs[2]) || mxGetNumberOfDimensions(prhs[2]) > 2)
+        mexErrMsgTxt("Input argument v must be a d x N double array");)
+      DM(if (mxGetM(prhs[2]) != (unsigned int)d || mxGetN(prhs[2]) != (unsigned int)m)
+        mexErrMsgTxt("Input argument v must have correct size (d x N).");)
+      {
+        double *v = mxGetPr(prhs[2]);
+        int j,t;
+        for (j = 0; j < m; j++)
+	  for (t = 0; t < d; t++)
+	    plans[i]->v[d*j+t] = v[d*j+t];
+      }
+    }
+    return;
+  }
   else if (strcmp(cmd,"set_f") == 0)
   {
     check_nargs(nrhs,3,"Wrong number of arguments for set_f.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       int m;
       check_plan(i);
       m = plans[i]->M_total;
@@ -427,7 +475,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   {
     check_nargs(nrhs,3,"Wrong number of arguments for set_f_hat.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       int n;
       check_plan(i);
       n = plans[i]->N_total;
@@ -450,9 +498,8 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
   }
   else if (strcmp(cmd,"display") == 0)
   {
-    check_nargs(nrhs,2,"Wrong number of arguments for set_f_hat_linear.");
     {
-      int i = nfft_mex_get_int(prhs[1],"nfft: Input argument plan must be a scalar.");
+      int i = nfft_mex_get_int(prhs[1],"nnfft: Input argument plan must be a scalar.");
       mexPrintf("Plan %d\n",i);
       check_plan(i);
       mexPrintf("  pointer: %p\n",plans[i]);
@@ -460,20 +507,23 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
       mexPrintf("  N_total: %d\n",plans[i]->N_total);
       mexPrintf("  M_total: %d\n",plans[i]->M_total);
       mexPrintf("        x: %p\n",plans[i]->x);
+      mexPrintf("        v: %p\n",plans[i]->v);
       mexPrintf("        f: %p\n",plans[i]->f);
       mexPrintf("    f_hat: %p\n",plans[i]->f_hat);
-      mexPrintf("    flags: %d\n",plans[i]->nfft_flags);
+      mexPrintf("    flags: %d\n",plans[i]->nnfft_flags);
     }
     return;
   }
   else if(strcmp(cmd,"get_num_threads") == 0)
   {
-    int32_t nthreads = nfft_get_num_threads();
+    int32_t nthreads = X(get_num_threads)();
     plhs[0] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL);
     *((int32_t *)mxGetData(plhs[0])) = nthreads;
 
     return;
   }
-  else
-    mexErrMsgTxt("nfft: Unknown command.\n");
+  else{
+	mexPrintf(cmd);
+    mexErrMsgTxt("nnfft: Unknown command SUSE.");
+  }
 }
diff --git a/matlab/nfft/nfft_set_x.m b/matlab/nnfft/nnfftmex.m
similarity index 73%
copy from matlab/nfft/nfft_set_x.m
copy to matlab/nnfft/nnfftmex.m
index a0b810d..1e38d01 100644
--- a/matlab/nfft/nfft_set_x.m
+++ b/matlab/nnfft/nnfftmex.m
@@ -1,7 +1,7 @@
-%NFFT_SET_X Set nodes in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+%NFFTMEX Gateway function to NFFT module from NFFT3
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -17,7 +17,5 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 %
-% $Id: nfft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_set_x(p,x)
+% $Id: nfftmex.m 3776 2012-06-03 13:29:25Z keiner $
 
-nfftmex('set_x',p,x)
diff --git a/matlab/nnfft/out.txt b/matlab/nnfft/out.txt
new file mode 100644
index 0000000..02479dc
--- /dev/null
+++ b/matlab/nnfft/out.txt
@@ -0,0 +1,32 @@
+insgesamt 136
+drwxr-xr-x 2 sukunis dip  4096 Jun 23 14:05 .
+drwxr-xr-x 7 sukunis dip   137 Jun 23 13:14 ..
+-rw-r--r-- 1 sukunis dip  1467 Apr 30 08:59 Contents.m
+-rw-r--r-- 1 sukunis dip  1055 Apr 30 08:59 FFT_OUT_OF_PLACE.m
+-rw-r--r-- 1 sukunis dip  1001 Apr 30 08:59 FFTW_ESTIMATE.m
+-rw-r--r-- 1 sukunis dip   984 Apr 30 08:59 FFTW_MEASURE.m
+-rw-r--r-- 1 sukunis dip  1195 Apr 30 08:59 FG_PSI.m
+-rw-r--r-- 1 sukunis dip  1592 Apr 30 08:59 Makefile.am
+-rw-r--r-- 1 sukunis dip   982 Apr 30 08:59 nnfft_finalize.m
+-rw-r--r-- 1 sukunis dip  1024 Apr 30 08:59 nnfft_get_f_hat.m
+-rw-r--r-- 1 sukunis dip   995 Apr 30 08:59 nnfft_get_f.m
+-rw-r--r-- 1 sukunis dip  1058 Apr 30 08:59 nnfft_get_num_threads.m
+-rw-r--r-- 1 sukunis dip   985 Apr 30 08:59 nnfft_get_x.m
+-rw-r--r-- 1 sukunis dip   994 Apr 30 08:59 nnfft_init_1d.m
+-rw-r--r-- 1 sukunis dip  1496 Apr 30 08:59 nnfft_init_guru.m
+-rw-r--r-- 1 sukunis dip 10229 Apr 30 08:59 nnfft.m
+-rw-r--r-- 1 sukunis dip 13874 Apr 30 08:59 nnfftmex.c
+-rw-r--r-- 1 sukunis dip   951 Apr 30 08:59 nnfftmex.m
+-rw-r--r-- 1 sukunis dip  1029 Apr 30 08:59 nnfft_precompute_psi.m
+-rw-r--r-- 1 sukunis dip  1017 Apr 30 08:59 nnfft_set_f_hat.m
+-rw-r--r-- 1 sukunis dip   988 Apr 30 08:59 nnfft_set_f.m
+-rw-r--r-- 1 sukunis dip   978 Apr 30 08:59 nnfft_set_x.m
+-rw-r--r-- 1 sukunis dip   995 Apr 30 08:59 nnfft_trafo.m
+-rw-r--r-- 1 sukunis dip     0 Jun 23 14:05 out.txt
+-rw-r--r-- 1 sukunis dip  1261 Apr 30 08:59 PRE_FG_PSI.m
+-rw-r--r-- 1 sukunis dip  1207 Apr 30 08:59 PRE_FULL_PSI.m
+-rw-r--r-- 1 sukunis dip  1224 Apr 30 08:59 PRE_LIN_PSI.m
+-rw-r--r-- 1 sukunis dip  1157 Apr 30 08:59 PRE_PHI_HUT.m
+-rw-r--r-- 1 sukunis dip  1123 Apr 30 08:59 PRE_PSI.m
+-rw-r--r-- 1 sukunis dip  3189 Apr 30 08:59 simple_test.m
+-rw-r--r-- 1 sukunis dip  1963 Apr 30 08:59 test_nfft1d.m
diff --git a/matlab/nnfft/simple_test.m b/matlab/nnfft/simple_test.m
new file mode 100644
index 0000000..8c98d89
--- /dev/null
+++ b/matlab/nnfft/simple_test.m
@@ -0,0 +1,87 @@
+%SIMPLE_TEST Example program: Basic usage principles
+%
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, write to the Free Software Foundation, Inc., 51
+% Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% $Id: simple_test.m 3776 2012-06-03 13:29:25Z keiner $
+
+disp(sprintf('Number of threads: %d\n', nnfft_get_num_threads()));
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+disp('A simple one dimensional example');
+
+% maximum degree (bandwidth)
+N = 8;
+%N1=sigma*N;
+N_total=3;
+% number of nodes
+M = 17;
+ 
+% nodes
+x=rand(1,M)-0.5;
+%xi=N*(rand(1,N)-0.5);
+v=rand(1,N_total)-0.5;
+
+% Create plan.
+%plan=nnfft_init(1,N_total,M,N);
+plan=nnfft_init_guru(1,N_total,M,N,2*N,6,bitor(PRE_PSI,PRE_PHI_HUT));
+
+% Set nodes.
+nnfft_set_x(plan,x);
+nnfft_set_v(plan,v);
+
+
+% node-dependent precomputation
+nnfft_precompute_psi(plan);
+
+% Fourier coefficients
+f_hat = rand(N_total,1)+i*rand(N_total,1);
+
+% Set Fourier coefficients.
+nnfft_set_f_hat(plan,double(f_hat));
+
+% transform
+nnfft_trafo(plan);
+
+% function values
+f = nnfft_get_f(plan)
+
+% finalize plan
+%nnfft_finalize(plan);
+
+
+%%%%%%%%%%%%%%%%%%%%%
+
+nnfft_trafo_direct(plan);
+f2=nnfft_get_f(plan)
+% finalize plan
+nnfft_finalize(plan);
+%%%%%%%%%%%%%%%%%%%%%%%
+
+%A=exp(-2*pi*i*x'*(-N_total/2:N_total/2-1));
+A=exp(-2*pi*1i*x'*N*v);
+f3=A*f_hat
+
+disp('NNFFT vs NNDFT');
+error_vector=f-f2;
+error_linfl1=norm(f-f2,inf)/norm(f_hat,1)
+
+disp('NNFFT vs Direct');
+error_vector=f-f3;
+error_linfl1=norm(f-f3,inf)/norm(f_hat,1)
+
+
diff --git a/matlab/nfft/test_nfft1d.m b/matlab/nnfft/test_nfft1d.m
similarity index 96%
copy from matlab/nfft/test_nfft1d.m
copy to matlab/nnfft/test_nfft1d.m
index a7f04d0..22093cd 100644
--- a/matlab/nfft/test_nfft1d.m
+++ b/matlab/nnfft/test_nfft1d.m
@@ -1,5 +1,5 @@
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
diff --git a/matlab/nfft/test_nfft1d.m b/matlab/nnfft/test_nnfft1d.m
similarity index 59%
copy from matlab/nfft/test_nfft1d.m
copy to matlab/nnfft/test_nnfft1d.m
index a7f04d0..0076a60 100644
--- a/matlab/nfft/test_nfft1d.m
+++ b/matlab/nnfft/test_nnfft1d.m
@@ -1,5 +1,5 @@
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -19,17 +19,22 @@
 clear all;
 
 M=16; % number of nodes
-N=24; % number of Fourier coefficients in first direction
+N=8; % number of Fourier coefficients in first direction
+N1=2*N;
+N_total=8;
 
 x=rand(M,1)-0.5; %nodes
+v=rand(N_total,1)-0.5; %nodes
 
 % Initialisation
-plan=nfft(1,N,M); % create plan of class type nfft
-%n=2^(ceil(log(N)/log(2))+1);
-%plan=nfft(1,N,M,n,7,'PRE_PHI_HUT','FFTW_MEASURE'); % use of nfft_init_guru
+%plan=nnfft(1,N_total,M,N); % create plan of class type nfft
+
+plan=nnfft(1,N_total,M,N,N1,6,'PRE_PHI_HUT'); % use of nfft_init_guru
 
 plan.x=x; % set nodes in plan
-nfft_precompute_psi(plan); % precomputations
+plan.v=v;
+
+nnfft_precompute_psi(plan); % precomputations
 
 % NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -38,33 +43,16 @@ fhatv=fhat(:);
 
 % Compute samples with NFFT
 plan.fhat=fhatv; % set Fourier coefficients
-nfft_trafo(plan); % compute nonequispaced Fourier transform
+nnfft_trafo(plan); % compute nonequispaced Fourier transform
 f1=plan.f; % get samples
 
 % Compute samples direct
-k1=(-N/2:N/2-1).';
-f2=zeros(M,1);
-for j=1:M
-	x1j=x(j,1);
-	f2(j)=sum( fhatv.*exp(-2*pi*1i*k1*x1j) );
-end %for
+nnfft_trafo_direct(plan);
+f2=plan.f; 
 
 % Compare results
+disp('NNFFT vs NNDFT');
 max(abs(f1-f2))
 
-% Adjoint NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Computation with NFFT
-nfft_adjoint(plan);
-fhat1=plan.fhat;
 
-% Direct computation
-fhat2=zeros(N,1);
-for j=1:N
-	k1j=k1(j);
-	fhat2(j)=sum( plan.f.*exp(2*pi*1i*k1j*x(:,1)) );
-end %for
-
-% Compare results
-max(abs(fhat1-fhat2))
 
diff --git a/matlab/nfft/test_nfft1d.m b/matlab/nnfft/test_nnfft2d.m
similarity index 52%
copy from matlab/nfft/test_nfft1d.m
copy to matlab/nnfft/test_nnfft2d.m
index a7f04d0..abeaa2a 100644
--- a/matlab/nfft/test_nfft1d.m
+++ b/matlab/nnfft/test_nnfft2d.m
@@ -1,5 +1,5 @@
 
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -15,56 +15,48 @@
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 
-% Test script of class nfft for spatial dimension d=1.
+% Test script of class nnfft for spatial dimension d=2.
 clear all;
 
 M=16; % number of nodes
-N=24; % number of Fourier coefficients in first direction
+N_1=8; % number of Fourier coefficients in first direction
+N_2=8; % number of Fourier coefficients in second direction
+N=[N_1;N_2];
+N1_1=2*N_1;
+N1_2=2*N_2;
+N1=[N1_1;N1_2];
+N_total=N_1*N_2;
 
-x=rand(M,1)-0.5; %nodes
+x=rand(M,2)-0.5; %nodes
+v=rand(N_total,2)-0.5; %nodes
 
 % Initialisation
-plan=nfft(1,N,M); % create plan of class type nfft
-%n=2^(ceil(log(N)/log(2))+1);
-%plan=nfft(1,N,M,n,7,'PRE_PHI_HUT','FFTW_MEASURE'); % use of nfft_init_guru
+%plan=nnfft(2,N_total,M,N); % create plan of class type nnfft
+
+plan=nnfft(2,N_total,M,N,N1,N1,6,'PRE_PHI_HUT'); % use of nnfft_init_guru
 
 plan.x=x; % set nodes in plan
-nfft_precompute_psi(plan); % precomputations
+plan.v=v; % set nodes in plan
+nnfft_precompute_psi(plan); % precomputations
 
 % NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-fhat=rand(N,1); % Fourier coefficients
+fhat=rand(N_1,N_2); % Fourier coefficients
 fhatv=fhat(:);
 
-% Compute samples with NFFT
+% Compute samples with NNFFT
 plan.fhat=fhatv; % set Fourier coefficients
-nfft_trafo(plan); % compute nonequispaced Fourier transform
+nnfft_trafo(plan); % compute nonequispaced Fourier transform
 f1=plan.f; % get samples
 
 % Compute samples direct
-k1=(-N/2:N/2-1).';
-f2=zeros(M,1);
-for j=1:M
-	x1j=x(j,1);
-	f2(j)=sum( fhatv.*exp(-2*pi*1i*k1*x1j) );
-end %for
+nnfft_trafo_direct(plan);
+f2=plan.f; 
 
 % Compare results
+disp('NNFFT vs NNDFT');
 max(abs(f1-f2))
 
-% Adjoint NFFT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Computation with NFFT
-nfft_adjoint(plan);
-fhat1=plan.fhat;
 
-% Direct computation
-fhat2=zeros(N,1);
-for j=1:N
-	k1j=k1(j);
-	fhat2(j)=sum( plan.f.*exp(2*pi*1i*k1j*x(:,1)) );
-end %for
 
-% Compare results
-max(abs(fhat1-fhat2))
 
diff --git a/support/Makefile.in b/support/Makefile.in
deleted file mode 100644
index ec175a3..0000000
--- a/support/Makefile.in
+++ /dev/null
@@ -1,423 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3086 2009-03-11 07:36:56Z keiner $
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = support
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-EXTRA_DIST = rem.sed toc.sed
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu support/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu support/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-cscope cscopelist:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/examples/doxygen.c b/support/copyright.txt
similarity index 81%
copy from examples/doxygen.c
copy to support/copyright.txt
index f10e24e..eeeae38 100644
--- a/examples/doxygen.c
+++ b/support/copyright.txt
@@ -1,5 +1,4 @@
-/*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -14,10 +13,3 @@
  * You should have received a copy of the GNU General Public License along with
  * this program; if not, write to the Free Software Foundation, Inc., 51
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
-
-/**
- * \defgroup examples Examples
- */
diff --git a/support/copyright_m4.txt b/support/copyright_m4.txt
new file mode 100644
index 0000000..f15ef98
--- /dev/null
+++ b/support/copyright_m4.txt
@@ -0,0 +1,15 @@
+# Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/matlab/nfft/nfft_set_x.m b/support/copyright_matlab.txt
similarity index 72%
copy from matlab/nfft/nfft_set_x.m
copy to support/copyright_matlab.txt
index a0b810d..f451e70 100644
--- a/matlab/nfft/nfft_set_x.m
+++ b/support/copyright_matlab.txt
@@ -1,7 +1,4 @@
-%NFFT_SET_X Set nodes in plan
-%   Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
-
-% Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+% Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
 %
 % This program is free software; you can redistribute it and/or modify it under
 % the terms of the GNU General Public License as published by the Free Software
@@ -16,8 +13,3 @@
 % You should have received a copy of the GNU General Public License along with
 % this program; if not, write to the Free Software Foundation, Inc., 51
 % Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-%
-% $Id: nfft_set_x.m 3776 2012-06-03 13:29:25Z keiner $
-function nfft_set_x(p,x)
-
-nfftmex('set_x',p,x)
diff --git a/support/copyright_matlab_single_line.txt b/support/copyright_matlab_single_line.txt
new file mode 100644
index 0000000..2bd39e3
--- /dev/null
+++ b/support/copyright_matlab_single_line.txt
@@ -0,0 +1 @@
+%   Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
diff --git a/support/fpt.dox b/support/fpt.dox
new file mode 100644
index 0000000..4b026c4
--- /dev/null
+++ b/support/fpt.dox
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/**
+ * @defgroup fpt FPT - Fast polynomial transform
+ * @{
+ *
+ * This module implements fast polynomial transforms. In the following, we
+ * abbreviate the term "fast polynomial transforms" by FPT.
+ */
+
+/*! \fn fpt_set fpt_init(const int M, const int t, const unsigned int flags)
+ * Initializes a set of precomputed data for DPT transforms of equal length.
+ *
+ * \arg M The maximum DPT transform index \f$M \in \mathbb{N}_0\f$. The
+ *        individual transforms are addressed by and index number \f$m \in
+ *        \mathbb{N}_0\f$ with range \f$m = 0,\ldots,M\f$. The total number
+ *        of transforms is therefore \f$M+1\f$.
+ * \arg t The exponent \f$t \in \mathbb{N}, t \ge 2\f$ of the transform length
+ *        \f$N = 2^t \in \mathbb{N}, N \ge 4\f$
+ * \arg flags A bitwise combination of the flags FPT_NO_STABILIZATION,
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void fpt_precompute(fpt_set set, const int m, R *alpha, R *beta, R *gam, int k_start, const R threshold)
+ * Computes the data required for a single DPT transform.
+ *
+ * \arg set The set of DPT transform data where the computed data will be stored.
+ * \arg m The transform index \f$m \in \mathbb{N}, 0 \le m \le M\f$.
+ * \arg alpha The three-term recurrence coefficients \f$\alpha_k \in
+ *      \mathbb{R}\f$ for \f$k=0,\ldots,N\f$ such that \verbatim alpha[k]
+ *      \endverbatim \f$=\alpha_k\f$.
+ * \arg beta The three-term recurrence coefficients \f$\beta_k \in \mathbb{R}\f$
+ *            for \f$k=0,\ldots,N\f$ such that \verbatim beta[k] \endverbatim
+ *            \f$=\beta_k\f$.
+ * \arg gamma The three-term recurrence coefficients \f$\gamma_k \in
+ *            \mathbb{R}\f$ for \f$k=0,\ldots,N\f$ such that \verbatim gamma[k]
+ *            \endverbatim \f$=\gamma_k\f$.
+ * \arg k_start The index \f$k_{\text{start}} \in \mathbb{N}_0,
+ *              0 \le k_{\text{start}} \le N\f$
+ * \arg threshold The treshold \f$\kappa \in \mathbb{R}, \kappa > 0\f$.
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void fpt_direct_trafo(fpt_set set, const int m, const C *x, C *y, const int k_end, const unsigned int flags)
+ * Computes a single DPT transform.
+ *
+ * \arg set
+ * \arg m
+ * \arg x
+ * \arg y
+ * \arg k_end
+ * \arg flags
+ */
+
+/*! \fn void X(trafo)(X(set) set, const int m, const C *x, C *y, const int k_end, const unsigned int flags)
+ * Computes a single DPT transform.
+ *
+ * \arg set
+ * \arg m
+ * \arg x
+ * \arg y
+ * \arg k_end
+ * \arg flags
+ */
+
+/*! \fn void fpt_direct_transposed(fpt_set set, const int m, C *x, C *y, const int k_end, const unsigned int flags)
+ * Computes a single DPT transform.
+ *
+ * \arg set
+ * \arg m
+ * \arg x
+ * \arg y
+ * \arg k_end
+ * \arg flags
+ */
+
+/*! \fn void fpt_transposed(fpt_set set, const int m, C *x, C *y, const int k_end, const unsigned int flags)
+ * Computes a single DPT transform.
+ *
+ * \arg set
+ * \arg m
+ * \arg x
+ * \arg y
+ * \arg k_end
+ * \arg flags
+ */
+
+/** \def FPT_NO_FAST_ALGORITHM
+ *  If set, TODO complete comment.
+ */
+
+/** \def FPT_NO_DIRECT_ALGORITHM
+ *  If set, TODO complete comment.
+ */
+
+/** \def FPT_NO_STABILIZATION
+ *  If set, no stabilization will be used.
+ */
+
+/** \def FPT_PERSISTENT_DATA
+ *  If set, TODO complete comment.
+ */
+
+/** \def FPT_FUNCTION_VALUES
+ *  If set, the output are function values at Chebyshev nodes rather than 
+ *  Chebyshev coefficients.
+ */
+
+/** \def FPT_AL_SYMMETRY
+ *  If set, TODO complete comment.
+ */
+
+/** @}
+ */
diff --git a/support/mri.dox b/support/mri.dox
new file mode 100644
index 0000000..b7dd98e
--- /dev/null
+++ b/support/mri.dox
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/** @defgroup mri MRI - Transforms in magnetic resonance imaging
+ * @{
+ */
+
+/*! \struct mri_inh_2d1d_plan
+ * The structure for the transform plan.
+ */
+
+/*! \struct mri_inh_3d_plan
+ * The structure for the transform plan.
+ */
+
+/*! \fn mri_inh_2d1d_trafo(mri_inh_2d1d_plan *ths)
+ * Executes a mri transformation considering the field inhomogeneity with the 2d1d method,
+ * i.e. computes for \f$j=0,...,M_{total}-1\f$
+ * \f[
+ *   f(x_j) = \sum_{k \in I_N^2} \hat{f}(k) {\rm e}^{\mbox{\rm\scriptsize i} t_j \omega(k)}
+ *                      {\rm e}^{-2 \pi \mbox{\rm\scriptsize i} k x_j}
+ * \f]
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn mri_inh_2d1d_adjoint)(X(inh_2d1d_plan) *ths)
+ * Executes an adjoint mri transformation considering the field inhomogeneity with the 2d1d method,
+ * i.e. computes for \f$k \in I_N^2\f$
+ * \f[
+ *   \hat{f}(k) = \sum_{j=0}^{M_{total}-1} f(x_j) {\rm e}^{\mbox{\rm\scriptsize i} t_j \omega(k)}
+ *                      {\rm e}^{-2 \pi \mbox{\rm\scriptsize i} k x_j}
+ * \f]
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn void mri_inh_2d1d_init_guru(mri_inh_2d1d_plan *ths, int *N, int M, int *n, int m, R sigma, unsigned nfft_flags, unsigned fftw_flags); \
+ * 
+ * Creates a transform plan.
+ *
+ * \arg ths_plan The plan for the transform
+ * \arg N The bandwidth \f$N\f$
+ * \arg M_total The number of nodes \f$x\f$
+ * \arg n The oversampled bandwidth \f$N\f$
+ * \arg m The cut-off parameter
+ * \arg sigma The oversampling factor
+ * \arg nnfft_flags The flags
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn mri_inh_2d1d_finalize(mri_inh_2d1d_plan *ths)
+ * Destroys a plan.
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn mri_inh_3d_trafo(mri_inh_3d_plan *ths)
+ * Executes a mri transformation considering the field inhomogeneity with the 3d method,
+ * i.e. computes for \f$j=0,...,M_{total}-1\f$
+ * \f[
+ *   f(x_j) = \sum_{k \in I_N^2} \hat{f}(k) {\rm e}^{\mbox{\rm\scriptsize i} t_j \omega(k)}
+ *                      {\rm e}^{-2 \pi \mbox{\rm\scriptsize i} k x_j}
+ * \f]
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn mri_inh_3d_adjoint(mri_inh_3d_plan *ths)
+ * Executes an adjoint mri transformation considering the field inhomogeneity with the 3d method,
+ * i.e. computes for \f$k \in I_N^2\f$
+ * \f[
+ *   \hat{f}(k) = \sum_{j=0}^{M_{total}-1} f(x_j) {\rm e}^{\mbox{\rm\scriptsize i} t_j \omega(k)}
+ *                      {\rm e}^{-2 \pi \mbox{\rm\scriptsize i} k x_j}
+ * \f]
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn mri_inh_3d_finalize(mri_inh_3d_plan *ths)
+ * Destroys a plan.
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/** @}
+ */
diff --git a/support/nfct.dox b/support/nfct.dox
new file mode 100644
index 0000000..c8bb878
--- /dev/null
+++ b/support/nfct.dox
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/** @defgroup nfct NFCT - Nonequispaced fast cosine transform
+ * Direct and fast computation of the discrete nonequispaced cosine
+ * transform.
+ * @{
+ */
+
+/*! \struct nfct_plan
+ * NFCT transform plan 
+ */
+
+ /*! \fn void nfct_init_1d(nfct_plan *ths_plan, int N0, int M_total)
+  * Creates a 1-dimensional transform plan.
+  *
+  * \arg ths_plan The plan for the transform
+  * \arg N0 The bandwidth \f$N\f$
+  * \arg M_total The number of nodes \f$x\f$
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn void nfct_init_2d(nfct_plan *ths_plan, int N0, int N1, int M_total)
+  * Creates a 3-dimensional transform plan.
+  *
+  * \arg ths_plan The plan for the transform
+  * \arg N0 The bandwidth of dimension 1
+  * \arg N1 The bandwidth of dimension 2
+  * \arg M_total The number of nodes \f$x\f$
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn void nfct_init_3d(nfct_plan *ths_plan, int N0, int N1, int N2, int M_total)
+  * Creates a 3-dimensional transform plan.
+  *
+  * \arg ths_plan The plan for the transform
+  * \arg N0 The bandwidth of dimension 1
+  * \arg N1 The bandwidth of dimension 2
+  * \arg N2 The bandwidth of dimension 3
+  * \arg M_total The number of nodes \f$x\f$
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn void nfct_init(nfct_plan *ths_plan, int d, int *N, int M_total)
+  * Creates a d-dimensional transform plan.
+  *
+  * \arg ths_plan The plan for the transform
+  * \arg d the dimension
+  * \arg N The bandwidths
+  * \arg M_total The number of nodes \f$x\f$
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn void nfftinit_guru(nfct_plan *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned flags, unsigned fftw_flags)
+  * Creates a d-dimensional transform plan.
+  *
+  * \arg ths_plan The plan for the transform
+  * \arg d the dimension
+  * \arg N The bandwidths
+  * \arg M_total The number of nodes \f$x\f$
+  * \arg n The oversampled bandwidths
+  * \arg m The cut-off parameter
+  * \arg flags The flags known to nfct
+  * \arg fftw_flags The flags known to fftw
+  *
+  * \author Steffen Klatt
+  */
+
+  /*! \fn void nfct_precompute_psi(nfct_plan *ths_plan)
+   * precomputes the values psi
+   * if the PRE_PSI is set the application program has to call this routine
+   * after setting the nodes this_plan->x
+   *
+   * \arg ths_plan The plan for the transform
+   *
+   * \author Steffen Klatt
+   */
+
+ /*! \fn void nfct_trafo(nfct_plan *ths_plan)
+  * executes a NFCT (approximate,fast), computes for \f$j=0,...,M\_total-1\f$
+  * \f$f_j^C(x_j) = \sum_{k \in I_0^{N,d}} \hat{f}_k^C * cos(2 \pi k x_j)\f$
+  *
+  * \arg ths_plan The plan for the transform
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn void nfct_direct_trafo(nfct_plan *ths_plan)
+  * executes a NDCT (exact,slow), computes for \f$j=0,...,M\_total-1\f$
+  * \f$f_j^C(x_j) = \sum_{k \in I_0^{N,d}} \hat{f}_k^C * cos(2 \pi k x_j)\f$
+  *
+  * \arg ths_plan The plan for the transform
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn void nfct_adjoint(nfct_plan *ths_plan)
+  * executes a transposed NFCT (approximate,fast), computes for \f$k \in I_0^{N,d}\f$
+  * \f$h^C(k) = \sum_{j \in I_0^{(M\_total,1)}} f_j^C * cos(2 \pi k x_j)\f$
+  *
+  * \arg ths_plan The plan for the transform
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn nfct_direct_adjoint(nfct_plan *ths_plan)
+  * executes a direct transposed NDCT (exact,slow), computes for \f$k \in I_0^{N,d}\f$
+  * \f$h^C(k) = \sum_{j \in I_0^{(M\_total,1)}} f_j^C * cos(2 \pi k x_j)\f$
+  *
+  * \arg ths_plan The plan for the transform
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn void nfct_finalize(nfct_plan *ths_plan)
+  * Destroys a plan.
+  *
+  * \arg ths_plan The plan for the transform
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn R nfct_phi_hut(nfct_plan *ths_plan, int k, int d)
+  * do some adjustments (N,n) then compute PHI_HUT
+  *
+  * \arg ths_plan the plan for the transform
+  * \arg k        index of c_phi
+  * \arg d        dimension
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn R nfct_phi(nfct_plan *ths_plan, R x, int d)
+  * do some adjustments (N,n) then compute PHI
+  *
+  * \arg ths_plan the plan for the transform
+  * \arg x        node \f$x\f$
+  * \arg d        dimension
+  *
+  * \author Steffen Klatt
+  */
+
+/*! \fn int nfct_fftw_2N(int n)
+  * returns 2(n-1),  fftw related issue
+  *
+  * \arg n       i.e. length of dct-1
+  *
+  * \author Steffen Klatt
+  */
+
+ /*! \fn int nfct_fftw_2N_rev(int n)
+  * returns 0.5n+1,  fftw related issue
+  *
+  * \arg n       i.e. length of dct-1
+  *
+  * \author Steffen Klatt
+  */
+
+/** @}
+ */
diff --git a/support/nfft.dox b/support/nfft.dox
new file mode 100644
index 0000000..f904275
--- /dev/null
+++ b/support/nfft.dox
@@ -0,0 +1,370 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/*! \file nfft3.h
+ *  \brief Header file for the nfft3 library.
+ */
+
+/*! \def MACRO_MV_PLAN(RC)
+ *  Macros for public members inherited by all plan structures. 
+ *  */
+
+/**
+ * @defgroup nfft NFFT - Nonequispaced fast Fourier transform
+ * Direct and fast computation of the nonequispaced discrete Fourier transform.
+ * @{
+ *
+ * This module implements the nonequispaced fast Fourier transforms.
+ * In the following, we abbreviate the term "nonequispaced fast Fourier
+ * transform" by NFFT.
+ *
+ * We introduce our notation and nomenclature for discrete Fourier transforms.
+ * Let the torus
+ * \f[
+ *   \mathbb{T}^d
+ *    := \left\{ \mathbf{x}=\left(x_t\right)_{t=0,\hdots,d-1}\in\mathbb{R}^{d}:
+ *    \; - \frac{1}{2} \le x_t < \frac{1}{2},\; t=0,\hdots,d-1 \right\}
+ * \f]
+ * of dimension \f$d\f$ be given.
+ * It will serve as domain from which the nonequispaced nodes \f$\mathbf{x}\f$
+ * are taken.
+ * The sampling set is given by \f${\cal X}:=\{\mathbf{x}_j \in {\mathbb T}^d:
+ * \,j=0,\hdots,M-1\}\f$.
+ * Possible frequencies \f$\mathbf{k}\f$ are collected in the multi index set
+ * \f[
+ *   I_{\mathbf{N}} := \left\{ \mathbf{k}=\left(k_t\right)_{t=0,\hdots,d-1}\in
+ *   \mathbb{Z}^d: - \frac{N_t}{2} \le k_t < \frac{N_t}{2} ,\;t=0,\hdots,d-1
+ * \right\}.
+ * \f]
+ *
+ * Our concern is the computation of the
+ * \e nonequispaced discrete Fourier transform \e (NDFT) \anchor ndft_formula
+ * \f[
+ * f_j = \sum_{\mathbf{k}\in I_{\mathbf{N}}}
+ * \hat{f}_{\mathbf{k}} {\rm e}^{-2\pi{\rm i} \mathbf{k}\mathbf{x}_j}, \qquad
+ * j=0,\hdots,M-1.
+ * \f]
+ * The corresponding adjoint NDFT is the computation of
+ * \f[
+ *   \hat f_{\mathbf{k}}=\sum_{j=0}^{M-1} f_j {\rm e}^{+2\pi{\rm i}
+ *    \mathbf{k}\mathbf{x}_j}, \qquad \mathbf{k}\in I_{\mathbf{N}}.
+ * \f]
+ * Direct implementations are given by \ref nfft_direct_trafo and \ref nfft_direct_adjoint
+ * taking \f${\cal O}(|I_{\mathbf{N}}|M)\f$ floating point operations.
+ * Approximative realisations take only
+ * \f${\cal O}(|I_{\mathbf{N}}|\log|I_{\mathbf{N}}|+M)\f$ floating point operations.
+ * These are provided by \ref nfft_trafo and \ref nfft_adjoint, respectively.
+ */
+
+/*! \struct nfft_plan 
+ * NFFT transform plan 
+ */
+
+/*! \fn void nfft_direct_trafo(nfft_plan *ths)
+ * Computes an NDFT, see the \ref ndft_formula "definition".
+ *
+ * \arg ths The pointer to a nfft plan
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void nfft_direct_adjoint(nfft_plan *ths)
+ * Computes an adjoint NDFT, see the \ref ndftH_formula "definition".
+ *
+ * \arg ths The pointer to a nfft plan
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void nfft_trafo(nfft_plan *ths)
+ * Computes a NFFT, see the \ref ndft_formula "definition".
+ *
+ * \arg ths The pointer to a nfft plan
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void nfft_adjoint(nfft_plan *ths)
+ * Computes an adjoint NFFT, see the \ref ndftH_formula "definition".
+ *
+ * \arg ths The pointer to a nfft plan
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void nfft_init_1d(nfft_plan *ths, int N1, int M)
+ * Initialisation of a transform plan, wrapper d=1.
+ *
+ * \arg ths The pointer to a nfft plan
+ * \arg N1 bandwidth
+ * \arg M The number of nodes
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void nfft_init_2d(nfft_plan *ths, int N1, int N2, int M)
+ * Initialisation of a transform plan, wrapper d=2.
+ *
+ * \arg ths The pointer to a nfft plan
+ * \arg N1 bandwidth
+ * \arg N2 bandwidth
+ * \arg M The number of nodes
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void nfft_init_3d(nfft_plan *ths, int N1, int N2, int N3, int M)
+ * Initialisation of a transform plan, wrapper d=3.
+ *
+ * \arg ths The pointer to a nfft plan
+ * \arg N1 bandwidth
+ * \arg N2 bandwidth
+ * \arg N3 bandwidth
+ * \arg M The number of nodes
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void nfft_init(nfft_plan *ths, int d, int *N, int M)
+ * Initialisation of a transform plan, simple.
+ *
+ * \arg ths The pointer to a nfft plan
+ * \arg d The dimension
+ * \arg N The multi bandwidth
+ * \arg M The number of nodes
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void nfft_init_advanced(nfft_plan *ths, int d, int *N, int M, unsigned flags_on, unsigned flags_off)
+ * Initialisation of a transform plan, advanced.
+ * NOT YET IMPLEMENTED!!
+ *
+ * \arg ths The pointer to a nfft plan
+ * \arg d The dimension
+ * \arg N The multi bandwidth
+ * \arg M The number of nodes
+ * \arg flags_on NFFT flags to switch on
+ * \arg flags_off NFFT flags to switch off
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void X(init_guru)(X(plan) *ths, int d, int *N, int M, int *n, int m, unsigned flags, unsigned fftw_flags)
+ * Initialisation of a transform plan, guru.
+ *
+ * \arg ths The pointer to a nfft plan
+ * \arg d The dimension
+ * \arg N The multi bandwidth
+ * \arg M The number of nodes
+ * \arg n The oversampled multi bandwidth
+ * \arg m The spatial cut-off
+ * \arg flags NFFT flags to use
+ * \arg fftw_flags_off FFTW flags to use
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void nfft_precompute_one_psi(nfft_plan *ths)
+ * Precomputation for a transform plan.
+ *
+ * \arg ths The pointer to a nfft plan
+ *
+ * \author Stefan Kunis
+ *
+ * wrapper for precompute*_psi
+ *
+ * if PRE_*_PSI is set the application program has to call this routine
+ * (after) setting the nodes x
+ */
+
+/*! \fn void nfft_precompute_full_psi(nfft_plan *ths)
+ * Superceded by nfft_precompute_one_psi.
+ * \author Stefan Kunis
+ */
+
+/*! \fn void nfft_precompute_psi(nfft_plan *ths)
+ * Superceded by nfft_precompute_one_psi.
+ * \author Stefan Kunis
+ */
+
+/*! \fn void nfft_precompute_lin_psi(nfft_plan *ths)
+ * Superceded by nfft_precompute_one_psi.
+ * \author Stefan Kunis
+ */
+
+/*! \fn void nfft_check(nfft_plan *ths)
+ * Checks a transform plan for frequently used bad parameter.
+ *
+ * \arg ths The pointer to a nfft plan
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \fn void nfft_finalize(nfft_plan *ths)
+ * Destroys a transform plan.
+ *
+ * \arg ths The pointer to a nfft plan
+ *
+ * \author Stefan Kunis, Daniel Potts
+ */
+
+/*! \def PRE_PHI_HUT
+ * If this flag is set, the deconvolution step (the multiplication with the
+ * diagonal matrix \f$\mathbf{D}\f$) uses precomputed values of the Fourier
+ * transformed window function.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \author Stefan Kunis
+ */
+
+/*! \def FG_PSI
+ * If this flag is set, the convolution step (the multiplication with the
+ * sparse matrix \f$\mathbf{B}\f$) uses particular properties of the Gaussian
+ * window function to trade multiplications for direct calls to exponential
+ * function.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \author Stefan Kunis
+ */
+
+/*! \def PRE_LIN_PSI
+ * If this flag is set, the convolution step (the multiplication with the
+ * sparse matrix \f$\mathbf{B}\f$) uses linear interpolation from a lookup
+ * table of equispaced samples of the window function instead of exact values
+ * of the window function.
+ * At the moment a table of size \f$(K+1)d\f$ is used, where
+ * \f$K=2^{10}(m+1)\f$.
+ * An estimate for the size of the lookup table with respect to the target
+ * accuracy should be implemented.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \author Stefan Kunis
+ */
+
+/*! \def PRE_FG_PSI
+ * If this flag is set, the convolution step (the multiplication with the
+ * sparse matrix \f$\mathbf{B}\f$) uses particular properties of the Gaussian
+ * window function to trade multiplications for direct calls to exponential
+ * function (the remaining \f$2dM\f$ direct calls are precomputed).
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \author Stefan Kunis
+ */
+
+/*! \def PRE_PSI
+ * If this flag is set, the convolution step (the multiplication with the
+ * sparse matrix \f$\mathbf{B}\f$) uses \f$(2m+2)dM\f$ precomputed values of
+ * the window function.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \author Stefan Kunis
+ */
+
+/*! \def PRE_FULL_PSI
+ * If this flag is set, the convolution step (the multiplication with the
+ * sparse matrix \f$\mathbf{B}\f$) uses \f$(2m+2)^dM\f$ precomputed values of
+ * the window function, in addition indices of source and target vectors are
+ * stored.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \author Stefan Kunis
+ */
+
+/*! \def MALLOC_X
+ * If this flag is set, (de)allocation of the node vector is done.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \see nfft_finalize
+ * \author Stefan Kunis
+ */
+
+/*! \def MALLOC_F_HAT
+ * If this flag is set, (de)allocation of the vector of Fourier coefficients is
+ * done.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \see nfft_finalize
+ * \author Stefan Kunis
+ */
+
+/*! \def MALLOC_F
+ * If this flag is set, (de)allocation of the vector of samples is done.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \see nfft_finalize
+ * \author Stefan Kunis
+ */
+
+/*! \def FFT_OUT_OF_PLACE
+ * If this flag is set, FFTW uses disjoint input/output vectors.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \see nfft_finalize
+ * \author Stefan Kunis
+ */
+
+/*! \def FFTW_INIT
+ * If this flag is set, fftw_init/fftw_finalize is called.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \see nfft_finalize
+ * \author Stefan Kunis
+ */
+
+/*! \def PRE_ONE_PSI
+ * Summarises if precomputation is used within the convolution step (the
+ * multiplication with the sparse matrix \f$\mathbf{B}\f$).
+ * If testing against this flag is positive, \ref nfft_precompute_one_psi has
+ * to be called.
+ *
+ * \see nfft_init
+ * \see nfft_init_advanced
+ * \see nfft_init_guru
+ * \see nfft_precompute_one_psi
+ * \see nfft_finalize
+ * \author Stefan Kunis
+ */
+
+
+/** @}
+ */
diff --git a/support/nfsft.dox b/support/nfsft.dox
new file mode 100644
index 0000000..8f2ea20
--- /dev/null
+++ b/support/nfsft.dox
@@ -0,0 +1,580 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/**
+ * @defgroup nfsft NFSFT - Nonequispaced fast spherical Fourier transform
+ * @{
+ *
+ * This module implements nonuniform fast spherical Fourier transforms. In the
+ * following, we abbreviate the term "nonuniform fast spherical Fourier
+ * transform" by NFSFT.
+ *
+ * \section Preliminaries
+ * This section summarises basic definitions and properties related to spherical
+ * Fourier transforms.
+ *
+ * \subsection sc Spherical Coordinates
+ * Every point in \f$\mathbb{R}^3\f$ can be described in \e spherical \e
+ * coordinates by a vector \f$(r,\vartheta,\varphi)^{\mathrm{T}}\f$ with the
+ * radius \f$r \in \mathbb{R}^{+}\f$ and two angles \f$\vartheta \in [0,\pi]\f$,
+ * \f$\varphi \in [-\pi,\pi)\f$.
+ * We denote by \f$\mathbb{S}^2\f$ the two-dimensional unit sphere embedded
+ * into \f$\mathbb{R}^3\f$, i.e.
+ * \f[
+ *   \mathbb{S}^2 := \left\{\mathbf{x} \in \mathbb{R}^{3}:\;
+ *   \|\mathbf{x}\|_2=1\right\}
+ * \f]
+ * and identify a point from \f$\mathbb{S}^2\f$ with the corresponding vector
+ * \f$(\vartheta,\varphi)^{\mathrm{T}}\f$. The
+ * spherical coordinate system is illustrated in the following figure:
+ * \image html sphere.png ""
+ * \image latex sphere.pdf "" width=0.45\textwidth
+ * For consistency with the other modules and the conventions used there, we
+ * also use \e swapped \e scaled \e spherical \e coordinates \f$x_1 :=
+ * \frac{\varphi}{2\pi}\f$, \f$x_2 := \frac{\vartheta}{2\pi}\f$ and identify a
+ * point from \f$\mathbb{S}^2\f$ with the vector
+ * \f$\mathbf{x} := \left(x_1,x_2\right) \in
+ *  [-\frac{1}{2}, \frac{1}{2}) \times [0,\frac{1}{2}]\f$.
+ *
+ * \subsection lp Legendre Polynomials
+ * The \e Legendre \e polynomials \f$P_k : [-1,1]
+ * \rightarrow \mathbb{R}$, $k \in \mathbb{N}_{0}\f$ as \e classical \e
+ * orthogonal \e polynomials are given by their corresponding \e Rodrigues \e
+ * formula
+ * \f[
+ *   P_k(t) := \frac{1}{2^k k!} \frac{\text{d}^k}{\text{d} t^k}
+ *   \left(t^2-1\right)^k.
+ * \f]
+ * The corresponding three-term recurrence relation is
+ * \f[
+ *   (k+1)P_{k+1}(t) = (2k+1) x P_{k}(t) - k P_{k-1}(t) \quad (k \in
+ *   \mathbb{N}_0).
+ * \f]
+ * With
+ * \f[
+ *   \left< f,g \right>_{\text{L}^2\left([-1,1]\right)} :=
+ *   \int_{-1}^{1} f(t) g(t) \text{d} t
+ * \f]
+ * being the usual \f$\text{L}^2\left([-1,1]\right)\f$ inner product,
+ * the Legendre polynomials obey the orthogonality condition
+ * \f[
+ *   \left< P_k,P_l \right>_{\text{L}^2\left([-1,1]\right)} = \frac{2}{2k+1}
+ *   \delta_{k,l}.
+ * \f]
+ *
+ * \remark The normalisation constant \f$ c_k := \sqrt{\frac{2k+1}{2}}\f$
+ * renders the scaled Legendre polynomials \f$c_k P_k\f$ orthonormal with
+ * respect to the induced \f$\text{L}^2\left([-1,1]\right)\f$ norm
+ * \f[
+ *   \|f\|_{\text{L}^2\left([-1,1]\right)} :=
+ *   \left(<f,f>_{\text{L}^2\left([-1,1]\right)}\right)^{1/2} =
+ *   \left(\int_{-1}^{1} |f(t)|^2 \; \text{d} t\right)^{1/2}.
+ * \f]
+ *
+ * \subsection alf Associated Legendre Functions
+ * The \a associated \a Legendre \a functions \f$P_k^n : [-1,1] \rightarrow
+ * \mathbb{R} \f$, \f$n \in \mathbb{N}_0\f$, \f$k \ge n\f$ are defined by
+ * \f[
+ *   P_k^n(t) := \left(\frac{(k-n)!}{(k+n)!}\right)^{1/2}
+ *   \left(1-t^2\right)^{n/2} \frac{\text{d}^n}{\text{d} t^n} P_k(t).
+ * \f]
+ * For \f$n = 0\f$, they coincide with the Legendre polynomials, i.e.
+ * \f$P_k^0 = P_k\f$.
+ * The associated Legendre functions obey the three-term recurrence relation
+ * \f[
+ *   P_{k+1}^n(t) = v_{k}^n t P_k^n(t) + w_{k}^n P_{k-1}^n(t) \quad (k \ge n),
+ * \f]
+ * with \f$P_{n-1}^n(t) := 0\f$, \f$P_{n}^n(t) := \frac{\sqrt{(2n)!}}{2^n n!}
+ * \left(1-t^2\right)^{n/2}\f$, and
+ * \f[
+ *   v_{k}^n := \frac{2k+1}{((k-n+1)(k+n+1))^{1/2}}\; ,\qquad
+ *   w_{k}^n := - \frac{((k-n)(k+n))^{1/2}}{((k-n+1)(k+n+1))^{1/2}}.
+ * \f]
+ * For fixed \f$n\f$, the set \f$\left\{P_k^n:\: k
+ * \ge n\right\}\f$ forms a complete set of orthogonal functions in
+ * \f$\text{L}^2\left([-1,1]\right)\f$
+ * with
+ * \f[
+ *   \left< P_k^n,P_l^n \right>_{\text{L}^2\left([-1,1]\right)} = \frac{2}{2k+1}
+ *   \delta_{k,l} \quad (0 \le n \le k,l).
+ * \f]
+ *
+ * \remark The normalisation constant \f$ c_k = \sqrt{\frac{2k+1}{2}}\f$
+ * renders the scaled associated Legendre functions \f$c_k P_k^n\f$ orthonormal
+ * with respect to the induced \f$\text{L}^2\left([-1,1]\right)\f$ norm
+ * \f[
+ *   \|f\|_{\text{L}^2\left([-1,1]\right)} :=
+ *   \left(<f,f>_{\text{L}^2\left([-1,1]\right)}\right)^{1/2} =
+ *   \left(\int_{-1}^{1} |f(t)|^2 \; \text{d} t\right)^{1/2}.
+ * \f]
+ *
+ * \subsection sh Spherical Harmonics
+ * The standard orthogonal basis of spherical harmonics for \f$\text{L}^2
+ * \left(\mathbb{S}^2\right)\f$ with yet unnormalised basis functions
+ * \f$\tilde{Y}_k^n : \mathbb{S}^2 \rightarrow \mathbb{C}\f$ is given by
+ * \f[
+ *   \tilde{Y}_k^n(\vartheta,\varphi) := P_k^{|n|}(\cos\vartheta)
+ *   \mathrm{e}^{\mathrm{i} n \varphi}
+ * \f]
+ * with the usual \f$\text{L}^2\left(\mathbb{S}^2\right)\f$ inner product
+ * \f[
+ *   \left< f,g \right>_{\mathrm{L}^2\left(\mathbb{S}^2\right)} :=
+ *   \int_{\mathbb{S}^2} f(\vartheta,\varphi) \overline{g(\vartheta,\varphi)}
+ *   \: \mathrm{d} \mathbf{\xi} := \int_{-\pi}^{\pi} \int_{0}^{\pi}
+ *   f(\vartheta,\varphi) \overline{g(\vartheta,\varphi)} \sin \vartheta
+ *   \; \mathrm{d} \vartheta \; \mathrm{d} \varphi.
+ * \f]
+ * The normalisation constant \f$c_k^n := \sqrt{\frac{2k+1}{4\pi}}\f$ renders
+ * the  scaled basis functions
+ * \f[
+ *   Y_k^n(\vartheta,\varphi) := c_k^n P_k^{|n|}(\cos\vartheta)
+ *   \mathrm{e}^{\mathrm{i} n \varphi}
+ * \f]
+ * orthonormal with respect to the induced \f$\text{L}^2\left(\mathbb{S}^2
+ * \right)\f$ norm
+ * \f[
+ *   \|f\|_{\text{L}^2\left(\mathbb{S}^2\right)} =
+ *   \left(<f,f>_{\text{L}^2\left(\mathbb{S}^2\right)}\right)^{1/2} =
+ *   \left(\int_{-\pi}^{\pi} \int_{0}^{\pi} |f(\vartheta,\varphi)|^2 \sin
+ *   \vartheta \; \mathrm{d} \vartheta \; \mathrm{d} \varphi\right)^{1/2}.
+ * \f]
+ * A function \f$f \in \mathrm{L}^2\left(\mathbb{S}^2\right)\f$ has the
+ * orthogonal expansion
+ * \f[
+ *   f = \sum_{k=0}^{\infty} \sum_{n=-k}^{k} \hat{f}(k,n) Y_k^n,
+ * \f]
+ * where the coefficients \f$\hat{f}(k,n) := \left< f, Y_k^{n}
+ * \right>_{\mathrm{L}^2\left(\mathbb{S}^2\right)}\f$ are the \e spherical
+ * \e Fourier \e coefficients and the equivalence is understood in the
+ * \f$\mathrm{L}^2\f$-sense.
+ *
+ *
+ * \section nfsfts Nonuniform Fast Spherical Fourier Transforms
+ *
+ * This section describes the input and output relation of the spherical
+ * Fourier transform algorithms and the layout of the corresponding plan
+ * structure.
+ *
+ * \subsection ndsft Nonuniform Discrete Spherical Fourier Transform
+ * The \e nonuniform \e discrete \e spherical \e Fourier \e transform (\e NDSFT)
+ * is defined as follows:
+ * \f[
+ *     \begin{array}{rcl}
+ *       \text{\textbf{Input}} & : & \text{coefficients }
+ *         \hat{f}(k,n) \in \mathbb{C} \text{ for } k=0,\ldots,N,\;n=-k,
+ *         \ldots,k,\; N \in \mathbb{N}_0,\\[1ex]
+ *                             &   & \text{arbitrary nodes } \mathbf{x}(m) \in
+ *         [-\frac{1}{2},\frac{1}{2}] \times [0,\frac{1}{2}]
+ *         \text{ for } m=0,\ldots,M-1, M \in \mathbb{N}. \\[1ex]
+ *       \text{\textbf{Task}}  & : & \text{evaluate } f(m) := f\left(
+ *       \mathbf{x}(m)\right) = \sum_{k=0}^N \sum_{n=-k}^k \hat{f}_k^n
+ *         Y_k^n\left(\mathbf{x}(m)\right) \text{ for } m=0,\ldots,M-1.
+ *         \\[1ex]
+ *       \text{\textbf{Output}} & : & \text{coefficients } f(m) \in
+ *         \mathbb{C} \text{ for } m=0,\ldots,M-1.\\
+ *     \end{array}
+ * \f]
+ *
+ * \subsection andsft Adjoint Nonuniform Discrete Spherical Fourier Transform
+ * The \e adjoint \e nonuniform \e discrete \e spherical \e Fourier \e transform
+ * (\e adjoint \e NDSFT)
+ * is defined as follows:
+ * \f[
+ *     \begin{array}{rcl}
+ *       \text{\textbf{Input}} & : & \text{coefficients } f(m) \in
+ *         \mathbb{C} \text{ for } m=0,\ldots,M-1, M \in \mathbb{N},\\
+ *                             &   & \text{arbitrary nodes } \mathbf{x}(m) \in
+ *         [-\frac{1}{2},\frac{1}{2}] \times [0,\frac{1}{2}] \text{ for }
+ *         m=0,\ldots,M-1, N \in \mathbb{N}_0.\\[1ex]
+ *       \text{\textbf{Task}}  & : & \text{evaluate } \hat{f}(k,n)
+ *         := \sum_{m=0}^{M-1} f(m) \overline{Y_k^n\left(\mathbf{x}(m)\right)}cd Do
+ *         \text{ for } k=0,\ldots,N,\;n=-k,\ldots,k.\\[1ex]
+ *       \text{\textbf{Output}} & : & \text{coefficients }
+ *         \hat{f}(k,n) \in \mathbb{C} \text{ for }
+ *         k=0,\ldots,N,\;n=-k,\ldots,k.\\[1ex]
+ *     \end{array}
+ * \f]
+ *
+ * \subsection dl Data Layout
+ * This section describes the public  layout of the \ref nfsft_plan structure
+ * which
+ * contains all data for the computation of the aforementioned spherical Fourier
+ * transforms. The structure contains private (no read or write allowed), public
+ * read-only (only
+ * read access permitted), and public read-write (read and write access allowed)
+ * members. In the following, we indicate read and write access by \c read and
+ * \c write. The public members are structured as follows:
+ * \li \c N_total (\c read)
+ *        The total number of components in \c f_hat. If the bandwidth is
+ *        \f$N \in \mathbb{N}_0\f$, the total number of components in \c f_hat
+ *        is \c N_total \f$ = (2N+2)^2\f$.
+ * \li \c M_total (\c read)
+ *        the total number of samples \f$M\f$
+ * \li \c f_hat (\c read-write)
+ *        The flattened array of spherical Fourier coefficents. The array
+ *        has length \f$(2N+2)^2\f$ such that valid indices \f$i \in
+ *        \mathbb{N}_0\f$ for array access \c f_hat \c[ \f$i\f$ \c] are
+ *        \f$i=0,1,\ldots,(2N+2)^2-1\f$.
+ *        However, only read and write access to indices corresponding to
+ *        spherical Fourier coefficients \f$\hat{f}(k,n)\f$ is defined. The index
+ *        \f$i\f$ corresponding to the spherical Fourier coefficient
+ *        \f$\hat{f}(k,n)\f$ with \f$0 \le k \le M\f$, \f$-k \le n \le k\f$ is
+ *        \f$i = (N+2)(N-n+1)+N+k+1\f$. For convenience, the helper macro
+ *        \ref NFSFT_INDEX(k,n) provides the necessary index calculations such
+ *        that
+ *        one can write \c f_hat[ \c NFSFT_INDEX(\f$k,n\f$\c)] \c =
+ *        \c ... to access
+ *        the component corresponding to \f$\hat{f}(k,n)\f$.
+ *        The data layout is due to implementation details.
+ * \li \c f (\c read-write)
+ *        the array of coefficients \f$f(m)\f$ for \f$m=0,\ldots,M-1\f$ such
+ *        that \c f[\f$m\f$\c] = \f$f(m)\f$
+ * \li \c N (\c read)
+ *        the bandwidth \f$N \in \mathbb{N}_0\f$
+ * \li \c x
+ *        the array of nodes \f$\mathbf{x}(m) \in
+ *        [-\frac{1}{2},\frac{1}{2}] \times [0,\frac{1}{2}]\f$ for \f$m = 0,
+ *        \ldots,M-1\f$ such that \c f[\f$2m\f$\c] = \f$x_1\f$ and
+ *        \c f[\f$2m+1\f$\c] = \f$x_2\f$
+ *
+ * \subsection gtn Good to know...
+ * When using the routines of this module you should bear in mind the following:
+ * \li The bandwidth \f$N_{\text{max}}\f$ up to which precomputation is
+ *   performed is always chosen as the next power of two with respect to the
+ *   specified maximum bandwidth.
+ * \li By default, the NDSFT transforms (see \ref nfsft_direct_trafo, \ref nfsft_trafo)
+ *   are allowed to destroy the input \c f_hat while the input \c x is
+ *   preserved. On the contrary, the adjoint NDSFT transforms
+ *   (see \ref nfsft_direct_adjoint, \ref nfsft_adjoint) do not destroy the input
+ *   \c f and \c x by default. The desired behaviour can be assured by using the
+ *   \ref NFSFT_PRESERVE_F_HAT, \ref NFSFT_PRESERVE_X, \ref NFSFT_PRESERVE_F and
+ *   \ref NFSFT_DESTROY_F_HAT, \ref NFSFT_DESTROY_X, \ref NFSFT_DESTROY_F
+ *   flags.
+ */
+
+/*! \struct nfsft_plan
+ * NFSFT transform plan
+ */
+
+/*! \fn void nfsft_init(nfsft_plan *plan, int N, int M)
+ * Creates a transform plan.
+ *
+ * \arg plan a pointer to a \ref nfsft_plan structure
+ * \arg N the bandwidth \f$N \in \mathbb{N}_0\f$
+ * \arg M the number of nodes \f$M \in \mathbb{N}\f$
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void nfsft_init_advanced(nfsft_plan* plan, int N, int M, unsigned int nfsft_flags)
+ * Creates a transform plan.
+ *
+ * \arg plan a pointer to a \verbatim nfsft_plan \endverbatim structure
+ * \arg N the bandwidth \f$N \in \mathbb{N}_0\f$
+ * \arg M the number of nodes \f$M \in \mathbb{N}\f$
+ * \arg nfsft_flags the NFSFT flags
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void nfsft_init_guru(nfsft_plan *plan, int N, int M, unsigned int nfsft_flags, nsigned int nfft_flags, int nfft_cutoff)
+ * Creates a transform plan.
+ *
+ * \arg plan a pointer to a \verbatim nfsft_plan \endverbatim structure
+ * \arg N the bandwidth \f$N \in \mathbb{N}_0\f$
+ * \arg M the number of nodes \f$M \in \mathbb{N}\f$
+ * \arg nfsft_flags the NFSFT flags
+ * \arg nfft_cutoff the NFFT cutoff parameter
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void nfsft_precompute(int N, R kappa, unsigned int nfsft_flags, unsigned int fpt_flags)
+ * Performes precomputation up to the next power of two with respect to a given
+ * bandwidth \f$N \in \mathbb{N}_2\f$. The threshold parameter \f$\kappa \in
+ * \mathbb{R}^{+}\f$ determines the number of stabilization steps computed in
+ * the discrete polynomial transform and thereby its accuracy.
+ *
+ * \arg N the bandwidth \f$N \in \mathbb{N}_0\f$
+ * \arg threshold the threshold \f$\kappa \in \mathbb{R}^{+}\f$
+ * \arg nfsft_precomputation_flags the NFSFT precomputation flags
+ * \arg fpt_precomputation_flags the FPT precomputation flags
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void nfsft_forget(void)
+ * Forgets all precomputed data.
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void nfsft_direct_trafo(nfsft_plan* plan)
+ * Executes a direct NDSFT, i.e. computes for \f$m = 0,\ldots,M-1\f$
+ * \f[
+ *   f(m) = \sum_{k=0}^N \sum_{n=-k}^k \hat{f}(k,n) Y_k^n\left(2\pi x_1(m),
+ *   2\pi x_2(m)\right).
+ * \f]
+ *
+ * \arg plan the plan
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void nfsft_direct_adjoint(nfsft_plan* plan)
+ * Executes a direct adjoint NDSFT, i.e. computes for \f$k=0,\ldots,N;
+ * n=-k,\ldots,k\f$
+ * \f[
+ *   \hat{f}(k,n) = \sum_{m = 0}^{M-1} f(m) Y_k^n\left(2\pi x_1(m),
+ *   2\pi x_2(m)\right).
+ * \f]
+ *
+ * \arg plan the plan
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void nfsft_trafo(nfsft_plan* plan)
+ * Executes a NFSFT, i.e. computes for \f$m = 0,\ldots,M-1\f$
+ * \f[
+ *   f(m) = \sum_{k=0}^N \sum_{n=-k}^k \hat{f}(k,n) Y_k^n\left(2\pi x_1(m),
+ *   2\pi x_2(m)\right).
+ * \f]
+ *
+ * \arg plan the plan
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void nfsft_adjoint(nfsft_plan* plan)
+ * Executes an adjoint NFSFT, i.e. computes for \f$k=0,\ldots,N;
+ * n=-k,\ldots,k\f$
+ * \f[
+ *   \hat{f}(k,n) = \sum_{m = 0}^{M-1} f(m) Y_k^n\left(2\pi x_1(m),
+ *   2\pi x_2(m)\right).
+ * \f]
+ *
+ * \arg plan the plan
+ *
+ * \author Jens Keiner
+ */
+
+/*! \fn void nfsft_finalize(nfsft_plan *plan)
+ * Destroys a plan.
+ *
+ * \arg plan the plan to be destroyed
+ *
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_NORMALIZED
+ * By default, all computations are performed with respect to the
+ * unnormalized basis functions
+ * \f[
+ *   \tilde{Y}_k^n(\vartheta,\varphi) = P_k^{|n|}(\cos\vartheta)
+ *   \mathrm{e}^{\mathrm{i} n \varphi}.
+ * \f]
+ * If this flag is set, all computations are carried out using the \f$L_2\f$-
+ * normalized basis functions
+ * \f[
+ *   Y_k^n(\vartheta,\varphi) = \sqrt{\frac{2k+1}{4\pi}} P_k^{|n|}(\cos\vartheta)
+ *   \mathrm{e}^{\mathrm{i} n \varphi}.
+ * \f]
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_USE_NDFT
+ * If this flag is set, the fast NFSFT algorithms (see \ref nfsft_trafo,
+ * \ref nfsft_adjoint) will use internally the exact but usually slower direct
+ * NDFT algorithm in favor of fast but approximative NFFT algorithm.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_USE_DPT
+ * If this flag is set, the fast NFSFT algorithms (see \ref nfsft_trafo,
+ * \ref nfsft_adjoint) will use internally the usually slower direct
+ * DPT algorithm in favor of the fast FPT algorithm.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ * \warning This feature is not implemented yet!
+ */
+
+/*! \def NFSFT_MALLOC_X
+ * If this flag is set, the init methods (see \ref nfsft_init , \ref
+ * nfsft_init_advanced , and \ref nfsft_init_guru) will allocate memory and the
+ * method \ref nfsft_finalize will free the array \c x for you. Otherwise,
+ * you have to assure by yourself that \c x points to an array of
+ * proper size before excuting a transform and you are responsible for freeing
+ * the corresponding memory before program termination.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_MALLOC_F_HAT
+ * If this flag is set, the init methods (see \ref nfsft_init , \ref
+ * nfsft_init_advanced , and \ref nfsft_init_guru) will allocate memory and the
+ * method \ref nfsft_finalize will free the array \c f_hat for you. Otherwise,
+ * you have to assure by yourself that \c f_hat points to an array of
+ * proper size before excuting a transform and you are responsible for freeing
+ * the corresponding memory before program termination.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_MALLOC_F
+ * If this flag is set, the init methods (see \ref nfsft_init , \ref
+ * nfsft_init_advanced , and \ref nfsft_init_guru) will allocate memory and the
+ * method \ref nfsft_finalize will free the array \c f for you. Otherwise,
+ * you have to assure by yourself that \c f points to an array of
+ * proper size before excuting a transform and you are responsible for freeing
+ * the corresponding memory before program termination.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_PRESERVE_F_HAT
+ * If this flag is set, it is guaranteed that during an execution of
+ * \ref nfsft_direct_trafo or \ref nfsft_trafo the content of \c f_hat remains
+ * unchanged.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_PRESERVE_X
+ * If this flag is set, it is guaranteed that during an execution of
+ * \ref nfsft_direct_trafo, \ref nfsft_trafo or \ref nfsft_direct_adjoint, \ref nfsft_adjoint
+ * the content of \c x remains
+ * unchanged.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_PRESERVE_F
+ * If this flag is set, it is guaranteed that during an execution of
+ * \ref nfsft_direct_adjoint or \ref nfsft_adjoint the content of \c f remains
+ * unchanged.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_DESTROY_F_HAT
+ * If this flag is set, it is explicitely allowed that during an execution of
+ * \ref nfsft_direct_trafo or \ref nfsft_trafo the content of \c f_hat may be changed.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_DESTROY_X
+ * If this flag is set, it is explicitely allowed that during an execution of
+ * \ref nfsft_direct_trafo, \ref nfsft_trafo or \ref nfsft_direct_adjoint, \ref nfsft_adjoint
+ * the content of \c x may be changed.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_DESTROY_F
+ * If this flag is set, it is explicitely allowed that during an execution of
+ * \ref nfsft_direct_adjoint or \ref nfsft_adjoint the content of \c f may be changed.
+ *
+ * \see nfsft_init
+ * \see nfsft_init_advanced
+ * \see nfsft_init_guru
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_NO_DIRECT_ALGORITHM
+ * If this flag is set, the transforms \ref nfsft_direct_trafo and \ref nfsft_direct_adjoint
+ * do not work. Setting this flag saves some memory for precomputed data.
+ *
+ * \see nfsft_precompute
+ * \see nfsft_direct_trafo
+ * \see nfsft_direct_adjoint
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_NO_FAST_ALGORITHM
+ * If this flag is set, the transforms \ref nfsft_trafo and \ref nfsft_adjoint
+ * do not work. Setting this flag saves memory for precomputed data.
+ *
+ * \see nfsft_precompute
+ * \see nfsft_trafo
+ * \see nfsft_adjoint
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_ZERO_F_HAT
+ * If this flag is set, the transforms \ref nfsft_adjoint and
+ * \ref nfsft_direct_adjoint set all unused entries in \c f_hat not corresponding to
+ * spherical Fourier coefficients to zero.
+ *
+ * \author Jens Keiner
+ */
+
+/*! \def NFSFT_INDEX(k,n,plan)
+ * This helper macro expands to the index \f$i\f$
+ * corresponding to the spherical Fourier coefficient
+ * \f$f_hat(k,n)\f$ for \f$0 \le k \le N\f$, \f$-k \le n \le k\f$ with
+ * \f[
+ *   (N+2)(N-n+1)+N+k+1
+ * \f]
+ */
+
+/*! \def NFSFT_F_HAT_SIZE(N)
+ * This helper macro expands to the logical size of a spherical Fourier coefficients
+ * array for a bandwidth N.
+ */
+
+/** @}
+ */
diff --git a/support/nfsoft.dox b/support/nfsoft.dox
new file mode 100644
index 0000000..f97fdc7
--- /dev/null
+++ b/support/nfsoft.dox
@@ -0,0 +1,329 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/**
+ * @defgroup nfsoft NFSOFT - Nonequispaced fast SO(3) Fourier transform
+ * @{
+ *
+ * This module implements nonuniform fast SO(3) Fourier transforms. In the
+ * following, we abbreviate the term "nonuniform fast SO(3) Fourier
+ * transform" by NFSOFT.
+ *
+ */
+
+/*! \fn void nfsoft_precompute(nfsoft_plan *plan)
+ * Does all node-dependent and node-independent precomputations needed for the NFSOFT.
+ *
+ * \arg plan a pointer to a \ref nfsoft_plan structure
+ */
+
+/*! \fn fpt_set nfsoft_SO3_single_fpt_init(int l, int k, int m, unsigned int flags, int kappa)
+ * Computes the FPT transform.
+ *
+ * \arg coeffs the Chebychev coefficients that should be transformed
+ * \arg set the FPT-set containing precomputed data
+ * \arg l the polynomial degree
+ * \arg k the first order
+ * \arg m the second order
+ * \arg nfsoft_flags
+ */
+
+/*! \fn void nfsoft_init(nfsoft_plan *plan, int N, int M)
+ * Creates a NFSOFT transform plan.
+ *
+ * \arg plan a pointer to a \ref nfsoft_plan structure
+ * \arg N the bandwidth \f$N \in \mathbb{N}_0\f$
+ * \arg M the number of nodes \f$M \in \mathbb{N}\f$
+ *
+ * \author Antje Vollrath
+ */
+
+/*! \fn void nfsoft_init_advanced(nfsoft_plan *plan, int N, int M,unsigned int nfsoft_flags)
+ * Creates a NFSOFT transform plan.
+ *
+ * \arg plan a pointer to a \ref nfsoft_plan structure
+ * \arg N the bandwidth \f$N \in \mathbb{N}_0\f$
+ * \arg M the number of nodes \f$M \in \mathbb{N}\f$
+ * \arg nfsoft_flags the NFSOFT flags
+ *
+ * \author Antje Vollrath
+ */
+
+/*! \fn void nfsoft_init_guru(nfsoft_plan *plan, int N, int M,unsigned int nfsoft_flags,unsigned int nfft_flags,int nfft_cutoff,int fpt_kappa)
+ * Creates a  NFSOFT transform plan.
+ *
+ * \arg plan a pointer to a \ref nfsoft_plan structure
+ * \arg N the bandwidth \f$N \in \mathbb{N}_0\f$
+ * \arg M the number of nodes \f$M \in \mathbb{N}\f$
+ * \arg nfsoft_flags the NFSFT flags
+ * \arg nfft_flags the NFFT flags
+ * \arg fpt_kappa a parameter contolling the accuracy of the FPT
+ * \arg nfft_cutoff the NFFT cutoff parameter
+ *
+ * \author Antje Vollrath
+ */
+
+/*! \fn void nfsoft_trafo(nfsoft_plan *plan_nfsoft)
+ * Executes a NFSOFT, i.e. computes for \f$m = 0,\ldots,M-1\f$
+ * \f[
+ *   f(g_m) = \sum_{l=0}^B \sum_{m=-l}^l \sum_{n=-l}^l \hat{f}^{mn}_l
+ *            D_l^{mn}\left( \alpha_m,\beta_m,\gamma_m\right).
+ * \f]
+ *
+ * \arg plan_nfsoft the plan
+ *
+ * \author Antje Vollrath
+ */
+
+/*! \fn void nfsoft_adjoint(nfsoft_plan *plan_nfsoft)
+ * Executes an adjoint NFSOFT, i.e. computes for \f$l=0,\ldots,B;
+ * m,n=-l,\ldots,l\f$
+ * \f[
+ *   \hat{f}^{mn}_l = \sum_{m = 0}^{M-1} f(g_m)
+ *                    D_l^{mn}\left( \alpha_m,\beta_m,\gamma_m\right)
+ * \f]
+ *
+ * \arg plan_nfsoft the plan
+ *
+ * \author Antje Vollrath
+ */
+
+/*! \fn void nfsoft_finalize(nfsoft_plan *plan)
+ * Destroys a plan.
+ *
+ * \arg plan the plan to be destroyed
+ *
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_NORMALIZED
+ * By default, all computations are performed with respect to the
+ * unnormalized basis functions
+ * \f[
+ *   D_{mn}^l(\alpha,\beta,\gamma) = d^{mn}_{l}(\cos\beta)
+ *   \mathrm{e}^{-\mathrm{i} m \alpha}\mathrm{e}^{-\mathrm{i} n \gamma}.
+ * \f]
+ * If this flag is set, all computations are carried out using the \f$L_2\f$-
+ * normalized basis functions
+ * \f[
+ *  \tilde D_{mn}^l(\alpha,\beta,\gamma) = \sqrt{\frac{2l+1}{8\pi^2}}d^{mn}_{l}(\cos\beta)
+ *   \mathrm{e}^{-\mathrm{i} m \alpha}\mathrm{e}^{-\mathrm{i} n \gamma}
+ * \f]
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_USE_NDFT
+ * If this flag is set, the fast NFSOFT algorithms (see \ref nfsoft_trafo,
+ * \ref nfsoft_adjoint) will use internally the exact but usually slower direct
+ * NDFT algorithm in favor of fast but approximative NFFT algorithm.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_USE_DPT
+ * If this flag is set, the fast NFSOFT algorithms (see \ref nfsoft_trafo,
+ * \ref nfsoft_adjoint) will use internally the usually slower direct
+ * DPT algorithm in favor of the fast FPT algorithm.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_MALLOC_X
+ * If this flag is set, the init methods (see \ref nfsoft_init ,
+ * \ref nfsoft_init_advanced , and \ref nfsoft_init_guru) will allocate memory and the
+ * method \ref nfsoft_finalize will free the array \c x for you. Otherwise,
+ * you have to assure by yourself that \c x points to an array of
+ * proper size before excuting a transform and you are responsible for freeing
+ * the corresponding memory before program termination.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_REPRESENT
+ * If this flag is set, the Wigner-D functions will be normed
+ * such that they satisfy the representation property of
+ * the spherical harmonics as defined in the NFFT software package, i.e.
+ * for every rotation matrix \f$A$\f with Euler angles \f$\alpha, \beta, \gamma$\f
+ * and every unit vector \f$x$\f the Wigner-D functions will be normed such that
+ *
+ * \f[
+ *  \sum_{m=-l}^l D_{mn}^l(\alpha,\beta,\gamma) Y_m^l(x) = Y_n^l(A^{-1} x)
+ * \f]
+ *
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_MALLOC_F_HAT
+ * If this flag is set, the init methods (see \ref nfsoft_init ,
+ * \ref nfsoft_init_advanced , and \ref nfsoft_init_guru) will allocate memory and the
+ * method \ref nfsoft_finalize will free the array \c f_hat for you. Otherwise,
+ * you have to assure by yourself that \c f_hat points to an array of
+ * proper size before excuting a transform and you are responsible for freeing
+ * the corresponding memory before program termination.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_MALLOC_F
+ * If this flag is set, the init methods (see \ref nfsoft_init ,
+ * \ref nfsoft_init_advanced , and \ref nfsoft_init_guru) will allocate memory and the
+ * method \ref nfsoft_finalize will free the array \c f for you. Otherwise,
+ * you have to assure by yourself that \c f points to an array of
+ * proper size before excuting a transform and you are responsible for freeing
+ * the corresponding memory before program termination.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_PRESERVE_F_HAT
+ * If this flag is set, it is guaranteed that during an execution of
+ * \ref nfsoft_trafo the content of \c f_hat remains
+ * unchanged.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_PRESERVE_X
+ * If this flag is set, it is guaranteed that during an execution of
+ * \ref nfsoft_trafo or \ref nfsoft_adjoint
+ * the content of \c x remains
+ * unchanged.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_PRESERVE_F
+ * If this flag is set, it is guaranteed that during an execution of
+ * \ref ndsoft_adjoint or \ref nfsoft_adjoint the content of \c f remains
+ * unchanged.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_DESTROY_F_HAT
+ * If this flag is set, it is explicitely allowed that during an execution of
+ * \ref nfsoft_trafo the content of \c f_hat may be changed.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_DESTROY_X
+ * If this flag is set, it is explicitely allowed that during an execution of
+ * \ref nfsoft_trafo or \ref nfsoft_adjoint
+ * the content of \c x may be changed.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_DESTROY_F
+ * If this flag is set, it is explicitely allowed that during an execution of
+ * \ref ndsoft_adjoint or \ref nfsoft_adjoint the content of \c f may be changed.
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_NO_STABILIZATION
+ * If this flag is set, the fast NFSOFT algorithms (see \ref nfsoft_trafo,
+ * \ref nfsoft_adjoint) will use internally the FPT algorithm without the
+ * stabilization scheme and thus making bigger errors for higher
+ * bandwidth but becoming significantly faster
+ *
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_CHOOSE_DPT
+ * If this flag is set, the fast NFSOFT algorithms (see \ref nfsoft_trafo,
+ * \ref nfsoft_adjoint) will decide whether to use the DPT or
+ * FPT algorithm depending on which is faster for the chosen orders.
+ *
+ * not yet included in the checked-in version
+ *
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_SOFT
+ * If this flag is set, the fast NFSOFT algorithms (see \ref nfsoft_trafo,
+ * \ref nfsoft_adjoint) becomes a SOFT, i.e., we use equispaced nodes.
+ * The FFTW will be used instead of the NFFT.-->not included yet
+ *
+ * \see nfsoft_init
+ * \see nfsoft_init_advanced
+ * \see nfsoft_init_guru
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_ZERO_F_HAT
+ * If this flag is set, the transform \ref nfsoft_adjoint
+ * sets all unused entries in \c f_hat not corresponding to
+ * SO(3) Fourier coefficients to zero.
+ *
+ * \author Antje Vollrath
+ */
+
+/*! \def NFSOFT_INDEX(m,n,l,B)
+ * These macro expands to the index \f$i\f$
+ * corresponding to the SO(3) Fourier coefficient
+ * \f$f_hat^{mn}_l\f$ for \f$l=0,...,B\f$, \f$m,n =-l,...,l\f$ with
+ */
+
+/*! \def NFSOFT_F_HAT_SIZE(B)
+ * This macro expands to the logical size of a SO(3) Fourier coefficients
+ * array for a bandwidth B.
+ */
+
+/** @}
+ */
diff --git a/support/nfst.dox b/support/nfst.dox
new file mode 100644
index 0000000..ba88ae9
--- /dev/null
+++ b/support/nfst.dox
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/** @defgroup nfst NFST - Nonequispaced fast sine transform
+ * Direct and fast computation of the discrete nonequispaced sine
+ * transform.
+ * @{
+ */
+
+/*! \struct nfst_plan
+ * Structure for a transform plan 
+ */
+
+/*! \fn void nfst_init_1d(nfst_plan *ths_plan, int N0, int M_total)
+ * Creates a 1-dimensional transform plan.
+ *
+ * \arg ths_plan The plan for the transform
+ * \arg N0 The bandwidth \f$N\f$
+ * \arg M_total The number of nodes \f$x\f$
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_init_2d(nfst_plan *ths_plan, int N0, int N1, int M_total)
+ * Creates a 3-dimensional transform plan.
+ *
+ * \arg ths_plan The plan for the transform
+ * \arg N0 The bandwidth of dimension 1
+ * \arg N1 The bandwidth of dimension 2
+ * \arg M_total The number of nodes \f$x\f$
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_init_3d(nfst_plan *ths_plan, int N0, int N1, int N2, int M_total)
+ * Creates a 3-dimensional transform plan.
+ *
+ * \arg ths_plan The plan for the transform
+ * \arg N0 The bandwidth of dimension 1
+ * \arg N1 The bandwidth of dimension 2
+ * \arg N2 The bandwidth of dimension 3
+ * \arg M_total The number of nodes \f$x\f$
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_init(nfst_plan *ths_plan, int d, int *N, int M_total)
+ * Creates a d-dimensional transform plan.
+ *
+ * \arg ths_plan The plan for the transform
+ * \arg d the dimension
+ * \arg N The bandwidths
+ * \arg M_total The number of nodes \f$x\f$
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_init_m(nfst_plan *ths_plan, int d, int *N, int M_total, int m)
+ * Creates a d-dimensional transform plan with pcific m.
+ * (just for convenience)
+ *
+ * \arg ths_plan The plan for the transform
+ * \arg d the dimension
+ * \arg N The bandwidths
+ * \arg M_total The number of nodes \f$x\f$
+ * \arg m cut-off parameter
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_init_guru(nfst_plan *ths_plan, int d, int *N, int M_total, int *n, int m, unsigned flags, unsigned fftw_flags)
+ * Creates a d-dimensional transform plan.
+ *
+ * \arg ths_plan The plan for the transform
+ * \arg d the dimension
+ * \arg N The bandwidths
+ * \arg M_total The number of nodes \f$x\f$
+ * \arg n The oversampled bandwidths
+ * \arg m The cut-off parameter
+ * \arg flags The flags known to nfst
+ * \arg fftw_flags The flags known to fftw
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_precompute_psi(nfst_plan *ths_plan)
+ * precomputes the values psi
+ * if the PRE_PSI is set the application program has to call this routine
+ * after setting the nodes this_plan->x
+ *
+ * \arg ths_plan The plan for the transform
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_trafo(nfst_plan *ths_plan)
+ * executes a NFST (approximate,fast), computes for \f$j=0,...,M\_total-1\f$
+ * \f$f_j^S(x_j) = \sum_{k \in I_1^{N,d}} \hat{f}_k^S * sin(2 \pi k x_j)\f$
+ *
+ * \arg ths_plan The plan for the transform
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_direct_trafo(nfst_plan *ths_plan)
+ * executes a NDST (exact,slow), computes for \f$j=0,...,M\_total-1\f$
+ * \f$f_j^S(x_j) = \sum_{k \in I_1^{N,d}} \hat{f}_k^S * sin(2 \pi k x_j)\f$
+ *
+ * \arg ths_plan The plan for the transform
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_adjoint(nfst_plan *ths_plan)
+ * executes a transposed NFST (approximate,fast), computes for \f$k \in I_1^{N,d}\f$
+ * \f$h^S(k) = \sum_{j \in I_0^{M\_total,1}} f_j^S * cos(2 \pi k x_j)\f$
+ *
+ * \arg ths_plan The plan for the transform
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_direct_adjoint(nfst_plan *ths_plan)
+ * executes a direct transposed NDST (exact,slow), computes for \f$k \in I_1^{N,d}\f$
+ * \f$h^S(k) = \sum_{j \in I_0^{M\_total,1}} f_j^S * cos(2 \pi k x_j)\f$
+ *
+ * \arg ths_plan The plan for the transform
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_finalize(nfst_plan *ths_plan)
+ * Destroys a plan.
+ *
+ * \arg ths_plan The plan for the transform
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn void nfst_full_psi(nfst_plan *ths_plan, R eps)
+ *
+ *
+ * \arg ths_plan The plan for the transform
+ *
+ */
+
+/*! \fn R nfst_phi_hut(nfst_plan *ths_plan, int k, int d)
+ * do some adjustments (N,n) then compute PHI_HUT
+ *
+ * \arg ths_plan the plan for the transform
+ * \arg k        index of c_phi
+ * \arg d        dimension
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn R nfst_phi(nfst_plan *ths_plan, R x, int d)
+ * do some adjustments (N,n) then compute PHI
+ *
+ * \arg ths_plan the plan for the transform
+ * \arg x        node \f$x\f$
+ * \arg d        dimension
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn int nfst_fftw_2N(int n)
+ * returns 2(n+1),  fftw related issue
+ *
+ * \arg n       i.e. length of dst-1
+ *
+ * \author Steffen Klatt
+ */
+
+/*! \fn int nfst_fftw_2N_rev(int n)
+ * returns 0.5n-1,  fftw related issue
+ *
+ * \arg n       i.e. length of dct-1
+ *
+ * \author Steffen Klatt
+ */
+
+/** @}
+ */
diff --git a/support/nnfft.dox b/support/nnfft.dox
new file mode 100644
index 0000000..6fdadc5
--- /dev/null
+++ b/support/nnfft.dox
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/** @defgroup nnfft NNFFT - Nonequispaced in time and frequency FFT
+ * Direct and fast computation of the discrete nonequispaced in time and
+ * frequency Fourier transform.
+ * @{
+ */
+
+/*! \struct nnfft_plan
+ * NNFFT transform plan 
+ */
+
+/*! \fn nnfft_init(nnfft_plan *ths_plan, int d, int N_total, int M_total, int *N)
+ * Creates a transform plan.
+ *
+ * \arg ths_plan The plan for the transform
+ * \arg d The dimension
+ * \arg N_total The number of nodes \f$v\f$
+ * \arg M_total The number of nodes \f$x\f$
+ * \arg N The bandwidth \f$N\f$
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn void nnfft_init_guru(nnfft_plan *ths_plan, int d, int N_total, int M_total, int *N, int *N1, int m, unsigned nnfft_flags)
+ * Creates a transform plan.
+ *
+ * \arg ths_plan The plan for the transform
+ * \arg d The dimension
+ * \arg N_total The number of nodes \f$v\f$
+ * \arg M_total The number of nodes \f$x\f$
+ * \arg N The bandwidth \f$N\f$
+ * \arg N1 The oversampled bandwidth \f$N\f$
+ * \arg m The cut-off parameter
+ * \arg nnfft_flags The flags
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn void nnfft_direct_trafo(nnfft_plan *ths_plan)
+ * Executes a direct NNDFT, i.e. computes for \f$j=0,...,M_{total}-1\f$
+ * \f[
+ *   f(x_j) = \sum_{k = 0}^{N_{total}-1} \hat{f}(v_k) {\rm e}^{-2 \pi
+ *            \mbox{\rm\scriptsize i} v_k x_j \odot N}
+ * \f]
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn void nnfft_direct_adjoint(nnfft_plan *ths_plan)
+ * Executes a direct adjoint NNDFT, i.e. computes for \f$k=0,...,N_{total}-1\f$
+ * \f[
+ *   \hat{f}(v_k) = \sum_{j = 0}^{M_{total}-1} f(x_j) {\rm e}^{2 \pi
+ *                  \mbox{\rm\scriptsize i} v_k x_j \odot N}
+ * \f]
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn void nnfft_trafo(nnfft_plan *ths_plan)
+ * Executes a NNFFT, i.e. computes for \f$j=0,...,M_{total}-1\f$
+ * \f[
+ *   f(x_j) = \sum_{k = 0}^{N_{total}-1} \hat{f}(v_k) {\rm e}^{-2 \pi
+ *            \mbox{\rm\scriptsize i} v_k x_j \odot N}
+ * \f]
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn void nnfft_adjoint(nnfft_plan *ths_plan)
+ * Executes a adjoint NNFFT, i.e. computes for \f$k=0,...,N_{total}-1\f$
+ * \f[
+ *   \hat{f}(v_k) = \sum_{j = 0}^{M_{tota}l-1} f(x_j) {\rm e}^{2 \pi
+ *                  \mbox{\rm\scriptsize i} v_k x_j \odot N}
+ * \f]
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \fn void nnfft_precompute_lin_psi(nnfft_plan *ths_plan)
+ * Precomputation for a transform plan.
+ *
+ * \arg ths_plan The pointer to a nfft plan
+ *
+ * \author Tobias Knopp
+ *
+ * precomputes equally spaced values of the window function psi
+ *
+ * if PRE_LIN_PSI is set the application program has to call this routine
+ */
+
+/*! \fn void nnfft_precompute_psi(nnfft_plan *ths_plan)
+ * Precomputation for a transform plan.
+ *
+ * \arg ths_plan The pointer to a nfft plan
+ *
+ * \author Tobias Knopp
+ *
+ * precomputes the values of the window function psi in a tensor product form
+ *
+ * if PRE_PSI is set the application program has to call this routine after
+ * setting the nodes x
+ */
+
+/*! \fn void nnfft_precompute_full_psi(nnfft_plan *ths_plan)
+ * Precomputation for a transform plan.
+ *
+ * \arg ths_plan The pointer to a nfft plan
+ *
+ * \author Tobias Knopp
+ *
+ * precomputes the values of the window function psi and their indices in
+ * non tensor product form
+ *
+ * if PRE_FULL_PSI is set the application program has to call this routine
+ * after setting the nodes x
+ */
+
+/*! \fn void nnfft_precompute_phi_hut(nnfft_plan *ths_plan)
+ * Precomputation for a transform plan.
+ *
+ * \arg ths_plan The pointer to a nfft plan
+ *
+ * \author Tobias Knopp
+ *
+ * precomputes the values of the fourier transformed window function, i.e. phi_hut
+ *
+ * if PRE_PHI_HUT is set the application program has to call this routine
+ * after setting the nodes v
+ */
+
+/*! \fn void nnfft_finalize(nnfft_plan *ths_plan)
+ * Destroys a plan.
+ *
+ * \arg ths_plan The plan
+ *
+ * \author Tobias Knopp
+ */
+
+/*! \def MALLOC_V
+ * If this flag is set, (de)allocation of the frequency node vector is done.
+ *
+ * \see nnfft_init
+ * \see nnfft_init_guru
+ * \see nnfft_finalize
+ * \author Tobias Knopp
+ */
+
+/** @}
+ */
diff --git a/support/nsfft.dox b/support/nsfft.dox
new file mode 100644
index 0000000..51c959f
--- /dev/null
+++ b/support/nsfft.dox
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/** @defgroup nsfft NSFFT - Nonequispaced sparse FFT
+ * Direct and fast computation of the nonequispaced FFT on the hyperbolic
+ * cross.
+ * @{
+ */
+
+/*! \struct nsfft_plan 
+ * Structure for a NFFT plan
+ */
+
+/*! \fn void nsfft_direct_trafo(nsfft_plan *ths)
+ * Executes an NSDFT, computes for \f$j=0,\hdots,M-1\f$:
+ * \f[
+ *   f_j = \sum_{k\in H_N^d}\hat f_k {\rm e}^{-2\pi{\rm\scriptsize i}k x_j}
+ * \f]
+ *
+ * \arg ths The pointer to a nsfft plan
+ *
+ * \author Markus Fenn, Stefan Kunis
+ */
+
+/*! \fn void nsfft_direct_adjoint(nsfft_plan *ths)
+ * Executes an adjoint NSFFT, computes for \f$k\in H_N^d\f$:
+ * \f[
+ *   \hat f_k = \sum_{j=0,\hdots,M-1} f_j {\rm e}^{+2\pi{\rm\scriptsize i}k x_j}
+ * \f]
+ *
+ * \arg ths The pointer to a nsfft plan
+ *
+ * \author Stefan Kunis
+ */
+
+/*! \fn void nsfft_trafo(nsfft_plan *ths)
+ * Executes an NSFFT, computes \b fast and \b approximate for
+ * \f$j=0,\hdots,M-1\f$:
+ * \f[
+ *   f_j = \sum_{k\in H_N^d}\hat f_k {\rm e}^{-2\pi{\rm\scriptsize i}k x_j}
+ * \f]
+ *
+ * \arg ths The pointer to a nsfft plan
+ *
+ * \author Markus Fenn, Stefan Kunis
+ */
+
+/*! \fn void nsfft_adjoint(nsfft_plan *ths)
+ * Executes an adjoint NSFFT, computes \b fast and \b approximate for
+ * \f$k\in H_N^d\f$:
+ * \f[
+ *   \hat f_k = \sum_{j=0,\hdots,M-1} f_j {\rm e}^{+2\pi{\rm\scriptsize i}k x_j}
+ * \f]
+ *
+ * \arg ths The pointer to a nsfft plan
+ *
+ * \author Stefan Kunis
+ */
+
+/*! \fn void nsfft_cp(nsfft_plan *ths, nfft_plan *ths_nfft)
+ * Copy coefficients from nsfft plan to a nfft plan.
+ *
+ * \arg ths Pointers to a nsfft plan and to a nfft plan
+ *
+ * \author Markus Fenn, Stefan Kunis
+ */
+
+/*! \fn void nsfft_init_random_nodes_coeffs(nsfft_plan *ths)
+ * Initialisation of pseudo random nodes and coefficients.
+ *
+ * \arg ths The pointer to a nsfft plan
+ *
+ * \author Markus Fenn, Stefan Kunis
+ */
+
+/*! \fn void nsfft_init(nsfft_plan *ths, int d, int J, int M, int m, unsigned flags)
+ * Initialisation of a transform plan.
+ *
+ * \arg ths The pointer to a nsfft plan
+ * \arg d The dimension
+ * \arg J The problem size
+ * \arg M The number of nodes
+ * \arg m nfft cut-off parameter
+ * \arg flags
+ *
+ * \author Markus Fenn, Stefan Kunis
+ */
+
+/*! \fn void nsfft_finalize(nsfft_plan *ths)
+ * Destroys a transform plan.
+ *
+ * \arg ths The pointer to a nsfft plan
+ *
+ * \author Markus Fenn, Stefan Kunis
+ */
+
+/*! \def NSDFT
+ * If this flag is set, the member \ref index_sparse_to_full is (de)allocated
+ * and initialised for the use in the routine \ref nsfft_direct_trafo and
+ * \ref nsdft_adjoint.
+ *
+ * \see nsfft_init
+ * \author Stefan Kunis
+ */
+
+/** @}
+ */
diff --git a/support/rem.sed b/support/rem.sed
old mode 100644
new mode 100755
diff --git a/support/solver.dox b/support/solver.dox
new file mode 100644
index 0000000..f2a1b26
--- /dev/null
+++ b/support/solver.dox
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: doxygen.c 3475 2010-04-11 14:58:03Z keiner $ */
+
+/** @defgroup solver Solver - Inverse transforms
+ * @{
+ */
+
+/*! \def LANDWEBER
+ * If this flag is set, the Landweber (Richardson) iteration is used to compute
+ * an inverse transform.
+ *
+ * \author Stefan Kunis
+ */
+
+/*! \def STEEPEST_DESCENT
+ * If this flag is set, the method of steepest descent (gradient) is used to
+ * compute an inverse transform.
+ *
+ * \author Stefan Kunis
+ */
+
+/*! \def CGNR
+ * If this flag is set, the conjugate gradient method for the normal equation
+ * of first kind is used to compute an inverse transform.
+ * Each iterate minimises the residual in the current Krylov subspace.
+ *
+ * \author Stefan Kunis
+ */
+
+/*! \def CGNE
+ * If this flag is set, the conjugate gradient method for the normal equation
+ * of second kind is used to compute an inverse transform.
+ * Each iterate minimises the error in the current Krylov subspace.
+ *
+ * \author Stefan Kunis
+ */
+
+/*! \def NORMS_FOR_LANDWEBER
+ * If this flag is set, the Landweber iteration updates the member
+ * dot_r_iter.
+ *
+ * \author Stefan Kunis
+ */
+
+/*! \def PRECOMPUTE_WEIGHT
+ * If this flag is set, the samples are weighted, eg to cope with varying
+ * sampling density.
+ *
+ * \author Stefan Kunis
+ */
+
+/*! \def PRECOMPUTE_DAMP
+ * If this flag is set, the Fourier coefficients are damped, eg to favour
+ * fast decaying coefficients.
+ *
+ * \author Stefan Kunis
+ */
+
+/** @}
+ */
diff --git a/support/toc.sed b/support/toc.sed
old mode 100644
new mode 100755
diff --git a/support/update_copyright.sh b/support/update_copyright.sh
new file mode 100755
index 0000000..17d1990
--- /dev/null
+++ b/support/update_copyright.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+function warn {
+echo "warn: $1 does not seem to have the correct copyright format"
+}
+
+function replace {
+  m=$(sed -e "/::Package::/!d" -e "/::Package::/=" -e"/::Package::/d" < $3)
+  if test -n "$m"; then
+    echo "warn: $3 skipped (Mathematica Package)"
+  else
+    # first occurence of start of copyright block
+    s=$(sed -e "$1!d" -e "$1=" -e"$1d" < $3)
+    # first occurence of end of copyright block
+    e=$(sed -e "$2!d" -e "$2=" -e"$2d" < $3)
+    # Check if copyright block delimters found.
+    if test -n "$s" -a -n "$e"; then
+      # Check if copyright delimters are ordered properly.
+      if test "$s" -le "$e"; then
+        # Replace copyright block with template.
+        sed -e "${e}r$4" -e "${s},${e}d" < $3 > $3.tmp
+        mv $3.tmp $3
+        echo "ok: $3"
+      else
+        warn $3
+      fi
+    else
+      if test "$7" == "yes"; then
+        # Add copyright block to beginning of file.
+        echo "$5" > head.txt
+        echo "$6" > tail.txt
+        cat head.txt $4 tail.txt $3 > $3.tmp
+        mv $3.tmp $3
+        rm head.txt
+        rm tail.txt
+        echo "add: $3"
+      else
+        echo "warn: $3 text from $4 not added"
+      fi
+    fi
+  fi
+}
+
+# C source and header files
+for name in $(find .. \( -name "*.[ch]" -or -name "ticks.in" -or -name "nfftconf.h.in" \) -and -not -wholename "../applications/texture" -and -not -name "cycle.h" -and -not -name "config.h"); do
+  echo $name
+  replace "/^ \* Copyright/" "/^ \* Franklin Street/" $name "copyright.txt" '/*' ' */' "no"
+done
+
+# MATLAB scripts
+for name in $(find .. -wholename "../applications/texture" -prune -o -name "Contents.m" -prune -o -name "*.m" -print); do
+  replace "/^% Copyright/" "/^% Franklin Street/" $name "copyright_matlab.txt" "" "" "no"
+  replace "/^%   Copyright/" "/^%   Copyright/" $name "copyright_matlab_single_line.txt" "" "" "no"
+done
+
+# m4 scripts
+for name in $(find .. -wholename "../applications/texture" -prune -o -name "configure.ac" -print -o -name "*.m4" -print); do
+  replace "/^# Copyright/" "/^# Franklin Street/" $name "copyright_m4.txt" "" "" "no"
+done
diff --git a/tests/CUnit-Run.dtd b/tests/CUnit-Run.dtd
new file mode 100644
index 0000000..e0f56b8
--- /dev/null
+++ b/tests/CUnit-Run.dtd
@@ -0,0 +1,36 @@
+<!ELEMENT CUNIT_TEST_RUN_REPORT
+  (CUNIT_HEADER, CUNIT_RESULT_LISTING, CUNIT_RUN_SUMMARY, CUNIT_FOOTER)>
+
+<!ELEMENT CUNIT_HEADER EMPTY>
+
+<!ELEMENT CUNIT_RESULT_LISTING (CUNIT_RUN_SUITE*|CUNIT_RUN_GROUP*)>
+
+<!ELEMENT CUNIT_RUN_SUITE (CUNIT_RUN_SUITE_SUCCESS|CUNIT_RUN_SUITE_FAILURE)>
+  <!ELEMENT CUNIT_RUN_SUITE_SUCCESS (SUITE_NAME,CUNIT_RUN_TEST_RECORD*)>
+  <!ELEMENT CUNIT_RUN_SUITE_FAILURE (SUITE_NAME,FAILURE_REASON)>
+    <!ELEMENT SUITE_NAME (#PCDATA)>
+    <!ELEMENT FAILURE_REASON (#PCDATA)>
+
+<!ELEMENT CUNIT_RUN_GROUP (CUNIT_RUN_GROUP_SUCCESS|CUNIT_RUN_GROUP_FAILURE)>
+  <!ELEMENT CUNIT_RUN_GROUP_SUCCESS (GROUP_NAME,CUNIT_RUN_TEST_RECORD*)>
+  <!ELEMENT CUNIT_RUN_GROUP_FAILURE (GROUP_NAME,FAILURE_REASON)>
+    <!ELEMENT GROUP_NAME (#PCDATA)>
+
+<!ELEMENT CUNIT_RUN_TEST_RECORD (CUNIT_RUN_TEST_SUCCESS|CUNIT_RUN_TEST_FAILURE)>
+  <!ELEMENT CUNIT_RUN_TEST_SUCCESS (TEST_NAME)>
+  <!ELEMENT CUNIT_RUN_TEST_FAILURE (TEST_NAME, FILE_NAME, LINE_NUMBER, CONDITION)>
+    <!ELEMENT TEST_NAME (#PCDATA)>
+    <!ELEMENT FILE_NAME (#PCDATA)>
+    <!ELEMENT LINE_NUMBER (#PCDATA)>
+    <!ELEMENT CONDITION (#PCDATA)>
+
+<!ELEMENT CUNIT_RUN_SUMMARY (CUNIT_RUN_SUMMARY_RECORD*)>
+  <!ELEMENT CUNIT_RUN_SUMMARY_RECORD (TYPE, TOTAL, RUN, SUCCEEDED, FAILED, INACTIVE?)>
+    <!ELEMENT TYPE (#PCDATA)>
+    <!ELEMENT TOTAL (#PCDATA)>
+    <!ELEMENT RUN (#PCDATA)>
+    <!ELEMENT SUCCEEDED (#PCDATA)>
+    <!ELEMENT FAILED (#PCDATA)>
+    <!ELEMENT INACTIVE (#PCDATA)>
+
+<!ELEMENT CUNIT_FOOTER (#PCDATA)>
diff --git a/tests/CUnitAutomated-Results.xml b/tests/CUnitAutomated-Results.xml
new file mode 100644
index 0000000..7fe2aaf
--- /dev/null
+++ b/tests/CUnitAutomated-Results.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" ?> 
+<?xml-stylesheet type="text/xsl" href="CUnit-Run.xsl" ?> 
+<!DOCTYPE CUNIT_TEST_RUN_REPORT SYSTEM "CUnit-Run.dtd"> 
+<CUNIT_TEST_RUN_REPORT> 
+  <CUNIT_HEADER/> 
+  <CUNIT_RESULT_LISTING> 
+    <CUNIT_RUN_SUITE> 
+      <CUNIT_RUN_SUITE_SUCCESS> 
+        <SUITE_NAME> nfft </SUITE_NAME> 
+        <CUNIT_RUN_TEST_RECORD> 
+          <CUNIT_RUN_TEST_SUCCESS> 
+            <TEST_NAME> nfft_1d_direct_file </TEST_NAME> 
+          </CUNIT_RUN_TEST_SUCCESS> 
+        </CUNIT_RUN_TEST_RECORD> 
+        <CUNIT_RUN_TEST_RECORD> 
+          <CUNIT_RUN_TEST_SUCCESS> 
+            <TEST_NAME> nfft_1d_fast_file </TEST_NAME> 
+          </CUNIT_RUN_TEST_SUCCESS> 
+        </CUNIT_RUN_TEST_RECORD> 
+        <CUNIT_RUN_TEST_RECORD> 
+          <CUNIT_RUN_TEST_SUCCESS> 
+            <TEST_NAME> nfft_adjoint_1d_direct_file </TEST_NAME> 
+          </CUNIT_RUN_TEST_SUCCESS> 
+        </CUNIT_RUN_TEST_RECORD> 
+        <CUNIT_RUN_TEST_RECORD> 
+          <CUNIT_RUN_TEST_SUCCESS> 
+            <TEST_NAME> nfft_adjoint_1d_fast_file </TEST_NAME> 
+          </CUNIT_RUN_TEST_SUCCESS> 
+        </CUNIT_RUN_TEST_RECORD> 
+        <CUNIT_RUN_TEST_RECORD> 
+          <CUNIT_RUN_TEST_SUCCESS> 
+            <TEST_NAME> nfft_1d_online </TEST_NAME> 
+          </CUNIT_RUN_TEST_SUCCESS> 
+        </CUNIT_RUN_TEST_RECORD> 
diff --git a/tests/Makefile.am b/tests/Makefile.am
index ce1da08..3b3e26b 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,31 +1,55 @@
 # $Id: Makefile.am 3456 2010-03-17 19:25:47Z keiner $
 
-AM_CPPFLAGS = -I$(top_srcdir)/include
-
-if HAVE_NFSFT
-  CHECK_NFSFT=
-#TODO implements nfsft check
-#  CHECK_NFSFT=check_nfsft
-#  check_nfsft_SOURCES = check_nfsft.c
-#  check_nfsft_LDADD = $(top_builddir)/libnfft3.la
+AM_CPPFLAGS = -I$(top_srcdir)/include -DSRCDIR=@abs_srcdir@
+
+SUBDIRS= data
+
+if HAVE_THREADS
+if HAVE_OPENMP
+  CHECK_THREADS = checkall_threads
+else
+  CHECK_THREADS =
+endif
+else
+  CHECK_THREADS =
+endif
+
+if HAVE_CUNIT
+  CHECK=checkall
 else
-  CHECK_NFSFT=
+  CHECK=
 endif
 
-check_LTLIBRARIES = libcheck_nfft.la
+check_PROGRAMS = $(CHECK) $(CHECK_THREADS)
+#debug
 
-libcheck_nfft_la_SOURCES = check_nfft.c check_nfft.h
+TESTS = $(check_PROGRAMS)
 
-check_PROGRAMS = check_nfft_1d
-#check_bessel_i0 check_nfft_1d check_nfft_2d $(CHECK_NFSFT) 
+if HAVE_NFCT
+  NFCT_SOURCES=nfct.c nfct.h
+else
+  NFCT_SOURCES=
+endif
 
-TESTS = #$(check_PROGRAMS)
+if HAVE_NFST
+  NFST_SOURCES=nfst.c nfst.h
+else
+  NFST_SOURCES=
+endif
 
-#check_bessel_i0_SOURCES = check_bessel_i0.c
-#check_bessel_i0_LDADD = $(top_builddir)/libnfft3.la
+checkall_SOURCES = check.c bspline.c bspline.h bessel.c bessel.h nfft.c nfft.h $(NFCT_SOURCES) $(NFST_SOURCES)
+checkall_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la -lcunit -lncurses
+
+if HAVE_THREADS
+if HAVE_OPENMP
+  checkall_threads_SOURCES = $(checkall_SOURCES)
+  checkall_threads_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@_threads.la @fftw3_LDFLAGS@ @fftw3_threads_LIBS@ -lcunit -lncurses
+  checkall_threads_CFLAGS = $(OPENMP_CFLAGS)
+endif
+endif
 
-check_nfft_1d_SOURCES = check_nfft_1d.c
-check_nfft_1d_LDADD = libcheck_nfft.la $(top_builddir)/libnfft3.la
+#debug_SOURCES = debug.c nfct.c nfst.c nfct.h nfst.h
+#debug_LDADD = $(top_builddir)/libnfft3 at PREC_SUFFIX@.la -lcunit -lncurses
 
-#check_nfft_2d_SOURCES = check_nfft_2d.c
-#check_nfft_2d_LDADD = $(top_builddir)/libnfft3.la
+clean-local:
+	rm -f CUnitAutomated-Results.xml CUnitAutomated_threads-Results.xml checkall.log checkall.trs checkall_threads.log checkall_threads.trs
diff --git a/tests/Makefile.in b/tests/Makefile.in
deleted file mode 100644
index 0e015b5..0000000
--- a/tests/Makefile.in
+++ /dev/null
@@ -1,685 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3456 2010-03-17 19:25:47Z keiner $
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-check_PROGRAMS = check_nfft_1d$(EXEEXT)
-TESTS =
-subdir = tests
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-libcheck_nfft_la_LIBADD =
-am_libcheck_nfft_la_OBJECTS = check_nfft.lo
-libcheck_nfft_la_OBJECTS = $(am_libcheck_nfft_la_OBJECTS)
-am_check_nfft_1d_OBJECTS = check_nfft_1d.$(OBJEXT)
-check_nfft_1d_OBJECTS = $(am_check_nfft_1d_OBJECTS)
-check_nfft_1d_DEPENDENCIES = libcheck_nfft.la \
-	$(top_builddir)/libnfft3.la
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libcheck_nfft_la_SOURCES) $(check_nfft_1d_SOURCES)
-DIST_SOURCES = $(libcheck_nfft_la_SOURCES) $(check_nfft_1d_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-am__tty_colors_dummy = \
-  mgn= red= grn= lgn= blu= brg= std=; \
-  am__color_tests=no
-am__tty_colors = $(am__tty_colors_dummy)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-#TODO implements nfsft check
-#  CHECK_NFSFT=check_nfsft
-#  check_nfsft_SOURCES = check_nfsft.c
-#  check_nfsft_LDADD = $(top_builddir)/libnfft3.la
- at HAVE_NFSFT_FALSE@CHECK_NFSFT = 
- at HAVE_NFSFT_TRUE@CHECK_NFSFT = 
-check_LTLIBRARIES = libcheck_nfft.la
-libcheck_nfft_la_SOURCES = check_nfft.c check_nfft.h
-
-#check_bessel_i0_SOURCES = check_bessel_i0.c
-#check_bessel_i0_LDADD = $(top_builddir)/libnfft3.la
-check_nfft_1d_SOURCES = check_nfft_1d.c
-check_nfft_1d_LDADD = libcheck_nfft.la $(top_builddir)/libnfft3.la
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu tests/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-checkLTLIBRARIES:
-	-test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
-	@list='$(check_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libcheck_nfft.la: $(libcheck_nfft_la_OBJECTS) $(libcheck_nfft_la_DEPENDENCIES) $(EXTRA_libcheck_nfft_la_DEPENDENCIES) 
-	$(LINK)  $(libcheck_nfft_la_OBJECTS) $(libcheck_nfft_la_LIBADD) $(LIBS)
-
-clean-checkPROGRAMS:
-	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-check_nfft_1d$(EXEEXT): $(check_nfft_1d_OBJECTS) $(check_nfft_1d_DEPENDENCIES) $(EXTRA_check_nfft_1d_DEPENDENCIES) 
-	@rm -f check_nfft_1d$(EXEEXT)
-	$(LINK) $(check_nfft_1d_OBJECTS) $(check_nfft_1d_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_nfft.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_nfft_1d.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-check-TESTS: $(TESTS)
-	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
-	srcdir=$(srcdir); export srcdir; \
-	list=' $(TESTS) '; \
-	$(am__tty_colors); \
-	if test -n "$$list"; then \
-	  for tst in $$list; do \
-	    if test -f ./$$tst; then dir=./; \
-	    elif test -f $$tst; then dir=; \
-	    else dir="$(srcdir)/"; fi; \
-	    if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
-	      all=`expr $$all + 1`; \
-	      case " $(XFAIL_TESTS) " in \
-	      *[\ \	]$$tst[\ \	]*) \
-		xpass=`expr $$xpass + 1`; \
-		failed=`expr $$failed + 1`; \
-		col=$$red; res=XPASS; \
-	      ;; \
-	      *) \
-		col=$$grn; res=PASS; \
-	      ;; \
-	      esac; \
-	    elif test $$? -ne 77; then \
-	      all=`expr $$all + 1`; \
-	      case " $(XFAIL_TESTS) " in \
-	      *[\ \	]$$tst[\ \	]*) \
-		xfail=`expr $$xfail + 1`; \
-		col=$$lgn; res=XFAIL; \
-	      ;; \
-	      *) \
-		failed=`expr $$failed + 1`; \
-		col=$$red; res=FAIL; \
-	      ;; \
-	      esac; \
-	    else \
-	      skip=`expr $$skip + 1`; \
-	      col=$$blu; res=SKIP; \
-	    fi; \
-	    echo "$${col}$$res$${std}: $$tst"; \
-	  done; \
-	  if test "$$all" -eq 1; then \
-	    tests="test"; \
-	    All=""; \
-	  else \
-	    tests="tests"; \
-	    All="All "; \
-	  fi; \
-	  if test "$$failed" -eq 0; then \
-	    if test "$$xfail" -eq 0; then \
-	      banner="$$All$$all $$tests passed"; \
-	    else \
-	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
-	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
-	    fi; \
-	  else \
-	    if test "$$xpass" -eq 0; then \
-	      banner="$$failed of $$all $$tests failed"; \
-	    else \
-	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
-	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
-	    fi; \
-	  fi; \
-	  dashes="$$banner"; \
-	  skipped=""; \
-	  if test "$$skip" -ne 0; then \
-	    if test "$$skip" -eq 1; then \
-	      skipped="($$skip test was not run)"; \
-	    else \
-	      skipped="($$skip tests were not run)"; \
-	    fi; \
-	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-	      dashes="$$skipped"; \
-	  fi; \
-	  report=""; \
-	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-	    report="Please report to $(PACKAGE_BUGREPORT)"; \
-	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-	      dashes="$$report"; \
-	  fi; \
-	  dashes=`echo "$$dashes" | sed s/./=/g`; \
-	  if test "$$failed" -eq 0; then \
-	    col="$$grn"; \
-	  else \
-	    col="$$red"; \
-	  fi; \
-	  echo "$${col}$$dashes$${std}"; \
-	  echo "$${col}$$banner$${std}"; \
-	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
-	  test -z "$$report" || echo "$${col}$$report$${std}"; \
-	  echo "$${col}$$dashes$${std}"; \
-	  test "$$failed" -eq 0; \
-	else :; fi
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-	$(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS)
-	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
-	clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: check-am install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
-	clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
-	clean-libtool cscopelist ctags distclean distclean-compile \
-	distclean-generic distclean-libtool distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-#check_nfft_2d_SOURCES = check_nfft_2d.c
-#check_nfft_2d_LDADD = $(top_builddir)/libnfft3.la
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/tests/PrintVector.m b/tests/PrintVector.m
new file mode 100644
index 0000000..0ac611e
--- /dev/null
+++ b/tests/PrintVector.m
@@ -0,0 +1,54 @@
+(* ::Package:: *)
+
+BeginPackage["PrintVector`"];
+
+FormatVector::usage = "Print a vector in C format."
+FormatVectorRaw::usage = "Print a vector in raw format."
+FormatInteger::usage = "Print a vector in raw format."
+FormatIntegerVector::usage = "Print a vector in raw format."
+FormatIntegerRaw::usage = "Print a vector in raw format."
+FormatIntegerVectorRaw::usage = "Print a vector in raw format."
+
+Begin["`Private`"];
+
+FormatRealNumber[x_]:="K(" <> ToString[CForm[x]] <> ")";
+FormatNumber[x_]:="\""<>x<>"\""/;StringQ[x];
+FormatNumber[x_]:=FormatRealNumber[x]/;Abs[Im[x]]==0;
+FormatNumber[x_]:=FormatRealNumber[Re[x]]<>" + "<>FormatRealNumber[Im[x]] <> " * I";
+TypeString[x_]:="char*"/;StringQ[x[[1]]];
+TypeString[x_]:="R"/;Max[Abs[Im[x]]]==0;
+TypeString[x_]:="C";
+
+FormatVector[x_,name_,type_:TypeString,formatter_:None]:=Module[{M=Length[x], s = "static const " <> If[StringQ[type],type,TypeString[x]] <>" "<> name <> "[] = \n{\n"},
+For[j=1,j<=M,j++,s=s<>"  " <> If[TrueQ[formatter==None],FormatNumber[x[[j]]],formatter[x[[j]]]] <>",\n"];s=s<>"};";Return[s]];
+
+FormatRealNumberRaw[x_]:=ToString[CForm[x]];
+FormatNumberRaw[x_]:=FormatRealNumberRaw[x]/;Abs[Im[x]]==0;
+FormatNumberRaw[x_]:=FormatRealNumberRaw[Re[x]]<>" "<>FormatRealNumberRaw[Im[x]];
+
+FormatVectorRaw[x_]:=Module[{M=Length[x], s = ""},
+For[j=1,j<=M,j++,s=s<>FormatNumberRaw[x[[j]]]<>"\n"];Return[s]];
+
+FormatIntegerInternal[x_]:=ToString[NumberForm[IntegerPart[x],NumberSigns->{"-",""}]];
+FormatIntegerVector[x_,name_]:=Module[{M=Length[x], s = "static const INT "<> name <> "[] = \n{\n"},
+For[j=1,j<=M,j++,s=s<>"  " <>FormatIntegerInternal[x[[j]]]<>",\n"];s=s<>"};";Return[s]];
+FormatInteger[x_,name_]:=Module[{M=Length[x], s = "static const INT "<> name <> " = "<>FormatIntegerInternal[x]<>";\n"},Return[s]];
+FormatIntegerVectorRaw[x_]:=Module[{M=Length[x], s = ""},
+For[j=1,j<=M,j++,s=s<>FormatIntegerInternal[x[[j]]]<>"\n"];Return[s]];
+FormatIntegerRaw[x_]:=Module[{M=Length[x], s = FormatIntegerInternal[x]<>"\n"},Return[s]];
+
+End[];
+
+EndPackage[];
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/bessel.c b/tests/bessel.c
new file mode 100644
index 0000000..b272426
--- /dev/null
+++ b/tests/bessel.c
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <CUnit/CUnit.h>
+
+#include "nfft3.h"
+#include "infft.h"
+#include "bessel.h"
+
+static const R r[] =
+{
+  K(1.),
+  K(1.266065877752008335598244625214717537607670311354962206808135331),
+  K(2.279585302336067267437204440811533353285841102785459054070839752),
+  K(4.880792585865024085611235546021319249424328856405997616059563816),
+  K(11.30192195213633049635627018321710249741261659443533770600649619),
+  K(27.23987182360444689454423207588441928247906183222098381517165811),
+  K(67.23440697647797532618802514487659014539309769967631228874757693),
+  K(168.5939085102896988573266271875008403765226792345317141931940557),
+  K(427.5641157218047851773967913180828851255641047912371158842972189),
+  K(1093.588354511374695845824251425470842609463932161735715101482777),
+  K(2815.71662846625447146981115342659009307845123839607778216714826),
+  K(7288.489339821248106181443961076268087674263267653243872277051542),
+  K(18948.92534929630886120810822975396610096395087020475178444194212),
+  K(49444.4895822175729992545976985628670746866673348371619760370017),
+  K(129418.5627006485636645883284779364697034506653868683440024006502),
+  K(339649.3732979138795217016299149152510183515032946362766302471709),
+  K(893446.2279201050170708640309761884542780698188588532984237189283),
+  K(2.354970223168293373199392332992929747499669855367279146087662349e6),
+  K(6.218412420781002949862477755522804357608567431075431079140885033e6),
+  K(1.644619044061171082202060461873027324489627712325221659994963911e7),
+  K(4.355828255955353327210666008921769191706709948274652699301682074e7),
+  K(1.155139619221580641210055580833193182349008358683329204624917575e8),
+  K(3.066929936403647456134989153557154852040468018913248584558728394e8),
+  K(8.151421225128922565171561357437946877416833345683465070459333522e8),
+  K(2.168619088241376503688993617666420248551029614224983674396580205e9),
+  K(5.774560606466310315771339797306938266433245397873936700455049101e9),
+  K(1.53889767056608104628354178833613609965823297928610316806121827e10),
+  K(4.104200585475795553140327272390885136563132067541576482534974362e10),
+  K(1.095346047317572734826748564401226073645732030800725365612567578e11),
+  K(2.925206317856908662657116410293661481220676238939614836587072399e11),
+  K(7.816722978239774897173898167052950054449442539779470033476887726e11),
+  K(2.089962966491903795438112890993681402263449110349676238965437089e12),
+  K(5.590908381350873086500103776088605327594330420659633252120139658e12),
+  K(1.496379690415690565191814638473178109312332923322021932559495447e13),
+  K(4.0068575042540716033612386491417848375483205750833823294989207e13),
+  K(1.073388184945140635734893838464930548254210589870069038147915287e14),
+  K(2.876667778112440429102939018743956743168597811585388259920143996e14),
+  K(7.712455222928105049470387028786917387436448434634188854693758863e14),
+  K(2.068504714851044845188315030265960321539502797950162891330469035e15),
+  K(5.549742955314183764928385386334394109192543969981657372066962891e15),
+  K(1.48947747934198999242245915707211844449466595566709917645085521e16),
+  K(3.998826282831435597505844155816141234868515406251494370527209842e16),
+  K(1.073895413680451019816822994457615112605655249605048907233546246e17),
+  K(2.884802548590664595765772630141341158469461953875893654313773634e17),
+  K(7.751559537842989740397780668696425957540590900893385159036597068e17),
+  K(2.083414075177314816175748879721006850740042802685317811855913058e18),
+  K(5.601064760357453441253288431922714610935756843087707673641028089e18),
+  K(1.506154051104215054394880799275018149574868497690218864652256885e19),
+  K(4.051049958561881502403150208528714832868499711626942014609943758e19),
+  K(1.08983584160280871742529301224217160362225800814598866772484422e20),
+  K(2.932553783849336326654675079456853858051295754348464637687510971e20),
+  K(7.892573914864747628859691581460674812767894756747969277028909921e20),
+  K(2.12459265487660652056871806315958339727216109963237958243900645e21),
+  K(5.720234198352232790334648646673038414994667273849501319795982319e21),
+  K(1.540387598056586022981882040602949012236539330144407280660208615e22),
+  K(4.148789560733177775711966584844581045554582971157758177772297083e22),
+  K(1.117597102908680557440252330312308169878006518727217928273409229e23),
+  K(3.011057285402750844254905449919691113803883064535375009073890045e23),
+  K(8.113723742037748511430594951641382362967922457155325146313559123e23),
+  K(2.186686615847541129107989239951224110687022753263248916557364992e24),
+  K(5.894077055609801168278817440333904737978983020316213949659565109e24),
+  K(1.588934206611165724819385952343622493754123488150542792646030561e25),
+  K(4.284053401489351373487689539590410365728846884537220296619345327e25),
+  K(1.155209631701217253769264865575568811024866424185109147327096053e26),
+  K(3.115457918187897557650694682306942275028270357926158832387382537e26),
+  K(8.403039845625431814330407809138226251834590191703526139641942355e26),
+  K(2.266745504580402482346612567083138715657662968786714445572829081e27),
+  K(6.115322228329697487120491748473756806457519397750500297493418396e27),
+  K(1.650002782141142080206219328914127394026116255252557541946408918e28),
+  K(4.452432317970361891654934322530279034245542779628151603186076768e28),
+  K(1.201588957912546360498375395967869129353733632850675094875133012e29),
+  K(3.243091297746846963956376519395246164201892975208344865804206702e29),
+  K(8.753985270944612432992459963519116073415315421938008883059037247e29),
+  K(2.363168219162483471104054116304339476639286965580861887439359919e30),
+  K(6.380056142918597534977429545519136072702305046180553281007861394e30),
+  K(1.722639078035804682482269501155973485723379171937369601101899288e31),
+  K(4.651606402086077743494549469956883405890265150856115920007394808e31),
+  K(1.256173058097408646403325613863342561020808148088469867415933456e32),
+  K(3.392601579325684183940206288406749310455895248442554580118730353e32),
+  K(9.163305649751018958805889165173475090032352019522042643935971216e32),
+  K(2.475178404334170488669557055604816741023037025797109181730474962e33),
+  K(6.686440578105684544124828193740541433177631407252035460717839412e33),
+  K(1.806411872857697017039735673179409600758257628613750697833410277e34),
+  K(4.880575843818504654955600081311594074858489878499938077728909919e34),
+  K(1.318733593825985352694048063551898085336352557787738371327431147e35),
+  K(3.563477630408124112456386583509675981295125396365027859172323093e35),
+  K(9.629888111716449119891609199747156897132776193136573093246999531e35),
+  K(2.602543404422873394653370151078579731417701173457461289633354059e36),
+  K(7.034019697322303775839744667527863794825432576041470228870590053e36),
+#ifndef NFFT_SINGLE
+  K(1.901241929906489804817867678014679730480380284178119002890984985e37),
+  K(5.139238345508663835278491143551074437225477975963566786265569375e37),
+  K(1.389271406098962184295136044360963162648448300460678037021151849e38),
+  K(3.755794357405601907191452619533778214646739013457777677287809344e38),
+  K(1.015412047323622861123458506128318979949439049328250120326095335e39),
+  K(2.745415388947168612088253534423581168638303920667762206373930911e39),
+  K(7.423325861875348588563552460557813534887687445879568607405090463e39),
+  K(2.007304126311214310046362681359609158353334647885749594503448292e40),
+  K(5.428145964601007525699719297026126037833477055897514245121468102e40),
+  K(1.467956067407419253935815774834718367952993875125561963795542585e41),
+  K(3.970062351772964342800951229310239389328999942632802037502762997e41)
+#endif
+};
+
+#define ERR(x,y) IF(ABS(x - y) == K(0.0), ABS(x - y), ABS(x - y) / ABS(y))
+
+#if defined(NFFT_LDOUBLE)
+static const R bound = K(58.0) * EPSILON;
+#elif defined(NFFT_SINGLE)
+static const R bound = K(14.0) * EPSILON;
+#else
+static const R bound = K(3.0) * EPSILON;
+#endif
+
+void X(check_bessel_i0)(void)
+{
+  R x = K(0.0);
+  R err = K(0.0);
+  unsigned int j;
+  int ok;
+
+  printf("BESSEL I0\n---------\n");
+
+  for (j = 0; j < sizeof(r)/sizeof(r[0]); j++, x += K(1.0))
+  {
+    R y = X(bessel_i0)(x);
+    R yr = r[j];
+    err = ERR(y,yr);
+    ok = IF(err < bound, 1, 0);
+    fprintf(stderr, "i0[" __FE__ "] = " __FE__ " err_rel = " __FE__ " %-2s " __FE__ " -> %-4s\n", x, y,
+      err, IF(ok == 0, ">=", "<"), bound , IF(ok == 0, "FAIL", "OK"));
+    CU_ASSERT(ok == 1);
+  }
+}
diff --git a/applications/doxygen.c b/tests/bessel.h
similarity index 80%
copy from applications/doxygen.c
copy to tests/bessel.h
index 710c986..a8649e3 100644
--- a/applications/doxygen.c
+++ b/tests/bessel.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,8 +16,8 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
 
-/**
- * \defgroup applications Applications
- */
+#include "infft.h"
+
+void X(check_bessel_i0)(void);
diff --git a/tests/bspline.c b/tests/bspline.c
new file mode 100644
index 0000000..37d554f
--- /dev/null
+++ b/tests/bspline.c
@@ -0,0 +1,6370 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <CUnit/CUnit.h>
+
+#include "nfft3.h"
+#include "infft.h"
+#include "bspline.h"
+
+static const R b0[] =
+{
+  K(0.0008250948397625377458951191119189437666910427251818114476030015452),
+  K(1.),
+  K(0.002875401200013393462558808376339972424448043928787959456778629686),
+  K(1.),
+  K(0.00854032556917483184124508831112406765614669758644960065999413266),
+  K(1.),
+  K(0.009309802061612218506566563281715632520718187789234823409284203026),
+  K(1.),
+  K(0.0210582777474848294075134570800448832209549365963341040836232191),
+  K(1.),
+  K(0.02276867710840214805304770328090830488899392638760101044521964483),
+  K(1.),
+  K(0.02463686634073891745158311174386526235207539660979901639116109422),
+  K(1.),
+  K(0.02581746777142220518364910067733661937778218409941152924791113401),
+  K(1.),
+  K(0.02796369473237848530330096342856382437659665011212760976154888709),
+  K(1.),
+  K(0.03239940441749663032253454505372400514450696620496037027767422257),
+  K(1.),
+  K(0.04595951263894304561085983115982241802800469129970672539932031781),
+  K(1.),
+  K(0.04979854079028528227969757448194312467586837056783296529822149046),
+  K(1.),
+  K(0.0529102726248490237563802902094119784762314969199547369368748406),
+  K(1.),
+  K(0.06835502600439342622693539842944869596401049801988815501897745432),
+  K(1.),
+  K(0.0683833212345753109478394303230855542185616731474366178242173588),
+  K(1.),
+  K(0.07004091238476331929548236141542954881542440621612230151129970605),
+  K(1.),
+  K(0.0747659164749257974328623264465154325390904103129191524726346529),
+  K(1.),
+  K(0.07543565006521546676359806125309967939543248436284682615369064238),
+  K(1.),
+  K(0.09024249039893532947399396305884854900647837592680701827202290176),
+  K(1.),
+  K(0.1009637204126715314333599942879437925058621253782702401905179542),
+  K(1.),
+  K(0.1116387880223483349499215863575160811868221992498935047251274701),
+  K(1.),
+  K(0.1148246560777743055120197568749437794196467577678177603995586398),
+  K(1.),
+  K(0.115546529514882533539814964194896407446562859774731647058627901),
+  K(1.),
+  K(0.116036256927267647701729818519787674777527488302322096430135943),
+  K(1.),
+  K(0.1197140557016469312087382375942685513179146063527182433687458981),
+  K(1.),
+  K(0.1336467041369520879844093996765848008734533274464298574779971476),
+  K(1.),
+  K(0.1350401499937891107285825683809045738516176576255420562568151107),
+  K(1.),
+  K(0.1366510529272564092235993045254950925423113325223772992025503359),
+  K(1.),
+  K(0.1514551131358460167670227553455693568210121889196895364987983565),
+  K(1.),
+  K(0.1524569548322822735072244415697635303009925794725512911474746262),
+  K(1.),
+  K(0.1587117159034750687169157576676997190576647125311096613960081706),
+  K(1.),
+  K(0.1618852844557494537985622247955980178453867328042766759313749456),
+  K(1.),
+  K(0.164552407369248607055962495194132585632050115916909877653793852),
+  K(1.),
+  K(0.1710555467288749669355201958259068007391611452919253665299793017),
+  K(1.),
+  K(0.1727413234869711710810316510804759473875999275619575587396111962),
+  K(1.),
+  K(0.1737787272096926213612200424058889147738195020404376061186059043),
+  K(1.),
+  K(0.1754823954709382067046182600478345272295293748030627671305924544),
+  K(1.),
+  K(0.1872641575979125915420448672340798901296890395536145618845117951),
+  K(1.),
+  K(0.1903046432981408894110767495968501126728947173561374426169707975),
+  K(1.),
+  K(0.1914002394886157475154296231499814903302226150948561621144025167),
+  K(1.),
+  K(0.1931721295495270778135900552322012410411815889130032245214131496),
+  K(1.),
+  K(0.2174912144141265609503790179493026587981168646691854198483919484),
+  K(1.),
+  K(0.220571888927631850935118180192925071139955383018507049284017714),
+  K(1.),
+  K(0.2226218775821491434859562763819189901857642515326873603978439335),
+  K(1.),
+  K(0.2298752070613094891800940929017360260788746824413094928122485213),
+  K(1.),
+  K(0.2304328794515744260852043499800301263671269644433219193535805958),
+  K(1.),
+  K(0.2323153299455059180950899185467439969093360723270998964465802987),
+  K(1.),
+  K(0.2461264025354412425192366642434710484817449034502045276110343858),
+  K(1.),
+  K(0.2462853450763921549761584132959702788122762040824092710346323364),
+  K(1.),
+  K(0.2465383650131295742811604647329782266863287134482915395861725423),
+  K(1.),
+  K(0.2558919089000394014865395552303507631001094905930535476646490937),
+  K(1.),
+  K(0.2571590125115003415230643991062315734389485650246900874520448916),
+  K(1.),
+  K(0.2653258984524489094622320731382915186996798477182700012802427356),
+  K(1.),
+  K(0.2705081115343359633242394299212156014832628780835268877311904585),
+  K(1.),
+  K(0.2728704186986786229887382346868648090101610410119812414885155884),
+  K(1.),
+  K(0.2775554289436820867628791754091499047800371960810334249865394974),
+  K(1.),
+  K(0.2820372611522362262358792810188547808519467389637671859807506992),
+  K(1.),
+  K(0.2832886264569062816532473447385440278675355153460279308382892387),
+  K(1.),
+  K(0.2973968295406870263376667463294281711607595702825391614800779961),
+  K(1.),
+  K(0.2984367588395308867267043999136426113812245708654301170763573124),
+  K(1.),
+  K(0.3012564643059879221126698136885373563863402737579627533436407486),
+  K(1.),
+  K(0.3073034350991991101087273014867911056603958307621360476449910431),
+  K(1.),
+  K(0.3175070605295256163938737685472405942087076653765016205552138464),
+  K(1.),
+  K(0.3178695548343098477375497096932957024330509333626602604823398438),
+  K(1.),
+  K(0.3204281106825133104153147501348584304594350842643504706640372019),
+  K(1.),
+  K(0.3249649623025207117428818168187695412506342247326490638904513313),
+  K(1.),
+  K(0.327011413729494430157423759268468167574981852925743317900221601),
+  K(1.),
+  K(0.3281038191683508699390507097283401149345231833201473979031642441),
+  K(1.),
+  K(0.3384388169425068699031950792515891597181845484635880630651782571),
+  K(1.),
+  K(0.3434737649579987480938535663144112903856024630250217839457891129),
+  K(1.),
+  K(0.3489923575660302605190081597285246661002074974844040811802724309),
+  K(1.),
+  K(0.3507037248834092880124220212261840769723545038552693892977207996),
+  K(1.),
+  K(0.3570976539226239126681338714168682999604305412194682772399666721),
+  K(1.),
+  K(0.3582095100753309120007980044102754090101365334575101435110353498),
+  K(1.),
+  K(0.3646649157805303534106570806053233984323582168869468280924862058),
+  K(1.),
+  K(0.3702706062736018284188458319271761996046583222613827949975307558),
+  K(1.),
+  K(0.3723153844208860018691231493923671402558724631923999829274519925),
+  K(1.),
+  K(0.3759442159740040001422295361876700988689604484428756016075473571),
+  K(1.),
+  K(0.3871839785013742652617198623350402896796357376978170256177682549),
+  K(1.),
+  K(0.3957057597624174568372771222763786085347049522974445594458298808),
+  K(1.),
+  K(0.4068025195318734217629049951020301176662893935461726167939191216),
+  K(1.),
+  K(0.412065375337947090854491599968209668755607489315534871009854258),
+  K(1.),
+  K(0.4123328646752905420921789013629587395421486107958878303550499173),
+  K(1.),
+  K(0.4204137187935870288042485105342795862382320585716264787913240043),
+  K(1.),
+  K(0.4222112023135468793478207014894146245667641493713161862274787915),
+  K(1.),
+  K(0.4226176047707144475426750021734594474311378843896991906715554887),
+  K(1.),
+  K(0.4245684055907979886215041083144542682610661832998356496923432933),
+  K(1.),
+  K(0.4263748899844806508184409416906987929691313171408892129707768483),
+  K(1.),
+  K(0.4288253194230112960759710736730749100706122941683192299080545358),
+  K(1.),
+  K(0.4322799691782639798430867799830674218037121082878455405133577341),
+  K(1.),
+  K(0.4486318441277095633783578159161345296946130320606555241774547006),
+  K(1.),
+  K(0.4715718334959245357731846854870234563634288748952249588421334627),
+  K(1.),
+  K(0.4723828406638149540601895345124641104433640627639862360700360196),
+  K(1.),
+  K(0.4772948660932934023242486706196740568995668384374707319446010622),
+  K(1.),
+  K(0.484586935602668748749704434003331795906236062106470038656246971),
+  K(1.),
+  K(0.4850034014610213464747169096435334356939065525369803021201229628),
+  K(1.),
+  K(0.4865083869130210532300592461470896109714723807725496391075896072),
+  K(1.),
+  K(0.4934430349857068655662618678054612007162795088297773830495394557),
+  K(1.),
+  K(0.4953841177172795261509613239088800712592415015837699657250900467),
+  K(1.),
+  K(0.4971909378001138865649698820237857332451029185660202161722095665),
+  K(1.),
+};
+static const R b1[] =
+{
+  K(0.007315724269401951140591625108939050997240609693417506132916164814),
+  K(0.007315724269401951140591625108939050997240609693417506132916164814),
+  K(0.01455695279186339304268227298024433847936480547896112908614530158),
+  K(0.01455695279186339304268227298024433847936480547896112908614530158),
+  K(0.02793776013188493684720318021946353421598598289893628731618802256),
+  K(0.02793776013188493684720318021946353421598598289893628731618802256),
+  K(0.02826251427972610382899647521436799221302947704723409881207299275),
+  K(0.02826251427972610382899647521436799221302947704723409881207299275),
+  K(0.03049867966512798577162881492744256299690817947250709614223872648),
+  K(0.03049867966512798577162881492744256299690817947250709614223872648),
+  K(0.03378140328477206978087827246061506883816129766053693080782295275),
+  K(0.03378140328477206978087827246061506883816129766053693080782295275),
+  K(0.03950512654839071100209976966386183641340452740644756434376832056),
+  K(0.03950512654839071100209976966386183641340452740644756434376832056),
+  K(0.05814953020138947148662050071946713613758360594563878495392109182),
+  K(0.05814953020138947148662050071946713613758360594563878495392109182),
+  K(0.08167898053571856571145913031375783935249549524972439705736572962),
+  K(0.08167898053571856571145913031375783935249549524972439705736572962),
+  K(0.0940764660545629909697374004307701913973327052362801250411364789),
+  K(0.0940764660545629909697374004307701913973327052362801250411364789),
+  K(0.09941049715634981624651329510134105174055194951472626750335183701),
+  K(0.09941049715634981624651329510134105174055194951472626750335183701),
+  K(0.1279540722710473169016156895945149798183662195216423353514408256),
+  K(0.1279540722710473169016156895945149798183662195216423353514408256),
+  K(0.1299745720234447359956516128346038581712462309362850676206730491),
+  K(0.1299745720234447359956516128346038581712462309362850676206730491),
+  K(0.1320599049070818592091079804469757027459448661848700942933146358),
+  K(0.1320599049070818592091079804469757027459448661848700942933146358),
+  K(0.1504116972291071820335749916925875100252026225619232885041053327),
+  K(0.1504116972291071820335749916925875100252026225619232885041053327),
+  K(0.1516533618767299380843973417659870996420866662261081262400325187),
+  K(0.1516533618767299380843973417659870996420866662261081262400325187),
+  K(0.1529216728082163963423306706849554451445141833534388336171212637),
+  K(0.1529216728082163963423306706849554451445141833534388336171212637),
+  K(0.1614285559623316670357187982327222149698644333507156969971279343),
+  K(0.1614285559623316670357187982327222149698644333507156969971279343),
+  K(0.1660135662610498832980453930048682461725693088103369300496740983),
+  K(0.1660135662610498832980453930048682461725693088103369300496740983),
+  K(0.1781301315769795529971643984263673981570123051065286128669786779),
+  K(0.1781301315769795529971643984263673981570123051065286128669786779),
+  K(0.2106558417521765211124834085528089868670781059946019236903586272),
+  K(0.2106558417521765211124834085528089868670781059946019236903586272),
+  K(0.2120072391061675373642227172550932354363185167465765069386776953),
+  K(0.2120072391061675373642227172550932354363185167465765069386776953),
+  K(0.2305865457025780084173053091461123075088137665617022592978418067),
+  K(0.2305865457025780084173053091461123075088137665617022592978418067),
+  K(0.2446092811054668929928872679876088144477933141521055595514923614),
+  K(0.2446092811054668929928872679876088144477933141521055595514923614),
+  K(0.2469609682129279343941438642229811290626208149016319164509530693),
+  K(0.2469609682129279343941438642229811290626208149016319164509530693),
+  K(0.2484270451276993698846812218175039836243392605075441331284051981),
+  K(0.2484270451276993698846812218175039836243392605075441331284051981),
+  K(0.2544561793152044518234490958391655071678923685873483244677003871),
+  K(0.2544561793152044518234490958391655071678923685873483244677003871),
+  K(0.2625076722488421084197371873853510615424715669335155102372047785),
+  K(0.2625076722488421084197371873853510615424715669335155102372047785),
+  K(0.2663735312473389413159493196838586396477775601173513998763969374),
+  K(0.2663735312473389413159493196838586396477775601173513998763969374),
+  K(0.2761632553183435093704979646462498140526441280089001529399312445),
+  K(0.2761632553183435093704979646462498140526441280089001529399312445),
+  K(0.28393456172928259069821268358005990214896515717779008970578847),
+  K(0.28393456172928259069821268358005990214896515717779008970578847),
+  K(0.2944050827414107890496559217817893279133755636434188033577236821),
+  K(0.2944050827414107890496559217817893279133755636434188033577236821),
+  K(0.2990341069852227421842642965562158613473546849370285194622858191),
+  K(0.2990341069852227421842642965562158613473546849370285194622858191),
+  K(0.3009361626117378157674642777921468811736977942942391538593645211),
+  K(0.3009361626117378157674642777921468811736977942942391538593645211),
+  K(0.3067526405218276866911994721641256056836344229774657386737508202),
+  K(0.3067526405218276866911994721641256056836344229774657386737508202),
+  K(0.3193264448487545520901321731667849311805552883975904184166832058),
+  K(0.3193264448487545520901321731667849311805552883975904184166832058),
+  K(0.3287907889455133143074902225408719222064023091371427866406968147),
+  K(0.3287907889455133143074902225408719222064023091371427866406968147),
+  K(0.3565700222482982863774018340488805278690553837134388192818583792),
+  K(0.3565700222482982863774018340488805278690553837134388192818583792),
+  K(0.3645099448546234719007580868977822521483491995931396740378990981),
+  K(0.3645099448546234719007580868977822521483491995931396740378990981),
+  K(0.3676233298118654216976552836513536227069092646196463342582118641),
+  K(0.3676233298118654216976552836513536227069092646196463342582118641),
+  K(0.3719369203713411010251539657006506941340860557794218137046921894),
+  K(0.3719369203713411010251539657006506941340860557794218137046921894),
+  K(0.3833844157487681357206464586570966710686597653594510552351254773),
+  K(0.3833844157487681357206464586570966710686597653594510552351254773),
+  K(0.3953370578512464015858700672894345679119284855211978220513911322),
+  K(0.3953370578512464015858700672894345679119284855211978220513911322),
+  K(0.4025625352985120430760792247992404321617722941178978826354085593),
+  K(0.4025625352985120430760792247992404321617722941178978826354085593),
+  K(0.403510439960302665125678630594810929181539220040654841013970376),
+  K(0.403510439960302665125678630594810929181539220040654841013970376),
+  K(0.4086752989660339213035114254540397097055021198504417729332378648),
+  K(0.4086752989660339213035114254540397097055021198504417729332378648),
+  K(0.4122464126905164986311302074366919659184504843580679494908354269),
+  K(0.4122464126905164986311302074366919659184504843580679494908354269),
+  K(0.4227579224329609310758740483872132247357599260593620393646895017),
+  K(0.4227579224329609310758740483872132247357599260593620393646895017),
+  K(0.4561528256730453340823209118293038151861190032580679037282548038),
+  K(0.4561528256730453340823209118293038151861190032580679037282548038),
+  K(0.4688829099044130410638194015840932538713729514404105012000960352),
+  K(0.4688829099044130410638194015840932538713729514404105012000960352),
+  K(0.482432478743984893885450802330224323194809649973883507018021415),
+  K(0.482432478743984893885450802330224323194809649973883507018021415),
+  K(0.4830971561376426576667362143528870947274319995866430163017177178),
+  K(0.4830971561376426576667362143528870947274319995866430163017177178),
+  K(0.4832077977320699080149283703404652677297951660930728479337081208),
+  K(0.4832077977320699080149283703404652677297951660930728479337081208),
+  K(0.4836324344228254459744843828344147540848978196190065316191302047),
+  K(0.4836324344228254459744843828344147540848978196190065316191302047),
+  K(0.4963536859707388320060566201159264779323252882888474143375870749),
+  K(0.4963536859707388320060566201159264779323252882888474143375870749),
+  K(0.4983324848174298765350322382397576560929798822632813922845384254),
+  K(0.4983324848174298765350322382397576560929798822632813922845384254),
+  K(0.5269686056101403336038157028750086898948140412447265431046102351),
+  K(0.5269686056101403336038157028750086898948140412447265431046102351),
+  K(0.5344707029504037286385633769410629379019256512182257316303935198),
+  K(0.5344707029504037286385633769410629379019256512182257316303935198),
+  K(0.5429038303129199032953977266526600658143903453850466534714088808),
+  K(0.5429038303129199032953977266526600658143903453850466534714088808),
+  K(0.5853862017037120685331904485908056143173618387338274491066973273),
+  K(0.5853862017037120685331904485908056143173618387338274491066973273),
+  K(0.5892410347363079135664215451555906097556931499731079081916419337),
+  K(0.5892410347363079135664215451555906097556931499731079081916419337),
+  K(0.6039929845317165463231444043308685237683587921229737775204545575),
+  K(0.6039929845317165463231444043308685237683587921229737775204545575),
+  K(0.6166089713853574234193219480394200036542711748825330327543176281),
+  K(0.6166089713853574234193219480394200036542711748825330327543176281),
+  K(0.6207037331741952847594008802617523471622774763910331591680361551),
+  K(0.6207037331741952847594008802617523471622774763910331591680361551),
+  K(0.6409838418784062114929821503091369940112895128106989532756003273),
+  K(0.6409838418784062114929821503091369940112895128106989532756003273),
+  K(0.654813886515797085541797067378150758854944596816007292262005442),
+  K(0.654813886515797085541797067378150758854944596816007292262005442),
+  K(0.6665176577041307786409806753556362840593716583547153704272384741),
+  K(0.6665176577041307786409806753556362840593716583547153704272384741),
+  K(0.6691469856239938443297281050043874378845048524975398039330960932),
+  K(0.6691469856239938443297281050043874378845048524975398039330960932),
+  K(0.6965742373752946189625060521769743777352171101632461378495450229),
+  K(0.6965742373752946189625060521769743777352171101632461378495450229),
+  K(0.7031272077837981290131319056012141958870114437945191780995435876),
+  K(0.7031272077837981290131319056012141958870114437945191780995435876),
+  K(0.7247111770486850599376413703077999571678624592317214670458066127),
+  K(0.7247111770486850599376413703077999571678624592317214670458066127),
+  K(0.7439984513483767255853528691204885279406733489149018409092991779),
+  K(0.7439984513483767255853528691204885279406733489149018409092991779),
+  K(0.7528294884317840999905226690637039932482419517611517630783657896),
+  K(0.7528294884317840999905226690637039932482419517611517630783657896),
+  K(0.7629500306088767091599556207210294040574221512355398168986815113),
+  K(0.7629500306088767091599556207210294040574221512355398168986815113),
+  K(0.7666182230940689829725280647858106673331472134887091567896361207),
+  K(0.7666182230940689829725280647858106673331472134887091567896361207),
+  K(0.77058624407570840664513074151509796371994710331002366511346233),
+  K(0.77058624407570840664513074151509796371994710331002366511346233),
+  K(0.7709659881055362332656251086098231170460407103110864927209967055),
+  K(0.7709659881055362332656251086098231170460407103110864927209967055),
+  K(0.779097555234408173140027477327350200787441078592356965167108773),
+  K(0.779097555234408173140027477327350200787441078592356965167108773),
+  K(0.7877314835892230775130641110889378133199691947722298608041490835),
+  K(0.7877314835892230775130641110889378133199691947722298608041490835),
+  K(0.7990774963520234945763959319724575004916364613104679235753992397),
+  K(0.7990774963520234945763959319724575004916364613104679235753992397),
+  K(0.8185361992040150530875702480110325923629310240795468184809582992),
+  K(0.8185361992040150530875702480110325923629310240795468184809582992),
+  K(0.8207565563363459086864000812931935211670888258492386641650001296),
+  K(0.8207565563363459086864000812931935211670888258492386641650001296),
+  K(0.8582489422173031995169878094091770356131318092747857451508483275),
+  K(0.8582489422173031995169878094091770356131318092747857451508483275),
+  K(0.8810758578033507125787578852527591887200897444337561806963375145),
+  K(0.8810758578033507125787578852527591887200897444337561806963375145),
+  K(0.8950060389815060606755100073204707723517206531025970222189489447),
+  K(0.8950060389815060606755100073204707723517206531025970222189489447),
+  K(0.8957020504687054001120700066596106666284273101363206634704737195),
+  K(0.8957020504687054001120700066596106666284273101363206634704737195),
+  K(0.8973085804311459739865915460229426607776724896183259815862082853),
+  K(0.8973085804311459739865915460229426607776724896183259815862082853),
+  K(0.8977285608880782318930269082720218168629170279687977406667869898),
+  K(0.8977285608880782318930269082720218168629170279687977406667869898),
+  K(0.9091673412554886237229371416995121223864432513102437706234700756),
+  K(0.9091673412554886237229371416995121223864432513102437706234700756),
+  K(0.9096359217133417428359712450007925845808994732565742797245829124),
+  K(0.9096359217133417428359712450007925845808994732565742797245829124),
+  K(0.9175517499189858462253269359107622934398789207025092884981700696),
+  K(0.9175517499189858462253269359107622934398789207025092884981700696),
+  K(0.9307782019930857952444799494853953863749611772413709400097705643),
+  K(0.9307782019930857952444799494853953863749611772413709400097705643),
+  K(0.9467140306374971173993703229731723641980215693123204388573476796),
+  K(0.9467140306374971173993703229731723641980215693123204388573476796),
+  K(0.9669741607956457575747363234938106706149720081370566148495949657),
+  K(0.9669741607956457575747363234938106706149720081370566148495949657),
+  K(0.9691157247311471222660524482415213476161980187131055021404840612),
+  K(0.9691157247311471222660524482415213476161980187131055021404840612),
+  K(0.9779770713964010197642520446287443920165499560113818015776049131),
+  K(0.9779770713964010197642520446287443920165499560113818015776049131),
+  K(0.9825536023093744438558545188376506575034815406178335686482342742),
+  K(0.9825536023093744438558545188376506575034815406178335686482342742),
+  K(0.9867997693926106066653326081678404662118670209910245793078384104),
+  K(0.9867997693926106066653326081678404662118670209910245793078384104),
+  K(0.9894680805875316567123856613731861083257596197694246098014911094),
+  K(0.9894680805875316567123856613731861083257596197694246098014911094),
+  K(0.9957092593961457151116606739995048548488645897265127362324014921),
+  K(0.9957092593961457151116606739995048548488645897265127362324014921),
+};
+static const R b2[] =
+{
+  K(0.0171822076256982762920144102800006835843088337238148901626315885),
+  K(0.0001476141294463019985417505218129008274764092360829906406870572778),
+  K(0.02914632377205685715526739449884377283508004997684781788579161232),
+  K(0.0004247540947127833310481799716662048330002641537850224961259344771),
+  K(0.0327484485742226167289678676495964910923015297172735876467627339),
+  K(0.000536230442009251669238341088925257116908844338508483875105378504),
+  K(0.04936225124074036284858546719617489645064649136641667836606169191),
+  K(0.001218315923776986745740911978924146399290738374214755151163623237),
+  K(0.05331927506580238382939319901613986568124187919086163419519378266),
+  K(0.001421472546771347901219945920286684719922996008333058339685512436),
+  K(0.05734958934073827430153002735969260823958736907152250024520759651),
+  K(0.001644487698775660545813294927229485376052964347726792041819202242),
+  K(0.07188433718601521194320611593892153122022311567599541490416954333),
+  K(0.002583678966336364699752682835752452384478379977109270237838516161),
+  K(0.07900892838113470645918506544557276114174403756395070612307310843),
+  K(0.003121205381967636653566720008329129227423847941813784706185103777),
+  K(0.08187055243545796569580479434461061054621951941882124099057085802),
+  K(0.00335139367804353611912442254120410143509581467033083749932567988),
+  K(0.08560788900370538045892470013476721628621852830848154961422323233),
+  K(0.00366435532983537029903725971066812740336089194595147898141515019),
+  K(0.09548158225095875912403812768167074190596751991299807997367919988),
+  K(0.004558366274573301369410244049902409939663839036627689319577315963),
+  K(0.09794647923928660480672419292363532057331423211283121238050699423),
+  K(0.004796756397686000941312149840951496344931879314625633719837997324),
+  K(0.1156030373656601022518901631601965817322442144089454906433758904),
+  K(0.00668203112408310289690269704117562715094460357605224241292350461),
+  K(0.1217711476223729526162286249961191636938808353042410737458240668),
+  K(0.00741410619663487299552885655413148174728915778055119939830455676),
+  K(0.1253249008728766826471915312650595611335623269852838059832025033),
+  K(0.00785316538939818334604786549122342163168047659844432098692443016),
+  K(0.1490511469334531778603096148606407860977856643555925819975901414),
+  K(0.01110812220108892433308839363855254752759369208415992776441716571),
+  K(0.1500176682310151008977717832862075196633889706372835218952626929),
+  K(0.01125265039073545873615241774620206736000440456016409697738901412),
+  K(0.1722865694690976475093554141180767620529058340677816704256649188),
+  K(0.01484133100971510482538454114938333709194640082171716973870380039),
+  K(0.1770234486801288391549282135462377519000479978844984146946740621),
+  K(0.01566865069130310442273041747955042078866317864507462738944306432),
+  K(0.1784754130916832873770268576528546116689809613715989743531130002),
+  K(0.0159267365391234970840154677238146836145454377966468509256374612),
+  K(0.1861861040956511855971934014867663445229508849272072902051048923),
+  K(0.01733263267915832959389692741040320244975990590935461020024135547),
+  K(0.2151000475849518480037790647046760473810033374023121613097191015),
+  K(0.02313401523552427466943406523710998179414701360426873024464618838),
+  K(0.2355365407779000483291435556892873485161506841792555675777533592),
+  K(0.02773873102080968615184349686559399695902330789261444320596428934),
+  K(0.2363462381299951481935150586823610028698476275245976233203866111),
+  K(0.02792977213910018624223914939285223069856193292457697909312838514),
+  K(0.2373086667431700214150870490193936138969675425533823251237997394),
+  K(0.02815770165571046466935658024171937816552783954753089226094844061),
+  K(0.2498905877387098099164249956949241227253936728851148280008834131),
+  K(0.03122265292019891279551995474905743640084927205853629591377449737),
+  K(0.2540013052199765217518031190953937039491635957073756518318296933),
+  K(0.03225833152672583611851371341431117569002854602898814700056320063),
+  K(0.2665936737258442887131501709317251469141836386859127818928954823),
+  K(0.03553609343532095971753611319801588945362475105737779955488143007),
+  K(0.2681542732185691378040115858789368526976004887302498173143652528),
+  K(0.03595335712268951277195777729513788103481107738529701860143964534),
+  K(0.2953091412093672240862200308034038076246262736586075856732233425),
+  K(0.043603744440906995620373464494331454811977727129422321052848831),
+  K(0.3104480574989795782489438601807888343288818827642914570147733956),
+  K(0.04818899820244486517455439344995250667438381850806953716458171234),
+  K(0.3219025907785603178919213828287209521320675667138687712301713026),
+  K(0.0518106389749746331037109175069316403305477895502253962466567062),
+  K(0.3259850547961680708539377673734035920554665405336081631993087731),
+  K(0.0531331279752303498873385277334988426343917937022461485809262236),
+  K(0.3315999574492793669097272693281238237338783662107734510167909694),
+  K(0.0549792658901819433491787601563359480512822154549777249992927809),
+  K(0.3352451592678631175121733941145350805063883241371584318668885561),
+  K(0.0561946584062674539564795788071671836985915687307937701367706029),
+  K(0.3631148130766143845348345604272868441978826763613230709806453709),
+  K(0.0659261837378323024164114253543172110603456648961306741070670567),
+  K(0.3644238147058940876821154773468954391796944750736108757740332729),
+  K(0.0664023583623979139623101733554693038480659925033591790478342229),
+  K(0.3839601853737984949362497862611885298829945216642174355165422936),
+  K(0.0737127119761408518383066885473591848042885991495773860722099507),
+  K(0.3857528491226438762380119988891734115870088681263389849945109739),
+  K(0.0744026303031186251787372908570258808813390597087845768904029378),
+  K(0.3891510807645750068187153314121785222365126051403610527890865324),
+  K(0.075719281830118389936797905957526494843048674780714469625980064),
+  K(0.390429504939912453392779537623077059022848579263854903770234664),
+  K(0.0762175991638125614232837420769442983807195260109820498428638948),
+  K(0.3941593904340332397323902899010175019957669220584359744381856882),
+  K(0.0776808125336643271068351465056055094720606567382905790953484591),
+  K(0.4183694666631126047974854995573208979606791169630018702717195502),
+  K(0.0875165053179886445868522099131926750521372800735816881489408846),
+  K(0.4192007595578657149287169384678357981985960832163758206266574848),
+  K(0.0878646384069457717738028494483373001057331703140865750962708243),
+  K(0.4275424555520675553272794495026755617016132589530770373890628491),
+  K(0.0913962756497458305828626771339418167606556925335977392810646704),
+  K(0.4782437902202249343692275591850175523603866736389120477815507393),
+  K(0.1143585614421032572894901581360573983780208481548369083716148703),
+  K(0.5098685202102494717086454383480092494511753152401468681487614251),
+  K(0.1299829539506947869929713410321329702543028074879648676690778544),
+  K(0.5623067879666079996459687519700861713064991076805074774049520234),
+  K(0.1580944618966619235365873389124896385674592216232348537311593909),
+  K(0.5781971809927350975729818538893619961905232065386693069975928832),
+  K(0.1671559900539728343964844390866200391607809717447739296429866887),
+  K(0.6087522724784269712742930422607699387529855578868538650488548972),
+  K(0.1852896646238244978637508080913823265979942955885904687437350408),
+  K(0.616900319955581205915752681359321163956527435226931657372939787),
+  K(0.1902830023806492317164002368053726433228557194677202307920624739),
+  K(0.61690565553189487385261595547686563240379977114829820556473152),
+  K(0.1902862939136184681866464978922517505246734060614390298239335847),
+  K(0.6385506050769211447899718227655482253202554660204766934890010227),
+  K(0.2038734376220510560458875366177934970818444002424975205124901452),
+  K(0.6399384476985620158028866180009691842114924576530286954183111581),
+  K(0.2047606084214225962700831654019186707487651688608959126016165999),
+  K(0.6738046193789873489607376625126006794844754359837135213235960705),
+  K(0.2270063325482310068441255919843974548400560637437722325741114086),
+  K(0.7086124638723865965734883705073669337420859248422879183874068387),
+  K(0.2510658119776471997666561416676190181206904017639398962686762023),
+  K(0.7324718442150902649030783866727426158564773690554111937364866623),
+  K(0.2682575012839277309831382181907670253836871949426276926219363636),
+  K(0.7361125316667021744782818165867312977471162341703691696019978184),
+  K(0.2709308296383808058006575272659712216189640928869346689548273576),
+  K(0.7441401520483755683390297334260981431752323906429472196439621543),
+  K(0.2768722829452897547780620711702782210101818575816988964864604638),
+  K(0.7709059631416098179594018828364711401747188959837653931282338912),
+  K(0.2971480020036465375942740736633104258562537642436677321144508845),
+  K(0.7879007067849558990696130019523151705519020144526835645307647721),
+  K(0.3103937618761165253638907091271007382443453016824046738764001606),
+  K(0.8675890119833286674838905821872522354917692046961296033732692803),
+  K(0.3763553468571042070937641227798743095709628758262220948743771782),
+  K(0.8901967567276638877631604652632145041733721329703593000474487791),
+  K(0.3962251328442258006098609092620629330966504264429711971656981085),
+  K(0.9405310945715489940041640344015158143476057935313434887175002005),
+  K(0.4422993699279780187686699661046972717998309986274859759177467919),
+  K(0.9461083506213359994123691423573855747616684546052545089329314528),
+  K(0.447560505557712427392666750949544970059987320740640565817046298),
+  K(0.9656745715283009937683687679200994826380961558312744287783732551),
+  K(0.4662636890481838561556941533393636380514358366331333910642340479),
+  K(0.9675155332064997651757099904773828831967612392008631026386665477),
+  K(0.4680431534979287748896729665989617089383599977910981952121914838),
+  K(0.9792128100712170559269383557805119254428567279915457025469227994),
+  K(0.4794288637037847034566803965880651585462478744749664036213740759),
+  K(0.9994944681623737647422029275577816123208540277566743980931081896),
+  K(0.4994945959435931916213478919656856031416231624985111650995803686),
+  K(1.010331849738592872250751416746096065272296025627081677082351395),
+  K(0.510225102619572010648089878257767791332508764512019887246831804),
+  K(1.015401953396469617477009878058623726333653866019924542438445565),
+  K(0.515164733228042595491203951031467882032525339275773990667021105),
+  K(1.015991714272568419195459291374311528367644741555213804773399622),
+  K(0.515735979347192950710753958058998593454811022848270847069245506),
+  K(1.025520324737541562191265379754049869687497433907873512819478777),
+  K(0.524869037762831986386123338871904905797099328459990948082375861),
+  K(1.048153763311978467842546015669023502690225643968251233275976917),
+  K(0.545834978390872424342029286961400095909632015783631792160537833),
+  K(1.053786954410552747160588718490330698815252088661760620343152779),
+  K(0.550893917945789867539834728260507677278705792298823078379193683),
+  K(1.054288076738993803100958908381214714748757809169889996647790343),
+  K(0.551340881462974923062299281577443047622642466665257073925212981),
+  K(1.115948441166571971994449205635746935018485391314708893417829847),
+  K(0.602504400157613970032598891687320822573451444070233860539757018),
+  K(1.119209033722123668129389421013899563517697651882026290261509688),
+  K(0.604998240001161250239691965422261319842915535095262545440525615),
+  K(1.119345715348006144471277616325707359805197673338230506386836572),
+  K(0.605102315576078835077533491568169176087626194890359894043939153),
+  K(1.128228304688334368087514518952639790283685135692878071903136845),
+  K(0.61178580656509005440416289598085615082586243307240498559285718),
+  K(1.138460057750203971952028661333302962499767532885281181217928966),
+  K(0.6192888701580141529530140823730171077453195366783301207951187),
+  K(1.14869693702576502141853922507372666385852025849168896680389877),
+  K(0.626586157944920692884523033179395370654667459900899130673305549),
+  K(1.155789371684805149514121750459427649129308595425478183237246825),
+  K(0.631519043354858781044431691415382615054241714204122956092523373),
+  K(1.163203424800978012517466800450553781595243616423537837749044857),
+  K(0.636568066934209527492770140634412339420717301663595730660434007),
+  K(1.174250832982728534472382022849783279822473302312812992863680967),
+  K(0.643887480187553779982720153376712042935574906754267506367053879),
+  K(1.175674809247560252991696134334648984438351233496177650880549785),
+  K(0.644813170643393571609794261502780784761764250364976044784813992),
+  K(1.199342867848072524242192611310264740696237314092050085370627125),
+  K(0.659605288886178417710234249926130766422686677010860584592641064),
+  K(1.215222861104599183751013671409614178156022856127384434196877966),
+  K(0.668901981162549591569756934146453723031643231768309506457950181),
+  K(1.254636155493930998181525514619562648453576364072233656346042305),
+  K(0.689796583809201592513046385500721046055945750373472902152796368),
+  K(1.292904890891990702691041551834605868277126791101625627340700204),
+  K(0.707111615783541724589909678696258725853216787536628377997968093),
+  K(1.294509254397651540937383394498906311038538083826972896666028864),
+  K(0.707773553471790907432418158037309606414311577107350835642920141),
+  K(1.302759752735643859032662861361216665571872047474179583008522762),
+  K(0.711096284859095649849387038418083637641696504831039058774609325),
+  K(1.332423968856607694114999041511334417371376850985639627953936926),
+  K(0.721918273786228811987145840503529645840560726326474607295906236),
+  K(1.333472275412728012540417395736759370591335941458983916057730822),
+  K(0.722268516943785688773909946589371534636663255775827664483907014),
+  K(1.34560552798749018743211353683454467808351431857192080883236878),
+  K(0.726162347011978324187367915316760503760643753250983539337524371),
+  K(1.348825263761381609020464997927373611057444599007563169316785544),
+  K(0.727146199123184159420909292804160274404029371891795519626865195),
+  K(1.385744349111254293320610379607806491768764090009637902729183696),
+  K(0.736945646239989062407405063496625699471885292581597432326857462),
+  K(1.413894831808879013890946443993788069884517490264444899865666958),
+  K(0.742585900010778766728981323146878383114284667701448560669052777),
+  K(1.466286021030627665510645764196403665096162025663579227604802975),
+  K(0.748863367622052719942751817246481010021438091217234760403684099),
+  K(1.482907949541841779424755241269223660029361147348756055632034042),
+  K(0.749707861811135773362124820562396638737059257671730031683152795),
+};
+static const R b3[] =
+{
+  K(0.02941795770612599707291449634943287793001937034399292231530086115),
+  K(4.24312970284307471651086750622756043591261129815652849003467804e-6),
+  K(0.03549665850599206563409341941461526898892676270198642059399466301),
+  K(7.45437380593778287651514572967185143423018453898456835069029257e-6),
+  K(0.0384842234911493493970842836295697424688286605558223170203952341),
+  K(9.49941659218122737032392916567244571653051244021773840376718757e-6),
+  K(0.0774439994791263240151868186580447677135811863934552734736639897),
+  K(0.0000774126740954083606709334272052641665340203901504661083990593922),
+  K(0.1035586825304253175963551474229555547705822533624240770718605945),
+  K(0.0001851008017102923155043782769622785628863352057670817687000064276),
+  K(0.1113200430007542952786572161636319829716241849310216393289353942),
+  K(0.0002299158150971715195496312855567982582599119611537062633561186802),
+  K(0.1495135179458370392039582984436627417558451168169542418989860528),
+  K(0.000557044807560981268461157252774928428834636026819427336887609813),
+  K(0.1645954480105041370661578071345020506296532838671479901033452094),
+  K(0.000743194027148758815320142846728214348257766052759389149164087522),
+  K(0.169557751761374267470162840615415725334212792937220128584010148),
+  K(0.000812459456467003007911687428212965970869895381322169659722031362),
+  K(0.1785373184722933416018212665673091498424803370108036401212485378),
+  K(0.000948496587051228711486144353719500983935157966821732124259681713),
+  K(0.1869595150144304225726302242744239127597836952837365087903477389),
+  K(0.00108915946017510030097456523150709739135028950429275631135617564),
+  K(0.1908888628744596557167784139731740953923279530717766536860115672),
+  K(0.00115928581593062468438318781650539857201714819385486735744890998),
+  K(0.2177218953838579838272670200090175548526173794865928602078659158),
+  K(0.001720105438157046938561934339081156011807733815980249392262497961),
+  K(0.235532933759590830814331725801323433417402572514269433622066415),
+  K(0.002177728197491606514409537407295770975835892118041974840580418372),
+  K(0.2497147616206881952169373002510822213845720993025254130700544666),
+  K(0.002595263133561925040746283092443466575139719492307402554886508241),
+  K(0.2560207561786829059982926661143927834242694545869043554036296446),
+  K(0.002796882860276064539755586922363074156820513531673338153164960635),
+  K(0.3118509851387869046480633444460666841851158872880379830985397368),
+  K(0.00505463861217044893420579615329107839253981955119677750480468221),
+  K(0.3129161359898050373435933579027016219043100836657090452294327668),
+  K(0.00510660923065241675015495660105430439366272695036969876030959718),
+  K(0.3239072621460155930747230748717990994792232229642259232603995467),
+  K(0.00566383776863728639182322569187804983986436237848725301758820652),
+  K(0.330768391746004552283119785858112926790757573320714164890371564),
+  K(0.00603143642645243851758846965852611269999165484631851811822755613),
+  K(0.3585891811258144726535684517911686093004422274419415852013532544),
+  K(0.00768493674271603957247542707789612938107532821596873267462028452),
+  K(0.3745159429796304148066751292780159955618464163882499622349169503),
+  K(0.0087550711552017401084182181792998481540348758954081226936783805),
+  K(0.386829421908278230382025323233381537602998400907936616390478169),
+  K(0.0096473324743105660937046438592545823149782555577031670841397762),
+  K(0.4088852034058278248829637087405251072911638743944349008441241214),
+  K(0.01139338921683344018766543801048212331375489161942559877889110051),
+  K(0.4152342174926195948174412995608438718894271812551290971057583521),
+  K(0.01193240960564183924405835667493554272968178824472613844930344664),
+  K(0.427801164439192971785546981824017993241395004638253475669460392),
+  K(0.0130489220459518877962440254558275577790425126333454905508911372),
+  K(0.4304441830131245008686508640117260457340604904385757279441870094),
+  K(0.0132922738200242043437851555988847381825884900610862952239966982),
+  K(0.4792507943193999001634114858862716207547269547027591045334411623),
+  K(0.01834582614970197673994947915046829496522868897421450050741384311),
+  K(0.5342148758243091632514685316444054471350306746003709297867761582),
+  K(0.02540953289475438532685377029867846607528161414277810073051992826),
+  K(0.5849552615017801993994353399843876813269658284451557062591458559),
+  K(0.033359282769156907821354335656977772429427870373929630350187301),
+  K(0.6298637274914248809482570623234342989912841194112387133335085764),
+  K(0.0416474625698634266522037370392393060156142583554307642611405383),
+  K(0.6870102098925284155606342128893475565099320155641828957345716158),
+  K(0.0540428599121906437842339588256960860481526793858653026133137977),
+  K(0.745688833248231797032593697251060562681832308447101279984255606),
+  K(0.0691069408059291587836476374795725619009395455436597681291387545),
+  K(0.7539610613964844917829316084049602263442639939909322032194164494),
+  K(0.0714324426287117115396651946014603971889023261453951053857898886),
+  K(0.7568448515431583703359872103440608475955634139067656892229708546),
+  K(0.0722552374429119417065754013344982579379432205147850893264888236),
+  K(0.7618665417785952083093398479164710550125396122165060269271084059),
+  K(0.0737030489278770490441537009744580373027617725114543438607941231),
+  K(0.8050516435809915377107903067083602495063642215851086352035274727),
+  K(0.0869600884059670750585821870106026223492637962919398044158005843),
+  K(0.811734641812410673662114254388820017501128465043531148268286175),
+  K(0.0891437687542770815062778040495926040495133437364867511997342371),
+  K(0.8205900530491239443037153095880720115332451332026906070394837905),
+  K(0.0920931852826875240953184459450473627914588103081083229535995496),
+  K(0.8283748397296549164158863723068078414955058997805232419845040434),
+  K(0.0947391422383823585120657097492153964112538539226164703605026187),
+  K(0.8388235352999285767783970236315254231808777164080698525651480249),
+  K(0.0983695242914900603117603271487216188002826787268491007071297629),
+  K(0.8645193574935188454139979165450528810256110359859845190551040539),
+  K(0.1076893896934018531357870997304848121081318400711057678286663199),
+  K(0.8902313440031267517566431548252766602827712474378150947596533909),
+  K(0.1175864809442565370230007193710817000762403120269105910252320758),
+  K(0.8941330041455070836648088384250746159759567918102657760021895988),
+  K(0.1191393227584873093577697436147787400283536664081273728208069204),
+  K(0.9115591739348964336589225823456962712884472002625030001550137935),
+  K(0.1262418493817703746652457100622838732665777701644175478684321769),
+  K(0.9380550989770800058865401414347049487271519585766687348870615523),
+  K(0.1375731860093920249203699114855542641103945925344455127479136179),
+  K(0.9514961160361080471796299962237512308705867985665931332283179388),
+  K(0.1435720194752858466976615646056689960658096387300472772604817743),
+  K(0.9696979680147267863498976462924665623271977770580052053283191157),
+  K(0.1519701199579130853429188239048671742652923623488818659670148965),
+  K(0.9968180782795446885907356625871543576582136326175154432743271617),
+  K(0.1650807627500620875724112744087098192509560913009188626532869204),
+  K(1.028118329372583237534665983622004776264106966892326933966009958),
+  K(0.1811100358320629542036471938173760857477000486667193574402934388),
+  K(1.028326976255511144974167306857707814681649919556473390301194106),
+  K(0.1812199985543910107766933318160563524416777615394267552571262807),
+  K(1.060007826125726701713749801066365917931058813398135599626703637),
+  K(0.198363007061106235763842089491361203150149506881073765466964592),
+  K(1.081889002889178832290862193635639529773507285544599753783262512),
+  K(0.210689506510487447676256889819213201605091268674603693066213185),
+  K(1.085659000779449445482004650177280851266071761162220272495295545),
+  K(0.212850639328656386486316459891288028117646972290558873102737291),
+  K(1.10555259775825216166168502601375162894090240065956472652820422),
+  K(0.224425641727877051059468499519184693341908410675416991707525168),
+  K(1.180418640815324870968235145769621316509009910859571701162672234),
+  K(0.270215036750607686715964055184442450644156636628288349519885737),
+  K(1.193893466281555870279819414810370866176701325310982950948404009),
+  K(0.27876605689324356579518203100229823798399697048197052016121247),
+  K(1.224933473034473982041246822260237284485397482206998354782978991),
+  K(0.298740674727450689984048625061825948972176523266990757167914509),
+  K(1.245482880627180388471906346524747712659904591494531083460917448),
+  K(0.31214240370866403463819449898338753604128737456386877373920218),
+  K(1.247205482098494000126509823683740920286378974089962432597731129),
+  K(0.313271251371747747565909634049679131311623563646561067280684268),
+  K(1.294839377394785961786053657831988300602201135126301931359515531),
+  K(0.344736252954399860074089133311248009876262002412839914982795447),
+  K(1.302557331389642230314825485804621256303320643518864687064807482),
+  K(0.349867610675568742574346680253406278449051119712814551566085281),
+  K(1.307487918597160472037826457318065328760672802613391794071730496),
+  K(0.353148726060251458628204562360296964056150813153007633974822399),
+  K(1.322554492004967552274067942696446888066471187301811856771000781),
+  K(0.363185102312786492327158626784225007857984572194530665732100668),
+  K(1.323484684905456927180503874227206178933942501133257132954043612),
+  K(0.363805082390926229015208994854744925381934568533698377561024073),
+  K(1.354676839375411310943358277426768125644351770883372066404097188),
+  K(0.3845945129320226527892225126095985738562558840116410046466119),
+  K(1.386740586228918703384872667146301033870182323202581269861876004),
+  K(0.405899037954779736511321514679131258795621497359137721282229225),
+  K(1.41205777458290678989623115520595863344752538913504778723756472),
+  K(0.422609382359107354129153104427331433171634753252619244440867889),
+  K(1.440688840819045017284050725281966854929351455747527223326095113),
+  K(0.441322061579022411804540051451493970293207796593894884995043443),
+  K(1.447140533740519214205171670612635973815137524685960630668587258),
+  K(0.445504817390982160893542356911259266855688955764822946964008983),
+  K(1.448894032239520250614083218654720375018450566472646594100408767),
+  K(0.446639221624026719933999914089219280440102709032396059914916027),
+  K(1.456023001731557237218868507805868389035582110669829372251737577),
+  K(0.451240073892599015604155619516480851801838162804154374865972821),
+  K(1.47359745929767804436099977435106636258853246011728116710642051),
+  K(0.462500007717238470835528909862103640608469267675341332729885837),
+  K(1.491331021964140536316094137579395306385999973374218575922832544),
+  K(0.473730093341173150015217228058749226168450716660358540942058334),
+  K(1.506509901499070066302576950752404839841383326535854825594060257),
+  K(0.483224622458239683578905230156175256741201536405015145950630821),
+  K(1.511821200214077435650779918843726151623526841826913767015702721),
+  K(0.486519155655003012762610322633004783895138976883824119780608054),
+  K(1.528615623742920070215309027428016511204717704334005803372432196),
+  K(0.496835002017573624992269589626152283216928428992799823521682285),
+  K(1.559303549404296581438769468223224456298420916323913762646754235),
+  K(0.515247874649577357831367036610048292565203301643319648304577761),
+  K(1.564042189274811101260706551074505994070510771850173065854214602),
+  K(0.518036353079830184682635538582618305426607840019153766704905163),
+  K(1.610620290065936250159335887446804753261666376413312029215391947),
+  K(0.544568313944919407870489800867881926105346175618516729467342799),
+  K(1.610807961130150194188747262174353968119253626474310288533326277),
+  K(0.544671768840128107651724316298790755774628038999889129296759194),
+  K(1.654693038615142719076161048984958377387706378459708072774331592),
+  K(0.568016434480122572287292847164570003123155516659574482563329578),
+  K(1.667585722294932237709061135987179720541905505872697719959583416),
+  K(0.574533179168436680322259970245039661057795251368337310622957897),
+  K(1.669090698165938031495782688692905888286562038932817326072772068),
+  K(0.575283144737636886996513903249901549276965961674351522117354863),
+  K(1.69881773295636932347741934924323348145766296391068257192251746),
+  K(0.5896161445521891017571041313273811440443685271203586814972784),
+  K(1.74118882333450522536825714888673885385334275490169494473313907),
+  K(0.608351445160846392309193783268499380214126315399849496612640376),
+  K(1.752916935582790697879394169564152437133840766531163588316962736),
+  K(0.613158841517036597281616280060245686996467510863875861045884232),
+  K(1.75893454191856845637459167137113695033077594257812990777422626),
+  K(0.615558576441978805795524376032444070150293414792867495670756591),
+  K(1.781143813792896030243928171312730035190537853665710466109086552),
+  K(0.624010026538249971727276841682155508661798466162785052289998344),
+  K(1.809473841399319890138574996332415574384862685978667809918537249),
+  K(0.633824520016812437418932376210808844369868482188800912184944491),
+  K(1.813684504105783301485876872939099709680227105909918710882289989),
+  K(0.635187030787002065646106263195416650906803701152675897771520873),
+  K(1.834893059980594072868376429828406323484302112040887607065300055),
+  K(0.641656797518200459981650857699206640986260063373649061586274397),
+  K(1.873107614366252892135604869392279806146979339407906186114781689),
+  K(0.651586579272202277370974630501986881979769737482802737275988427),
+  K(1.903638907316661952035458882678039429709851574129080481236312029),
+  K(0.657828585028196667669829731802240242937553476461113423355332622),
+  K(1.904373496538659781611272758742286657108588804930866602135333623),
+  K(0.657959463348174872460842050375019320533721218835894528042231993),
+  K(1.925957204671193984840897609345075103106999057968782183439354689),
+  K(0.661387294850723068564025875189948514491703782743991117271053421),
+  K(1.936924560718247615106417225444786839741990052255097237734630805),
+  K(0.662813628791866767728282652982444601098354971089786378198688443),
+  K(1.950476169622502401036420013379759878073246311164207989223393094),
+  K(0.664274788206653576115591062428620312296609527962620359173025614),
+  K(1.968604096276966327817005031745298854906769310041541795613507088),
+  K(0.665696437410723089863923426904101580621025844129640620024203564),
+  K(1.986447700668080050658980733461487754379610521691827074348136428),
+  K(0.666484246389774304885303113272333005126001483689717936362325827),
+};
+static const R b4[] =
+{
+  K(0.01639225155374272101528823969927321058455305169150191216923454351),
+  K(3.00845277529060070563322412559120119923977633128926651124493136e-9),
+  K(0.02274922170154523419253923877371876755735932158817746318658535894),
+  K(1.115976195169707410468372141572095950140493670899813930750338516e-8),
+  K(0.02782491443681683665380614353125312581717010984663703865640733617),
+  K(2.497607031593859748413810888107552422594733557372570349403729241e-8),
+  K(0.1627046133913302945509519444986652556677588371167856673835554993),
+  K(0.0000292003614548063675493769584343103803825469924788635688550678777),
+  K(0.1740625892763363560112293228143025124734161927251621799985273817),
+  K(0.0000382481572930246775003075251915162613630426542194299867899027732),
+  K(0.1842734141272993884358708504693300938889348397837771523880531227),
+  K(0.0000480440364223771188970172659417178422542929215272738476098563773),
+  K(0.2187882023081370943484871541419324989219747706361182251713964929),
+  K(0.0000954738328279516956805469171291999199278031917102732706018660564),
+  K(0.2201693316788672160108100175092962849781720668050178151862776836),
+  K(0.0000979075210767557203380612110598621307843616770910765997910800002),
+  K(0.2229860455618969122039750007158142173347245896999350083644929166),
+  K(0.0001030147710164036594876912743959103815880981506572253579792523358),
+  K(0.2274969825681897099198017627570389298073869569313661751668257066),
+  K(0.0001116069708883631974917975485720191392705226780629478030225109653),
+  K(0.2714426156156849342327295513360380992568161205894745429013723019),
+  K(0.0002262043145836559034874632792294694485703145992231681671530172552),
+  K(0.2730964025220332770559420567058271166476603856298538999173182124),
+  K(0.0002317675742257716759953104514009586535613957206098992659120383845),
+  K(0.332319518102750243757690641413185194348786650098029154840251539),
+  K(0.000508173666220004898055859680227036393281130349977388526854822689),
+  K(0.3353178303816565980132860666754231508189490245511275058726147436),
+  K(0.000526763104033206409263385421304405333665049300929667745560929211),
+  K(0.4116673901451947422920234778530481786822547941806867194534870393),
+  K(0.001196670603938797875173138747956507225791221262171494275617928551),
+  K(0.4630746708057080687852099409242934679145404549579498925813002778),
+  K(0.001915988353898722032053844797998916136621316294789180028048979092),
+  K(0.4735423066085367736818556055920117489453129194254578981979529246),
+  K(0.002095192347978309670144690669970161867890522266532109719447760281),
+  K(0.4769898037668132447564054417728322462359264988955455884988765757),
+  K(0.002156875814158685258675756244149680253209723422334695290852888119),
+  K(0.4965113231426758810790093368715317606879312973805289786519310268),
+  K(0.00253224304576464890716159142343990762880928564086920764171318926),
+  K(0.5144296487160311847831296883384971502469586725993787048921769812),
+  K(0.00291804994942721226388746447825318534948437052219562507678650137),
+  K(0.5300255088685840216252877046140489316469851328396475322640980302),
+  K(0.00328833340966840451769819790257377043909023641459194593260525407),
+  K(0.5379513308221398170258961211102529517976507944639332870666075979),
+  K(0.00348947991758770705231548454930208802382560851900625191795805171),
+  K(0.5724425553329915827335391402178611857528721053847189995349259069),
+  K(0.00447421042206654556205196589665213778973720003039781728120948021),
+  K(0.6560546076363576558948626264929056504620949534477350346042417312),
+  K(0.007718780984576064964882988433541437098395198043715206885763651),
+  K(0.6570014650924013894113725318189361459082467979065180995902247187),
+  K(0.00776343838202749495328780778275294531758144516452114551147646913),
+  K(0.6666386682165262012565475779159321243601720157719006354546837391),
+  K(0.00822907012248303906566609431311205753051103226202617590672151591),
+  K(0.6750863635467703176439572060305048743212803467711896125211303353),
+  K(0.00865418351552290029225662353569500078336259973860047292043760724),
+  K(0.713374976620127723956833982702569031202493683000739313665627568),
+  K(0.01079096399758385657636435441715144266398655766877351646285226899),
+  K(0.7206643544548909349676142111679347188613140257800514921684047899),
+  K(0.01123882539826754410281820713542460666856481460365301163654520185),
+  K(0.7215552854252799796432702957617419598343940565102512416405810122),
+  K(0.01129450513852451445039998135553150532776870535000010044992347822),
+  K(0.7729698294266316587526553299450409463838286243250151596222125765),
+  K(0.01487438196541051360171784742884763571217650158693503447829113252),
+  K(0.7918874599450554555780031149045252005996358736978185486419747457),
+  K(0.0163848557030246298040145179307842076458547410109114726508419821),
+  K(0.8619947372237195766785807621895444382498762916773544544881794228),
+  K(0.02300420428099833422953945253063546744141197535470251237814193855),
+  K(0.8627101334396421303588142187135023856776616953823963063484280909),
+  K(0.02308066701903082911044231593018311670488562519131519998013128895),
+  K(0.8913754032846674233810525467511932823798638275391471407942439006),
+  K(0.0263045781931260725020389164698553494290789656925828196207146014),
+  K(0.9010506368177718480991329560205346411845896073357468556478318943),
+  K(0.0274653760745088101831129604544105765426020153834416587521284354),
+  K(0.9094043962875891382993090711500841050814085973805962250757745559),
+  K(0.0284981688779307487223515023730752067179850775773176505752004516),
+  K(0.986889986486057138785482456630699832853611325433924938897769916),
+  K(0.0395242582170661514846110365210248374358931621766023779448910225),
+  K(1.035504040555890818112330785019116799714236234236163017775794698),
+  K(0.0479063351832311913726519147497410843079730161987677025507492897),
+  K(1.036100009755411422681848306166363885060461611483957728577783249),
+  K(0.0480166955621537955889661855852683854344044579255631247449473831),
+  K(1.037774981435127784524513304511975676165260465945187760746523248),
+  K(0.0483278786775111210907465651000031433251575866750705726192146971),
+  K(1.075343770216225059654181547857724655459872628249996297966177671),
+  K(0.0557090456328227314433917839436784689076984026645046511183893475),
+  K(1.099753343155343340133600512580095619823219634635496697057054058),
+  K(0.0609288398126466588751398762050140693324394564223996132629695291),
+  K(1.100356272847601367731356234425833475378522902344956831170971938),
+  K(0.0610621064469718958366169398397548914644711101461320867784500315),
+  K(1.110400066447195221630635351786734791013406996592662657353773503),
+  K(0.063313225357716235157215220659594118494904004209085779482624872),
+  K(1.111448797578389563561680720225950242825786402401296069917909129),
+  K(0.0635516765399290033146465853426095701970442799564269219190267019),
+  K(1.121756684305178480731941239579836530407758453047727211529537779),
+  K(0.0659298255412090976364766458509436210596041594606717943983677425),
+  K(1.129579851025825128669545484694730387821851106898184383589306362),
+  K(0.0677766815565603543191475895711863253864969418633336245090388909),
+  K(1.140204219850314995269799389752281661747434664240399012638493252),
+  K(0.0703432789952922377906899407590265310336450039973806344412324112),
+  K(1.169403716889072945604411224174207115077951986083248441883663292),
+  K(0.0777480126423593095020246376853947529632245512236967250441055865),
+  K(1.175314554224974357035514677198039327353570873540466113327918643),
+  K(0.0793101696953230704791341811423892459618034256535152785277739374),
+  K(1.201894013906429016293248365058010970361907157666213089671336879),
+  K(0.086600628196166512724264534252300724302086462310920737447244716),
+  K(1.230133330509727161390162990365529187926690369294036623172257765),
+  K(0.0948264370789218648249608109606571091788040591922665147758550813),
+  K(1.338403414371051143497179063073149480835755193246523742358917754),
+  K(0.1309695845080592718931517006252387211804049218700373818005130805),
+  K(1.339464650945851665130532819638009185307378423706739270447398562),
+  K(0.1313597107990653951030946160695617116845790397082630881569928398),
+  K(1.392772143857396471957404731674801891358608654757710753151074984),
+  K(0.1518284669088303232333790070945337304119157911316349017382051181),
+  K(1.394642886238585113804909857702046729409722556882356765963310868),
+  K(0.1525773972243329401936698022565773060883136886346868663327315528),
+  K(1.446992823926932153411196611235251559923381606736874963297699646),
+  K(0.174347658266267385645794414319238840397438457546329972972663296),
+  K(1.47986246464313731154625215087794716703203440693716914492212719),
+  K(0.188789676666208502943663293863836909042033182399556439140137286),
+  K(1.492206357864283759831805333876445075393636216625567880562434394),
+  K(0.194359844186074366162095897935283857047777526594619572560634778),
+  K(1.536349404446726464945744081632044661799735759976600222931702662),
+  K(0.21489883459050858638456814437074927970759662729154409769983297),
+  K(1.575725184149552696063261242584082365914830738363484092241187742),
+  K(0.233979766376099248644230769336308400018348329382917799565987442),
+  K(1.596333945263412788479618656269233585084726420518521991356361502),
+  K(0.244226428210907588555760648581324629538323159873082512927101183),
+  K(1.62552150123278576477750548294903866016138659779951753664126789),
+  K(0.259015281063060981866357561745924003907502744983364646651067638),
+  K(1.640611428494054759648486659146825423460846232517732356217824168),
+  K(0.266777960787177931677556772695545268789335524261892919544174466),
+  K(1.644457462912356767264741385756706867737373815862805078653764809),
+  K(0.268768326140934647452277319709786776971381224060706155297199389),
+  K(1.650291046770375183268354466810306215306525429443493676078938251),
+  K(0.271796100390895027201116091833323599598836160968915404585098482),
+  K(1.677119214657421573196120545920671247819227159758187213125815331),
+  K(0.285849011037822661016774245609309665432629912028943848241960498),
+  K(1.692480050938230098254166545128290926069909118108767571056393974),
+  K(0.293981547985271102368648916417126039297634903233829006019403405),
+  K(1.720688713422452320195216484881961710125567283638001640570397453),
+  K(0.309054812995804533483619838688316611728673409023172686419936351),
+  K(1.760347309408961169166026972928824253850105257737258697183282348),
+  K(0.330480904743910144842199142921608773260716500570496802234070621),
+  K(1.768181011176894295735279067546450990334511721457967202192140472),
+  K(0.334736477260620036510050312577073503690404941196921839244256504),
+  K(1.785806843979181056238794549126386933684748940747792847210114513),
+  K(0.344329721631674428718879018052978425049012752117797856673780913),
+  K(1.823193379820876498231648540189283870040487247938528120721915846),
+  K(0.364715546185882858966337499293840868463288464730190951795491572),
+  K(1.825509210723860675783621112549750018632565232951644469922824751),
+  K(0.365978039778932506093936725606368279917072862759094812770181968),
+  K(1.840553915707708052874204850435012606551450155041525689499280905),
+  K(0.374173608983371359412596647100648175342424839944308742435786706),
+  K(1.843814626399239222743717544580751155684634699555712595976776544),
+  K(0.37594798490025455203778657929887033412482133703072761550670531),
+  K(1.846009711840594858339407392162950751089768034730397745196250852),
+  K(0.377142005776447100081849881873207709672854945603793215237625355),
+  K(1.863366141200338021322064955163811569634409751322942346407504251),
+  K(0.3865665095395926396890891089249708742717641596274241612596904),
+  K(1.892437320127491422526101223329631839039888186106028058041037847),
+  K(0.402259486683522129214220842814575227975147813468801049005043977),
+  K(2.013696713169687188310824568590109221248106834652599378367441695),
+  K(0.465133513977335004906848834789193554428174573540235981193560151),
+  K(2.015089480283787626032548994258376782453982520536260004666409488),
+  K(0.465819445452272204474900199791846741253561013901442461643876953),
+  K(2.048816189510324804942417008486444150255590471522947879881178272),
+  K(0.482088927708716715562866608427609900720458554080271834899372128),
+  K(2.050276191116295271119177910757805652862168500613734690417472207),
+  K(0.482777560905855358284060930000809595252194800252671682177219796),
+  K(2.062097491579622670346609395432902991220512029263036322306393919),
+  K(0.488302044861018605977452093846421887489845670089273312895155431),
+  K(2.075885764043442150395991775563116533728349408688223177060084037),
+  K(0.494626343822437244512588979485115896438275815554282549924664067),
+  K(2.076381791800669395301515119127914956755142284675654613061974315),
+  K(0.494851381623383403635639145841414394228783778610424592276124324),
+  K(2.084152745339081035565413120137152768558046687242034702755452684),
+  K(0.498353850831683349409252702403267838832456916621335888883624471),
+  K(2.194131022930308456741699217846510845333387372711932690797895807),
+  K(0.542674112259573604037228875362222275699638683917166793501586474),
+  K(2.197763213471764391360650786876076636378677584670999665860319149),
+  K(0.543952483410255143587321350230406615387688071957413574347804648),
+  K(2.200624878418291546356843287885535520621886249459121746660832752),
+  K(0.544950599617949009711836012307717989905521074643202598868079019),
+  K(2.222359295986161504523728470110646341645397469737814116347634686),
+  K(0.55226610766441951371525574684663583880874463805659950167151609),
+  K(2.238240378533534996630612755700139092864386560328514663473352303),
+  K(0.557308203676800419787974961833497465651106505885524097615820077),
+  K(2.268825749455613019912294866202148924023834290707294495099650383),
+  K(0.566271373903743693467929497320069795764657631255772446239254958),
+  K(2.299713196432407360589438786604703454546064381098649086910299047),
+  K(0.574288880399894078514391867714572274697305892277282196420129177),
+  K(2.336624152516292580187448329846209564670433819454911403491418965),
+  K(0.582454152399226145996495828760507173739544930892385516892951928),
+  K(2.337021160544606680491982305950456794574978467717609433218365124),
+  K(0.582533405831570069139382157026196410297540160007276357505665781),
+  K(2.34939488611173102286958827120178126056840123122903196395634003),
+  K(0.584910762778158847621988913772183560320814914785251876494382074),
+  K(2.384875319615378818832872187763184558161508989666389804679654491),
+  K(0.590718690900425878699659685425548445744046367816067700543952439),
+  K(2.49949803398682906964645100980909495616748202365484065310792509),
+  K(0.598958175852175218839095147052760734378415512894656675668848993),
+};
+static const R b5[] =
+{
+  K(0.05968243279640637084779479777949735302975477455096525039607547806),
+  K(6.31031940828346902701464104821330358699098233023499634126760046e-9),
+  K(0.09532105276228941507727837697104628968439015959309104571896664308),
+  K(6.55787153799800729982202028671553160393509316711399366061305869e-8),
+  K(0.1385424744325702448988499632881149037357765887995499956535341937),
+  K(4.25337284739091006374850118153490825629071966752876659237999293e-7),
+  K(0.175140217910001766415286891222592644127910284697309178895336478),
+  K(1.373245493715950168882088665605175272375507638690766557758312551e-6),
+  K(0.209702659888422207753507105330030507634066081071000192163329657),
+  K(3.37939105049155350944814574895697795021668795836356412495332456e-6),
+  K(0.2321203409114012375044610016354527280851860326777141357545002215),
+  K(5.61545243066858311077042793336013864440806056555523147003677426e-6),
+  K(0.2668309989209277608509634841721310416503287487900033344536552769),
+  K(0.00001127197882482191779496988791706139204896893126275393181093817574),
+  K(0.317748808599294477778084890196132119568741348200243746516157444),
+  K(0.0000269922077670376077264080112318437053210140965001778882956826815),
+  K(0.3487322170599719098027380727839665995160338560747043286062500944),
+  K(0.0000429812565683050373644909799267894504014693653999182404906177919),
+  K(0.485986280692857371579624835506697989675033063161280690532567185),
+  K(0.000225911740141152545261169226261209441486335072955030889504106342),
+  K(0.5488000600659446488425237961929931002588582725140066050218048396),
+  K(0.000414848481845775803633638429113225351133055966578863754648101005),
+  K(0.561894702610115513258436715045943767895478430295346375822261519),
+  K(0.000466759797198133635997014802725594975610799511729510101573629696),
+  K(0.6104838332185908349004147619804833593992744431368229527101289713),
+  K(0.000706625964688337738203467522026321243934351074513090363558954529),
+  K(0.6177072119099088842262151662616329661504772002962659228534004944),
+  K(0.000749431793373264750760444006248813362997079382069203922073276851),
+  K(0.6624339944843334673366184576867593894594924486920549373923838901),
+  K(0.001062996440634212672667456794067768746122356879297578910721692254),
+  K(0.6680359227360529897568373123515530514092522021106690261571897049),
+  K(0.001108709675336523309686129806375491898812770732812600071011076382),
+  K(0.6741548421136211658717924915844400118727701742292454017168393385),
+  K(0.001160424915247770530987230528580417809815201513617947314388423726),
+  K(0.6807174169196911323860643849400779400941342673868021845639039657),
+  K(0.001218016207453896783352847962484826557768164316690656472015928932),
+  K(0.7289542614311556977315228283932428834237217567955014901957703362),
+  K(0.001715221254875431253825048430022094341312057062908218970337448853),
+  K(0.7498466051424553836832518122524622857191541117936881952328019473),
+  K(0.001975517594071561327321904591392989434663226267549012231141184573),
+  K(0.7951094291115771637454765811751910089165371126350085953066354588),
+  K(0.00264821519192356507827646931381520509011381984129236091115539996),
+  K(0.8140312332422182160555524933764689109639192795728490956910731561),
+  K(0.00297868169379472454257788541074993243792834358197124919724497003),
+  K(0.8231516993938755963953683902798096364897272844009665270323412893),
+  K(0.00314932985025513191543287016172791373332624194178864559238373026),
+  K(0.8363629355234016006353002571212259453943246088623378770340442851),
+  K(0.00341030047304410532561473250223369630427882837835523825498498983),
+  K(0.8530911736226558508749959495765504459389647154632468551024119801),
+  K(0.00376526889891108818824515521489797768459398016269057060627862804),
+  K(0.8653227676256583141110761092561423648110314070656021519611096806),
+  K(0.00404305274576125136460134611689209704277317962087764095586745516),
+  K(0.9106098835776644809121135306733625700045406606133157392394237942),
+  K(0.00521771739228570035213117439127987108427543277552105146135556899),
+  K(0.934792706051670586036900948934631648314087402798497939326577857),
+  K(0.0059483337661953783081544341272113144132334071247164044139969493),
+  K(0.9381461647437542828685978435090883876462539378242599460129415339),
+  K(0.00605579675951765541967096919396401287574030903923862315761829131),
+  K(0.9386888340366318291536796411533829385480372545530326336984422134),
+  K(0.00607333186851189321685073993242829382552637307537928809693515458),
+  K(0.9387283896761321074514165078546587059514214123234045855908620098),
+  K(0.00607461160448350327820251870384996655794409785409594855441946562),
+  K(1.006482342678513013212210015139508382422263992022528574491550312),
+  K(0.00860695544800135292456855212749667307375737513824186843638975893),
+  K(1.015026907149405641409255593966489791175981438878064120295916456),
+  K(0.00897855665163434447322883839420380800500979634201791770005339776),
+  K(1.092117028199705099084034034832409352245869153092072196127213105),
+  K(0.01294653418152039268864144374480274700321047481980118244402147704),
+  K(1.118342114626183320400664265431493344281926492830673646105948241),
+  K(0.0145766450096221232536109528965803418014006361282423680433865384),
+  K(1.12459503347936742352068393729137390328771058810164014169699972),
+  K(0.0149884271336591834803618899408577486859160673497650067616727218),
+  K(1.135791077836712011630552512598455138666244345710437846546563357),
+  K(0.0157487962016541259525462515017974652227500861051520611004874155),
+  K(1.175370744911578586910862194330975441150477013473127356701898298),
+  K(0.0186853144577551274788737030612691942131703306158181274582591385),
+  K(1.246673028823322217722810707992149913378747681049122790130729568),
+  K(0.0250490103974445484901679642052669834261009177110179667871809205),
+  K(1.352987333628342824047373662717772978995809185036827647668324885),
+  K(0.0375082049074947378547613059901039161786909640290247820159450039),
+  K(1.39886162450021004664210886861718257106369150944275996487650703),
+  K(0.0441319910352872081131560055547294245289307848838788189133824495),
+  K(1.421494333485490249176121023315481175608539607838215944971918547),
+  K(0.0477013089571030155948148680543160391823409507994853238671637954),
+  K(1.486709466030520322615996779319389454449235731362624087265012775),
+  K(0.0591614335518552963816608695985922705399900833797902757664861254),
+  K(1.488036306662697773131557340784249954853331190507726787852451413),
+  K(0.0594132925305720395339633168656991330773585251974364208025597691),
+  K(1.505128762082788730748919434590127880111432422948200619923946693),
+  K(0.0627262237765112929335342206680229501788830017344237571832185279),
+  K(1.520977449368985001183962500319344400150000770784250627072604758),
+  K(0.0659127344348495581792872425060642251877318763293963151428147387),
+  K(1.531730868257918449281226325533813099334144850497446303953278407),
+  K(0.0681383652675707724693720831188761042991943883696240950501385078),
+  K(1.554014302865430225463226405956479524261026926639133372065698276),
+  K(0.0729159296390165320573848367562390736563639368487257199132462309),
+  K(1.556720732305307619353355152486732625886316519291889466653807646),
+  K(0.0735115234914234636162568898199267123518781757142765684465212679),
+  K(1.55734313563935348926418249559352450714907952619087065722868767),
+  K(0.0736489658730526165735151457077165348627105352595504421800048495),
+  K(1.561846204911846890802882050323753709028716926122541337598101336),
+  K(0.0746486282133639281137365545653198040569901259780901104981571498),
+  K(1.572668193966218034234727899147630891216316503897731050146895736),
+  K(0.0770890586703172237338552795414915173028982879382149166313188202),
+  K(1.610747096882859485644507388105194374249508610952745561481031294),
+  K(0.0861067915964965182972654585543600903337290923668210936816492356),
+  K(1.626286751059936798679806782535953175626348150687150050134276498),
+  K(0.0899814750073953499102632857145222316480745474190153948565959152),
+  K(1.64567509443971686848956324723140466317337020350448000476448276),
+  K(0.0949753946812816923630646440252799991580750498612272265235704995),
+  K(1.655764033065633790643839633592484540617848553835531776546266341),
+  K(0.0976444089098529944017828526611160225639281189253389249886239228),
+  K(1.679212406098876831811695833385395817120468056854272542585506508),
+  K(0.1040343503529895678381408467340471812925021971137201738728394756),
+  K(1.68173530286526189208324748639633066697949743166094592689428752),
+  K(0.1047374470868916419894957299410559117677197816625625685717703157),
+  K(1.683837270386039585425502274579927539198828867947779591083003537),
+  K(0.1053255496731106595255679519944306171640251032939214884551913589),
+  K(1.69561060192356182114136353824829247665726507621558432755464472),
+  K(0.1086584456767344618919899304107312602152085019286810503272308005),
+  K(1.779787763883586837062284441698333258410540851225531254028582055),
+  K(0.134403255981215028523332149755316418972119948849702938405000482),
+  K(1.780528443098175807874574158196633500415671504082302975666551816),
+  K(0.134644582261250344675273959242818577838656956162133326786984753),
+  K(1.835562071229586882549796858424069673372330407685891646111006334),
+  K(0.153281714882405688304842575199266500400049425932700393952716842),
+  K(1.860153197808504511563075250308332791312934623566639350669923898),
+  K(0.162051002560551183177761139978725080609507191597788394845178048),
+  K(1.914580471548614383962132934126998226912434486314530202668884494),
+  K(0.182386472667384949004411926332630680995694004407312022329810336),
+  K(1.962824908232815340319047511976182905288120709468812843410348826),
+  K(0.201415623566817514216338433108457583278955853709999487422521496),
+  K(1.978100904350587980090598779836567755268435009334791203856307213),
+  K(0.207623684115991798393852393607560921377700273619633784841209424),
+  K(2.020124924805101814149512410827837058127559315893478485180203999),
+  K(0.225118168563078434571682842539699289298093183918315930047331563),
+  K(2.039552120168934332475419658469253052798490736132010994943054304),
+  K(0.233396732936092724397877904267043469958000812728485807105379582),
+  K(2.042574084483268727526902666778955239026365421139075624524803486),
+  K(0.234694563449236509005128481042046063310423456835561816303267461),
+  K(2.074055227869877591833940946297670701328164989977566906979011359),
+  K(0.248364525323941327926569214180193631003387534613922019066416263),
+  K(2.078259116333625005932664041233326405187452964354687848873481833),
+  K(0.250209490226598114765620366468705571438954543798207932846198402),
+  K(2.10559233392491544115027465177885761868239630400369248357012282),
+  K(0.262305915890897338566316618274108223096108750912255680360063875),
+  K(2.145059995980735751735817309968997764310564309924616252772577963),
+  K(0.280038218983573822942845372377063883697829163571922264757904048),
+  K(2.165820025309699929915679799805080311892266618493487175347722728),
+  K(0.289465591395297525063661581835739962982415139572911524162724912),
+  K(2.174689218484669636350742928583368641348579378032832438226549287),
+  K(0.293509764997301672142629678035148264676862063966430680163848389),
+  K(2.224020344815884254309754556550008651986732175481260011924765355),
+  K(0.316126174529381924890728160137321216621706385417734225002083947),
+  K(2.241440214756835104724788788458998150776118795134305239672769129),
+  K(0.324138608662034127729755931564277029251767357677038558023973808),
+  K(2.253676471482349012913378923334946655739362087654613388131521202),
+  K(0.329767085560038954201762985494431549436421860167162943773262686),
+  K(2.260843929575959682048190169703463304459571365534436176988259891),
+  K(0.333062677724081960111273755875841039924882760363911615181095937),
+  K(2.284759131276060054545077954411142277105322743890218772725002875),
+  K(0.344042677094488756282867938343508377805685905883222869421615964),
+  K(2.293431200827346222231239770699381975549602568696813195583465387),
+  K(0.348014840921865084852850807149745836334851492108092199179549027),
+  K(2.419403743206665506565069681545492314272092255751872537797847883),
+  K(0.404363937335317416333631964862620819665426993939872563114889483),
+  K(2.46133446833776722444927174177006846583043386732648130149771206),
+  K(0.422188680531093069969790493023138456361905394849864700497266422),
+  K(2.46580411494587822222985543416998544737897800673610327819619877),
+  K(0.424050596622466594527902834373206703266585989778744790027319157),
+  K(2.492278106999004135242374700017798912040575481145781701111800209),
+  K(0.434910502269164143504155233319639030685888575541271299381958099),
+  K(2.520662214655435652822550355376643724294638633222109608575980701),
+  K(0.446206839912919146510556877727329064059075537954081363020926184),
+  K(2.531773418148868300708488089491651516835561601718253885693344641),
+  K(0.450522632086809532338405259974362241270942374536717134889478212),
+  K(2.581128351252913537174229474609556253374056317163248110146079244),
+  K(0.468894707460184858849757188480915604349249434088422793065945219),
+  K(2.612795809988173656839475454089428986768048845505706135778108948),
+  K(0.479930688104315084750676461292494603223096368439524244938626876),
+  K(2.666007433028722349671272542366043731261249556684499791391217718),
+  K(0.496989050857311843613847428173688366861876191847289771952686429),
+  K(2.666702353377894458928983141613303388577979192850428733881385314),
+  K(0.497198685619559808850310279099138938436864950218739609782362227),
+  K(2.716750350990656875998113007337265646699295748261576735650757752),
+  K(0.511342108243678100959594956490592549348534031274070859522830068),
+  K(2.739599680129263086374420113994767881716277139651759441582801152),
+  K(0.517145552941080171405938126446643666254543514561588932785344694),
+  K(2.761306782781379649194968442873055373556572003815794373033010577),
+  K(0.52225972780140713119096861391809911248410554446547037991209628),
+  K(2.78806798948905548614042777895387270334405752632937423654923141),
+  K(0.528011125914756376344868833665798769531120520111739011412442227),
+  K(2.886873582131218049819509368287257116580161688922755727304687736),
+  K(0.54364060737436983553739108662207734780344555773508499550319561),
+  K(2.892988068014076751294384222084811187015971410690719196024668239),
+  K(0.544305838281273521487504034824941382550863519171596385860299227),
+  K(2.893806511447446876665613604537377065517585438713691399594644686),
+  K(0.544392139094901427487491453545736884706887946305292351691691166),
+  K(2.922582756838272173261524080075805711880899345142306907726077191),
+  K(0.547012033786686974950883495143504811763875339168027595964353603),
+};
+static const R b6[] =
+{
+  K(0.07652833539135338904687432012492472191274554622594071071518041361),
+  K(2.78998009440851890567843107576500981043943706794203089329139298e-10),
+  K(0.1119387523235915326261157295406032920534970477987516871373698475),
+  K(2.73243774000735646717478490050650328101730106219615609171950764e-9),
+  K(0.1423513914616968453189610549979507833327488966947438551781443881),
+  K(1.155680548236247217775579993359802100885982868717753537783178563e-8),
+  K(0.1423643549344105292957322679675139174850380713611794320928805601),
+  K(1.156312156160828180705222643013523803351751137585345045196122307e-8),
+  K(0.1493754506690082526607812967552807094078183509619235841051749923),
+  K(1.542918104272712501022153366830037754044213139591012513608951624e-8),
+  K(0.1699528650149238484137427548965343352375724078953515346976644559),
+  K(3.34686692506742398184965130073249893668269485407914048868947415e-8),
+  K(0.2187170612991721216580904613628569350244601327049594168670944344),
+  K(1.520419657094823428455010613709883712880808406054280914688354836e-7),
+  K(0.3176654673673278322716477016122347992299256949576085460689617714),
+  K(1.427208887284642452950807955537370462610422275102376276690565007e-6),
+  K(0.3323873538435806464021881627910883742192149990866939681208915509),
+  K(1.872985675675393082626578738598890529546801694263123773113219e-6),
+  K(0.3328550215266351491753327363534062128415152537207728595274262215),
+  K(1.88885309793878543708491172395027581685106246385491527735824497e-6),
+  K(0.3696373618260848186977274461772604287121467983415355949525257447),
+  K(3.54260454277489103780817816538258236195576463960835993770764103e-6),
+  K(0.3896950160929080400041615712361802714155395680283346091009279157),
+  K(4.86425812208345520910507996988714784681818760478248389282438655e-6),
+  K(0.4482485720451445543236435172712260746432513992426335099114582652),
+  K(0.00001126629171139213772783765082215633521270658639201790201890314911),
+  K(0.4690423688775952674056605307127985917009339721342229873084030732),
+  K(0.00001478903888952776799286861985835210369212196556055746337712816786),
+  K(0.547885068273898189606452928370153072339461498772439089969774247),
+  K(0.0000375668076482791819235876320947499683442444692869196591005140584),
+  K(0.6750916105505151345724770088131637888915095390910379549794257043),
+  K(0.0001314751786183076126341534538510924508832916465538656359195421743),
+  K(0.6848637031498015370055449257829899339926777836119900075223250525),
+  K(0.0001433152489329229324241805725178618506523622093298124807227489198),
+  K(0.7379838800801073462095589490684547367443369990076776960731962184),
+  K(0.00022436171800590533882102287282930219902747160452759377189443026),
+  K(0.7462841689875106283804949381868770723547464663839234920314483225),
+  K(0.000239934598400477881374179676096206569441751930575502180680003185),
+  K(0.7710219872029191760544438343349991845922444766156008179884004422),
+  K(0.000291788439565412076926800777398540918341903330830708274533731818),
+  K(0.8953902384491726566044752528954137122213792499465838942352468757),
+  K(0.000715717499416273216992422208419292517118739510192363744273145616),
+  K(0.9612678105482109263296124985864723217750260361366163557219754038),
+  K(0.001095806572648317152113708899642074020541332215129387625604310983),
+  K(0.9890897207171857313014465058515908191945721794401048090938473549),
+  K(0.001300413992914957621241083373846684267460422482042841100552149065),
+  K(1.006173860557851775892378660927599936418609912537220325199035688),
+  K(0.00144113838893374984526424303439760043665121603560531502646327116),
+  K(1.015944331577321671421141725410896987299264229488703139748113081),
+  K(0.00152716855350636808684824866336320818932377425187674068266170509),
+  K(1.01658706584421080030924973253855767729475046489118186894968198),
+  K(0.00153297468259172400576919811909154022832120288112987575178745854),
+  K(1.021102066952657510731178158817431161592693941074159359149933261),
+  K(0.00157428165683420821839480480758707875311709508239549790999606266),
+  K(1.032554043580463277126652308391187308856655258520830839342134858),
+  K(0.00168323305524248061848689308597663620316491330990073148934564418),
+  K(1.076623618756012855139091246534446031431072350363166916382051137),
+  K(0.00216297015392521984934437523327530671993355872677264390070871777),
+  K(1.147420187092644869228313535751359461264227887414343367496736715),
+  K(0.00316948534255255720113980942754190410555864457763454996026970911),
+  K(1.159284604549844737572798347448342572305072725242804230994286996),
+  K(0.00337122282960680910543805440917231797004046051471913911006799371),
+  K(1.189271027203833705610182953202461476121822628359930206107171676),
+  K(0.00392919096243773637715515895312045882650140610103789504792129131),
+  K(1.272316441206382492017588228280848512068068442575517591814288007),
+  K(0.00588770430816040833986111729364993459400150351004994957452399777),
+  K(1.283653863401551395451324322094687812725196770962679597798033966),
+  K(0.00620870485086266667352642690136374518602002336238393976403823287),
+  K(1.32168979007740846392695767370133048953169980393124642951223247),
+  K(0.00739285582941368807269377785828498859415556872678264437692621964),
+  K(1.398853822262281199844424731135326131426298011554517458995047945),
+  K(0.01036728129995983505026235076783210470367388365854097117009346788),
+  K(1.424514263107270933436805241839692071272563714799191594013986957),
+  K(0.0115487182608210095066693568968720188261091665228279601335891907),
+  K(1.426366820953673604006992635444718006221008838256389278243634809),
+  K(0.0116380644929756381562413866509254784783989299777493957444606873),
+  K(1.444696436595871030359147857159395290463379115818112503333945696),
+  K(0.0125525952718391206457036658192408463617979529712320105624806628),
+  K(1.462701000437718886938299257796956546624937507277165509437151934),
+  K(0.0135065356315563584354186664325287860464985128876618628394054445),
+  K(1.538281507107995767084424040947973579758700803188368892485846048),
+  K(0.0181662417532966151677188547041812864302083626514011468450003987),
+  K(1.55674153847139330491064660267095250182072878214616914584217495),
+  K(0.0194786496162359293110479667641096315457522306700647962286618735),
+  K(1.689653286021752251499636980169596022850625292179097187298018563),
+  K(0.0312725956769472195724982206026436868837311929607007481276959629),
+  K(1.698062734971378148641343157245264340704025535640759755197414163),
+  K(0.0321708859438228416549560480433542838195410239370001128989727224),
+  K(1.724211298660688881265105046779200828588730209693401236341122832),
+  K(0.0350903961184521900392092243146601508174713174268782993102797238),
+  K(1.731348173645615075981970628997581433066683394732034198020451494),
+  K(0.0359211339042053991645212569122063890847876436979346124401643731),
+  K(1.751923792432923441486835201105962600680199115016387970252331467),
+  K(0.0383996208457843739190212662764123431871400961801387737818064755),
+  K(1.840513481721586142998070048120673375935813203661942709678930146),
+  K(0.0505605889115934750731923287063758775493902647725523435456114225),
+  K(1.851401685535528784088075129428300574942950442821118205745841987),
+  K(0.0522302665543680609022280071790879948008492306654669013355003358),
+  K(1.88058735237263744957019795997947237136329043632408986796035541),
+  K(0.0569036463420731909409996043936926161160463300996234831792849568),
+  K(1.902901710161651599071951311728418171819471647433005898542743215),
+  K(0.0606749888124482601258619980940045075077860058068730908348026057),
+  K(1.948130530751577321760646947830786289687328232584045811836955406),
+  K(0.0688606717231928169950711539013481356465170825401686701614595438),
+  K(1.994954373236274876621571939141403950838119594170492225731742244),
+  K(0.078120264256223824419728778653287609673897461084478206570256626),
+  K(2.001139158184234870067213702285794053399418787302074431123596432),
+  K(0.0794042346445964678039387880307495996500410179362622405651243617),
+  K(2.061489398151655793420973410725185784970217663251122166518865719),
+  K(0.092691414369900074242191888521013230862132370268040356916135743),
+  K(2.082930580449569612343504300719186865266000766085545607523418203),
+  K(0.097746128901464199952205612290141375926851338291080036776759051),
+  K(2.092455071507998590801378064663400642637586092649750789966172728),
+  K(0.100047996313667869119867999998808340820441526523499686821797225),
+  K(2.123506541932300135549848463618464936121833348130525329377968616),
+  K(0.107793962117088136509345811083786636980845984587082845584978433),
+  K(2.130421315619734240328998773651234260349735206785866017582713502),
+  K(0.109569166645614947821810412658364181979875791576467800519735576),
+  K(2.143048662840139604634508806920953505933925798825499334234177531),
+  K(0.112858091867692086218240160611518801702365680090788527971457447),
+  K(2.152793274735759625912099939036513922998228591226898181672560543),
+  K(0.11543775021557388219912885792629425868846968633727198904512539),
+  K(2.275866070824802216161663140676020448046966622528924040860599816),
+  K(0.151071714166072287569866608016475629716931104914266068021174262),
+  K(2.312512420379826151121893743958020116304315677560615018690310259),
+  K(0.162732299859795864167489150691927078490461307478918295446967855),
+  K(2.402114422734815123096197980362995307541687438662480628833375204),
+  K(0.193080538203930378224927355358814056467403696364791747584898989),
+  K(2.412041131403426121788648822336148402143292671484273922258885183),
+  K(0.196590681441866699611045192662408012271639106910505176417640464),
+  K(2.460553091200396887943204575253365379465334400610620785777674443),
+  K(0.214122800744373570196696098196256580337091045700129209493102657),
+  K(2.5202685950787464950389910442851846975346928407899795784934871),
+  K(0.236465857933736467307825644658004833078439356640331316643132689),
+  K(2.521587902907966754593225072251833673109667708245632590890483984),
+  K(0.23696773339319316912299258121843922895321431450351597325333874),
+  K(2.530956083139836428436253117433735633387757007096251838618054252),
+  K(0.240540644829744636550565067684021505843896539390420932909807005),
+  K(2.548840364004369910204859419709094191573901341508887151465583026),
+  K(0.247403952758575041262058177422862576409333689856540142055764),
+  K(2.588518229169483312787466620423454669310211579390845643050941502),
+  K(0.262804461697588629543248766408848527487541238905888014637222413),
+  K(2.630803986312213158169611756748257926905622564752847014358691822),
+  K(0.279420370272377703036518383585850885380443457198594623195448326),
+  K(2.655653871008055827066896721884178276776211012525939929979858997),
+  K(0.289249999520067690501348979004184165709949499093640903781120133),
+  K(2.665460808605741946873577337797464415093595912359267177545337657),
+  K(0.293137455992369415614767482009453648849417144047893597342128171),
+  K(2.679385794231754417397206727094395484751683451047504666982585104),
+  K(0.298662109684350301919577876587066690660142349791813892445126864),
+  K(2.688551533729278523738942341006581256088061052719235411585197519),
+  K(0.302300234605063728258211168063254908456986019941052710214654517),
+  K(2.872134426127929532424924359146014988958703633022657479529458339),
+  K(0.373889366451688914490836145237087744689685134746719642822553217),
+  K(2.928344179843652997532502289504810887396163024414985826988326561),
+  K(0.394572175847198703254084551679643309341396557577433765990638275),
+  K(3.022525256308001693389804273541930984481631226065156238622627872),
+  K(0.426844628975779132097552502032340307437500974138640942770551913),
+  K(3.054278643440479061172249377806908151538735391192761244862755201),
+  K(0.436888403670010666755747692497006217805207703024362121192375782),
+  K(3.070070701495313385379180395711249796597127499590911409864160526),
+  K(0.441703136971168226709085164742725615320295310930109700031168211),
+  K(3.082059252488744966802369373110557386450484638306246435505391636),
+  K(0.445274068937170839557802283160834455925107989934659099012583574),
+  K(3.104198606968258322802684005344095236994264826710493589992668734),
+  K(0.451669860772667192375588625240271232836290616224861542287746087),
+  K(3.109499514105753000802239719313713863679945533467177545008798672),
+  K(0.45316183113487817975116193233849923189073623225911107363177338),
+  K(3.22800790687478908299191650202194082731079554400273786182896204),
+  K(0.482142262143919682336142372019631788722761777664655969773511904),
+  K(3.235686532364526252586297858311704951185642037882885633437479059),
+  K(0.483709178643729372253444330681677350314543767712667623916927202),
+  K(3.246140157404694612406666986688616668604069435260268759907664991),
+  K(0.485777478484082918035654860164709725922494875422945008971411802),
+  K(3.251729986801049540815643174184050934240847632955420591977183976),
+  K(0.486852450854906796595429147240963480650040383674490158843019483),
+  K(3.301086694981822751593963106982158490974194641595614973734274027),
+  K(0.49538307195303112385047463767365657546669047341316531208459419),
+  K(3.34796352495161010996742396513773317663984724524635737030469123),
+  K(0.501831768193187689840625913797336581003518596529256712793741262),
+  K(3.365333801001863395307303649763781173835963938388586898540093292),
+  K(0.503799216542259467324466287447971369906024670942663519051515228),
+  K(3.366685687963791279175961665855638291751136048229555678917109716),
+  K(0.50394261830220874341663736814168404537411007267726854347067589),
+  K(3.370109239974820764859485761533848403365494031389287227393507234),
+  K(0.504299465377439824643819569889372011276544784185910266873069721),
+  K(3.373126013743588518498001470292489022534910199883280095523378956),
+  K(0.504606406034714273971115853139100228265941060365097978385385177),
+  K(3.379419573301985306073213758929604875299327702535492312398821697),
+  K(0.505224048325131806328655642222893439053293738178636699078360879),
+  K(3.391719067342188664129222387349693433935413168004459034543379334),
+  K(0.506342191049489868863035838461158218797992635323021497541099968),
+  K(3.407357460240761794842275371832390369824442115809920520525417896),
+  K(0.507593034007764407724859277071250444437810860737393281692324932),
+  K(3.420166668261271914780858526564848715380516156174846226481193698),
+  K(0.508474238814588807976324881944947328294052015776073300375349237),
+  K(3.439495853698644931532368355634979337063870205227925106515515345),
+  K(0.509558144549469759554115192212379566123313495387833730983524607),
+  K(3.499758308627393637796244970133475621802838132996412465209874249),
+  K(0.51102428212881954999864600914654367427978793135142601888580889),
+};
+static const R b7[] =
+{
+  K(0.02736437190556539302013150463715824776802249756354324909278611344),
+  K(2.27964831664562814811654296639776132101942444088455738889096133e-15),
+  K(0.04159060364971471409455925325896380651133215899006977720249077939),
+  K(4.27106351775759362036937629043547433784167615584482007474355278e-14),
+  K(0.04899229365135646846601525174172933181566298254585315980154302737),
+  K(1.344199929662819294118284021385746683216358187237780461892443693e-13),
+  K(0.08565516314392485828517908755243706055699015770305523436448884292),
+  K(6.71188164653389750642822785094920719717326586601914105745144408e-12),
+  K(0.1397303764076429215109136310818013917841614827954818072873903305),
+  K(2.06350376828339157709020654235075951389923846623748382164231183e-10),
+  K(0.2147891317749490985475639387023016336564375879861704839072273465),
+  K(4.18461570863828944287128471058522268225692628287071088648520468e-9),
+  K(0.2242757445140653319065256030195994615808596774018069137033193987),
+  K(5.66298762913081278407293405774270688772426849434675630723372978e-9),
+  K(0.3219607311347996401532764622610481879399184297271030778279355837),
+  K(7.11524400770386560208900656264191129460754704463415070484545775e-8),
+  K(0.3916582997607762896903731283517655362814179856464144592783547543),
+  K(2.80492209396482389152550653416518943395619711140470181361164627e-7),
+  K(0.4099259019519058696270810151089885889451722176972371634596248056),
+  K(3.85928623030362376956908147734309685247625959322718166115432269e-7),
+  K(0.4385995601112860448449776894100000828381147245385042224064611782),
+  K(6.19507838739283680595886552111483547459987060333270104676999739e-7),
+  K(0.4619112984033408775739872618498548124719817744672391607603356782),
+  K(8.90183541580118693370092311539753055562538822320373837153387041e-7),
+  K(0.5074422562403373913610767066381791070702026919385143296243785761),
+  K(1.71899997089660247831332471076854985448862856749610345662445234e-6),
+  K(0.5154358223829724681623418029550502616388417513593305356946651811),
+  K(1.91774850238684565742750712131342944671955972742692645857698358e-6),
+  K(0.5384905102486288272296547197555283896509569093701130334377412002),
+  K(2.60504867735499775613052711922365059287754770690559947688713012e-6),
+  K(0.5998985123542863898233140257881452926245266812525642891574679977),
+  K(5.54771265101934785274989192636416497846835661183914741698217975e-6),
+  K(0.6026154164304094411977156658715176259865514452515907231529658396),
+  K(5.72599716140499893898297065289340372844009045620340434331695488e-6),
+  K(0.6333135628208673193780398241802125789205726409845297213709608185),
+  K(8.10776188157394445403978061799815827556935511911738375004895391e-6),
+  K(0.6445663484695050315150135381640755367648254002331377784899154859),
+  K(9.17155258353080150323956747644823066518027323398949506629582693e-6),
+  K(0.6596852329149999547520555593108984077135832127508022984007514724),
+  K(0.00001078764884307185401887649428399425725770856875807449133558346166),
+  K(0.6599566399360363154370891164180812217025945122330682938328117221),
+  K(0.00001081875491876211580301090292044719699685609992139280223914768705),
+  K(0.7461087986697003335797261040399812263424682099835026011525525721),
+  K(0.0000255378654420389359713660716009747075329584532111103896486977766),
+  K(0.8264911661208226461879618205102838854824069238169827999120033614),
+  K(0.0000522681315708088224385204263685643572942557523670721505897494387),
+  K(0.8704877795145745199505242045379010116202904463299935942134018695),
+  K(0.000075146405836146872728012480525329844929127959831941418261920119),
+  K(0.9803374573238836099736566045951080616305782140305626143674129512),
+  K(0.00017266274486951550473123865461216096596252885131940702438710184),
+  K(1.043064807953309369996495181598463284959921365157545992577278491),
+  K(0.000266531481633929434483810692264644115932019141271707027573053923),
+  K(1.05271925903355706024862083419507111871389582070367974030459583),
+  K(0.000284287286651491043590075443552386703483354507811361102900141579),
+  K(1.083254380462779783727706378847615019969822620587881590924129559),
+  K(0.000347282249446487507346066270191718950529177413695306265899568571),
+  K(1.142383227707496535089269743447899064256074097149535468978320811),
+  K(0.000503791189227129610653200124824023912398193532144950615519114394),
+  K(1.182991686482475188850973021785519252584447297841152237748985117),
+  K(0.000643330215272440302602468947281058510818803139366159836330214551),
+  K(1.189819855373584009463301800709203932286205912534378774425608811),
+  K(0.00066977480824747221591193161316887642168092649266912145370132328),
+  K(1.230714616074006970732740641014160324901020574685679548781066389),
+  K(0.000848482135519257328372341304410276429608392195013571887255607015),
+  K(1.250152962873478708035838737132185691008704181911215857065504578),
+  K(0.000946818899766711410181041871670811493164583349965960492344656915),
+  K(1.263415022922415676249780316056216723197535566011946360354897427),
+  K(0.001019370857607994048345526487467175294523276767408125339716018989),
+  K(1.374004368287264987184862568932295680600607666586096528477361445),
+  K(0.00183274233569980957405568661239004375395046414240138900853278471),
+  K(1.56549339383179377030949593644660674438851143777391298442675038),
+  K(0.00454287775388651307598805290090853034350258220748526079351936455),
+  K(1.578840657349113167920838459100648886863896328168912633056901445),
+  K(0.00481762758384455774290383176649528933445940207263195789858188505),
+  K(1.659427956713171600535912804974285464084671323768887334914912598),
+  K(0.00678902244150007896880682446657407039063242718022651769907226164),
+  K(1.669797431935617469365877982917523986809166422395224588409297771),
+  K(0.00708551520834157935075222484672804191915851883679873952008555858),
+  K(1.695827521823423054736112959169272807121499343341434528731356333),
+  K(0.00787742289163536192924036116307762200571734422331040775484306185),
+  K(1.696750043061854843437084975231509502420171108207204109738259106),
+  K(0.00790677890905143409433555378149237429030088839337144491557186707),
+  K(1.773511063671093540068900657542005685883058748053956713422308206),
+  K(0.0106868334306950646932040513668782793192196566273322839496345443),
+  K(1.787691040155705879602531040545904662384350437764344672524586925),
+  K(0.0112789092037391945084111488503112602421842386771993398985326902),
+  K(1.893579368889357872526607213060461217838141367096778057793771787),
+  K(0.0165981559049304173630336157563228052442770881034407131287726925),
+  K(1.899492779415021743676715452436913849570980618308688060816192297),
+  K(0.0169462229527656880797910611308380057456158696813100114872291651),
+  K(1.972436820880413346627244845097449555631572934033262931232372631),
+  K(0.0217405307714893306901544882098234258350088695003011513790543701),
+  K(2.003412273822375734923217874955530543489358463399695371299052842),
+  K(0.0240760894531422306847325400524317073088368713262893757628083008),
+  K(2.023951258620709653477776026484581507780104206827460410777104164),
+  K(0.0257305289563764660969409318981603495629031652880468482663627602),
+  K(2.024424952799472259650867311192675013983654390820407215484826652),
+  K(0.0257697095679603648549285369273088695630336557465285011005292377),
+  K(2.048861946135727661963780677053860888262111081924862197528572781),
+  K(0.0278551225897677625517214132132513364985591640808343078838206532),
+  K(2.116778325937321604064372678626610349805973205789978369331692243),
+  K(0.0343440920826668418396987084601363400313173391311573242560599767),
+  K(2.120898697751095877354650050181029419184597035474012379065338872),
+  K(0.0347721235034240738662786032228370421178485910706659565276456384),
+  K(2.198928411667798452438380635940688365171683137422186921622772115),
+  K(0.0436706666045415778899931965472893917651643024167717933393772572),
+  K(2.221467522841929144097553808759638533241630518069433706589464713),
+  K(0.0465332805527697110577944176943015877323246017348910673021337314),
+  K(2.268507768100265107521057744971441430810938558691975268416505476),
+  K(0.0529526079849122230659171163076602792327537511601420448802747771),
+  K(2.270464619022140140842213853032048599011494983666421131610432304),
+  K(0.0532329845243214873471550349442829760185566247762700237593173661),
+  K(2.275107672114967405767104695303151579615275571539815510026971806),
+  K(0.0539025700497283818857058356177595676295390542423046698913256297),
+  K(2.305880947685658856421392719003384477293568019285956186859885392),
+  K(0.0584961244480923331974037130153057340501270639693312891548093309),
+  K(2.334539977490038138758156541064634032564324784797008691064643338),
+  K(0.0630214736568912038022675421622225933839085658240858897151306881),
+  K(2.371331302563645441554336831958553197879342799697919421242544059),
+  K(0.0691886237189365364584615869276261230231321079557836818441956181),
+  K(2.402118832295042233747508836152829286170458970233460919521022323),
+  K(0.074664362319035378535407371715164423165633563569426355041818614),
+  K(2.439569764888991665732545435165839562395444837990966450488795411),
+  K(0.081718594754206024338254573153874977212522460809742490826853906),
+  K(2.44502463656894991737537798714959205084987397556228659674173536),
+  K(0.082782429274631012086638951182992651261085169112959510296575484),
+  K(2.475364957610979814315286987940667166385042254747931909556242963),
+  K(0.088869401845431355456954155643064276609831526165179474632571305),
+  K(2.485080853356424954511974536597983423988331921921986833828835934),
+  K(0.090879688885181007520350566515846920231565936612591886126583427),
+  K(2.493065941980367896392467699910892348924043057731694303412101176),
+  K(0.092554084525181198917224718458093974192168880831737050225471253),
+  K(2.507099385134008524980605870181218590987363426218038357396062725),
+  K(0.095545389729062180337703642119496143450663879185519579953056713),
+  K(2.519320684642182888935563727669403385362728983357361341740951127),
+  K(0.09820094414061160209421318029772604456077650817104517169356374),
+  K(2.58914692999008171726177631712843141324833290066908127281602962),
+  K(0.114273228575179829727000451618083006032198863655088927540046021),
+  K(2.655386817940854792664783603528941108076472525156532879562556683),
+  K(0.130917382914531434719495733778250694340175269907052147802636797),
+  K(2.672988253127344280282968782229604487041813941819021402481109312),
+  K(0.135563461486817622707579331417054596666235006020225975825603422),
+  K(2.85040767625023162436544977915810480761440061347098168731443292),
+  K(0.187214256040889898261436347724474412867861231341935048021346766),
+  K(2.857234933593646461160135326628568665410363103837270290507200955),
+  K(0.1893605171376411408470544545452439769326384527415313726467318),
+  K(2.871716163847185753721983564251761306879301333011106204490939162),
+  K(0.193946924090901703941719509464540281367976460969998759283777697),
+  K(2.927379870947901223665493954113340952283161457253720566054517373),
+  K(0.211976867067424883311554159800877496831166529927341793016535161),
+  K(3.013884527785211942850471421586030156448190410111115062767725401),
+  K(0.24104581334437145459061250210971503726148213623927726616305747),
+  K(3.159731294688319330250574152720728642274043851526777794636892134),
+  K(0.291681246387740522234672720704532536137321800114435133590171003),
+  K(3.170647688925811279140640158597986820073495304237210948484252905),
+  K(0.295491998492990194282266269040019906414534378671691881619647978),
+  K(3.27766761283411806243888752016510557359139850843974091561234083),
+  K(0.332459216135451498037173304298582214597243036991399181725979581),
+  K(3.333172929904965489834871081365623423068606261216036936720413081),
+  K(0.351079588606766191593249442715672585098176027897293271445746647),
+  K(3.355321835067331984932749023671240261520979123513361804839826341),
+  K(0.358348092140795584622283436535231761149841558377537227403442293),
+  K(3.355656513201591963522117114987151839470651459019114187514434625),
+  K(0.358457108695767632617127216562163865764174029450750019862021472),
+  K(3.392760408141697303840495915644535868651971746904855423117469933),
+  K(0.370378177723411059186451747265206163675574829352025017441559943),
+  K(3.445704713186035548259034926734609172151402217682992612188488898),
+  K(0.386745366339717983751291079891096006005379639253095648529264805),
+  K(3.4884427213435631320750506016937393961589493940517196769690241),
+  K(0.399309773631054619329604125318747089579996700019208198682826582),
+  K(3.509590136751549403373807931272935789499914004125476830473733799),
+  K(0.405285555281718662069629481589673317635243288495106826171513971),
+  K(3.5181350282957164839780014196274363581699496390964316323480367),
+  K(0.407651726217743203980655906250275174824687178440304494247272227),
+  K(3.550212262308907264679482646626279949265859537875767614676085078),
+  K(0.416272258084810779740547716643333473542163195604949401360289724),
+  K(3.613768063190983810826448172752318614975471797692076867409787552),
+  K(0.432029314234751111870864922511911546280102115162678757737748627),
+  K(3.642424356359782711456490495616837987779168110777885428215316094),
+  K(0.438508566606928229699919649569449437064191332172881422059324903),
+  K(3.71143628972969272928358001944302103677612571313371338336863779),
+  K(0.452364274465083051655046881486957959908093559737936545338003818),
+  K(3.714490187776748961894060721115400576473020480438558719779677094),
+  K(0.45291747118458013501323497718594353825138972039227332692891647),
+  K(3.721208783539675776204287137935848110407817206400447394637912426),
+  K(0.454115998626608689340852752948628506969988281077580190180862392),
+  K(3.764888164670742860912838854774768121853090195048283858362535754),
+  K(0.461274317175151466847608763699681289901845305601600212057721035),
+  K(3.793532926242000053741589501870747545858905435670974392611437535),
+  K(0.465355399118699514941944233438897148833917029222645657437318194),
+  K(3.851786630523151411571908032988123987567487101679922141353385501),
+  K(0.472096012410743181901479928277811135677680587912503366369023695),
+  K(3.861990963613382134575510463703544606357956276674477720086967588),
+  K(0.473056370342230929882798842240413887242504858716881083556813911),
+  K(3.861995569297785412871305900169012939700653151863599673075385983),
+  K(0.473056788742377711462613579857452029824888662493986100200132417),
+  K(3.862308328465681041998124074285326307528287902544785563412990836),
+  K(0.473085169285998978824725766776757913218750947819650406139262228),
+  K(3.91569919648712088953200466135607679932655917558233852493889446),
+  K(0.477001806017238302196234225650778787261261874431517380188648111),
+};
+static const R b8[] =
+{
+  K(0.01013693451601745312281015496849097110820157028083683178081660727),
+  K(2.76523856108674027250862356102411280235950210615161792151367617e-21),
+  K(0.01118505646789429515639498141422562610730456813531819065667527455),
+  K(6.07554055800176353581703910065912093641843004112912263111100483e-21),
+  K(0.05004668982127415726756782433736912322452800800454528561551017827),
+  K(9.76073087542247396134043729035328094979647130907518909985427842e-16),
+  K(0.06199850143967443165003328082443706217891167033629365718952578159),
+  K(5.41413418504032853876262317307000091098601681343893328703965536e-15),
+  K(0.1091247412042790203193901010668829671380627284343389672113626396),
+  K(4.98729767587172272029110145609842950681213326361931322502336134e-13),
+  K(0.1447629772687006452639928216583650504243733862689780087493131195),
+  K(4.78343115874419845141953239994913212297037577222578514288107014e-12),
+  K(0.1716835533345024303412075212292491699295517390969323758871446977),
+  K(1.87201370131044043078080685204423029803483165950621690912537912e-11),
+  K(0.2982061296341357821671847216395163655750855250891301607959879713),
+  K(1.55100074242727806352008982976148235721913510070844206123598707e-9),
+  K(0.3152488120326571613253243355878251498415084231622508166875460369),
+  K(2.41939704550463419572128829351999698808376749289862247393048495e-9),
+  K(0.4351209221729261305452570154333987335729452328671916155582468051),
+  K(3.18683227145458791786675427653761076811409864301788021708337417e-8),
+  K(0.4497103297853625517572583744040478609435682355018050705239120449),
+  K(4.14898995627677664212007513437506028188085034219374534385617511e-8),
+  K(0.4506074193185091524692162940218647480649013448931769518698919363),
+  K(4.21566587153121332989086348384124201388112314325698147192473176e-8),
+  K(0.5394714652528408477449425159898025237356778943717704913419005914),
+  K(1.77921037080240777860014565818409861640360699934417837913245649e-7),
+  K(0.5748251173173936305576870650266816504221927305921660078103679893),
+  K(2.95641481263776538279668367678121526457457898925174308369463992e-7),
+  K(0.6188513225927204852872044060674206469801320754048383655208300464),
+  K(5.3354378341945316711825591865738425830596128661145566448867476e-7),
+  K(0.6300096592651776240191418777049004134119777700578477722116407521),
+  K(6.15541220306989651500840285489307029734907479081249298939185609e-7),
+  K(0.6608259929991801143949085406101291852117539139616188261761077382),
+  K(9.01937438517629228319277721853822272483049226579935638957664625e-7),
+  K(0.6745397894416153812736737088678259570717019912307778099820575535),
+  K(1.063016629073923556067401912218351211126657207821899489611163291e-6),
+  K(0.6804943394932734259860568536325937089993179978333743658389572823),
+  K(1.140448327178294318546436523022433915100914039643324710446717403e-6),
+  K(0.7987363994151629741189358013112450453523998873313789067307949413),
+  K(4.10872700359515676044212083379928843977813100909119626815073384e-6),
+  K(0.8532096733209348491395013219196233437980107182772957901785301562),
+  K(6.96507250567520711433110153335579726545309810127415079990573348e-6),
+  K(0.8634436823463853155952598560856588419632282204252555022433933836),
+  K(7.66216687298079501896358123372825775751061687470064032510429111e-6),
+  K(0.8799305061173707927842345389400954008410982997908597689219071241),
+  K(8.91387361017844432463471481863327613636634304964703335976697637e-6),
+  K(0.9056787878127420086787828322704082866975719145335466217289433619),
+  K(0.00001122724100827153919483131872585036890670575383897939419196502642),
+  K(0.9244232011099953479703731205411227728195893008470787683432307039),
+  K(0.0000132265376118692143182035302280031231206938758261199824159549732),
+  K(0.9978422116736872439506312723185166653124866298603001406785531749),
+  K(0.0000243766741492588250865015513844323601887898278496840459825979657),
+  K(1.008837400612776148783756574675443801360813991246584488323534037),
+  K(0.0000266102449447799981239263946106995290667965521370922139457583953),
+  K(1.022415765019397201871815177657510979488806629997042162243367115),
+  K(0.0000296141843734680830143062629106365254209803491743299581736713359),
+  K(1.0617071420836923187949680004342389366454989025470047758040748),
+  K(0.0000400421498824978660186865192421636822424436356201504436963310749),
+  K(1.068182937330975288766765352795579631609101024606181503548109746),
+  K(0.000042038244058365933088689671238440571343128974537809413767837358),
+  K(1.079443239563823461765925930999909465815636307551942602915150747),
+  K(0.0000457170247695785422456499936079864902437961087137499061840109815),
+  K(1.216082515234118264694723871969242466437836286927424269734427429),
+  K(0.000118626016421236906956070860969472507495623401951925909668525764),
+  K(1.244739058239950547173694973779781032155928468570532781475053582),
+  K(0.000142921407642697791079359483993272458215735327381967505717168363),
+  K(1.257412011121399229011514130058187543858121077974993554532637305),
+  K(0.000154984496121296441340681508231074707057280348819837460366897812),
+  K(1.273025308898553260349757399826705989471022165035070505718737577),
+  K(0.000171063866047282114156446701837871575675374452529751095556330012),
+  K(1.368719609866335545070370452226751369232333296491920489078791882),
+  K(0.000305412611275074401125027598923265222803154519574371385572930405),
+  K(1.374991452275724571535036241851839792670160159920924004686155842),
+  K(0.000316781512885907242390831807387501551424964071316983045442171699),
+  K(1.403828634014198769674140165276776756970785529164734783558629641),
+  K(0.000373946041407169087655278189449803903449030052671452882789295059),
+  K(1.406347360106560992391139536062083229444376820344466138721423178),
+  K(0.000379341519410413379224730639815049039402968941453693779756822359),
+  K(1.602899172821402557484464948987524534425387007714884353743439423),
+  K(0.00107686308902996929844431377283555453466683646612011364465071382),
+  K(1.712662917869520450896374034067721570998237748521145054173150361),
+  K(0.00182107136818758405076574615692677891209918159142226328962771949),
+  K(1.78901541786355700584284052306532646087668016084235423873745371),
+  K(0.00256898055588859771092379002804252530767675079712901962120324722),
+  K(1.794919987430181703733943965960446845410301974275774286359944349),
+  K(0.00263643473913094464970004326163947923192712583743968871150122169),
+  K(1.831125624553408388036930177393477137626355905657337228122240452),
+  K(0.00308408411583274009097668693452651534516675521235289226852531843),
+  K(1.89009213899441846725344285398767396331156233877292717622429322),
+  K(0.00395170267493421786864856617222740966980813060978528943198099644),
+  K(1.973833259880454748093319246587163978782213845599578622875238803),
+  K(0.00553375131219615492930993983491643924004732500947751268854383769),
+  K(1.998852368274861047493921290291639643725502284127280087616037862),
+  K(0.00609894545937291651267736384062584888208270266609321454696882516),
+  K(2.006526506335532698206434073133477034226991953452091907648495104),
+  K(0.0062817259355293574856572179033783282423730438361520455438715924),
+  K(2.108228798228613978468403510538862892229331925032339313005448594),
+  K(0.0091709219155101516048032419040138561628300859073397477366791147),
+  K(2.118151419304565909716014383565746284012319179450948127699951414),
+  K(0.0095038780307271087919846804911554852977402564356257640460921445),
+  K(2.137426655721916268086202985600781658617657331196943890692144888),
+  K(0.0101792839480813898813286860197329734393019268725399975417487502),
+  K(2.174991649692350467938751905709803678030442161361243001199766802),
+  K(0.0116095721589682846290802696143043470998165263542155693484623365),
+  K(2.196489550709614549927149819066758851732523723505725431143254927),
+  K(0.012499772942223263759224783779674186629250155021463039136065774),
+  K(2.316018028502095550906591384231109659585751198693802770474436665),
+  K(0.0185230735298330337605493730553391245829401266106809071371389468),
+  K(2.316684568555337938083785856669889325065524577032945584001957137),
+  K(0.0185622415141660645807225507215731711015575872504932070974251616),
+  K(2.345074264888075021529588585659454837808739244176848137596084391),
+  K(0.0202932203710502046283823747165220017362847620211417947821181989),
+  K(2.345748383610139146585526772338692320153159957734931700567800133),
+  K(0.0203358376443576558439697105026815560499849168712690052816618745),
+  K(2.385945665969158095163383824539025729093040209057848747639823274),
+  K(0.0230090825437287664656361698096731233368568787871807572439391096),
+  K(2.449270766402295438062859887372440428243166304718169248510661992),
+  K(0.0277770742643077223320166158117145196519378348260679844725058841),
+  K(2.477109794678065563676094510679098028161009721287973198600223306),
+  K(0.0301032747120331018223489333159323161166305606172337341387154037),
+  K(2.536585527481579733180523047861288802902789191077712894771948592),
+  K(0.0355775473499806554338942968144431121818222194266163320726363781),
+  K(2.789791855404227023927912351015741487783559882863991926803480867),
+  K(0.067633767130567997343477737305378835007560706822150118021750415),
+  K(2.82457375474056789182034743778869660160636127220899489970318551),
+  K(0.073259600506135562249555161886030728122569677416535546419122535),
+  K(2.833580217763255300486971031046493178951935624682620146093084535),
+  K(0.074767423222217110276775857083864748338839787653457734765645376),
+  K(2.847233840549001014998593451845492465533182288199974937572537701),
+  K(0.077093598598746867399618000654858464805748036510321456011955218),
+  K(2.859225152952734473397135105019031654117503252890986142567235118),
+  K(0.07917681218497898150531560732692256168925166945001878667082601),
+  K(3.027253834393131626326232097588417965619510393198868380360498189),
+  K(0.112361863763336106823893961088122096863959515808779003074962067),
+  K(3.029536962898594225451459996167049597250131457319025835285787768),
+  K(0.112863967557342639546297228844683538566026411632332573653396871),
+  K(3.136026554912238001729664295436629606257891297160843835326955625),
+  K(0.137759356004774479144423997070968475388513981075470457050198003),
+  K(3.151369815717810381588714916958340626232332844030454907950684161),
+  K(0.141577733802811126836432286947594010130033310457633658340450306),
+  K(3.172388295055734630799889785627612051168540800653042419527630041),
+  K(0.146899022368699628586989915926503368629088475221094269828473439),
+  K(3.202332924301785969568378875067014090427672618434064487971936944),
+  K(0.15465629606957620185655353200986272988712910330241453581223943),
+  K(3.209308376131154547649888166954365863996907715859862472917263761),
+  K(0.156492287951142700099852503186718651873256776743422415360157478),
+  K(3.218588663654172562403142477939120060068127285178873220927921473),
+  K(0.158951526339468307813640387725701911337422127753388756683388833),
+  K(3.29756857579867776063150302519147559427316864520934490312407631),
+  K(0.180607401046309874271990613449214978938748828916548092157517925),
+  K(3.329294647166491345887539300917792430487453592220112204730847041),
+  K(0.189644042262601653927145666182115796022420144727142060203845679),
+  K(3.369351073324055940660794370720857061510336874351778723625416242),
+  K(0.201296639139506118975365118802042213030331870882740415876394864),
+  K(3.535439735457289997495352019390017101482733215173234910096300332),
+  K(0.251751595370776475556333488640604972759579583258734361071756445),
+  K(3.539024602803668097641120432056919399516912288614632729921603929),
+  K(0.252865258264510378363912758727607757134142497210999320683871222),
+  K(3.54646304485159015398172728563634426849935267450099427293404398),
+  K(0.255177717372503011052761830021541937504045368236042570553107797),
+  K(3.562397552917082952810744575678749597965957760741987443939834602),
+  K(0.260137727497047388364128746972836656422228442233264311475335006),
+  K(3.602410923177404710231735292222462980748327754947692151410738932),
+  K(0.272612995129879332996616474297048065928269277343172037830365237),
+  K(3.635662731790834184474591902293150747815103819049601876472337073),
+  K(0.282974156222591760321408553114019157841720652047894584977822266),
+  K(3.644378567058983543616113256522108149533654118390367042582701585),
+  K(0.2856851392390440374466575398665902236046088800455817714134048),
+  K(3.648667623960134572333080208352348511146914318388420705952303375),
+  K(0.287018127715599137718703022376053287046395318059536014267529514),
+  K(3.654992382861897702428705942526503307121122310452412467148530147),
+  K(0.28898230749603239349071228004534849883001591444418622737358422),
+  K(3.684436758525520854051552268179458658486043143532920899527726095),
+  K(0.29809737962274971002904177637450668429641296438277750997515408),
+  K(3.787974717309825781392998164945420062919138775940425918878093945),
+  K(0.32950275350863318721810031585591926454624424225964431017481096),
+  K(3.912836633474839174600020944622188817420303217609800607511343237),
+  K(0.364986933701514209957141627327509358166010512574442564302155877),
+  K(3.915082406668500327321949741645746700310378666960716635751306419),
+  K(0.365591783870870031357599785268131968224231591610669635668855167),
+  K(3.926068972510176526264321956321577950374456286705155782324736846),
+  K(0.368530926479637632108040250940470808605460636787130876349781325),
+  K(3.934770898487290401967346913912710505844811362698944247184952561),
+  K(0.370834959217068933914417396462766196620616759557318762185343475),
+  K(3.999312969343859389812451580140996433923927976454872004246395547),
+  K(0.387208925181027282783232469024831587661375150221541959218842884),
+  K(4.074157766417651020581237498760415817800468655130627371227337224),
+  K(0.40441205680046099196766231425566605014056285541284068502001274),
+  K(4.143579320393272081494099122987688161688561639030402668939084461),
+  K(0.418391883853586772846548545055603152450339616307807857266261306),
+  K(4.173230614088150861282086156682530818060278143737660170198375534),
+  K(0.423724073579886129329075289250016271257396570716055001341195518),
+  K(4.290711277259944225857102533613052470087662858376699421987607819),
+  K(0.44071877066590002226727580428241907609872194960302388242445138),
+  K(4.365485434471580580528274276802978801230120877511146178931625446),
+  K(0.44784171727801910648448840007645954618247414494366950924282618),
+  K(4.396006256183381154250171217191172690055288719174583178986967537),
+  K(0.44987857581880833402052372558885659274920551845180936824147169),
+  K(4.471007895260711197087881896759165200424190089641861016544142386),
+  K(0.45268380420055578600451538114336510460780946302812368837536393),
+};
+static const R b9[] =
+{
+  K(0.0006771624680886616434302975429633283358215148880447915784050205645),
+  K(8.25035963710581085307940306045163224197291143993149736090812528e-35),
+  K(0.03479607296113315781894929288253251014342809874379900931613474164),
+  K(2.06067291284512596020497083953118956545434440766877309035070776e-19),
+  K(0.06013481642525312934259472081476647577626849437832071910552196533),
+  K(2.83381094205043366585123537548239918709024035605411919250490379e-17),
+  K(0.1279595043289574998356206351139775975494450220825140703543165183),
+  K(2.53448607287259467323713755743039834388347983514743542985161811e-14),
+  K(0.2139817911511823931221917723270567365666743609517050800406059552),
+  K(2.59196022975983563174504264201417703974984958906252294056991914e-12),
+  K(0.2490131452836061497090786051915161613736668905782340984215847626),
+  K(1.014465850581284831707784268678941485185880688042549877681933864e-11),
+  K(0.2710462929340737564421721772652506483497607546125594737329461154),
+  K(2.17584630008964856982166468944349553322065595499791868128803007e-11),
+  K(0.3048333525051540534795364424438695983773962119317643323619752434),
+  K(6.26324367909955125853450380791711894224148336699770154935494053e-11),
+  K(0.3102035174440482868601080734217805671009235662957454408267143154),
+  K(7.32921445463045423089842688085654280917233476740151354715496346e-11),
+  K(0.4132882107016095768538812220346531103062121618505030947767457784),
+  K(9.69424786348802228341812483103076816912099635209139512328196053e-10),
+  K(0.4326879157992892401183590702254527385131645099632349307945782064),
+  K(1.46490635758234475708416575106543801815831391932884736030658229e-9),
+  K(0.5464709344322114724567053031389505322411503151830370441276355),
+  K(1.19767939189475964348963679024735766127293727923327923722765248e-8),
+  K(0.5571732773571021005427566964687737165753116536839005420470275619),
+  K(1.42609835268269079851069350785996279419837640463825121897218807e-8),
+  K(0.6788873778782021910610169882897221677736447861470678683720410919),
+  K(8.44144071671143335144721361036975140178765910093436649683191347e-8),
+  K(0.7538108214775173491328552706869773397453208005147465398010258675),
+  K(2.16569990227842487257057122122316672327710411044693581297762443e-7),
+  K(0.8253874753356087856446750318063677814187219188488210940615201086),
+  K(4.89956854098458233009792090341428992546792756212707766697821575e-7),
+  K(0.9463098438460659280657026063348441626853386827475962772025707037),
+  K(1.67701592732579993487993773644445128099377245508903489330349669e-6),
+  K(0.9611418530954410212362970550959526648376204874348385403032823256),
+  K(1.92896509455992849682323447304141987786428917779367415189700905e-6),
+  K(1.004174088105565303465386340776932397215001163380169957097453186),
+  K(2.86100134669569221943889605403967365086652091685999362587376548e-6),
+  K(1.076634537522766862074855967755324198098800584887480091962854108),
+  K(5.35613770926759226364819956864525378715499211814035808119178257e-6),
+  K(1.098647374640089501364296410095338817441965480880849597072452271),
+  K(6.42631287033112642993054783765224395794605898097807126835603185e-6),
+  K(1.150500211945227862966710651763098645391254546885207393176669609),
+  K(9.732339392073387654887248000342160595024409098697180070979347e-6),
+  K(1.153737052937965044306873912752663454823850110558050301487508533),
+  K(9.9815611992765498285836638407461392994936886926421595242521041e-6),
+  K(1.18840989082359896053072657778919553998397021649408492964134773),
+  K(0.0000130296578418414100690009365687781705940786636332024123326741891),
+  K(1.275051482259720998806209961126921970529146260925948952542883008),
+  K(0.000024546075080292688726079720959428183417982096994647777480542255),
+  K(1.317789644695788587143814545571236058759999977899764421712628935),
+  K(0.0000330247700474215720361920219632270233069117067024869318805003671),
+  K(1.359656431049813890179795935530751458749244642495774995718611098),
+  K(0.0000437594707072254164944895550965968546170462095105309900754861737),
+  K(1.447196786146134057085929769439260809842181920570863986482473685),
+  K(0.0000767138348691233867391307324714753792496514769645059295979137094),
+  K(1.45764765086311544199630809979531022660203213680880477024767078),
+  K(0.000081842941106416098701333694574518107808217185402364223566935839),
+  K(1.476718138506414732047293570436733329332110029288000770105812228),
+  K(0.000091991997283492283460310587232968618034033501022498052932165943),
+  K(1.597245705127236716965395204689714861542578479076490185636157299),
+  K(0.000186192197790744543913563799933027897876388711398862979408811913),
+  K(1.796610194609899328183821821759353474224248027868650339336309785),
+  K(0.000533869753343336922122088504991236885280045456892570397603847604),
+  K(1.823663019643130538149066438754550966098158969534759368506666939),
+  K(0.000609998068227479885940744873957354821412302319171154398979136681),
+  K(1.868001492682259476373992635332123191166541224635148676676731871),
+  K(0.000755481074288923659306075820942624521139679025014019780317433516),
+  K(2.027277367605994231181584674427556497262475262840444380785166917),
+  K(0.00155876996410606274169907888943086936744828650926326261335650221),
+  K(2.029321837407181679888204648379991728333165868621452784278878747),
+  K(0.00157266112683735500199116688544291924097046602715910879192578598),
+  K(2.051450464116188255058715447701185155304685008436162490174336481),
+  K(0.00173003170662319003866622871088572996361451955659062781853878335),
+  K(2.059661357178814276699540268805880590143138166274470569219300783),
+  K(0.00179180409319517091095808792936221138955824057747475024661347996),
+  K(2.069269062970455865681146458858638010255603773227596815282330048),
+  K(0.00186650433598126441268769856811321030896566365514057025865858868),
+  K(2.091918441280870091517186690839186973733706319449913624055680893),
+  K(0.00205336268600764046896320699580140481553554337291373941880207164),
+  K(2.098087608159220415515496257788361303799359619498140268085717036),
+  K(0.00210697952548826341946175835141102086912064728035598743862642311),
+  K(2.130226109265032836075303179893893295466251456518263585233503788),
+  K(0.00240631620431480246068758642955729583722496914194960060537667884),
+  K(2.141194897443297296279879397136006382739379213467234303510988263),
+  K(0.0025165465004836034212368082935394575156273570807483614365323972),
+  K(2.182354613897786728215229216226894800678293026021259436388194179),
+  K(0.00296987548594843308108195073385278480749856752622649147559681327),
+  K(2.282566310708098515010066266779434637479196167766406990296395995),
+  K(0.00437618381881137193025186043201297696951005512204353611896726115),
+  K(2.284064619125488881476962980347040641054828694624359413496570312),
+  K(0.00440090437679091471787911803353109588991180924992459955431529867),
+  K(2.294778571203896188791492503797073721166919080764930588580226776),
+  K(0.00458116348289019555734047202434922308561594253324194371011388318),
+  K(2.327325017137841123994930611146920871713800552576825177141239816),
+  K(0.00516775086308881805778237870253210624931643077002499494680747399),
+  K(2.34312783506122710862980272657478604324349610712658470462056161),
+  K(0.00547479550732277529436822159888419534496353908334301409329101162),
+  K(2.517058137704938609536106924221191129247429160560867685773548636),
+  K(0.0100031757609048690562303568500987144177978217898214183846913753),
+  K(2.528439053660481336026361774883125426313913772941489986618514748),
+  K(0.0103847314423841928241158449580865154565864034932048477229945332),
+  K(2.586332596026435063707071728982710858561213478205752323921882501),
+  K(0.0125170940362975758144353517091861845299472375583144478288481197),
+  K(2.596559530211245384686156714012128223555240755605515733759301053),
+  K(0.0129288036444220254969114653056489784686070006016685649878868493),
+  K(2.680995815767743118367157306286183099135481985344529727921258427),
+  K(0.0167701940830737531464565592702182843042452773130044790479139612),
+  K(2.819739992032475113060389654764674430964956085372193940657428818),
+  K(0.0250447464330253246830801062292733023709161099524737352121633953),
+  K(2.876066615241571657517534941209995260822764708167594737994822639),
+  K(0.0292086501588990751611551184820375995571956720669237814206085024),
+  K(2.882703944302318210797962969173170746894806144560451301987118281),
+  K(0.0297328955681645308933023819690817574280833445137724655807813363),
+  K(2.928198977832930710958683632672531655883081408983244857315030427),
+  K(0.0335258415085381774323578920678246945305709047302541351785990039),
+  K(2.956360564960821118591854792888299947404967053253929220464349603),
+  K(0.0360538795678924085064948898442576999339829084486777379559330183),
+  K(2.977429418271856113062226356258750395447354808226912708717072673),
+  K(0.0380385902144162975111717427747578653508902467658992128095508599),
+  K(2.97749792321450768015966928795740356070333622791980596094854769),
+  K(0.0380451761504873929266704454723935598163992415244212362854627931),
+  K(3.028931206268634403060136366543463471177372155853464071189106235),
+  K(0.0432386926098734182726806582228668216744894387034481901552991189),
+  K(3.059087242135648292956889348503912522900591481453487518097966184),
+  K(0.0465209614753821515900906394237723167339079759589624660755103401),
+  K(3.097205286654824139333663647379456118646049347847369287650632897),
+  K(0.0509297994640273907219362381127766370007918927563679042319716662),
+  K(3.219841696397766264110246596341057683157206213856593863252073935),
+  K(0.067178156307920990601556114960874958596898489966822518859543505),
+  K(3.282141670159834085040578957396301649026606232604849857093522557),
+  K(0.076690449267332750696095699498278399792184913651576373043182145),
+  K(3.286487031887577349072751602661103387476872737175631989438314635),
+  K(0.077386364559882416427135983497528067233766183945162749512489351),
+  K(3.424051107101277555310053322170293782743463280654924886914450208),
+  K(0.101628391362820321644351127575909166707301262703713066754364652),
+  K(3.675293646016700005777998540062992681139544649829557453755311115),
+  K(0.156608490516756738348436805201563876157835435461021361111219485),
+  K(3.691063295044440884673084100667495610908660395527979691511541456),
+  K(0.160478561204859601863722092945645510397062197225283631213003173),
+  K(3.70168562066927245717102058743189190617996071675036993349802959),
+  K(0.16311007566261974151399668611200273421653112601205978427093841),
+  K(3.705371307142237796311928245777445909789400476902158275799218735),
+  K(0.164027700713699272693321066427385232697418461893837554052104991),
+  K(3.723901241731414550545969656118303273992851963173345915785260692),
+  K(0.168675894151593901115115728008767966206214422595327871326926812),
+  K(3.728674962591145768946854880048093139492454092268684039295003595),
+  K(0.169882603205914862321985620730635456790106911133508891215882155),
+  K(3.730707162888102970649555981073219680926074448541799252501972496),
+  K(0.170397433422599315933889621231897603356266696236210197572654674),
+  K(3.754445723275358341177311901949944441095036975256792322491273495),
+  K(0.176460002169296142150508193196126904121000820800432995482476014),
+  K(3.826152062123343195407729781102614945460768073717303549337040695),
+  K(0.195274888865441825389582235879858927979985514938286436921424478),
+  K(3.833552972858513981296196356180458015751625485524864912316609303),
+  K(0.197255564186055839387061617670028689476253643510855525423512751),
+  K(3.873283940155717412998601543987456052520782985394202951227587345),
+  K(0.207995893780417729944208318342905706773074497223684758410470609),
+  K(3.894782491438127163936554440095571825065978599807811778566656429),
+  K(0.213875663833959379358692904769353446742414102270603664165212048),
+  K(3.926531330663457834180923835219308699794740085872437398946653907),
+  K(0.222633097618661776933880655835862346966607982579625229676166772),
+  K(3.934248799902119998847641396347078362120318168051280089664450937),
+  K(0.224773585086610946591407685282653488762887361720078161263748986),
+  K(3.989913340454074232841352546339561657656682719070930103044575873),
+  K(0.24031753691451345383316613708572282779212983140621338846631962),
+  K(4.111614045282037703100482544342740847380534840401079033869983782),
+  K(0.27454823987613839259367597784892966677259779817917554235828875),
+  K(4.112522598181063647823060898612902141641414037093476346438084545),
+  K(0.274802986407257472024870210097806246640435731954011263498600405),
+  K(4.190809216402502829257555161314446220273176193533228149785160276),
+  K(0.296571229711978146259560612733539282940629776456219678865730915),
+  K(4.195642873128271647800533281055436351132918430159697967396981315),
+  K(0.297899592050281609550831515082680361867636570525867022980710177),
+  K(4.204117231270028630404275647923744451837142252948504081729464211),
+  K(0.300222879483803753141616938300420179810872844073205942379534747),
+  K(4.241940641771264182273327604537581767333278149874110534495884298),
+  K(0.310494995983075493166972723694690595356088113149324936791930466),
+  K(4.325152817316072168869370025565837438561152621642430431952980854),
+  K(0.332380122038717429287338313740926858584312756002330846741255172),
+  K(4.336054953288619380091605298677006336494954258703523882042114507),
+  K(0.335158716735277765938866334653180717691404594522086710473036149),
+  K(4.451296453517074373170996194433584133004358485885824250382385617),
+  K(0.362916654090890875420014442827057467511233143846612522942825778),
+  K(4.56160632048516861961325354668623367759525606830207137344916786),
+  K(0.386061949921738031814609848613160334389706695708386385667138087),
+  K(4.566391973155778835273712518247290020527924406377003860489422101),
+  K(0.38697662788275249031416006164008876814380604889024246534679189),
+  K(4.579894832929234974387873068695304272703043175688638165445380082),
+  K(0.389514123450072803639856796220456418845680022404838909839842447),
+  K(4.606435843574977179882297771625370688876325149299923227386387214),
+  K(0.39431092626643622926946524311113967785648662800756191583169601),
+  K(4.655841135355971486597564108124479834045343697462656579812878327),
+  K(0.40253560415242912401323296105955854764571973921160405226618783),
+  K(4.708996707157176755782573466114983672306780453044194300491205235),
+  K(0.41030127082177204110759248027089339667991062556249717824771193),
+  K(4.876951298241036768702215636964193855994623345612702159468070933),
+  K(0.42675275292842633841971608610014198177413230450031114187432834),
+  K(4.96097681952867298288783011536814089049807147163187828287652065),
+  K(0.43004779481089470966011122170930898831213172699764953007838506),
+};
+static const R b10[] =
+{
+  K(0.03992413284789715237267329883555912543520129911264871479511078645),
+  K(2.83525344950893006811940984228149901198649233473829544376144921e-21),
+  K(0.0527646289144559493198110812892720256899951379809745887365151268),
+  K(4.60962767910471026114335999792893169975494945473426021923041436e-20),
+  K(0.1000563161898704491509990459812583932775854389985275927290613606),
+  K(2.7712905430188324656136112613835315081828672956839521297894868e-17),
+  K(0.2067079749107250473521546065857742415310423970550038476151644317),
+  K(3.92472552558611840921136063190248139226485621837782117051516264e-14),
+  K(0.309715240806931115353570328364763546290560644759861451192540632),
+  K(2.23801368764713212986987549984252856659218056785871803355906232e-12),
+  K(0.3803286344488152158945228366982330730350619207023354617857587484),
+  K(1.74512768471244324522461939378008295130000681868898251443443405e-11),
+  K(0.4086463605984760262073090372107677470133230951914059681416916752),
+  K(3.5786013514674234921502725376443820548852354430577700440861458e-11),
+  K(0.5224362816444891159664331201086924341924554259144579498519527423),
+  K(4.17417127257091873138523876710238305053609076270063225111208923e-10),
+  K(0.603995663427496691377838259554627568561731169505902997362619992),
+  K(1.78063609210303508254171994488594782818577475066979716625375899e-9),
+  K(0.6115204747047387287517234444504880703687144122529450699664518885),
+  K(2.01533381616334247654202299835831861329444332034473679382439543e-9),
+  K(0.6121830357399372404919076667658137310758720502435358226926871142),
+  K(2.03727602169520822890068845620149641427019452445927754658161478e-9),
+  K(0.6897682167179186745891751296215150736644570560354767978543622149),
+  K(6.71844485677937287138753992828684426610565799726910682999484977e-9),
+  K(0.776444334542325101293219542204836256492074717382576303119629743),
+  K(2.19452342560663249975572765341236430462934269353570113430789861e-8),
+  K(0.8091413800154303986539185175748610200523070923721530932220170542),
+  K(3.31498132044000656133173659889471021707580780926577746306812732e-8),
+  K(0.8630552254278748184592809557626055046254813878150337185389251801),
+  K(6.31862862729491995612687018808200657059797063720412504975491842e-8),
+  K(0.9010691401052513289895035496198918128525325949681823151200624139),
+  K(9.72339948376223250800491068318267848154329682169590804194006261e-8),
+  K(0.9442748173490913696985213636635545399482163386644686930276285829),
+  K(1.55317733540609972586104531188723225074125556054700929289868837e-7),
+  K(1.00475470438371572334585688453280887420391768612999402721778164),
+  K(2.88959814614805876703387545387806917635831469047774439820516253e-7),
+  K(1.010257926651753590148915629133601205983344361975225955093658535),
+  K(3.05182505276582230415631448338803871139366413745295339089082776e-7),
+  K(1.040452039918917758571921592751012129165136993793664443050025583),
+  K(4.0969213555083065374592194110669400614317976507869979739034046e-7),
+  K(1.078680255888745545940874144556504346054433741995924417627117809),
+  K(5.8771159917115822580494806115813704187713406040852232765807209e-7),
+  K(1.083969605083998912349594767750412525962022403569570553975037571),
+  K(6.17174555612388905168160146178662808407693870500181732393753521e-7),
+  K(1.134019592559310003987335716567022797777508972968369849720993777),
+  K(9.6926503020689571658783013835120023736494474313534743145018949e-7),
+  K(1.158563114029483253824831785232150493742010771508130685641535377),
+  K(1.20069839642534860236887022173493222283979888981766898873326274e-6),
+  K(1.163251303231862987346194114246906254181376098970219800019576326),
+  K(1.250179665113969905737714620642318034797908344022817889206281e-6),
+  K(1.164392494682712328413956715192543428864919158598642526778637103),
+  K(1.26249866209758931974049863241877024729035000769740908415951332e-6),
+  K(1.19135201005984818683513512643446158870475062641495290735856),
+  K(1.58722293954469987427004227635229766524055710854784272029968801e-6),
+  K(1.2354848261144105572806715889927365723836700764718136743800218),
+  K(2.28355156919959637369004075555018188579261751215596413331439805e-6),
+  K(1.251547504720657450401855976568882592591275346867838841480897095),
+  K(2.5984229296700090801354120385179381714102218167631821866458064e-6),
+  K(1.316339170818142886558957325670179788854598856977747690939553421),
+  K(4.30439330747796131342896235095833862352274211116018062267475195e-6),
+  K(1.317125551308283007737513645006275217079378425785579143422016419),
+  K(4.33017639153953746176728604601789625405311876282018647384513133e-6),
+  K(1.319233486829731830444330065951971436387592489714956766771433361),
+  K(4.39997638273550653278537121198159872934046472442279877238498309e-6),
+  K(1.324904712724540230664180930834845955114415577783041237532327366),
+  K(4.59282247012530432081318303990427702903018689377855705550299726e-6),
+  K(1.474335696745954883418691011745033125419001059115175508533816732),
+  K(0.0000133703879275781143084179967540450231574749455322102744558024625),
+  K(1.598888840329757659391380553910536312747804755622835750002070615),
+  K(0.0000300718337516685009629424159278378981882952856348993438146026881),
+  K(1.631455182560427514751647069643297963142954928413748106009494977),
+  K(0.0000367813648983279062574791992200353694790466504246277356033738024),
+  K(1.642036411085846102996520375239561014969793917366144378541659444),
+  K(0.0000392342757002132687106829965887133265430191546796994899109523273),
+  K(1.777343601001188104282047100066256333462725747675381738563068532),
+  K(0.000086442181793321634078927065157927549438623734199312954814409898),
+  K(1.836471341126608799758462150973685189872495579891384677571806256),
+  K(0.00011973985889572496243243525939271968568541434399835575256317041),
+  K(1.966028713822068914567293348839625780582146587940253682984826462),
+  K(0.000235612707446876223330966454441313767405702035545755295897048996),
+  K(2.07694254662448855998772527490025462837957840330855704876801279),
+  K(0.000405244661754433267520217401487540725308249374368206837765653381),
+  K(2.12226849019074235286834363475188072233130923262656550798836928),
+  K(0.000501180249717830772089974450677690116899026943552918938821075267),
+  K(2.167770786536623370700729609255957448556038714294197683676176805),
+  K(0.00061720022715953510247213466868889772418315629779629887327689742),
+  K(2.369247185595288291557623359934993092615629782575843665991576528),
+  K(0.00146560410395998244999169300645698871431716820390397933755137811),
+  K(2.382822841487121629269533749327952851346083555632806331090676337),
+  K(0.00154862939694264602626808383519738063911770964127283497268447217),
+  K(2.540626577648673117366602445013515119887255950430137599045635517),
+  K(0.00285945381299391701228352700595976897812821524520226461733264686),
+  K(2.553561740231371123401983575472761509489761351865054718813289465),
+  K(0.00300040890720417812911873373602886083295319322109840407749275746),
+  K(2.61029675407113704639934953497507969690485108048011306572574203),
+  K(0.0036917562366804272448598951393587202198322026272661008010765697),
+  K(2.630408158490647379425084492393793605330703363847376188415381479),
+  K(0.00396767917841114268692884402416658204619215755555453824155718209),
+  K(2.67873417036876986411655152007636064025002363912417452469181158),
+  K(0.00470392404600838279938407975246900405888338694547863603076742597),
+  K(2.687923142562063129678569601189689488560461660026597905418323584),
+  K(0.00485637308922172993096146444492678700979038064305593643904342291),
+  K(2.742275913676514858524604656214523839531701668328519766778468715),
+  K(0.0058469839776879063762335720885572554141050166030187266118852122),
+  K(2.820119138524728829612131899699844569934283000868291208098531852),
+  K(0.0075607469271441750496301932933938162403799059377253969242809462),
+  K(2.826677127770440330696638148684880423191745860943306200401861173),
+  K(0.0077226711068161533212330653176561248259428269702269280412050472),
+  K(2.847991374672363549394298912533390316996919718928546245488994842),
+  K(0.0082692202093483392179728980242688699759088190561910427695921007),
+  K(2.972985309642764856925614288286643384374601384962666146696891113),
+  K(0.0121671457546073219953159936021562214253470753998610228998354925),
+  K(3.148425603953155406206794261313061641935509988921498100634487727),
+  K(0.020083333644709969809058319588987536493721960704479396582495895),
+  K(3.175409217091938388953518822737491320733080161928343102710428058),
+  K(0.0216044296795779614744526950253279707772072097154938689544267995),
+  K(3.2101891040492902348196501427776386265661448184523006439762921),
+  K(0.0236992349591353870275855715746691492877778809244385869529493698),
+  K(3.294893815753304790569736661660624779238469841760157145025662384),
+  K(0.0294769340554174991395189645783776097335176524723484834951424351),
+  K(3.463821686098907464142628755616145220015824543037073201574554874),
+  K(0.0442132105503071238259313718201126595918643192400256796196238339),
+  K(3.575951952328030527360501527202355578684863660392428217207085656),
+  K(0.056659557083963966423238730498163597978196911253095949958977856),
+  K(3.845594949169826372703979656459438089414450554119618066648087574),
+  K(0.096342081080610272221653597462701260543018352145788420062665366),
+  K(3.900763736040209871941728683776076535908744125632743473653198721),
+  K(0.106216000002840175362324760374962086091818374246748871801932871),
+  K(3.919441258615954493622177164437741796503945008332413374439418693),
+  K(0.109692168471893007969049634509067648884803697872415656853749508),
+  K(3.946421210164512677671956154051702437078176469780590877499903674),
+  K(0.11483087225623850798740295410234791020199698059074432105252129),
+  K(4.095475145087009975837228116819563508132005360412022625552541334),
+  K(0.145607204244878370890908575276690426358045782628890321659599812),
+  K(4.165607588458568043350560316213227862140582528331459814736843463),
+  K(0.161370417701169067854524793362891001741961642009065553773319439),
+  K(4.251198084476761889151488951724507705572104613936607984282947667),
+  K(0.18155007853803680285623459872249847664103231644521345390851153),
+  K(4.265214897570517201778268963294157754948673559412445903573821703),
+  K(0.184941037050797961773767291438151817663527556684746766448843802),
+  K(4.267315451649196529872308868197175369105615572404135224088986239),
+  K(0.185451094571026560665285566973752444537462810934168653768649201),
+  K(4.303756128547509944923316211059752395739158441484485900509179269),
+  K(0.194373397890880387778696819855336758970595910584529540839766966),
+  K(4.316407139186990875704855865118897992967747264623721116080961661),
+  K(0.197501484144604948857610219548901423370598156909588108177986203),
+  K(4.387449940596222389886524026425401598954172623950440731402161719),
+  K(0.215310988025269913398543592972424536703950481206665178457160762),
+  K(4.453859792228014363353106268989015782140464400016412655411662718),
+  K(0.232231258957680113800323442275624172121443224975918119093722856),
+  K(4.458591805156791729334031446872129641019789815043257704348476149),
+  K(0.233443190627716771567544007233955014022802169461682673266524959),
+  K(4.504186536167730384888216357692108458638035366202529483010182314),
+  K(0.245141131393213230589802115189983338299183465077412409240003569),
+  K(4.544927040772741644073823293738711090397274094827951611993825763),
+  K(0.255597279253411717252891965357488224315224961142545475278807895),
+  K(4.644810507767218365562399611724627790295344007363344807581150253),
+  K(0.281010067861982444207788064049869776361424541426986712059254304),
+  K(4.69039034868740603065133207226736048261700369517471233101974126),
+  K(0.292385217181106286856103134127088726309948367746947114395890506),
+  K(4.774411599952880479289704469125982993863793274404894366414173213),
+  K(0.312747394578326127145937938263243503212996757988596407825386706),
+  K(4.826050054740361842593550788330725325418262024674332961665645068),
+  K(0.324746352809450834792398895701992170695401511661947596834388275),
+  K(4.894088232346843042529952998535553164086938268761705793593621713),
+  K(0.339794214513593902259205104812974508813125939195874521272216391),
+  K(4.907987967377664532302824343473537872443533817577119227223399547),
+  K(0.342747138524954675233933642233389166912337767861076674825381041),
+  K(4.929410059265302800821456388257165851812535471789027599998855696),
+  K(0.347210179220402567919310264372092246703752502110394355244543734),
+  K(4.963032915688571148298634482050476790249080199769107151897575159),
+  K(0.35398812336326639245463785457308966440268189737791325707824656),
+  K(5.024095581625525444281739725190636735689618592258897127801152977),
+  K(0.36552803689774285000615087133063209579090097746019476435409739),
+  K(5.085746704463378598338096196985090623237922525946281973694039441),
+  K(0.3760705810679792519811985636665065040897145478905014491991314),
+  K(5.108440064443610318341526782026167685806827442305068538932649111),
+  K(0.37964819128722390519630365462447733480598350976604133793248376),
+  K(5.115316911250938743042576832552796599514626011634289546651010773),
+  K(0.38069871599534075640840509184119411607419998351569836292674916),
+  K(5.199358487586263705330641414569275341088571458507764614597029597),
+  K(0.39221315575657893291199062281432157930531010827118552725414328),
+  K(5.226327078039388702152090773470902999898177713822022455033768276),
+  K(0.39536642202286530998133140382171588460685701982909474691318229),
+  K(5.290866193391072376058857980527818121507898010380880106162056114),
+  K(0.4017844349401113219957020220592448968946129998472968592847424),
+  K(5.304459736337814257340302889083238834437550841515131939714604858),
+  K(0.40292785098695481699636710063170165343278975542295956356412314),
+  K(5.33488274448322743655766817197595651994147058482858786953257321),
+  K(0.40521790355302726517397289562008643026013488049450429540055289),
+  K(5.406036465284717666153285336048620662714477680395702100191008158),
+  K(0.40909370867220208175541430923896196657838351488136171387801936),
+  K(5.410167212373896639645602788558403338552065515770655154154030599),
+  K(0.40925409527062172885370711785442392293400013607080696101072011),
+  K(5.422147320903651890097841723204839182927610122063731137845947873),
+  K(0.40967877161640278890293981620454935815931588818234307863993816),
+  K(5.47941923102406225877756306879328638162098533986726017967633934),
+  K(0.41087279517865070295398882260185896195278682778279686016785921),
+  K(5.496737184085643733217107097930171280152329372981814349118481718),
+  K(0.41096038435986108691959160437734756496166145059843068871300359),
+};
+static const R b11[] =
+{
+  K(0.01013525073413832111380536834417704860116083474565586938918748163),
+  K(2.9041814693855154540559293029496920160918383181265922766576903e-30),
+  K(0.1710888669097320798813828951567902116338247629466673260101779857),
+  K(9.2105069084934722119800494508644730320767777049126677364689272e-17),
+  K(0.1870371158455558245051402136000016036406723970209421376490852538),
+  K(2.45499181448626667459253618230615278124171372316778304847743041e-16),
+  K(0.215793385976229512542011432256814089537942723370890018272077832),
+  K(1.18376012485125654426159352046967389894302144204315121837759949e-15),
+  K(0.2389244455287165432370135425762494940706977701595785116242154517),
+  K(3.62836306129854529447160650624881699540549331129292430651925152e-15),
+  K(0.3137790836571213969958057631436235493217243255108027232469186775),
+  K(7.27290937740017465086005131024346945858478490692174252097171875e-14),
+  K(0.3377147764786405111621947530124123129531946543148641570882134157),
+  K(1.63265708895377664534953874402028053870431374542877294794901332e-13),
+  K(0.4261130710216707504863839730137432699490280088219894960320471518),
+  K(2.10677279811575330877524763458374032163124466923506536128243375e-12),
+  K(0.4317194041887351070239255386837256948986714501367750682064590499),
+  K(2.43254868632177775880037974644759465398096439868556607687782666e-12),
+  K(0.4451390469709138162882644256644181918884141343028853785934365394),
+  K(3.40640977358903763055804591687723876118403869731666505497534686e-12),
+  K(0.4513235396571493763739875673579339468171843805099616067830548863),
+  K(3.96471636469959762547868248813634821578933075566181239401809982e-12),
+  K(0.5178114694553986146162446977396952250284597639775549681193037315),
+  K(1.79776369349329638309729385074721430214208209853370353043190395e-11),
+  K(0.5385338120189720463973844319154793052485762819407289581909521214),
+  K(2.76813340224139927030294498387102460997880811861263517607708604e-11),
+  K(0.5765251810400698218939915251418311300675668334823183502119307123),
+  K(5.85929509505417268179173890204729701589836518556487528653491177e-11),
+  K(0.6053217576359548137324798954932728917564013110370810838388732109),
+  K(1.00159791265123419841772084470898504705539281765626039735811561e-10),
+  K(0.676459158752930214533313697034259416684165354947968005708851364),
+  K(3.40017817145233506214154030573385084880994374041700188433842332e-10),
+  K(0.9387898032575916632592551869073829597915859236616758120848320961),
+  K(1.25053624618286096969648322349795370611269260906521649182167664e-8),
+  K(0.9645869077439359400538485110239138048564097888466674510948806434),
+  K(1.68499755406077643434832096993819025849553885894705570212563859e-8),
+  K(0.9827170484743728975477320523606384703303508254193037012953555669),
+  K(2.06803400788473689822380186839620147691831611695029297548458113e-8),
+  K(0.9942518610599523498944754707948456799592745730592138629547742085),
+  K(2.35128254773415997350563275195828842213114660632486498311407059e-8),
+  K(1.05273596704900753664535003751420241898411192359470143468205438),
+  K(4.40918532096336878488010632844122137407933205175964875112948279e-8),
+  K(1.341732846343803883750092303244192480949863581320365475789987301),
+  K(6.35578687144767188498980336565700369531916302209439927467108891e-7),
+  K(1.346849232559545413292388304891844647569334491953441848666351819),
+  K(6.62752500187783326039021480508735815926403689806615563246034715e-7),
+  K(1.370934793758688205603825444764049831393569330504941058422736748),
+  K(8.0542685011613742210039157820848380038656779620652359097905557e-7),
+  K(1.448707649602827534540141543281384887703870673319175351635348182),
+  K(1.47781289972872334568361533905253379402006075869645545851501929e-6),
+  K(1.515007864346763795915616339122327593574911440648147093807720386),
+  K(2.41752812358595828713452015057386451670076028644020698997333373e-6),
+  K(1.647237513288324849165517548068765775159962370821608721072516586),
+  K(6.06712709840809117201081418386184654249733480716454305057610371e-6),
+  K(1.799772821583298987549093987817477542906865549105656798475303295),
+  K(0.000016052510231320011217791460964642802630266852369229560298605109),
+  K(1.847764375424110343595251198322572360662979709707079501642555172),
+  K(0.0000214272957093787067647657963786210832437742700196017935103394579),
+  K(1.862022287239380424326166770712789232763945079259114778950302256),
+  K(0.0000233123205732148788812329654024073869686356660137108395925355465),
+  K(1.914615466389038260534158585157105719657523318748541095026903372),
+  K(0.0000316372062423178173352267209101640650603279003178066376677241608),
+  K(2.081227101153996367857613481803202453996036755713667802713923932),
+  K(0.000078788656516779090405619117698698995311625663677548100929511595),
+  K(2.164026609361783791013447678301017592714326674327827025727715168),
+  K(0.000120506680586052976793798087268927735032021340539464631724770311),
+  K(2.194016049191729786305575701489258448373844191201358332538431108),
+  K(0.000139949202865745293968951507022877521994996952950640909996124797),
+  K(2.202995429322007670004663049012697427573467594736701344832178044),
+  K(0.000146295681544799390809604250431073488663102638835583475698698908),
+  K(2.226029965945237631228587694696348937230393956444583354619328233),
+  K(0.000163775594239747359290468340797075736085564657367156914584378002),
+  K(2.339683774372041698920314131890471546411744533519617684872420965),
+  K(0.000280619974353260930696880898841644961216310449386716455607809667),
+  K(2.529848010911905490039220820191166616699382205489448899165042803),
+  K(0.00064829094309928437215840620669583555265110956500017866978227247),
+  K(2.57531580611655980098951773639488851893365779608562895047105905),
+  K(0.00078333450672941348231206558579915550694131743623927380120179782),
+  K(2.594570993905000335260122556453915075352820520608959318433747062),
+  K(0.00084765763053390460001193701676619310719038334900986847845216123),
+  K(2.648908553502015918535157831952017794994694903464989004704211316),
+  K(0.00105506783492522104014117247043884456941309353624489267305761991),
+  K(2.765390860455011694578599167302616174306893261370947963366582204),
+  K(0.0016560659593634791957453536937341274286562057971542106538928067),
+  K(2.82808304295783832878308241878525646412802951179403346473454194),
+  K(0.00208990287015118578778234988588372449613134902455812932945066332),
+  K(2.831047186989603894879646598433729642075906826487318076834782744),
+  K(0.00211266627434220815496788983311656710319160071903979783026713197),
+  K(3.142876880266330403950697562131345894110651809341653470550783122),
+  K(0.0060956154211440154066954607181802954656885203322990986918263128),
+  K(3.19574663478216618063942479741056490600863182960455862401197024),
+  K(0.0071870829991034060835492754906058567655057870458613562789860457),
+  K(3.208596077327790768623994502493091085198057282963384303363559434),
+  K(0.0074759810553249871981764700249152068896618009016304345077146536),
+  K(3.240577580723759986663310907520613273912520038034031389951362852),
+  K(0.0082378564472182751801187355134257109748261572216765637248179881),
+  K(3.285817369751482079820700565865937044710470765530112329160494365),
+  K(0.009426254074001944959032887727435811213121025608219275172044078),
+  K(3.309529950035609895211063018579584278714538987864415142384351322),
+  K(0.0101043772090293495850018391357000798064857730094739860482546602),
+  K(3.311420965679391597171902796168949411723147386736456498654283485),
+  K(0.0101601638324796231364886238430522081509275185424700136581490133),
+  K(3.342386101411978366017303111266643633964190806856489439627564914),
+  K(0.011110807037631793132817959198694038330017344071555901567978341),
+  K(3.354536154918169281269005211859289203552356643585559738777851977),
+  K(0.0115034648860752612753389776339368413395542706215915041536490415),
+  K(3.364030583715126470713491403858917906078369642057404191250266071),
+  K(0.011818248080150475211168662230345129725129417778807047783377785),
+  K(3.416216520271007243994488279624614924236320204323119091473513587),
+  K(0.0136783514917957565415258604289954091060271993224144729148925265),
+  K(3.497910726955762473693768396317779364890571237875330277630934306),
+  K(0.0170682386218390482609592531989633005548378595322024982095544475),
+  K(3.537555496922326286912073992647617738501890166879656977002612387),
+  K(0.0189434862080694691809521039179584061380806121408383413356469365),
+  K(3.58820022381420040784762716873442275736123304012888743629955617),
+  K(0.0215770709417790100447577553348091252818037038578690487115600889),
+  K(3.729778083318874451011475063550899760453626455601141650436695448),
+  K(0.0305115157112662446815902275932871744561817897024513877862313713),
+  K(3.749178266658275363560528273065529318945748266292454757190422273),
+  K(0.0319323647039987809816902814915953062459972453510402552229232962),
+  K(3.777126740405645840920134899503800400740315169798534677267468163),
+  K(0.0340685454557375471255602729343407751933331101952087834992943866),
+  K(3.901381050793648356188912906757358308519981183997951914378989529),
+  K(0.044914127989553556476208532984578168992782437826188036177482484),
+  K(3.965185535137129952651510280798007040329067339793959812048988741),
+  K(0.051392686560326045834751632045856462382558802278704215566261099),
+  K(4.08317571413332113626595962004725546978262844093688046719359673),
+  K(0.065113901638297075058375887020450652417767086923586386864019024),
+  K(4.103068803478635765157223164213890496673967222907194596240692854),
+  K(0.067657392357105973309658378821798861461999589104559604083061215),
+  K(4.105356915176122226575668156371175083726544760619244118271198948),
+  K(0.067954278501846628767738962439762904552099221640212301921523808),
+  K(4.212936075694668829866925188891483095114647927893004202921999323),
+  K(0.082931610614058400550062039381052378731715900914418530179233004),
+  K(4.298883349904163704511591588457555542077586351205495573501359683),
+  K(0.096338104564572531262975932499467816056817416683670964628373),
+  K(4.393347996660243258873365746273597582651533310896865492097981297),
+  K(0.112529703062720121665241398747240286463873676951835777855066291),
+  K(4.397277002555159096200812232619531408380442465564807218493521548),
+  K(0.113235421078634806729962235499547229095674085133453163240253492),
+  K(4.454360520171467852156230002202916009211025398892499382785759734),
+  K(0.123770256013286557013440507839754035295996486800054346780351701),
+  K(4.624189291508853518360768990512933345566363220960757619213013113),
+  K(0.158002494530225221720531191565572655458417543824014099530069193),
+  K(4.673215468490295874849949813374162467830787091125468638877165197),
+  K(0.168591464436309549508366010301759013410211616650216941213017527),
+  K(4.701583037036382811313509985271823385744676916159473205696980532),
+  K(0.174840600474606299068958980205893870515456147034398783861620488),
+  K(4.811298477483025857770336394541007337589814191018503504806131678),
+  K(0.199708006040755854283113988966554331188155337430897024792699731),
+  K(4.816295947952248951228776928045149454016897397958557704032327066),
+  K(0.200862516161450673627108610903769993818537406607098601568554576),
+  K(4.822304133180874881128847116104390510710940927703016895012258834),
+  K(0.202252559528650255028685831153585514552957459690157449682760531),
+  K(4.944775931000435826328913828847852784609507906893500861818375599),
+  K(0.230935181045988605204894476903375008600567798394418899622842002),
+  K(4.946250472955682825533498605015351369032601474679077860444213595),
+  K(0.231282931429070036633736697273338750701839067997140808102860256),
+  K(4.956013482734831266200240026902512123205137105509640319525872151),
+  K(0.233585808908264350279774115938349241120328035772663017002185742),
+  K(4.963728460603896396178591931456588130189673731659932551441041088),
+  K(0.23540591173110563888194654373254730325463015542813588380579719),
+  K(4.975553966135724292754269256346263577216811410304044209303190329),
+  K(0.238195791184652049415740043009675556290160671357229687027103688),
+  K(5.23753530341882767312167795904977062382969683836443084124057766),
+  K(0.298428080897079871872779498762709798903696152552696603466319208),
+  K(5.276635849222749013212396905860734967301384621973716951852194727),
+  K(0.306859062977865697746979749766894068741594188332086409586838082),
+  K(5.346018971907786326138057677231278205385170539570774643212081773),
+  K(0.32123070941108122049182027518763999817895774098806232509133822),
+  K(5.389579843673514944474808727710336392284837147996830117535968822),
+  K(0.32980718730729772552370663824702181276704606399738327634658095),
+  K(5.410515063439161196013149005419951020841017114592728303781236263),
+  K(0.33379189402613350012136702982015115837558935916077407360304227),
+  K(5.423125756862692459878616527992802508424872249281821811371301009),
+  K(0.33614661476843330495650342680126210080660527693353559886181254),
+  K(5.488204855808120313346084620080161477893142909666257637623134188),
+  K(0.34771591999323622236354724585447724122438214348317271699576531),
+  K(5.492470661450293403092050017756748594223510097403522121537294484),
+  K(0.34843836414835026530640146419336622617884403697687889447984071),
+  K(5.516315351753076848128303285633706249605233555519589484900861614),
+  K(0.3523907246326796862983671000447405360480317616710117861937372),
+  K(5.649573656839785962429441444931620686311025936050632126453245946),
+  K(0.37156683098915620116568938324728498591950353691073369407508598),
+  K(5.699693537333756532118546932879779870077150501118769758341136386),
+  K(0.37738248309422405524825003078514218457324896701184387116283104),
+  K(5.76698225763172876231809871502860055402573837664118979497819909),
+  K(0.38388331556991341549335183963282887820487341263307947036427371),
+  K(5.820450025202809094591570005158983176757457029999691794818049574),
+  K(0.38793290082232636577193037780906067507499434434750332982409419),
+  K(5.830539991771267922409360144409975495133823417062267619726355305),
+  K(0.3885831872360005988412742016216707635048072679613591851351826),
+  K(5.836904592877076271331163829185673508229254135086669512722947346),
+  K(0.38897454638614273240456651126233990012950921479359985734044491),
+  K(5.919762871518640813464002119710548072099738842154236440332635384),
+  K(0.39272171390959365834795362998024907683725664448158584199663588),
+  K(5.937078054302929739709835137041047942184088328141746995448356688),
+  K(0.3931848115420604853377752730641938549265076700063060143493797),
+  K(5.95361589640258983673406986022833030743878021102293158015956702),
+  K(0.39352285899027251533952411123918465966700119179913908959431398),
+};
+static const R b12[] =
+{
+  K(0.213322639174658684470164744364725789047251912651062630127344349),
+  K(1.85398583740650010691585321985650642024854078125308248740683128e-17),
+  K(0.2286820571470323018949285385171654171062561179183133383062113668),
+  K(4.27019905247372229284920476795317175506469912197166876015889608e-17),
+  K(0.3454775610144623690933417263779126642293442039881475044294247545),
+  K(6.03533213417753844443928705933762877585757559013746731358097033e-15),
+  K(0.3630685835325484347118322898998126603586375542914710856200793756),
+  K(1.09528486455234937463851253221563210009719613672455133393593777e-14),
+  K(0.475882882814837404326255802889453628465924967039794159392748295),
+  K(2.81620354949653938393471223455421035164852584249620195564630157e-13),
+  K(0.482284468849542530816227259743006621449711515579941591489003327),
+  K(3.3059962233000455016824881680555085945084190315256371784661498e-13),
+  K(0.4981379099896375851304269642450573119421628901407551701143985758),
+  K(4.8736929808112465926610517652274904647144013406849772396081688e-13),
+  K(0.5647571753096982681536589161279931488342260002234525602086727003),
+  K(2.1978807466311586781344573342830822412633346076495690130435807e-12),
+  K(0.5729472661588198623292569366043794344888454620434033894485927048),
+  K(2.61239506140026759535598309492514626281575710982261420615354393e-12),
+  K(0.5853955037135279087465625265277074071584970955398671431497004799),
+  K(3.38108138502560459765127606411647110151071297841504489457253564e-12),
+  K(0.6393496557921008513177831815256484571508252913647008208466536662),
+  K(9.7392219750528314875000751155853230493988939558430798480599093e-12),
+  K(0.649874830582859964334852631376617999605058840682849738750412643),
+  K(1.18473070030118534668348086531607860034445079130079412970343051e-11),
+  K(0.6572359963230713108281282924255958889084684350149591829772097457),
+  K(1.35618561240028071479593880446336044873372726892659581908698854e-11),
+  K(0.7186768699270722463496714614077870699367396491049181441678771769),
+  K(3.96339217505017775289169162218868974439473665028545948161388644e-11),
+  K(0.751965733492679566783868050567812893419517401962864833651705235),
+  K(6.82400981475618348883505163806958630397137610030094193497983928e-11),
+  K(0.8041649311190484372766383315244757982624381270398114137684155455),
+  K(1.52687890826805203314764054293415164310326886700807438421070015e-10),
+  K(0.8226940991774325555283396744704149677052774385359731990434481495),
+  K(2.00689025295375476717925340468649030711314472560467073516581557e-10),
+  K(0.8446423949124692939538868811553177978579951723651789177408663144),
+  K(2.75256478035665249781882768023655443770494892757090365119472179e-10),
+  K(0.9133067292035863389827105882804131836805502569211343762091753739),
+  K(7.03174197447122335757350034236015711881670909572778869584495662e-10),
+  K(0.9876335163052340660957354230314939300431152162281143199106391876),
+  K(1.79809599004835695399685700145717163369679465971332203918977435e-9),
+  K(1.035105532333215089351633589196120850411744554584618651216441185),
+  K(3.15848335931073990418194644609449034438357422793355147087919386e-9),
+  K(1.070101828622631516856609488792835536693767151108249410108039021),
+  K(4.70721798366919721411381552715215811641008882372275800903026193e-9),
+  K(1.081224964497754375576584501989415622443385876561244254310965967),
+  K(5.32912382213567493215518719017102132990385379214401700457270344e-9),
+  K(1.215461810456481014661176701289127755278537812046134473963157888),
+  K(2.17049528103330199609644813812812296685880534246190903423934037e-8),
+  K(1.264615384878703545005942259775769319348895512647591954358190715),
+  K(3.49272608750662768700843514984627068344470939752726667520895429e-8),
+  K(1.373092409421855843306886037585531770331707540246295118620385826),
+  K(9.3769007136816330841989275029681069522827680777969165880530285e-8),
+  K(1.462802287456618762666643953651963733384015058674227616094081024),
+  K(2.00394098089023752829360588821170532704127786333781083140908783e-7),
+  K(1.494583595048008378878982047194007445392031155416066687277179096),
+  K(2.59355721040296897821063022128517218557748898200417847258440996e-7),
+  K(1.549784335539053412878826554635240014003164533066872677843513234),
+  K(4.00770559765885996435952162036773361202808053658551968971193988e-7),
+  K(1.622060291749689389501198643956023909773965446884212661735532536),
+  K(6.9248410581874250115354005708277990289491264590829978528476458e-7),
+  K(1.677746488940007977352287908064246392927557947338995066115319078),
+  K(1.03817955318146658584550301285315010689436158888922278759492221e-6),
+  K(1.791446074259724843192559771125762103094902907976782156978975216),
+  K(2.27926943812948883670696841296939698359396734751373103320916397e-6),
+  K(1.803765024067086798714419370287277523240707127579308914587578016),
+  K(2.4744370104502433747824674809245416461004009172438695765465792e-6),
+  K(1.857647163397852920247658083709234958389962025962810551594549765),
+  K(3.52121018561285718928447613430138073708496708073895931515022749e-6),
+  K(1.924615092574569415666102650099945277799195165365663902365004002),
+  K(5.38189823200982184839820936534151779247800350596880171420350846e-6),
+  K(2.031492192344027304627451387297136659808683168049208840291998513),
+  K(0.0000102750497921187351897384501327913444943364107443398733103339396),
+  K(2.091114003757293959728076899956731514187433985976454461738711021),
+  K(0.0000145174364688042836204938397378715801603330897964205064096746968),
+  K(2.109031062919512776592024293748065905876432678227839813753442874),
+  K(0.0000160741338653468016282826113198109037233759281028520165735642474),
+  K(2.310811825340042586019439145167994927362703472461455617768854995),
+  K(0.0000477008029719895824515556609155780569093787757811473891892446448),
+  K(2.317628512351214742924792593269170893436767592075233260727684605),
+  K(0.0000493973038677395253552890043520901726676343237473419808498443385),
+  K(2.31933684187633298934206611591280443949551774961886484115645083),
+  K(0.0000498309646508834569403858727289791467468180047937607122452844737),
+  K(2.323126313869899195359882085258439296314283772843666565233678904),
+  K(0.0000508052949000671452311933936049103041301980207357700265037864585),
+  K(2.468560761690264469431456726866218087474402812934895500073315508),
+  K(0.000104171849505896953474822282244380357037955968626617755609095036),
+  K(2.488815646523638955386729419055504927868176216806437307218448933),
+  K(0.0001146980294016658752622187487784431737914587319427048734547219),
+  K(2.521963789292129556210205367654960324312523545755262013162728151),
+  K(0.000134014441107736612775029988399167922971281134063888818272273415),
+  K(2.532032280286462668737234936729031766553817032302866008985956757),
+  K(0.000140437793137083778907902116852137184119614295782690399175589764),
+  K(2.583737727756698589761177447603251835160975534785904911477970282),
+  K(0.000178017854579165730206902856951760281238769792310113686940114944),
+  K(2.590810144272480145489478398950201491389752843952251165460569328),
+  K(0.000183808330779281242292309163503721739345898199977898353263535009),
+  K(2.929418287494774051909915099282403338860960660687845651882133592),
+  K(0.00076159413659255286814124147381763165315635716198519519971036523),
+  K(2.978672196919101983676397075789427201327530643334241527420931497),
+  K(0.00092082145868570923626795516958161333931247251804735326380716889),
+  K(3.039361909906739171387571705664859963519193580950655155353630646),
+  K(0.00115713822732844295180096004357083550666732408449326148817874761),
+  K(3.101565642694834519105980276581189960708524718191351662845930831),
+  K(0.00145346895716882268828485219522124855721668755384834395634789198),
+  K(3.11273014596671426940284570267411236383510134904009878507558909),
+  K(0.00151320668170665261187724005025646346212971946264260964016169564),
+  K(3.119890899253903514201075095385103493368979541137458519396545616),
+  K(0.00155264917787054812716473924641228444162101880318120381072710491),
+  K(3.159357589996923428217445656668238499096547570383119784998517176),
+  K(0.00178668590224281118167841890858501413927578863928827502302834423),
+  K(3.188645901889286928038487370307937605186042552972699619952775035),
+  K(0.00197983811086697799157157605230059245580855196368899182302374254),
+  K(3.251778719978125837363737352756137851183373393702706421018561727),
+  K(0.00245938183879663823203955448994042112839387753323124951731748056),
+  K(3.298447528842656468166307015515363739324330158828481002030685748),
+  K(0.00287618726333062665197477914597928829446603185370120732146686659),
+  K(3.319384318966452345166605623847229534385156140982884993719154865),
+  K(0.00308229460972869886480410035707911462259249714878304184169614875),
+  K(3.34702870238147282827030170012241758917407692915653976130502919),
+  K(0.00337398262576198918214575214799979587248439941662004674972634892),
+  K(3.367332040776146256205672434419529624045265240025004213066761812),
+  K(0.00360315836227299996348028040320149432257321218681738376885098583),
+  K(3.463447286030253816334966897372800577791168270191976719795597205),
+  K(0.0048797832377853040445240055910814921547288470250015966390294291),
+  K(3.492559667844890354131701087302112261478536306533428262153930529),
+  K(0.0053359246440663940450554393776700525361800649016202101607585186),
+  K(3.619560092844791797057986041153690455680653923674483260738350683),
+  K(0.0077761802522820504080129725219159419583921463487698540149341951),
+  K(3.711319071574803295946721916200097934523794079256964579505601177),
+  K(0.0100756324051636679345393616955738904644520045990020489980276253),
+  K(3.876001312278932119692691258707310376361311051253171085409823954),
+  K(0.0156214394765926414448915732244132341976657828961892552256850633),
+  K(4.273122492663918816533358301715202392602149926479618518139765341),
+  K(0.03942949070742825089538969715894951504785461928568378630009698),
+  K(4.374744525941662807832040606682813324174409932981586049805540393),
+  K(0.048574526285753546812166216056217794458748136491622922727117895),
+  K(4.389140747666039234825454436836679627351660851656882207447124597),
+  K(0.04998628703851349296362291901986539006560164332600252398665611),
+  K(4.43149179486078781676133156284051731276549800803263729104413855),
+  K(0.054312221187133453697817155965179574770795418559951127817234725),
+  K(4.459464388257497182634153143742865669099899039361237986368616476),
+  K(0.057313022872119552421117127822375459876438083446294887575015604),
+  K(4.619280843805536011058921151521705425665910891200262900175337251),
+  K(0.076715149535319574788400877874735781616115047181678885438639504),
+  K(4.711492951625743909762581812968517695203841034454910533742812978),
+  K(0.08969243287061747199677318329999319971466972788936772583533256),
+  K(4.755118284651899109629614484870275009847671625011668494912299629),
+  K(0.096286630378063692240248533370261943048591991153553239391755012),
+  K(4.800813057432436614210127299212460945666346230607364980725386905),
+  K(0.103502319653294432029373005644125804556402021483776102101819121),
+  K(4.879322235311920548146621962276030416041112620377406805971809427),
+  K(0.116618913893479088579823149848399432944313706935034891755868049),
+  K(4.978191073378217272728055825064317664671358557152081431608689385),
+  K(0.134364504148025817577018141126485649958216987943272815535652342),
+  K(4.998451178159982669645442248011073083655946700566600477452630061),
+  K(0.138159261749123400439904225221042895110588897242152134027021494),
+  K(5.063452138859173987986397525418026074807369497712975953775187343),
+  K(0.150668987109010495381677414309031097230261235349149642697565167),
+  K(5.106623674165047760382861739738761527752527857109103986919183638),
+  K(0.159239792368892269583676468562813894688038940570893903655323178),
+  K(5.107084748453505370086929566895163270642783325622133777917451999),
+  K(0.159332379620040265419576453160004572298903878587279211076812104),
+  K(5.204550130796286491113050210075399597757580255744982513675871414),
+  K(0.1793475921477123774872122079726296424198547059213639895228335),
+  K(5.207403646927992149488130449082119018265895232205202716886330533),
+  K(0.179945611196241229300024361106796509771841214462177161888554378),
+  K(5.501843993556705743460116165611265184703668437445702212717688334),
+  K(0.243531274691731718679388464522275448837515723079832604630101592),
+  K(5.526984563366304436880348011685914641670821374246372941868931312),
+  K(0.248978413087053618668584258465759917175243790258377477638652284),
+  K(5.542715586342257970579207702764893721367755367032064024906081219),
+  K(0.252374289388670536945195462635307200521843525104517942228282658),
+  K(5.662108028523409364910645609767050450477446483484043041613105346),
+  K(0.277653209877009644620525645182539234144916803840656503473712832),
+  K(5.683208636491872238187039359985001928754321465479006657346618436),
+  K(0.281997155287215159630034698600711663042180889482340839041419205),
+  K(5.696923656508928893091414005038030023525987934698999557995364),
+  K(0.284795454168144842064954521154342799315135966456805931621528954),
+  K(5.78861604422468495086854276519542665395560368707636265929864224),
+  K(0.3029060399153473950119000299780917116715387405717577656292464),
+  K(5.928681241594255853670900311079147826984708392786839890594828808),
+  K(0.32800046231939524698706359792191654768603757546065228847161443),
+  K(5.935914660255678016992986656379756124254552259579209540441546),
+  K(0.32919451094072491454580375821251076725463201221574685601445959),
+  K(6.188101536348892909879944141499980668255846029195607521054523851),
+  K(0.36294115551201817280334474029575638366463905801811043771178923),
+  K(6.212723370873732760989131136909663484688926697213780232302519558),
+  K(0.36531052491144061950108649568090290822846840593220642479044846),
+  K(6.232691949842441758504746426879313196689212764465058058088324503),
+  K(0.36709895396863549195440168969190494392750386361611477708389166),
+  K(6.234398775219373790890717038872903687520079230911281902873699079),
+  K(0.36724622298633682512247163351152919028711940764184955954118977),
+  K(6.355678098063634285751399514915665309222286617831966959968281804),
+  K(0.37538325033165150787710204296977118070126074307226918691517816),
+  K(6.46436473562389665570078207904371577111325731592923444339187182),
+  K(0.37863220483366259676765807338492568531625039231784749538129069),
+  K(6.487537567572441675727266982402514461082383272851556309450212739),
+  K(0.3788181643404295768901300524168371883991257324454905965716347),
+  K(6.49085345956880238787267202696214534107661995935770370772675659),
+  K(0.37883012236735928033308533947080149192757774339572202420367902),
+};
+static const R b13[] =
+{
+  K(0.03500675406427657693212016862095068528344380436031145034876052671),
+  K(1.90411708123484052059864470497951343155384076176352871978252046e-29),
+  K(0.08942512842893320777467759527089750080817845790972757200349160836),
+  K(3.75572795383257805672988424678157991781857172329136359037712863e-24),
+  K(0.1271961630557841557846217098070225130476764769485083717115500895),
+  K(3.6633787646959559166687596230638307398945420331153348941904202e-22),
+  K(0.1814598184112747244730437648470080159832534872684091160473276707),
+  K(3.7142045596425111446351475894904023258057625161340104430657172e-20),
+  K(0.2374741015741288259163431574528954015836441828682170240518105812),
+  K(1.22667913004962868100782242411172504272060665898951601978071907e-18),
+  K(0.4836773367864439194867350337710857964353483038291048146265586535),
+  K(1.27333971448339377883486957592247958504469675923651441300798459e-14),
+  K(0.5839424985591752424065987265808246878284773012002270657075402095),
+  K(1.4741129881774310868301967747791413200379746906796341398743427e-13),
+  K(0.5927987071047963261115040046173196742883445662750153185056024301),
+  K(1.79272594866199587753466088062180258581014649410293899901983672e-13),
+  K(0.6713599525763494512511826968610825851452823097951569104563718842),
+  K(9.0394143292448763113727047008487242079074970925723557880339017e-13),
+  K(0.6977406963072609331657875788291261248006535393361430625872218726),
+  K(1.49190919141400245878761109441455494078177137296700884852915697e-12),
+  K(0.7120069964260264104748102549902338237552678970683646807942407129),
+  K(1.94095326771147382610693643603088512724607427688609302718054266e-12),
+  K(0.8001536333806011374730749056120327115371442513426070972016891711),
+  K(8.8506189857413373120361474591261844783827200106435466294920407e-12),
+  K(0.9120440203889596502833518626267966904386990771721268064011769225),
+  K(4.85204799330611242278074810720611029684446426402093283779047216e-11),
+  K(0.9589868144564260623698113575275911131682454411590668741584154683),
+  K(9.3171685125786768584995428214428800758315462197703634448583619e-11),
+  K(0.9836461297509232540917765431439269893507570738461311707939833628),
+  K(1.29606034041097843930706052880638234950243755107309436828054143e-10),
+  K(1.007506844326021366236083638623148331990995586564480472035177055),
+  K(1.76987970907962005655215711002088302831938851576012122065432575e-10),
+  K(1.030510570400747050681313824442956041466252356900762240270780353),
+  K(2.37356727246017791507958812212778621096041079679710707765331121e-10),
+  K(1.068411843086093816681302440441776507461780032537528950607730279),
+  K(3.79596935885735494901734541522200997264038537028965304921966161e-10),
+  K(1.101733897196742024771906541666662509930023827559959910756161797),
+  K(5.65870344962304684546840049876651715543274957136778393748234989e-10),
+  K(1.237887297553914166724817582010957526413992251698298665016076725),
+  K(2.57379566505476845993413884633903119050985828346283088617920173e-9),
+  K(1.472802661587985768964069228647322367691178223440052226985792826),
+  K(2.46374995763886623147137799680116025759864692942680843506328923e-8),
+  K(1.744601591707074921480188254227339477740372718167832363413595585),
+  K(2.22677479127854678830265924020136773369172472758486508870209865e-7),
+  K(1.745594107710033488599749654105308600316381562153867124629788632),
+  K(2.24329499880178263582615328598662496963181169726783739961542826e-7),
+  K(1.769163428158906048868400618239190870626960616793475092702065776),
+  K(2.67043804396051906629694621008599815092755084542372976595525632e-7),
+  K(1.841853901978616788371559460535780115269483225193633183285267275),
+  K(4.50615275778054477943403492202102722492811594591077712154405782e-7),
+  K(1.941797559140528124589246948420932938997513940083241597008160542),
+  K(8.950989690285369121183436854280375810471378310811247553755753e-7),
+  K(2.029556773513017692748441461158384175973629121114526215386770271),
+  K(1.58868846368187673857566323420858386652708434245926369104496396e-6),
+  K(2.055585290524304277674290158101428975323812351070759649036113712),
+  K(1.8742606610945642548181652810768993107130957671433779817240022e-6),
+  K(2.121801873716769510899364342504921071311231297322095009005072012),
+  K(2.82713356603808673847184658948895816294824811172267108735419648e-6),
+  K(2.128464418590607968242030267640876062705121028098223855992076481),
+  K(2.94435326024225675162486768519809406154497483656292985250447671e-6),
+  K(2.170931603194649848366790289392538745944259399767594038351237017),
+  K(3.80300523949507986425501334872520454042250263457887067643463183e-6),
+  K(2.176452988811393439160317467092502851641417207328006666285931002),
+  K(3.93016589106678567471707947648187506951249210703535197069330595e-6),
+  K(2.269784347703652132754339151822125209672329382634967552860014077),
+  K(6.7656832024916233385488653174903888520666433039910134069994406e-6),
+  K(2.29770966759896720293389805742833123551465775158868570908730977),
+  K(7.9236304912905898830054011130325573530860076870241577349470656e-6),
+  K(2.366624760161156499313123223417498342350744881808473897639797715),
+  K(0.0000116024039798560872448520320108299400148012810049172429708208845),
+  K(2.390349844150021864730576144481227973282144287894094567965221464),
+  K(0.0000131941999808326241350358128764299988137713124121597051628221929),
+  K(2.467820439049224878641188561674023108971698173822623200288626259),
+  K(0.0000198906262608860974609363413000555431927419841419653982582600019),
+  K(2.479743400254625610021448377841614293998178585716086286036073921),
+  K(0.0000211615160490141642348145017424551320004139721759310316871464713),
+  K(2.512704402802728819558592396981691876679446672633739868496140052),
+  K(0.0000250715690501988922423483362146746072641979015821838552010531001),
+  K(2.5289887026766415294556072800479431631045116315231113592574725),
+  K(0.0000272378267941588490943565710083821119215595615398300993913791769),
+  K(2.539953025607159167933733336746811992815094086531822841963802474),
+  K(0.0000287913914177365524072674883387261672408326593259096948067272358),
+  K(2.816356513602859247644938049380503413406675226505074396347888685),
+  K(0.000107366516062738467331146049792436730932431911957162748631230217),
+  K(2.838928451477557505801216789570047452182624986987390183285488293),
+  K(0.000118766093096483772958982970271310654837653100693164592113253557),
+  K(2.872830818829551231330414485808270037004474099570221339325709319),
+  K(0.000137959854137327189583671560208013206548114135059564396886673868),
+  K(2.875603024613993639051825428950932502066715582623460642577567268),
+  K(0.000139647350921243751530215607889185580157686383861843955877859822),
+  K(3.100696231335479490246041275473286019584053864282366027007800099),
+  K(0.000358440245662382075460657930017363609592247858673053383031458125),
+  K(3.107543874657214147734517876688976963324827195106026996708411938),
+  K(0.00036837856952186492888691666796154920176169747187200432369177588),
+  K(3.256896990590595169237343025664989306807447768140506138212899839),
+  K(0.00065669889556818849411509236125843449732290809996677477339583577),
+  K(3.263900791056432203394371929185120863123919807694503988341936519),
+  K(0.00067417679042488877969327197692621910183308893132156482879616927),
+  K(3.320893918447249779930842306452882741309324905631307665484155753),
+  K(0.00083256407155019198178168305904215384698747684978983932724862981),
+  K(3.340580002993246700438044614743931767765455217706980322341443407),
+  K(0.00089451552025725469911872437193578645094751207997408676411138463),
+  K(3.359115628191751061888556347611963052462977369244347446323023005),
+  K(0.00095655931262692917361168523227687259524801245262862681576883497),
+  K(3.465393012724128634012170308691297777213438201161866394098650798),
+  K(0.00139178471370573157872325060499546790769878935384086777496564644),
+  K(3.46812647213081841412762671814560105964364235922671293641534807),
+  K(0.00140497822188944651128479758546591691862970735311630409184331495),
+  K(3.468931692731432448138364440281347168518486023286553333432950767),
+  K(0.00140888575942140857331937287807683024429397160778534014218232862),
+  K(3.472797338700413649013456745276141894305564013069152378850951696),
+  K(0.00142777872968029813130816010649790780055422072774037937641450198),
+  K(3.615422657536832421708730897409178405135050765018918580583057545),
+  K(0.00230097281518946987650089580708126242451551793780313281889671716),
+  K(3.658626012246637976484101536549520833041696631296048861124411042),
+  K(0.00264461402016897214032507804373495190089967489246253921920218393),
+  K(3.775109504773181143950826536616558318238777178279570425769036726),
+  K(0.00380305418420003246980914807439444520779684787907161227666146955),
+  K(3.810506045662715333536922261955840101584148411917928854148969865),
+  K(0.0042325185294358142645894449683598950141707197405119125075816723),
+  K(3.838545847132428617763903175728457304843800889788451727013714174),
+  K(0.0046018066464934205824868558724674593271221745232457551115670208),
+  K(3.993363359019782767944889231773593938447931032724660881880458472),
+  K(0.0071787554380607716410709938398002935167786214742739172712363836),
+  K(4.130547068075411635287722165395260034028728142913114139583618231),
+  K(0.0103973192728687871140612486288353525924857256355096875917587065),
+  K(4.139469154876559746535306106345855432325269565268768747316773057),
+  K(0.0106428872776633307128770099381855174241845644087984689078192408),
+  K(4.243500313791349531869180997262119931874829055285715614617603257),
+  K(0.0138804836102776549937363314937650532147174716544737956170159714),
+  K(4.429127590120894719650280226620942455046689478078799308155476961),
+  K(0.0216482683750410933005023954620503881032732540491774836864072588),
+  K(4.458927439120123876567665381866290781451313474946041849580289984),
+  K(0.0231696202656285232265325364483689131483361018522391130927777703),
+  K(4.473852927521309922497900098936277610185554310168163099862644787),
+  K(0.0239629180321457356412979398569917194382545722592561522443495382),
+  K(4.551850987140960213900767448746086309281551910073009524697652494),
+  K(0.0284645990151215078600862805391700881249212739743086577757258262),
+  K(4.655703816623965701073093725089757528666883633742589423720551266),
+  K(0.035451634738293574748431133610565026268006336961692256293637709),
+  K(4.657393865768037645705025404685482251123483587405478639741252825),
+  K(0.035575276882392403003421973419782103402153547703609393222126649),
+  K(4.694250436043980053685433952983754574445740515861287203690768309),
+  K(0.038354110341096975596452260946387320896942017984849261483398402),
+  K(4.710506390705670895640920237231151142197088160102320260459454763),
+  K(0.039630581728444260404147496622578810297913702594634306850815355),
+  K(4.747740594100250718501806980549066826238773417560981448951366517),
+  K(0.042674310210530600106711342266444740984967558753587322488811787),
+  K(5.025375446530831061039761994645136835677954850561570478954112769),
+  K(0.070992825880585030982955015850185507193396909741120229307478464),
+  K(5.137677416610086188577659427446956995241223818934816906442582663),
+  K(0.085416087026578919763323408101005730959268502991983140380701435),
+  K(5.169187760358133464916670342800309605563186943531462605611851992),
+  K(0.089775443458768903363925859501709473351438353049485190736561833),
+  K(5.218981010053925978444026499946398344716343196680023765647747149),
+  K(0.09694021889242025603064582993677724784070611931024884006908548),
+  K(5.268797848906844336716394487861541400101432417811412631391903429),
+  K(0.10444165653484520161055171684698972079478505360277362363099335),
+  K(5.31234054582234037329551243222864901755660445961215777631871164),
+  K(0.111265065471147856284493479274862994740921879483673167421157703),
+  K(5.432427528632922249014172431214778165978949396008719045432803899),
+  K(0.131307737862743146440235665258515450934219212189766615648249409),
+  K(5.774261101542943539802906554750082851035325325026214394269293761),
+  K(0.196131144849628153432653390143514685140165907641031741524674138),
+  K(5.891700274026588812339697315891838960230213129421373123476507233),
+  K(0.21988687424527522479543589481717186898772811055324840232504813),
+  K(5.924660927351843519921167790313140983440309769188127431549538716),
+  K(0.226573949588132300801145987220638789187226040475852418791554947),
+  K(6.071294035675327244106129557539292111049562279187025931715889257),
+  K(0.2559853394613029083057501058791176358122372468925040985531031),
+  K(6.095405120026415743783122944469784795638955679203129886820359123),
+  K(0.2607187472923819109261781115182622743994514389318813143414542),
+  K(6.095891092937880889526296268156994330902465283549093779035599827),
+  K(0.26081372875909611561789482323570129324695330914301079633225114),
+  K(6.118024256990987349942378078565171804339807898504749663096724106),
+  K(0.26512039861591874801819600891435987884687947367960153370289157),
+  K(6.156192427174203615872425928239653590641532084723228425582660095),
+  K(0.27245034332014642116343737996863234109109652845108600147068874),
+  K(6.197208207100389776350477010851165760429496729217399458937534919),
+  K(0.28017004854727381677251678307526508312475682439787684830014288),
+  K(6.403196916717738600374805520015452522065358322604783180392703952),
+  K(0.31558248877017704071950356142825920719851736730445156713657439),
+  K(6.444285083882396694498212383077374685141657263731019359921980611),
+  K(0.32180055068496383700144441985468831254517136637739799516236645),
+  K(6.521416579849217420925877952084841271777099277096259059529274732),
+  K(0.33254609832145151533664606693712159317376094955524574387082889),
+  K(6.573812206566595899968940054033773704738249200335510977018401542),
+  K(0.33909575555133911288808677982181874184496105781924032805355795),
+  K(6.593630040531192243699468345929548782928277679956227455180436327),
+  K(0.34140461104845734462120835196417981571237458191605931390193337),
+  K(6.722091635463511586578171733197830364994440539404596668282357548),
+  K(0.35396523187249447614172928828040588233955294993034748095386953),
+  K(6.88096570701827902272155346871342352521470516295087333811785261),
+  K(0.36325198080556643860648196372200653170061990317580096508590531),
+  K(6.902559924141177307218260696667605136229844975657342136960357218),
+  K(0.36394970682654247955205258574948581360472542682016842427089879),
+  K(6.974983045142005783294259354320747030973508021586509985939658585),
+  K(0.36527702572584567345147305296957093282931596392615255697640788),
+  K(6.979721418476500039485680284909304696730959898395890172939212108),
+  K(0.36530920569114224425038085252800437626366375911887638504078543),
+};
+static const R b14[] =
+{
+  K(0.08038496209512310146201648239619527456720313184271529825487175314),
+  K(5.39559081001297550973135186201384536103930306431304017287800586e-27),
+  K(0.1043365937660071170848947501535046444686014106295860097412461424),
+  K(2.07828359404834800483788117036539621331379477102529037877586982e-25),
+  K(0.2569303728239246652468861356230073984374436583771566529347887018),
+  K(6.2662527342482012282390530852667273502735869473898166984270194e-20),
+  K(0.2663725300001598592304074035690829599402622699856642520966501348),
+  K(1.03858906801599147933165264218146504912176193159861744289732756e-19),
+  K(0.2970953292501889634169387297942366150344937365509580916726830669),
+  K(4.78776897314928474141937675071103368063193917479165398945433698e-19),
+  K(0.4898199365751466394509974177298008453510368102920914844716519114),
+  K(5.24930800894523332469690552022469810508094796820378470455991269e-16),
+  K(0.512812649550097559852094712353242373610698817048681743024857041),
+  K(9.9773190321206346303473544938388589109979915225448264667805406e-16),
+  K(0.6163462735279271921712901591366690720580142406569693897520949517),
+  K(1.30959947302897984953986843713986954923397007115309069413939674e-14),
+  K(0.8072602782337097411504811116419707045870796283863373216739705129),
+  K(5.72508334780370077153236373611792619971845304272538493793386752e-13),
+  K(0.8189177560585791900182217775918668372311649723065532051573690523),
+  K(6.99770574376504953694648477577938698483948705863342929197003962e-13),
+  K(0.8264454613039065192650492890961426187899016547976964578334272523),
+  K(7.9540887620336298337079340315697025903927845835206040701397514e-13),
+  K(1.000171306135305399948195554621849966677252220284631147150441432),
+  K(1.14982863783418467941796453891292202393543636999483220496212818e-11),
+  K(1.271277226311808022109538873352590535936947612251241221373470677),
+  K(3.30335603726442814123029146389097812420535005766343743410044739e-10),
+  K(1.293942217573291410231053907253896468094561095688267166527382296),
+  K(4.23058087402436262496558614862707913627952616766051295510953723e-10),
+  K(1.330433068789932441613989047745497163742928700709663932956644805),
+  K(6.2444480959358204902674099259350673186434848996558227239668076e-10),
+  K(1.33285054175719479070954616350047589200112721243701747779277031),
+  K(6.4051892166716902442861170920144438173198763848834872649658217e-10),
+  K(1.365540665458165794324067115337462555329730461501831902941284035),
+  K(8.9920044803993231055795633472483640706256729575307826122513499e-10),
+  K(1.45975793572575551960638617206299745657618864910512949989346021),
+  K(2.28835216495924921245346570564406483156951257297361696316130802e-9),
+  K(1.6399890682774234273743567888215744238480554464422905840442448),
+  K(1.167757372628353399012551378441796114641408845181971999558336e-8),
+  K(1.648586230120145594664702546563393312627788921067424035307639363),
+  K(1.25643821595046263563509894327721741852179161254292260953484496e-8),
+  K(1.731677077342886973240768040331953331316535351390806450333910084),
+  K(2.50086763379065800196483503835008702376678293883032511690340172e-8),
+  K(1.7401238546999789220002623702043508332463950807984369099245069),
+  K(2.6771492815783248546606329231918577383534653198433819596220945e-8),
+  K(1.829640164124196188169012531136404055248681548723278640732442129),
+  K(5.40268967565830121805716869712797785307313511407326644507498293e-8),
+  K(2.074827884274680186120772900395201819754944838719160502518480287),
+  K(3.13824816179810230340991892006257286843064640139817952469257865e-7),
+  K(2.097039073478831225096960572589633246060192089128136809242833211),
+  K(3.64194428465660065003038370347008650319996538181470432601387066e-7),
+  K(2.176281669137844434293246802628402326235742821988522614313170701),
+  K(6.1153087143143984641399965156022679013134315050175490599983895e-7),
+  K(2.253493644276846947001036866641589102602018715959341105415912259),
+  K(9.9496612941207030502052733989798649961582658466172831475894906e-7),
+  K(2.311297858545933680795121608617355691481433641436643177664389958),
+  K(1.41656429947897632889413691193061782830954377937780247076374784e-6),
+  K(2.54577168320664305339058817834193325606628803717296351592376714),
+  K(5.4323786551206915315078924495317156811096310907479047636842257e-6),
+  K(2.674987836677328051364482727219811267824663153625223154183498714),
+  K(0.0000107824373414018209624092328998800890917808998341158145379615511),
+  K(2.805017509975914613320628467078524328000295603865430818000452041),
+  K(0.0000207431224898341834475862109750628569595095885792900150518600413),
+  K(2.828845035069383222700695734779736523336170380821777519432141269),
+  K(0.0000233001182156348489736786726655266161475802538564472083399175324),
+  K(2.944391747782572063153691086154784727103905856712042364973790815),
+  K(0.000040322106939285747657056083371599341821518949415918936586989059),
+  K(3.05154944790394744470282143541237402250467984704900234565370342),
+  K(0.00006561982378569266263566143766500508791902997791083448317674221),
+  K(3.125816654387491135181493061772418593854352602244761479350590351),
+  K(0.000090900563494498607863455203207024771441768009363388104473189695),
+  K(3.186419987413647885753816666933012125432553439604525580032470229),
+  K(0.00011779183571394267609640115110732822417649129013192494148533623),
+  K(3.203412278520524364185431415420988049461409435618118520105752057),
+  K(0.00012653435314976217887362340352027524103234221937326213455514676),
+  K(3.21922047191428872917192900553192334678486032302572825739601577),
+  K(0.000135193310682529258226192670849741770245678153666434405497232512),
+  K(3.389283288497269604554098388536402681136400192429670707610169314),
+  K(0.000268886344193956035765032135885660605270316138602502068361730317),
+  K(3.474908393917779726258485924317450673277672075067443199315211182),
+  K(0.00037395917862023383506190678955878542385094866943901385402933739),
+  K(3.520735835770742557386751111311058058198973329803937367269558146),
+  K(0.00044424479749865004104440562726867474057151949195675919638460765),
+  K(3.623633013334049116771876731229608341314340643282296598929728442),
+  K(0.00064706653146839493010808454868514600369296438496477265992976551),
+  K(3.634089555757923288339314134924734086213284452449849218627618117),
+  K(0.00067173137563560269235370666937884234798333321147218108702223453),
+  K(3.71708288576554376241371699922745935764515309958133551281431761),
+  K(0.00089929813593442950272991735489541779931844459731729771015298168),
+  K(3.880988614291631405874650816863649996100038238322340370073113823),
+  K(0.00155878159655103308461118161311311306763230423491828071322537653),
+  K(3.993589494670780255067670211336636839441703049793089427791273635),
+  K(0.00223096207858335628517203496262437102193325113274916647503958254),
+  K(4.26667866617675269912650038166772475623261485969879672204364227),
+  K(0.0050030634376208614190206534998426042030134895249902859395140951),
+  K(4.317075693292136640349176556970619263352549213433065547916922075),
+  K(0.0057539818735088319943065351824229096015523463126801974686745588),
+  K(4.355296364188094937825899895648024744844660590284571871115173507),
+  K(0.0063859220081681483710982053398059353913664422974491544959114144),
+  K(4.440129376456232922588772065094549886989529417262418009548310628),
+  K(0.0080025412973213831525519581728553008362933260355623684701300722),
+  K(4.489402419665817159529188170381633305272874488169725355408472763),
+  K(0.0090913164015001288732654583664878211395984799678685121575646638),
+  K(4.550112843567626982961856265967115538554762510386852000873889096),
+  K(0.0106015157242130320000008292060998110412082706702599721918739601),
+  K(4.621087344545622699041521753586552428824660434979860884436133122),
+  K(0.012626949319900149305675246097057595417370684056009827218925445),
+  K(4.763214218874334671936740574480660069104215013067623430393522867),
+  K(0.0176480459857377160552400907347798236559242953085810569336633629),
+  K(4.813823104118767527514050138650496089122830252283432567548856503),
+  K(0.0197864061579578757979087849348633310190616476887294930111954061),
+  K(4.836802338591058243370719336332479895843210114800541406521152356),
+  K(0.0208238293994598952897054972734257723060470753067684101468389813),
+  K(4.916987590979422770572182048500588701174346520573625650672752591),
+  K(0.0247892863334140951280373919781197646353067798081380483013792416),
+  K(5.030991695380471413549318557885211812598523819601647686645729775),
+  K(0.031426825626727311538543199074547025937488455810118748588210316),
+  K(5.045927248029277849438117301543092610895120482765662526829099165),
+  K(0.032389519340427039375495222224999407974105557534203066835073506),
+  K(5.063324857378289083304074441347962884992889772782219669097385867),
+  K(0.033539325030321076577102826560088415073344474346579788679081379),
+  K(5.170084492221797232534028607539403713589402181034061634633719857),
+  K(0.041290321845857236490754437027392917487932175134988947125226955),
+  K(5.205909160701356132127335552903376226748782361388470646436420191),
+  K(0.044169957620847445577506090450796245570198334703558079407538185),
+  K(5.235223493894515089636397513607996725332832110114907030287096692),
+  K(0.046634457754709925542731124891810677084539342911086857229881072),
+  K(5.489290775609781985613227406107575942517674226342008754315655099),
+  K(0.072285460195394189277431469557558009201628006988862495582619647),
+  K(5.57246893443664422273278565420245974317207478307315899429383611),
+  K(0.082413588436280640963920409426031530460828304398167472642263437),
+  K(5.609067012515871137713784582850558831446292970428263788878660519),
+  K(0.087142685706138120301051742073484900916600502935774366255923035),
+  K(5.705843848737587968475395530992422807899384096447159600689869725),
+  K(0.10043889146985609562838253937142733680121949329909167122891255),
+  K(5.739298812743981710497296898298036966186224362314501127071179787),
+  K(0.105296584270244600258932197672641800540115267839466742299984886),
+  K(5.832466584127809884746606458273860685456714237265272215571745857),
+  K(0.119501400440123880831937304311053577292190130899201521543403176),
+  K(5.857375452326899780368397416024363287701002438864448086519527278),
+  K(0.123460951089288423340443189241177452782611223639719338193222508),
+  K(5.903114018313009000531197805454956261769051632602455304308789964),
+  K(0.130899557299561779644645087626464216183137906236969623461298938),
+  K(5.915329089115460012067760139739681366782656153837683045812094324),
+  K(0.132921666279804565046041042072276773121528694047238074748995395),
+  K(5.941036386707917512099622328479095561775205060578191142925475291),
+  K(0.137224350940786516866008472574155661575385735703979432731986601),
+  K(5.959278301232222207770013542930117470081425469789014382757438204),
+  K(0.140315107836777535016299613202284939572087261590219251453259352),
+  K(5.994369969971818294858278458265124748929839860342937260966667462),
+  K(0.146344556779473473045760629788272211981996051103207329575764185),
+  K(6.024701140776425616100594995220977106272994058106140439142260902),
+  K(0.151640258895661899710510887018354279812993093390461307069065091),
+  K(6.033995822605934243018524130300999531045177820409630989783960855),
+  K(0.153277888519234045640631105646672205022122703886050855864941424),
+  K(6.274625488425471316403423993086579387614446579490353379851591689),
+  K(0.197513027262131908459593655762241735885844672631903353670315989),
+  K(6.297439747638865115968111370137207685741196905104721473058665168),
+  K(0.201826988527475686215067470341567769745395060212407297870898559),
+  K(6.324416103922548686982824532552259888419351148985631544231132975),
+  K(0.20693801467734662302917148447566062778197954344804123792789596),
+  K(6.361557307685173920722991905732567936330318930714794225667789143),
+  K(0.213982994736602825692521717241954335040987663899904588843997769),
+  K(6.400231676139147066369090247893362187888636583900516644081714335),
+  K(0.221314180150527423118120832282304699598773359775180628004794492),
+  K(6.477659444910842683319501764940638929713684036393702674792842496),
+  K(0.235908496775468940537064175704897296440239291823512735875705657),
+  K(6.499554585706486277987602835751046970297190731432013290411403879),
+  K(0.23999997187431714543056745964965468319080226428859001898474463),
+  K(6.532242182840607264282454204004566617129581074256489612045108038),
+  K(0.24606666006830802775926848832792882902791624412045663784158518),
+  K(6.618952982020205396932005589350119412388477198949403956174570014),
+  K(0.26184025146393272478333477490860922860781300408886157563857511),
+  K(6.691807215516038751535952715351243915524511255389235046012243405),
+  K(0.27461299318463016436919549036659378779215093475490738576842396),
+  K(6.808945900598713418154913914141337104831566661040953061805020634),
+  K(0.29389564166694889256870035936357073079972140773471949550253492),
+  K(6.843352610464939912304384464200672922523160894977731943680143564),
+  K(0.29920303860830003629548309143845764636373131521616469780513729),
+  K(6.854447285123366066199195595266835427307289934549434615952187561),
+  K(0.30087564520217822745138792980485919974014510342047675863511105),
+  K(7.078443167497006503553678944877024669906189980847160232466502113),
+  K(0.32990616387825757792160100246204979970343950482046235580456),
+  K(7.1159722476134273284411700298258802212943856096085601609201528),
+  K(0.33376687264383901677754840322632551613360324472794576035445984),
+  K(7.18722323242323355577239728306519232508296848714657677683895345),
+  K(0.34020250896887217956728096289546557279478252217143448679203606),
+  K(7.258446356560687483954647120878448459711131911124289055226092527),
+  K(0.3454063532774527617254755864387960082761263843317676185588251),
+  K(7.362085534456436240471005429348655737590605086641492807601752588),
+  K(0.35066700010941306475341722538596660288125755688433043213774027),
+  K(7.365395242017816591463315522978442924376428638714288399760355331),
+  K(0.35078856038074734217735483371371033847853742816746191589967012),
+  K(7.3828282733042345473624397572057437392228744591062331324630214),
+  K(0.35138069833107800508299641404455165795967084959733160032743661),
+  K(7.392075119755281261423294659447355595593505468995523402161392739),
+  K(0.35166183860839158268348149320091125297001656077466202665607527),
+  K(7.396918859251535613008451734557749831524158306248765723009963441),
+  K(0.35179996867479099968161086673513985251303244965607424228882169),
+  K(7.406611698200595736672857455793583352138915946462725236822571842),
+  K(0.35205748000893691256375020618606338695672254780012671950177256),
+};
+static const R b15[] =
+{
+  K(0.06524688563852112599431353760224833659450548254061720478535133346),
+  K(1.26443698509707049162742881034435644450539643945119395900721263e-30),
+  K(0.1561457228141394554921678527679231333215926480755585180833720974),
+  K(6.11577888441560230082993518157413498425965425261481154899685775e-25),
+  K(0.1662745982036782037047486809326878606328999814712910754748865731),
+  K(1.56996147202646341193472100052960724846611886021190536039711229e-24),
+  K(0.2713224194677110198962685552592686126294460234137098253342405259),
+  K(2.43100362333604579895905427404751863260784136958207497402379748e-21),
+  K(0.4574086518746628298616871940525912215591377825871618241183291808),
+  K(6.13855306060791801974695838529373631087655270391690948774334978e-18),
+  K(0.5141076649858381995168323920821401876976964484826635809252313617),
+  K(3.54251398172491429412859670678962415430369194596344224424162766e-17),
+  K(0.6646948649531410690427815919385694283807438543172036073717303418),
+  K(1.6704567820295195339601906763508543917429707646782114379635608e-15),
+  K(0.880705303629708190668988510956605170002826460291455705565180924),
+  K(1.13752136965209164241031220275564569961670324810295191018272493e-13),
+  K(0.9346295363708226770128555074486615218534714232276830386440077747),
+  K(2.77391348939871739736509526970602596372595505491707699205098277e-13),
+  K(1.100393100334711040594513449572776313400330952243198791212305227),
+  K(3.21157647622275961442157146573922346377920139172644089948652958e-12),
+  K(1.111710905536044333295927846843535549553218006662560201650712473),
+  K(3.74436673662341115214137735228625586366180886588687395645275882e-12),
+  K(1.383654623331600106708428630378404907082012510849929692041677706),
+  K(9.9750673557411744471633309653182729694374772708843240060841431e-11),
+  K(1.418024130874928817829953786583122856838192704732142599021292722),
+  K(1.44130081872529033533041192828492017501062881843059507232409437e-10),
+  K(1.533142856003891216791859580149398359488481490070435715401211591),
+  K(4.6477079478173166936308349331901752679856039176905378943737639e-10),
+  K(1.621556050580319785399573583271265491300590022324038313191581836),
+  K(1.07764552061722145736310432068561693967617603015422159434164844e-9),
+  K(1.805176467393163420100435053740353936019209967321356695967487695),
+  K(5.3858853101905739244411318077966719830560493094571627383940412e-9),
+  K(2.000882368568527972066949634813315152675028342784846039986521053),
+  K(2.52121702506386736862126762207900064268902612712443740320049904e-8),
+  K(2.096267575450620228489527492486308639566974642916905821429656862),
+  K(5.0673987190161496599377255005971919766116530895328194597557151e-8),
+  K(2.109684231351790974431397846429678435847321224593877995369565536),
+  K(5.5758161431152932322460197724472096112795343008619832721059793e-8),
+  K(2.1991302597721936516312081168406339035048806080338599888946391),
+  K(1.03868946777807746203656417581014834782559711821322842457041174e-7),
+  K(2.202816187951594449412694154965913151971741159244138821852680594),
+  K(1.06507164168584682987400411060608009704702060923464681006048626e-7),
+  K(2.340875735172542170263339388007084857314574790934610055978206426),
+  K(2.64571593546644590716745182294340551567191688726908484000102387e-7),
+  K(2.409937767387179179100363252801598917915892137169692792440306546),
+  K(4.08643172961513350108900828600744102311031240971157567365050556e-7),
+  K(2.420584097931664394011401811227466862279735087292094569269098363),
+  K(4.36467462458130859058807245382333200429459465476465281966392167e-7),
+  K(2.514515221325615766413947923125582013489195808691733041950418741),
+  K(7.706188258065553055693538289938662084724168707293797187350234e-7),
+  K(2.559789163764258128971319798369245492938287932764744688926994205),
+  K(1.00559780710611685742996612013472161851051025988766220866732883e-6),
+  K(2.620759047849132326142646675077330966393340106872728806127388724),
+  K(1.42801387085432876603171750296879909692423407290243752231515897e-6),
+  K(2.640671548031339164578993487818719489934828836629041339149590169),
+  K(1.59832948844181006285104581352564160570149797937840921878506397e-6),
+  K(2.687381187640514963353886725013770603790806664975574850720103644),
+  K(2.07458898190296821786129166875650998801835132108917142031100465e-6),
+  K(3.010348852709226686196184885611960946094012569296725876127105038),
+  K(0.0000111214471316702739871372275678291079977227378820950797659542969),
+  K(3.051422379234583055356492515944742335069452871125632823854796354),
+  K(0.0000135725417641309928053550594912293812605400163894703878296857446),
+  K(3.060432397628151688359528808207504625000048880202120478648209575),
+  K(0.0000141729499606565567877163103838850282959054077396273902041824957),
+  K(3.080024410335416967408873868451431098610451536973020448031972841),
+  K(0.0000155640464584639302676205921851384366558696070320569900940606811),
+  K(3.084417309946797356682894635065290153038563425069270468348181753),
+  K(0.0000158927638259397438603357893573936832034408409848124655770140821),
+  K(3.206213340781758729929925380238995155011442531510441171529506932),
+  K(0.0000279974946556787005906792901588042028345837273576028272716717684),
+  K(3.267566651549473466295034225213481245323671284800639405402761991),
+  K(0.0000368913303574725744590930076845736580754939738118184745273081599),
+  K(3.327644298365925032472987574662293609525780556980175133792198731),
+  K(0.000048049908099784530979411738606319191523061967158421052733471192),
+  K(3.363500237934227498546539474694548814255066957062383801351369902),
+  K(0.000056107002754014284676739505727741091217006615417192832113830509),
+  K(3.402907090999440408401821603797108440458609910035847753987828768),
+  K(0.000066377074643357537265700211665094676470240301357913889250150482),
+  K(3.420395751999375737603418785789155842429916796941306681655236222),
+  K(0.000071464077877670833898002812887153968391214564201672189947806413),
+  K(3.499541264591156420454703186042830214816892123762459760462403664),
+  K(0.000099253764758753652046975279122481344636109023835998169135645448),
+  K(3.544614108625092527741226941338602030428962154879116450514228419),
+  K(0.000119183156580697261192109472033684768877395303020163231253091318),
+  K(3.565004191988400394552164647894199988566265581299385029760139821),
+  K(0.000129344961691892576855191509117657299009002962297893718075857361),
+  K(3.593773741957557219013648774292462060791184599191613826991783688),
+  K(0.000145028380423752618166633970218092088831992561661709319630769381),
+  K(3.632372418228044918655697333382845748391584916854053550766223215),
+  K(0.000168790523421622995918995421604564320616376220579245276949293333),
+  K(3.703370835636570254126379620524965821350316472102263999518185319),
+  K(0.000221939071295987980276122020270818512794443124359515068854730645),
+  K(3.747364542443106084541440448514403403612055042505118856549138609),
+  K(0.000262071407995107511929011273867540630698679859911344674016250852),
+  K(3.754096244964762053200021613088402938945810407405043416778115958),
+  K(0.00026876127491733442621291272928342959842225311821318990124331199),
+  K(3.755483877247501717969283944146536609986566466911255481511509439),
+  K(0.000270159362043984313272609706233018316022072836859947986162906856),
+  K(3.757735197174929726171524336725596932281278636321730638816516133),
+  K(0.000272441661331677921847074139081090947828809058871857106631550024),
+  K(3.767453785993293022114041655749377850714242665013317987249686345),
+  K(0.000282495699364563336683675703858389419588302127335164295501570901),
+  K(3.770280057510110550098524220547032810588131350702378987422307502),
+  K(0.000285481914626324500475960985458374707917699300034963046210709506),
+  K(3.77092114009744760178058591432733004128463611332662883165559695),
+  K(0.000286163240332307110879655927899380238719115857419857797643535944),
+  K(3.774285611168231598922489021104053324692168769850775841231817493),
+  K(0.00028976310229811737545598492857314257065505416557009378137767998),
+  K(3.781529358046520574368360900074388454213816661882577921604037129),
+  K(0.000297653131350494490794765319205876086231146106844897398344803112),
+  K(3.792729984847503934186257326358443861932296540816935887774628741),
+  K(0.000310236244766356883098155645691587652715051439802044958912973667),
+  K(3.925780370309236382946923716080098155930257430475667261242128212),
+  K(0.00050113129379477725195851605658770826484305414617790627401929262),
+  K(4.039798354352898875759748999984045034429880941344749361652313859),
+  K(0.00074266762266925467580975377988954272256384657469415612117335735),
+  K(4.243245754270537099161173656874677733340901458251896759146405498),
+  K(0.0014420083598267339967203073825318709498289527863919188880889229),
+  K(4.268785192365833444042552532660528414909124766197922354773403714),
+  K(0.00156201356065537319363046025743096970566037095321029028971720774),
+  K(4.304816601078027172554911838745269366122814753944011210335951192),
+  K(0.00174632372424027656831347243240733574414564551480686948000325243),
+  K(4.32782214944903564168113419224336166663088290094746713214026975),
+  K(0.00187380923344556642406832851044350879028584424268577115822734078),
+  K(4.368588585791091464454527118069633633904204575425776776175943157),
+  K(0.00211996676154587043125264816447804553891096057729944872428447201),
+  K(4.559138115679865827356442578596285932729033727354088085305301068),
+  K(0.0036861957671579662088961036983036014157816212436949738798917436),
+  K(4.644939953811752427915979691976602265782684262250983793357061064),
+  K(0.0046704945338447186010598302510044431130357596117059494202932705),
+  K(4.653106956924452894303158664326909532807019461217029375358917419),
+  K(0.0047750255477596916541163696002688990878187245717400390951249306),
+  K(4.718471451556829108466917471050179835736337223603165497673454027),
+  K(0.0056866471828368067018168464936997933083944702235932397405564798),
+  K(4.719242779078639701342146593966973358662979879261427701629344733),
+  K(0.0056982377544211837590056275177689747193772765625007810520928107),
+  K(4.81584244045651607539098933706587848728126131705343942441122467),
+  K(0.007319092877223926639720077649068066113610810421435842627124874),
+  K(4.859018663914719685488668704408298629525952692546460721129462247),
+  K(0.0081613254603966974770767892778799410168499665930630231678317706),
+  K(4.889950703469766010390225156745994747636422049642568602481750705),
+  K(0.0088138575063709198804408591067603209109516704786169126586328372),
+  K(5.076892702386292289213824658351800204881150046035708924111360368),
+  K(0.0137599577548990399277295368021830357929193024795985682155367694),
+  K(5.176013876755567669504636531889589254111237754393179042092447823),
+  K(0.0171963383636222335210578799682264600774330920920193468055969262),
+  K(5.222927015731440168849973265745018898136708946052596900601758843),
+  K(0.0190501425671554203567017104803804623553534952354866690895548221),
+  K(5.268225348979709385173510536780405745313136866219431452426841805),
+  K(0.0209898618670017269201831726321852472577705549390469468301135798),
+  K(5.336413634652114531769338637378597696634832253720949147146817975),
+  K(0.0242044139840480066178281579924331080558669731404596946088986499),
+  K(5.386579104416318161236679664535664702608534525171598992219572792),
+  K(0.026808842369989131537261200078469978951464041837979466021920932),
+  K(5.55102792259851938384140219670602581169290518688539090738381302),
+  K(0.036903879413270393767733670342084703142560357255384019026680339),
+  K(5.631488444837607767066373877523896500784088854590782877517936001),
+  K(0.042785424036504597209201425203738690005885698198733519259616781),
+  K(5.679690380698138175664958053020753206789230916276758544916090093),
+  K(0.046625978783363084499878081201547662471392044064003453340601726),
+  K(5.80369987964183933049861968052952555228142766445907922639007066),
+  K(0.057647937323376525688700879006881211848861302724461875235592134),
+  K(5.9067843636476693255711178831213810958626932027801026625337175),
+  K(0.068104967698403422048554755495284399559908192289294805466384582),
+  K(5.956517922224213854949712678376546582842745724348513170175773011),
+  K(0.073579217685937427168220886969584544496320806164766667811231096),
+  K(5.969597269358227963027760673422289440018011525721083034481079284),
+  K(0.075065490167694224153360354154737664601677033690862920382946215),
+  K(5.971772217657911781025810246618075458300128786875467293124459261),
+  K(0.075314522531281021313614446081835448554093166550494087118455046),
+  K(5.986987010324478184060642637704877270764629854811081189310478614),
+  K(0.07707162229898424023535531353686664695925765866015626785633564),
+  K(6.152368038105326122427165602690141806363319593739009109532720754),
+  K(0.097847007623417921232516139674396119165275725506141396213848796),
+  K(6.265166368840777021554815869606725911224132651637977769910113524),
+  K(0.113716435875896082458591918107801740025578455014107882699852709),
+  K(6.305697711196964103164022377824073257019088582916041349060510854),
+  K(0.119733786992983675280871145941909179371065428085409207146628296),
+  K(6.370875590808855395627492998930090598933258547706718035567584596),
+  K(0.129735449865900480121680132530461531517673856125453218463023147),
+  K(6.481276977291409070003511307845968168124846766323163198088657787),
+  K(0.147505965824365182786218174024938093336887283214487552178356191),
+  K(6.499185765063949332617821803748497557276077035756305346164971633),
+  K(0.150476368234085608687648433014637536223898808899337388036723544),
+  K(6.611797785455402081259239741982275516883720129448975716404396337),
+  K(0.169617077711527488499484827164132657008398438572811349208905271),
+  K(6.998868708577432519109977072470512943263533701419169602309841944),
+  K(0.23792685159566542081611823129086389673036131259215151397850485),
+  K(7.004299131547358235870858052875484197767778775764971614665986026),
+  K(0.23886874855261984698816319669284050197237563448559425131028338),
+  K(7.170994814720527023671579198212698635744665443844217312131885279),
+  K(0.266822164771783758701399353273402356141277743172643267205888),
+  K(7.227750735609515172136932681913235558107780495665872148256395494),
+  K(0.27577599267244767132668078731947635086533547562758152556275742),
+  K(7.26770017434665565549975834666142715325652795502420285632654731),
+  K(0.28185806228857972851969168268373261520569380706243975219442194),
+  K(7.602618423350583473405510776351588719160549060348871762296186837),
+  K(0.32325805977820229057203809810841292151527806776127515216289059),
+  K(7.700932818890707186919848892238098147807562101193224016957588024),
+  K(0.33135921723357620548242511899637723442617823323888287151867706),
+};
+static const R b16[] =
+{
+  K(0.01632344581322613437978564083659119855236034016553572240140638576),
+  K(1.21442270043245808863798453307965940423442328989672151824706661e-42),
+  K(0.1476800193307583057413600530180556878311648671515897202190915723),
+  K(2.44640443108088353910703803669217177200568175024519479805270012e-27),
+  K(0.3953210101745247270937085229674529520748384166711059639525448298),
+  K(1.70050827471416046510667618493267508860700598835892219905400469e-20),
+  K(0.4235982539083013033608150069690701097351766798314434766023346218),
+  K(5.13625984054342706482857440565334530685748695601965423893470305e-20),
+  K(0.4791329870476096664744951823486874901494575837780969649706436853),
+  K(3.68703751895214451172455779287184896098950430977788130394422709e-19),
+  K(0.5215890179805354235272956092271122958600287653852879006980757017),
+  K(1.43428490159051468108617940179024930911287925780203040143559364e-18),
+  K(0.5823036536598409508864036027327427288165233421862433601802428265),
+  K(8.3516569623420634735323383508884404446109050853536666691395765e-18),
+  K(0.682623391983218947343543953289475077910819776154266140109262249),
+  K(1.06237800396747995146515126718225065506346202835859810926153048e-16),
+  K(0.7898409882346258089206560654266197321195566903534345876746629039),
+  K(1.09651628096554739152162546659558313751627981769309864706230476e-15),
+  K(0.8694416764595674107507580538755148522838638675567572153153595629),
+  K(5.09597950353462408115290682872606254818127689252255994779848737e-15),
+  K(0.8815676069762188013979634941802468769155696730555810339637944555),
+  K(6.3601943402283580545578921500708061442348745822181093633486284e-15),
+  K(0.901826624206455047667714771064803698320469650698230092966572798),
+  K(9.1484864326846252879950146669936538801410475077731196805666811e-15),
+  K(0.9770555725485392394049891797356064805347585118030225568528334891),
+  K(3.29677010078067102242328883737580548434045745449672137709641953e-14),
+  K(1.001810670131509909350444711120831967131569368949362430027462665),
+  K(4.91983858159458997792600548635033162489155524134156239754275259e-14),
+  K(1.066979702422463273419493598825498401635615361991495918487300423),
+  K(1.34858687979674436609932860780696703061125708636422295404801558e-13),
+  K(1.350590340627289997191267045388405408194038307666961406053590314),
+  K(5.8581249744345771517740188411900936886408136142102887709556556e-12),
+  K(1.463886851764897360840687205015847215319246760513746550811548428),
+  K(2.12569274988730025382484150357155113421539873937691828302752136e-11),
+  K(1.682295256032921445891940318844615155951876240918704939678831831),
+  K(1.96703448232759166319340193687179515558666114285136887747288675e-10),
+  K(1.685171742969279898895370714404215306284786296122215641914325376),
+  K(2.02154298265463142848576785118323476062100971803901347062296428e-10),
+  K(1.701235086968214174988930484369561227154572347578238134523200001),
+  K(2.35290600920851160960429529915116694101777638103464704641462398e-10),
+  K(1.792098493145952480730032870862471122355656994642653018664968465),
+  K(5.4094702451794066125213466518787688231191523770587490042343256e-10),
+  K(1.870057366670781227174306032141368860406596091701886164463984442),
+  K(1.06911318318035771641897527723622790962624579489173342438584548e-9),
+  K(1.966891804433135612188039862572035956981087862255092279865286131),
+  K(2.39762947698165354470661484628221391800850263429855436348760726e-9),
+  K(2.169597099557483697086632331105582296630791384071825639560701552),
+  K(1.1509861284968003886225498910342420212646302216014449671457353e-8),
+  K(2.191901380697962601201729036277649380792336052444559977275859341),
+  K(1.3554543436043579637066670092767551358896991633482680883995056e-8),
+  K(2.210186159580648368776817636703172261104344944651545247111778916),
+  K(1.54796046078129684880417784026497882930507157714319469224162009e-8),
+  K(2.240828131783428936266902357554789281296181930995568505578429773),
+  K(1.92903414811980982316476055248476560390312015066481340200405711e-8),
+  K(2.265063983017358015016023645100184165217264864163117570150298625),
+  K(2.29089752408461445318729915546994333474521950256920081396240215e-8),
+  K(2.311608243165090912009031532690320141723360483620670213855909144),
+  K(3.1707007700667424779002769476893385640731743646394515571888221e-8),
+  K(2.337276424606743002493678998462364684666101459662282407637069),
+  K(3.78239517483441868470297441388769921872943301540710874716659328e-8),
+  K(2.37069879388110540072478496393218742731056229434610303849849084),
+  K(4.7451438702811408835560519451334992177226057699119238243549042e-8),
+  K(2.480568113111442554888641111010002554478852554769631315829599072),
+  K(9.7786574980709553703458055389061054141302599679949973459455147e-8),
+  K(2.527443396016793933469150236702968724574673495680735219286126263),
+  K(1.31807308127166096045299159050682925899473094445837980258628814e-7),
+  K(2.566179653777539072515760767230268391804708575600554849926535422),
+  K(1.67968845488745103672671124275332235884352738539279491174890345e-7),
+  K(2.570468286200444784609927677738823047120034528432660621389660597),
+  K(1.72498178323068680344089355127733934404026121169359321228615326e-7),
+  K(2.614086999096059624444659307520422719270357665405361636882256571),
+  K(2.25524001333267308128416211539580033791604698048509069967342267e-7),
+  K(2.742212448197947047911950044210894293763778164728094926386096348),
+  K(4.827962100675325706184732105668842299373482363970118966549066e-7),
+  K(2.872485145479600200211607658205964841312342448828301872132385912),
+  K(1.00828848323221253213835813709010296271146017668062238020891736e-6),
+  K(2.936041864292267967390641426651775801942170681117542639754068937),
+  K(1.4257373374212304123453519338030224177289656661112544944062595e-6),
+  K(3.015458430941050198408858031249135729783424475725305001127921482),
+  K(2.1735253782522677101497318279469299705687204890312589242404056e-6),
+  K(3.046656450482240346774788019342366632064293735191274482170168873),
+  K(2.55664173447120365132547056627710160673958253053083568407932733e-6),
+  K(3.057946147571368811144956081969705654654248488597186097934493755),
+  K(2.71012195444680687921627730093265456630297435435989611750396825e-6),
+  K(3.359176217991053946300296205628373018586992807798491548846810769),
+  K(0.0000118160567442744548205301495878337658204717243761670970307450095),
+  K(3.521116612127975999163784526728281634490007280700239592197835673),
+  K(0.0000245260291186756013750006599517218592373589634658650765861326719),
+  K(3.621330946190001403828688306751438342302384997524386407253277874),
+  K(0.000037785902976231209222581339101568620495913388425025453146409779),
+  K(3.821042964003751246137828097430137754231230286987074031773012121),
+  K(0.000085715877934158742148915729070135219665451435617755441193526998),
+  K(3.956131306548604076875766682269180154789733004353814237299417776),
+  K(0.000144739479983268927599118325724746424927743272032439389997852523),
+  K(3.989238401790630387418850867711838575268719891898958630112112915),
+  K(0.000163985763571414583849343892124724675234709196841733846401666005),
+  K(4.005582376784301921482350333861688477444207294311786155411877624),
+  K(0.00017432246839029932704861402486224257809482798826914069520076944),
+  K(4.103994484961021186207530286568805197716657606849281686506133815),
+  K(0.00025014410673220988928605815646929357760356968512584122659018869),
+  K(4.204429291035428291236639996227075741541134435928806969573345603),
+  K(0.00035731104716616857052705815208994607267004097449341181538803816),
+  K(4.487782443319602645060846017084948157921594600254315861477219096),
+  K(0.00091823946719452821715548844760060611701691976037439326641047691),
+  K(4.616853952760356866489060889777303948230101654175757891567293359),
+  K(0.00137119588185416071316965767807168393609604226164385044434952135),
+  K(4.707261329638205772749854540620572208023547583832186901531389479),
+  K(0.00179719856010530539700669064503084756696328075787467520955231543),
+  K(4.840418430267218711161290694631377328744118537939608437601997745),
+  K(0.00263707582811592767515795795071726701984212951015284783522425746),
+  K(4.884231901617830307474335784228811953094391339755324358182241773),
+  K(0.0029802388774222265977155021293020170264853934971442369819592547),
+  K(4.961232410049714990609801356773801730608789492289746476825630452),
+  K(0.003678437934859192993357750122681718535986933297277930213466339),
+  K(4.99736281594241166950096577543970663629192290848799929921122757),
+  K(0.0040523360517893973525029583062561700190525607826811423102547558),
+  K(5.051939085950659978841029926373037668827881014637032464753090049),
+  K(0.0046794357057973114161474149957326429971017453895988481626507839),
+  K(5.073873914236307733780979756656542897421747515159214571585599156),
+  K(0.0049541116130940624208304525559723426036106195938270097060369385),
+  K(5.125615106472640162689596602842330873038060771729550069675714802),
+  K(0.005657563607892785524808334228339740943705084522072945089895088),
+  K(5.233079343236757147633918063050240443373941752389898041030472523),
+  K(0.0073956674856246301231719416033740165340537922981239412289580623),
+  K(5.318992125759906881652212379638397545287940231224101303553009076),
+  K(0.0090934184513150781831005936630132910479521032451224945349645061),
+  K(5.429944896802724274705166314540895809601155777479117836675152377),
+  K(0.0117604565171216881786367321303740088352196448145350266222400694),
+  K(5.430410855977565031774070293098283052758948347396407592169115572),
+  K(0.0117728978537779861431265959844437386931111308631957167547974305),
+  K(5.448516529248034985743417563536237645216119288402729371147266615),
+  K(0.0122648622148094164434321402975147699509436619565207659290478663),
+  K(5.514091332083679087686631634279526872544961823841871018567871728),
+  K(0.0141913353516867417840245640688167203656313365924608583791446536),
+  K(5.523404471366974343052855740075505718397720891651148668747480329),
+  K(0.0144840977055206388861812646064167724548337372723714813537646857),
+  K(5.623595104790982748583100304563600089984585966227961586238465067),
+  K(0.0179581960069983809294801795346479825348577975778868312951152943),
+  K(5.678822345996499144704229480685474776349302969357939198759540144),
+  K(0.0201444351895195073104859904714204627188497426718948231234290949),
+  K(5.719850562771540373120394374087494567453722183228467339664314698),
+  K(0.0219029484969758373436762073561467597688329239068662218024716062),
+  K(5.826790658100093490830048535312120588469253084290799682788441275),
+  K(0.027064343309987382162720979835110898590214542717116634601684139),
+  K(6.010819410724913310169220950920197007864987282232224926017496638),
+  K(0.038112255623437624675362131418022511949358347020581847849646277),
+  K(6.143143513713596338580609557898452478349521924643651989617560292),
+  K(0.047940507423521363312411140286173220937836696235285438796798185),
+  K(6.220074870214220178804114629314321086361681380904790783051264379),
+  K(0.054436040875098605996089806779893310216741873466328725346703014),
+  K(6.276518621561486943797831092411684302783111676336671208953852695),
+  K(0.059580630901179433192721634028791776572797544876093317574969842),
+  K(6.449313721764528598285477710964530631435177016986508107523235247),
+  K(0.077369151603082308302375534550320832479884282830514937422441176),
+  K(6.70747100428765290178463527882317487810181396354168271027280059),
+  K(0.109614455084030153825089724077669969250064629083117073174712426),
+  K(6.878866164245266228427959659576392819701760701703586516378780875),
+  K(0.134431334469065827420441272591986249713955386455204762138655869),
+  K(6.879387132586535844607444781306551193007474956187862175229057425),
+  K(0.134510356084598777570385138535493407047744499137696468602708068),
+  K(7.002416659974181929381871493604280237050439190666268213362075202),
+  K(0.153686618514977071136375838490973760843614056260403238591852935),
+  K(7.019161599931038086453547552473400532081006699133377252535264019),
+  K(0.156367775707497797487106358107206312042769005834561110178027768),
+  K(7.231911079053228147021532009329311387064852267313308024000377598),
+  K(0.191424170495519946534071035385227595237761927463521096138533349),
+  K(7.270102063162650236850514273753684461301472618428573822620983196),
+  K(0.197827813458003531909782319414754598081725199311520510871551186),
+  K(7.301127014599690422339126624263611446728398609025726294641395102),
+  K(0.20303315844860162679527129530644709064714530284854777709291526),
+  K(7.415353590422024108316410221406745366483399480831886682713986585),
+  K(0.22210533518783921767613099933462090202890846635402377409304549),
+  K(7.437358326049699297930503741753818577586719935247120445578435496),
+  K(0.22574259897061237599088961561007973501100283365573004385995625),
+  K(7.508189324343508826700321396153362293575972516135552308921616866),
+  K(0.23731362152251312944841716822060051907449438677108404219564523),
+  K(7.558764083681955749423359504086686019590509130605026554540249059),
+  K(0.24541049122627433864054033115658291158608809189962587979208868),
+  K(7.623358608754245243677140075281489085321996410033970171454155299),
+  K(0.25549284842354245691769511608643113309193288451367498937360352),
+  K(7.670620327052598254549197263745863304498529974292777119245375371),
+  K(0.2626489381188439475842735465608355484758687372327353516159057),
+  K(7.753734140106639250391841603542093519521176690597492765029145628),
+  K(0.27469098900236710456568722483692579475053563785710134722022586),
+  K(8.077823078197245212734517310512086778923871937619408276732071427),
+  K(0.31262663566515627113448484386098135338743274411114011751876665),
+  K(8.204514402238097534146923437364778501260664484250259286390410001),
+  K(0.32247055393295019844182142457442672645116510635941835391503439),
+  K(8.215361946819854001871989680164510209478795497133874162751683271),
+  K(0.32316296767893946802733302395537621928265278173370176277393458),
+  K(8.239137277434160764239705155389435864057216340170327348578606996),
+  K(0.32459458939287088403983737909144220674653981047831126217127979),
+  K(8.267580499307706648155599410981172558286705043832294853490616883),
+  K(0.32615031223106987826735056577448842010973778775994207703721972),
+  K(8.374530444097204264549717894526701160602483633730664057211031258),
+  K(0.33043155276782232212950925957663458014173175266990151375880517),
+  K(8.432700121864605496674472937082050387735627540673619606684061055),
+  K(0.33169613985826852702621905395708675968009352670967118653450102),
+  K(8.448515479512247048505640433269777792978701906642086113179475858),
+  K(0.3319084633005224293622045425191469203482811671974823939003375),
+};
+static const R b17[] =
+{
+  K(0.1642889099136421200255127162317202727587518813539791972595192991),
+  K(1.30098323725337944250830810103669948846277118561854377763412108e-28),
+  K(0.2853199502942405879974839486895556196381377909000950158004447859),
+  K(1.54731187850940637782491958996405065223252824905216069144751858e-24),
+  K(0.3817682720133198566705218850645535579595100326917823316709905166),
+  K(2.1853883956202471649378168523269003126546865913403449765205564e-22),
+  K(0.5988345192309950797035056006625775178167997786895929412837830754),
+  K(4.60412961873737111909247019361416287577999900980815486176744125e-19),
+  K(0.7387830873334704615250903050340967489990545814847254737031742547),
+  K(1.63575985552134929170260007110647473159372939227409537360069581e-17),
+  K(0.7516698664854059421048550081571631619171403200434039741376551331),
+  K(2.19478947745671521177084143241703871813776395344903177132401422e-17),
+  K(0.8106670636860050077225069463303216711475704283513208855790911065),
+  K(7.9296582495350092528366223372730069304575576704268991148608946e-17),
+  K(0.9629055737830677017287907265138337867744377431563862140311509364),
+  K(1.4786125755180866351413557642903475972009998295313647245113049e-15),
+  K(1.110278562310270098718792054260674965561618058124810727843587277),
+  K(1.66446516011597147604441332870023631209955217232716802663644563e-14),
+  K(1.246731952665172221151535976941076034366184024435743460262785129),
+  K(1.19419161773993500220908521148837011340460640716458987781977449e-13),
+  K(1.269363809710071088140180854576895146047738224752045390132483915),
+  K(1.62141949979808956078353496833740661834019052467891100495467961e-13),
+  K(1.277602599612182151503224847876557990286836010587230346290626929),
+  K(1.80992200688151685312753010324539071387943121621126633027947937e-13),
+  K(1.285946272935692544077000781087878826957121610594204699701071582),
+  K(2.02171295444051448149453245808970650712728162671659298643296461e-13),
+  K(1.304884232424774030446291437518592913632454301668576581460191316),
+  K(2.59212059011534286214966206510883280389621414805666979690876132e-13),
+  K(1.410232738792772068812954008722537883143376438983285012820793939),
+  K(9.7023057033323459095883416112556770838843107463098456611513985e-13),
+  K(1.471983926780383582181911907791939865606735530947381766901245318),
+  K(2.01040523201406221564643370920232580174328524925741560904209742e-12),
+  K(1.610422090270110354622131272980599738648343276419650368666908899),
+  K(9.2662960772402360687694002347678597801927578242697100759007674e-12),
+  K(1.62615663140240356808036794909792255916013924890711545898502455),
+  K(1.09317866875068132268102017751984653828966828990214202975767251e-11),
+  K(1.663635463015446418757166024762062593352683755631032226054613301),
+  K(1.61034557329139899105915443765021384910937157835712632461122611e-11),
+  K(1.835685888578005641507024849962552573823843996836870160652997056),
+  K(8.5800862242816444701505944068133646349891140991165109636771252e-11),
+  K(1.964577270495315980170766212646656403455777409600126546742218065),
+  K(2.719334707918950726377564066993103056193399215466849589440403e-10),
+  K(2.042331341737823360905750714467668338455607189018564938425144537),
+  K(5.2600804029807712756300031459381751302145962676771409795427486e-10),
+  K(2.231424163138403472512478096094025033329276493887908390659086762),
+  K(2.3686908547104095272890944583302723162691044194180258955830296e-9),
+  K(2.350994296995689214428222374775962559428419218315800989219041763),
+  K(5.7487395846106245563603192224790412555994664502524048649644924e-9),
+  K(2.501091201792659296724353920329946343088609967419322593008435898),
+  K(1.64362093114067441097265677210876218619937415817862095106426544e-8),
+  K(2.578663347522965747525027843039437133339023325346506694132001386),
+  K(2.75913682732543990509361645908466130390685612493653321934804363e-8),
+  K(2.638411530312005672988357260789133360021456449192810540309168431),
+  K(4.0679386938659507535796610826899961624714310759305786213479473e-8),
+  K(2.71736564647833327329271213903887036829482643633030912326412813),
+  K(6.7024965387312077207073893575663939886093093847912017017880771e-8),
+  K(2.769283828220949465884895070828780020521039031632073906459518437),
+  K(9.2323478258690446492345381169410070551260744508273067181033282e-8),
+  K(2.824055022397918570326041456725213223764896473908229537146142911),
+  K(1.28563389422326064023337213032667878163758927382125919892947139e-7),
+  K(3.139859299696773834365906741701419176712820404480721846951953549),
+  K(7.6685426784597123275968562862299838997124285506364452244560659e-7),
+  K(3.149953407809830778320559170732817312788490182078304562961773608),
+  K(8.0929077044814033949188706427073437442577848583962313601682426e-7),
+  K(3.169002828460302125984479869762036362145024043921038129520553064),
+  K(8.9542185116361684813673234150691836298964937377985150374570348e-7),
+  K(3.232827236258258806506956426009065399906762840395897950824493941),
+  K(1.25058993985881242758039057476713824575129338738336702036860399e-6),
+  K(3.321339750668402183222025959755498799938692251206964206568509784),
+  K(1.96419357551847461199244402696425126822314575379028143438662036e-6),
+  K(3.342449512530122454595550596977913813137506066805580719777843746),
+  K(2.18317627818231495515209329625015253287805599953582247376081767e-6),
+  K(3.406058448171489510180931528947958520575129182312785464736225267),
+  K(2.98861403070109599590200680597667091722017903237407955295790392e-6),
+  K(3.591860618421327170974074918088265040845249480653896505181048002),
+  K(7.2082466234740483192505391430537094645042535749215779381497013e-6),
+  K(3.801827517971409973844244651203578208500548946839664999137102602),
+  K(0.0000183256554033167396551153919065723608697714732201998920102824139),
+  K(3.818813586854916038183194887853413324149364460467910343000874474),
+  K(0.0000197090391560749948412858488399246804615904688709877573407657681),
+  K(3.839140980282353085186002596199946687451717276573898810458110655),
+  K(0.0000214913894830150084709074724519878661364469382881379510476520846),
+  K(4.034317523247387312100829506881292876707222668356683383195441391),
+  K(0.000047995816561043771304929397024701840726332293683846104012727667),
+  K(4.053953552056622324757079530049639395001481298478215726837812409),
+  K(0.000051895781408051711888441089520391395618771880364155646397038878),
+  K(4.48716434696392604483275788798575556402300176303985907095945065),
+  K(0.000258678022718833244107070116226477772999684441128146447282675316),
+  K(4.504634907876062520498432489809107461842517385160620530181342124),
+  K(0.000274756772754585860059183927048288684620496142343225809605690925),
+  K(4.666534564561059712781177151220891631992468765702845049337728445),
+  K(0.00047302729379989189886254088162246152972169138464180341707466109),
+  K(4.690752646271391863855866397159921441312248429154936826129143341),
+  K(0.00051185895983354849933866667864626579332052165611573969847358137),
+  K(4.735679744111274063909389038358069687272150368080392701835995014),
+  K(0.00059158754938354007091583116328594327540298865917026542726420138),
+  K(4.757477689391211951161867255980498779639197549462396998465989327),
+  K(0.00063416051639418177228973562885339781804601407198632894081244395),
+  K(4.895183293055117757176332790727696031460428293625905614133135309),
+  K(0.00097289795020044424947240165502013389143704557185035079016540414),
+  K(5.014554376080647189815105496413336269606608914996627164558513405),
+  K(0.00138881610623332835442052580165702403498158148958973783845636913),
+  K(5.056655264012678251069892585811523974023541419793798399871531602),
+  K(0.00156944757842987937641341020866818775285855600565415118386719101),
+  K(5.066390594167754480418031272073246543288159840692034716367766872),
+  K(0.00161406979779928861200255773127608641589820800443431859575642308),
+  K(5.069438373558363305305151843151694733032965510508893209630637853),
+  K(0.00162826858270837897133318051949652829008417143584682170807547188),
+  K(5.113939124213774873569797338683980280906660518216839110465737584),
+  K(0.00184855847722461997511957975022133716958139259477498263048968214),
+  K(5.146584059509147777185392638172049465410068411431539036808558151),
+  K(0.00202650868533589814211098551008428814188836753529779976719305838),
+  K(5.264005790109548733411252591557053860041708349052392997701100325),
+  K(0.0027976931225111640547597084472614699674006137648747728891436124),
+  K(5.29633990906121952070631824806905109840402763814423302513526838),
+  K(0.003050777024493692521391982907935469761015428804821744453613164),
+  K(5.357455704984613937565420974488853714212741249965467613144662569),
+  K(0.0035841699541418746226495677580525666614213985045628703948925493),
+  K(5.36807106497972532118328316509717981099744863137595677029568943),
+  K(0.0036846500180039722950355471679915154398777365188321930351325925),
+  K(5.415388688671595276110586071278363292045575219697660612978040586),
+  K(0.0041628883051912705264813905382976239819949480837964818222902943),
+  K(5.457963560235020746181381013067791600734883811995826627388836688),
+  K(0.0046382337324687349801283212928022974916038819312385353014188223),
+  K(5.471439509601954852635372257011969001542786367779082070929954896),
+  K(0.0047981417587591272252821435002902216535901654258502422448147012),
+  K(5.662991246293564684224069172687837230860711633253482943363064196),
+  K(0.0076383776853834517489407635086057866165445570974354085989912473),
+  K(5.696493375667652215350191482927935086215127493508488652724013085),
+  K(0.0082591248033987032566903772162003291717072049347482997980973541),
+  K(5.847345478759946585343856611802995710638949548075393500121245164),
+  K(0.0116072801304315798868308511900066990522818096636829016953642485),
+  K(5.877442453774294268009883815654590252527910826894535922871272637),
+  K(0.0123951300628433700656933280386598491833054598884788833842359003),
+  K(5.883901651127942666506428132396408635323855485747762308338058638),
+  K(0.0125698613863369179437390991751706615338176678427603114399246801),
+  K(5.939917532508276173872981715058165851136067941347056593894886084),
+  K(0.0141723118839615096939930944178288631581377248999574427706999876),
+  K(5.978834385246107928726757109386990581800516520047436274090484719),
+  K(0.0153815971730797638819442318153769754250810960652065793993900557),
+  K(6.114566618559931712471819485433478105255268782704429233445385284),
+  K(0.0202746000675682468899171763956653130132839033972799014602664438),
+  K(6.13950057122036508825963266740749555652990250350061618462050248),
+  K(0.0212963460546270429138422663735412877063767773344040718139472923),
+  K(6.153739925988922118173480869658848450670583241685926759108986113),
+  K(0.021898034072085854965155122320198299855563930164831406504516784),
+  K(6.340471572922843799180526379454268240348791547432688859696428616),
+  K(0.031103601808359902319837164003370978783244260465539135907569846),
+  K(6.449867523347227754893737651508512869022432489579262351791581995),
+  K(0.037736065281066498239380684899351601054222749353814316160696363),
+  K(6.552663858920453301696559225425744926932519532353092692918887787),
+  K(0.044885118703524145586372240608491610949265266531605522587608257),
+  K(6.600313257141492497603663969716484512693502844378427517689416709),
+  K(0.048515158902619194110301889084170070388081844299228262288773643),
+  K(6.691487134424373164956875589348695977948319855187570122450064392),
+  K(0.056039178804673996617274596574859107142813060408664831240682113),
+  K(6.714321075517005916271434511469800561898686135058651738300664388),
+  K(0.058044593033457937177960014058919734032400711016169991480966094),
+  K(6.731394314768302405809258939332643778210399761702705525590100996),
+  K(0.059576117785465036156999174508073540581703113812056525073451671),
+  K(6.847093587816829592616629837200858481671879574884547886322287286),
+  K(0.070683172543584052053402812105573887220543348331100949976472322),
+  K(6.866141718416509837612467258890268129955293022497229335968592596),
+  K(0.072633962862487099653765138044709379047001897697484042906087642),
+  K(6.890105427946553848767669852872900746530283642740278134535210739),
+  K(0.075137221588546004362786718216383310121503884355013870137562717),
+  K(6.910617656403231646566558908559840967242197164304994174879233387),
+  K(0.077323258160513501973739399467080442832929912884237250971471859),
+  K(7.33455418408631232989312941335811379652061355672351292593019527),
+  K(0.130926735281260104744994117420995232344649690950088156182566894),
+  K(7.428557305560307242492692303445700196982391640607615477624381775),
+  K(0.14469041389582275704448410521604850958500129357919235856229963),
+  K(7.609575837358602083330462052839807097741813552501661242688657898),
+  K(0.172463240988596714715683929678352224728598279408520040835173258),
+  K(7.646382886458591943704008459525449238141384593326392300402780339),
+  K(0.178249463469450095918046158489526984014988174056930475275426525),
+  K(7.806806931326495104017842488724620321994284205229143316061335457),
+  K(0.20365535752213849132276405408049773759223476982174636681581072),
+  K(7.859270948228173099046760368768636411118024317201353350548904557),
+  K(0.21193620353550506862127152318101204575596895153255422611574341),
+  K(7.893013482165999879827724249623099681283499845192088851830313201),
+  K(0.21722952055713121317306322760667645265039400359222707231379302),
+  K(8.016497440179713505314793674445589372838267860955814056694825175),
+  K(0.2362327463251482014099808284658668732295116902105030360181247),
+  K(8.236028372954055031177344931339008621705613157876629892021577357),
+  K(0.26751055932269319058943094556301889551295400050840689792264206),
+  K(8.295305566802218209494756543378509514492440298882229584519906671),
+  K(0.27515349224558158833062079859351907793768148473017122654287552),
+  K(8.329888272181330596825278282243601260622629907345354717387860978),
+  K(0.27941719479439560772151788450929332385093033380397157701598133),
+  K(8.433274093748773725063763752814640952481041064412082038925299315),
+  K(0.29120760063793905898079118404024620940439509262129008202345012),
+  K(8.481294743280987893367425015338424708329397392078510363691855921),
+  K(0.29615197933696912743527105723356378667422681807769339784146612),
+  K(8.700744303631986162536334833429154342145979804909571548002854823),
+  K(0.31381571007245214206303575422879697348985650559660134602927829),
+  K(8.792583484560840993864274930033499070463987914683843817170706551),
+  K(0.31856035110128404985062135925732620579127329714527475055381004),
+  K(8.920161751642248347606032264820980833415233016832049431654880524),
+  K(0.32234640312912522983486924635091616385359254405169574061382132),
+};
+static const R b18[] =
+{
+  K(0.01822854904992806107508007085382411274964463614347931937082080905),
+  K(7.712528845736800034003007090326272835919295213143605305516915e-48),
+  K(0.1986199348471353430544984823815748687669302160497450329792944214),
+  K(3.61468129236590904144135038012623549380071411721165292159678472e-29),
+  K(0.3730605528251583526466634233451185345838541885424810522196500198),
+  K(3.05975680960365247394238776791219115177644133563080455464735951e-24),
+  K(0.636709687766267416556463046944698215367429516958788005835077239),
+  K(4.61960902607830352824024107403137387832002180204947818122268017e-20),
+  K(0.8593687692693989857158124297516503855656225460866674383724615924),
+  K(1.02068370382894428089834711175907153545777073504158848839852022e-17),
+  K(0.8785574604147783291520136643327561565980358358928715305290642783),
+  K(1.51887508234158682741038832669128225140293353650146938514406872e-17),
+  K(1.057436149883870204498192437430129458809689075077035284699777335),
+  K(4.26809166918635823431160888673644023790423824644460142629075054e-16),
+  K(1.102639613551711717681623978042818739308922813349274284829874285),
+  K(9.0670000174155789835664158411332590788476085965487748351920923e-16),
+  K(1.147080448639762024642757216041367465684803950911641577694720753),
+  K(1.84649771679790425078378270947472220110950744321738385905103149e-15),
+  K(1.163336456241510758029162753117728808251919240992163471693910184),
+  K(2.37878430916285251948844713876575884928384737631628729006087407e-15),
+  K(1.172936711858617214627040499091936011221322469939886403747416399),
+  K(2.75804540219793716811728937687180212321758028077839633079309211e-15),
+  K(1.293965683591837663249957629352388838136727162567799157013785061),
+  K(1.61535745004983830800381827311108745939821767710612392164174451e-14),
+  K(1.47897994190319704291397418428428796062097759811507893966951959),
+  K(1.79052372775830824061991585857794779328162126086679489234984008e-13),
+  K(1.521145368920382509046922205552384167489217868508520726550488178),
+  K(2.96983210105264691651352390528484472661247108637318131267351177e-13),
+  K(1.618915287938325588240019768683455428223465709021300955696987454),
+  K(9.1136629998366238955390834108458676598110335846337953540370221e-13),
+  K(1.898312528883218242203944004371570550103809025903624617408395432),
+  K(1.6005385862894258235873038622855124128578594633164617123139752e-11),
+  K(1.908769978185407087582327705398991740282953396032069496481612258),
+  K(1.76689468801117148827415317841926374795461048012252817851907523e-11),
+  K(1.963792185687467134153787170962135034619884269209738297931896675),
+  K(2.94683593797314940654159392433511707416514431833649852246085222e-11),
+  K(1.989842908155873331953658721877885692537316509049333317561473349),
+  K(3.73567013032322959674563073713275814925185323727102938355225092e-11),
+  K(2.187382247946109590135399813190138259494887484140743028611797336),
+  K(2.05194185650586532451294849934375653913354111945406408311765218e-10),
+  K(2.296592333713209345670040890424666582796484908594135862872749619),
+  K(4.9304784988962574648056285916452228582369992268004497716081696e-10),
+  K(2.38132550449623880597799252255991177597139479173812855757689421),
+  K(9.4610711540276397612348618006114896062472889739430711844085246e-10),
+  K(2.399651505687655866381197341193433319658770509150644025403200666),
+  K(1.08598060881848765285614285837060590880283502572527347476062316e-9),
+  K(2.410710392821923855062255234982013200007065053600575497895211014),
+  K(1.17960076332460637665640440647163809787698018501744154861878445e-9),
+  K(2.416458780654849294318007280283851340719353877035352461901972908),
+  K(1.23122349459213359415632779720565317160641367064724939402038697e-9),
+  K(2.454283492683247719409613420228055350326266517964261609348421382),
+  K(1.62792467839698164943364362340594897329153912406841192716205865e-9),
+  K(2.587979742716112782572552634380562382717368922367078488270235221),
+  K(4.2237521599887488545050543860967263862097486024238916487601342e-9),
+  K(2.621548500342875293032360167376774413554075408073432030799413113),
+  K(5.3241360401724632044476168973121194637878170736326178861222836e-9),
+  K(2.643627915474421884517799965040695470355147143597467506238048903),
+  K(6.1897341303184123854329948597459558131834595842276354088667088e-9),
+  K(2.791240398410666171584848623230646184934558675584506068198023315),
+  K(1.6413023214482624607628487616730891994946806285021752048407274e-8),
+  K(2.961351913375256720424840805355868569065165963702416956490314047),
+  K(4.7368343783314936581914198672032149649815157096250197114002751e-8),
+  K(3.156165818394540077702964219201009045251986998294152321195313514),
+  K(1.47836122772507418465475662552489005269456726223494967284728315e-7),
+  K(3.27394417540131763455745279813409736286252661750240483343076739),
+  K(2.83863319836587864960274129391720054108478821131424869137267346e-7),
+  K(3.411336204358156941080941960501178856917558900237320521365764667),
+  K(5.8883283094791827401661557898140231067609634129431400928174784e-7),
+  K(3.559289308122195298975670844877986195622507852040485074984310793),
+  K(1.2470273364755706324579206967494918760866939052248593202252039e-6),
+  K(3.661691799122227908962959161653406482623943388632165455573625462),
+  K(2.05423438129544469531451478322138493904218655227719647442887424e-6),
+  K(3.768233831105595705344850359429790206528303974082218635612691414),
+  K(3.3958866819933942040927360951057833181972768361625681455289025e-6),
+  K(3.867727781439285080179394767316493631934985641610016291027622001),
+  K(5.3509885478721486861244243062639178097478109859166370547226866e-6),
+  K(3.902090002246664654300418173525278692617236821798763337963398572),
+  K(6.2409648909032269755096773805177847433629710215381905307795441e-6),
+  K(3.915129747293069569668259598874282780914073396293005146054901759),
+  K(6.6134020180881092009104440159408669154689860384436875135942818e-6),
+  K(4.092969434680152959657394691119033432712412763545318582663343925),
+  K(0.0000142556432122928862697059529855822158359228016697789468699785801),
+  K(4.193233746532521356761782785458140754013084091271306396330168655),
+  K(0.0000215927969297916138090109807871274785412494844609969126959207355),
+  K(4.246638879035810331986226616300288624599746073167506831356300965),
+  K(0.0000268019343154032347061993462405866043963913452975203469734731698),
+  K(4.46413001240756987618397599328544395123750046012590969485160192),
+  K(0.000062417088771163625248499950241165186090639946050211807855062359),
+  K(4.49329998865838141757645520189135552846626751816330311461794415),
+  K(0.000069623918246168048232332678930565333386113110929711507318120599),
+  K(4.508808669176668460100844447079821943191711068423782095319709246),
+  K(0.00007376005954393426477642319324124051092936136827952565065746749),
+  K(4.519480354973785721889469815727472208827333222774165955227801994),
+  K(0.00007673616916177178617556705485891069311683826015056310854591746),
+  K(4.561150421672593653366531270531894715659076646184386404747707286),
+  K(0.000089445491210776092966977149269588200420602443616609033869061909),
+  K(4.785820512257780537431300443065902607778519435790237443507752821),
+  K(0.000197929004932687675840073233608213628943896701776669442627185824),
+  K(4.826992864912825961941240734606130075021239448648674210326192935),
+  K(0.000227641608931702252736385023697192023547010280391291163744272341),
+  K(4.845648565163010412812756307088555437218284001167592669107713737),
+  K(0.000242397949467222657849659329585741814403273529612140221299721756),
+  K(4.863538606330031012608118906939663806566220502736077904362311444),
+  K(0.000257361602065368115660863169880058571083911372260994185564396054),
+  K(4.982559374697335848667838546743779997775736514982881465964473241),
+  K(0.00038027784755254155540367969731566700711419701801960157965503153),
+  K(5.267419481579821284209417568331891127206042871810193176420259655),
+  K(0.00091605016454139886762509459295278652873764792893802458496875954),
+  K(5.30227879865071936929877363253730736819827403087192019940580152),
+  K(0.00101484006803479742755186402822976323279546128410725779114776602),
+  K(5.364741006713333003431086987755411052636269169118654338312761282),
+  K(0.00121591959605199092504718626540784116240107863079176846152849706),
+  K(5.496024483282081334452009527689232813177089669472926897191371108),
+  K(0.00175796107107060854676783407475653670426327019018631593895983261),
+  K(5.746170400550550440407232730261649652106086972197118505600976793),
+  K(0.0034057950900356833712186339037332195155939051242565157175282905),
+  K(5.762724497907441033004009943730221015572125777879693167342233978),
+  K(0.0035515687137938664976260843444182675970052297995946518727260747),
+  K(6.122955727077486784457338680865576419857421309170950075144430372),
+  K(0.0083686853973808678396396619620720317472676723285203773765516887),
+  K(6.133665199460564100994001406978076014967164347542019084965625624),
+  K(0.0085711795502866256446014534514306650646098569711946923263201248),
+  K(6.19197166312584667903004132769913427987601658643883703707160899),
+  K(0.0097475470905914435195004775462854846964842890953962118786077577),
+  K(6.376783519131066269079708885379585046976284662998782768446523645),
+  K(0.0144039336242837536439197794794148453449921229746789300954465202),
+  K(6.520348035988546295821672982149257774017408945945960639339977503),
+  K(0.0191663504862431275389315782258292248035125264829832524567280194),
+  K(6.626468549999393807500720056375000279206727998918431661541488465),
+  K(0.023442843694835734413106786775337136320103644498010650939011723),
+  K(6.801433219060034397060519324248628547285049602119515019552007107),
+  K(0.032100689469769283323926805902420677121221474788825105916316704),
+  K(6.828306870781503381218041367346814249940145390302080303710462296),
+  K(0.033623322530402960484933507132873502399735833431826891161664005),
+  K(7.006804525504070255347648695500378910817369220105824850522707765),
+  K(0.045157128437714575505667546771781628329375075377504153407906287),
+  K(7.161663708341986633180193553118002502918125637706945956874646101),
+  K(0.057289079814600324963334455998334121160907815650114205670786189),
+  K(7.235824511178583472537083593325755601537588556839298973344522582),
+  K(0.063832183424924169417614622381642337999247941415536802063159977),
+  K(7.425403334282467613238176397554406648501411454968143456584695835),
+  K(0.082751112058041521298436449733523084061270244572553163437370632),
+  K(7.459130528237104906363327550125849463948415157293534429406963944),
+  K(0.086444118973041112003649298989898143735486603702603706397489018),
+  K(7.45926930666463479485530523764230857436469264027054017110668667),
+  K(0.086459515156486792266213855896669625037925135936599528726317146),
+  K(7.587039832137393092382804675739578048740662026986288286995408096),
+  K(0.101314601002565686851247809539277149907953745914782251803318171),
+  K(7.650749341653282826838165907451575913664952609679743484852611364),
+  K(0.109209956527473061027040235454103606028056988248272690905662465),
+  K(7.759002202430042545944126717843549706926938028598444468387813321),
+  K(0.123309386294891503887360535779056085450143515980664727769977702),
+  K(7.759844845429201143945887089647264904301026230018911979994494275),
+  K(0.123422297121353114026239171172253270670735642656350627645365877),
+  K(8.016933882442312442857485139426348485124303001572557739479347913),
+  K(0.159724677907859447572033174991984891047446019088184516828880022),
+  K(8.168213418946505820800010943379429770353544919178891021873185479),
+  K(0.18225436039081265110354021550600432703961265345898701547459151),
+  K(8.250011533276213538440048368028076600145247278965853496904935305),
+  K(0.1945533787098119204829457153953287633215507653217397456184538),
+  K(8.279375857410734505072816809353241398617285252829016931103998459),
+  K(0.19896309350015471178490391649797527341311084373673014197702644),
+  K(8.303734999561593352733410137503847089568821737493591561354876586),
+  K(0.2026134073211415542864185925299876138966135912720492782022966),
+  K(8.37413447380124748001318317519648751026349115781006907928048906),
+  K(0.21309664657525316032595075395397355667486265296369868725687391),
+  K(8.394321923410490356648256501029467178518068682163924702032243421),
+  K(0.21607763493079817577588141888096074857498090411415673603382787),
+  K(8.431400912900343709991822270136254686228892217407954790093479487),
+  K(0.22151464015260007701369730059717739884124213411869814859453574),
+  K(8.587823848479459195976537652337932256113348692570034726665260372),
+  K(0.24368466737850806643638209826340333888764785194140128604687208),
+  K(8.599039069818895793875369044653570992173526754446502765890685975),
+  K(0.24521333306159227947997048696693726967180782282103787033498358),
+  K(8.802862243907525912211049632952764007649136976196857769782368592),
+  K(0.27101888771583165368632451954484715908969303570003741727954671),
+  K(8.830693068394608108128684225096478822829338866236022926956926149),
+  K(0.27419977943692402088655970751349151901788245619198674976642926),
+  K(8.858340650524684030087745274367751152433192975270776936102671473),
+  K(0.27726543784457695994396755759131467531528880308448612661755065),
+  K(8.88150742559096051735974792204961908360150980806381020489713129),
+  K(0.27975905707421784875889857043224703955330175225405398223896924),
+  K(8.932070737326408180568517256466102665224232540673767398719446469),
+  K(0.28495225606009008996346016343276173689262759057665880385144274),
+  K(9.084337442961581677908237714314861739231096488503246553000335022),
+  K(0.29833296020356448997016584069838637860039093393399559438533549),
+  K(9.08775766361491440246142815382695715185600696096115690633500642),
+  K(0.29859177935672863416763820185562171033476221217520868272484492),
+  K(9.170388125456497785138974789037624013960591133059046233272454956),
+  K(0.30424898382618611771884638228182213130077626663651164472582523),
+  K(9.241032910295869186608721741645816937116977948396612500550010379),
+  K(0.30814590000229823940448582351041753811573473296943754066363998),
+  K(9.25630438830332763613543686245663067866706250689728534079843452),
+  K(0.30887066394601722385296863355463068223170314478171745829679922),
+  K(9.278610429218879076016349948372608492006281896518961121863262853),
+  K(0.30985279267394230107283151470939300080764805874361412859359761),
+  K(9.319294636782885860553577537703106669138048111692489685849757132),
+  K(0.31140771051463851809692987306057672391401824565579538138922628),
+  K(9.363655317431829899546006284343977020626105920496764233016374792),
+  K(0.31275065522246853657791104646629167434433261635529824156988574),
+};
+static const R b19[] =
+{
+  K(0.2313779538819298683220146243950376903703174469557451637523605371),
+  K(6.8710471184068369954747227408895035634757458976627251328424128e-30),
+  K(0.2726813056233610253636167944056378820759659185795841435343651272),
+  K(1.55724630651371886366517713142948515057128529043439688845253758e-28),
+  K(0.3958325893068538440168135523006182682176139788324498370718043898),
+  K(1.85193089397513888178678820453875990148254663813888801860208451e-25),
+  K(0.4512848510433976576575675938165577076433523328834046601823505426),
+  K(2.23598932913942577558396237277303080470573924472044654545380692e-24),
+  K(0.7432786120612359486002812472909512651295553842289678844779550093),
+  K(2.92945252873299111834805248044212196373865800740187403277413842e-20),
+  K(0.8220497944201900564019750855824562701870498243964099282002704322),
+  K(1.98595660742325319034206594625784477513592047928454867612127542e-19),
+  K(0.8935444080566740110755446410695428277707207204508681936442934421),
+  K(9.6852773787383231837256016052470601827773722594844292289005574e-19),
+  K(0.8971863085672144855204933639524068884554546651243336854715896725),
+  K(1.04634641414996577199800553615744128102475083864154852070217004e-18),
+  K(0.9840007066563417050318706915563032817150263306223515954402431871),
+  K(6.0508749099837788086605252803134543546141657115287871890116501e-18),
+  K(1.110586818712873138379700456087833471209904174099120338126416898),
+  K(6.0311920351189662940040019608275832040864380486183757781135948e-17),
+  K(1.122941754640177431734146632133876216550515480693957362175128478),
+  K(7.4420530338482112106703534579630820024976355075913496410594001e-17),
+  K(1.223169849320621150974594676134595079712413672281635096780227483),
+  K(3.77706064729834350181059567552206589805721876520069315853872494e-16),
+  K(1.28434806755509329265565941800290285374989336063844505698922901),
+  K(9.5472297622828779998595409983003186271958967600618897812460572e-16),
+  K(1.397261820183003119725393244938920198470260855455703575649490743),
+  K(4.7335114375045010874222621276559565502576696921036029052410257e-15),
+  K(1.468143714488600090382131928811079893390130503901665681682665024),
+  K(1.21201559512465671346394399975542590511698225731879033840469379e-14),
+  K(1.497766780918131339990737174862454828192005736943328749704986588),
+  K(1.77151592091659521813059516979667064252647324945297805710650777e-14),
+  K(1.506394247512690335071413124790740709900236922019610432384420611),
+  K(1.97578503995004860364474458975993820871036949707705642260726552e-14),
+  K(1.546215964815288564213752664662603943410608589579528546326996273),
+  K(3.24368195587008849160833887624480835954681523405567080380825692e-14),
+  K(1.589806267341319220527012989886256897362722968692964106749371124),
+  K(5.5010451761768328276111452614384022134417289636625444287598776e-14),
+  K(1.665723435728445237039514236735756476038853972807256118047061801),
+  K(1.33462780571002181298511143423581604126841122472727933097435036e-13),
+  K(1.837822041186436116409586158750305448940484748662356206191451043),
+  K(8.6430728681198903315591935715072381344331376771424581197401186e-13),
+  K(1.873491802538075136085627682552402588461025609046952584686725756),
+  K(1.24533196697900549788512572603279603541839476427146586173275284e-12),
+  K(1.890658852123744642404797898996200116690132654983231927341661058),
+  K(1.48098381710763020399891590393205757392256025756661579386177032e-12),
+  K(1.935842994411178060487684299240727940364621138209335788202465407),
+  K(2.31968566277059123137117010785670750894039454501473416739543932e-12),
+  K(1.962662112623721537495402532417878422634949777253405155111708289),
+  K(3.01272239845821427567500905633124995973884756052568670134786677e-12),
+  K(2.097123917069122326045338242362568479019071992042913895875824769),
+  K(1.06102102958417121185070481685962858842230121948379809359749392e-11),
+  K(2.109424095238649813491616096624108773991782267875905313935272641),
+  K(1.18570381586640975185251848519617823261285001004675086142030787e-11),
+  K(2.174925416742229674292735322121574700475322861084572431495447294),
+  K(2.11970945445786275998097394335494103294496013013061963225237683e-11),
+  K(2.413416827355411840510320487902982468693358793881786185763531458),
+  K(1.52962685115132810436966729301781650810489874131617684213399157e-10),
+  K(2.471526846909653317823838685938308940990950319445130318929791145),
+  K(2.40319655088614865663314797986569525021694858064527643218092221e-10),
+  K(2.490835940764306035242567193187667347109828033483200448565635101),
+  K(2.78584711498406629096766503420646775810893814358717773834085429e-10),
+  K(2.49465518168965770123624703639906550435247840558680150609153205),
+  K(2.8680712749390459025875777430505933048536539520232914236333944e-10),
+  K(2.531310890950104401732737929886437511520761914510843754375322825),
+  K(3.7831236892876714630024517469987224757550593172688055842506424e-10),
+  K(2.553318872289019760427681678971910308884690950446982823939035178),
+  K(4.4587445821407938216561746923592032770053597380408658731016465e-10),
+  K(2.85149752207484858697743793092413741411379170937278974528133904),
+  K(3.62169999699655594176784156781856596196290002563910496260368513e-9),
+  K(2.936819525990639207703270223813120811128449911930646569813358758),
+  K(6.3295260258861236822344318920332144421642945937501276794184885e-9),
+  K(3.028212530173204540192283274253173061648006562714927567070827213),
+  K(1.13017340982776304670253760852762568439002354693754834032013425e-8),
+  K(3.245859133395083065489837698831545622848184402519945467511272075),
+  K(4.1894468714939488084869815066832034023518826860162496031316823e-8),
+  K(3.385988659753590312372746040069673368655874492901235788349387337),
+  K(9.2801036910863540563103903236864373487928124585087803951242683e-8),
+  K(3.532249468922099481641000436591775993372514408844628309938557941),
+  K(2.05130373816363653853757540834830926333087808446007237863343721e-7),
+  K(3.566537120161706988576622691307940870459428840350292933030994789),
+  K(2.45774846775560950347960058961153677099637241843316675764653402e-7),
+  K(3.769695050645580802887186093579026817722912356643054873736686983),
+  K(6.9054521347815322834333706118691705861503988757685974983177223e-7),
+  K(3.776632325764919872325964833604330160050812765866360012078211862),
+  K(7.1454777996935964030708443042914151214273718848047548025032967e-7),
+  K(3.835005208799221671566052022873606596664713735496166059135034597),
+  K(9.4991036496125224875286654371588593894174268723947424932156842e-7),
+  K(3.896454054236128837470534417773704438580836317564454456573215526),
+  K(1.27512101784332851787825110059610387193563374012636461736293658e-6),
+  K(4.018359938640513022942075360056879165494340999403785434264184341),
+  K(2.25148897387425259380024344197833103959390651538568774645030331e-6),
+  K(4.058721077789524358075301740733505318725047443645218299858551143),
+  K(2.70581531718400492991430792722604491601480568890783515546027086e-6),
+  K(4.139745799342993562634466028464937594949041226485205935596384561),
+  K(3.8882408721861140715061190106189514610967536820307761842057567e-6),
+  K(4.170264258210862908237856031243007573433972727729228640756759889),
+  K(4.4474221468870165581429413330123056677082424030442388370811024e-6),
+  K(4.295332415628712450925886169688577289091281622537547808694914231),
+  K(7.6202293173259795970256771801523663564828508565956278139300912e-6),
+  K(4.334942525023329436616060603941154387378770881726291126665102429),
+  K(9.0012061348540278810083838166332705298056870346680853062775658e-6),
+  K(4.571359683710156403909863664359463241582120038438416852877339105),
+  K(0.0000234122409774049358366974889628265775865415599304384803597811567),
+  K(4.618382260471092434028474043497423563488435951461114758981571982),
+  K(0.000028102200793569747005637839589628629624216911810639996356456297),
+  K(4.696576667166574455169492695938754747045993957875004890738587992),
+  K(0.000037869318968809036229772262606893326486501428701008945318228738),
+  K(4.713100749976708167048672200536414425250358642135758699238687223),
+  K(0.000040299360014905755609214615744209569890498766868764533196186611),
+  K(4.869108335340667863766488255519078105882387943146401799728979841),
+  K(0.000071478765195529848989553608550806514595534059612278915614303068),
+  K(4.896560521450473433994143691063216340442095083337059291044509572),
+  K(0.000078857801582386999485002366647415366300309097461297865714046833),
+  K(5.193218587178450508964551539006567099755805420481456505146028689),
+  K(0.000217421980439709119359699577826921332934175827032913981290626133),
+  K(5.208772494185006103451082332229690007381317781339615562835332697),
+  K(0.000228762420125824012557367758965034608011242210895715652763727535),
+  K(5.314002120775640786499217758161269152362751604577745254292715576),
+  K(0.00032078466611597072446785060733743361430473549321168058019891422),
+  K(5.325612972584288566400796102345176238477344655412336950261835203),
+  K(0.00033276976363241219318410993804286629418142960950035174496849423),
+  K(5.370964618244204307893574371883532502865677015507537479789127102),
+  K(0.0003835818416652820382923772247183713998062972661161913610258034),
+  K(5.424788640410623056072937275162353881103611406897007858543738232),
+  K(0.00045295846658123912939240251321453883905298341978705854747712548),
+  K(5.500074301550225432550819711945357328910908404040890863408380539),
+  K(0.00056907905419525133924856001625788185631061649067475164085409468),
+  K(5.59062753617014423957721686820580807224718130801589761483625011),
+  K(0.00074393477072584567393613485620596323579265989157591317832410394),
+  K(6.065679578228151478630373052429489493084238604467470377899514735),
+  K(0.0027107464613900828162622604185471301930093068859044367226548593),
+  K(6.075335646027678310334017357819712192991626835438269127261144311),
+  K(0.0027776779781771230777547774855862759527620098644280818461151343),
+  K(6.079851564924515412090370188881168694667516994658834961244744431),
+  K(0.002809474459441857925431309135180307361567028008053680929249225),
+  K(6.282082480360008599181554008378385487841349148997861280035767496),
+  K(0.0046020418460472393895077629318918540877570070085295527326954411),
+  K(6.348330019099925872585592066893067264251058187385554116024611234),
+  K(0.0053729094488168734732954439002133278709698009540725659285122442),
+  K(6.395545440866846369390429294891099371828491049076139623467524711),
+  K(0.0059878616016260481735336859026640954120311023101968356132205799),
+  K(6.430908355510536418300462501977645972944751308125807174571565239),
+  K(0.0064870476759325465803908760755984569517077223384717873431534468),
+  K(6.485049813843482892270121436450887451657753991625485077168545965),
+  K(0.0073199755000009486804577217625294577569455696159097947672046819),
+  K(6.490742843621810773371458088545963525676339948620664469197788181),
+  K(0.0074126175051139602565010281839982409123216109945667370752151513),
+  K(6.873680509423212631926382280551166707548389713580287282588095681),
+  K(0.0163694076538200324879909988876253620699623691036646437947948966),
+  K(7.065443751107605895420480252804277561181830343362992240355841396),
+  K(0.023414463721755240219641869946294984461571919283540663041880993),
+  K(7.235223100007512588376337473113848917920004279126683811087269736),
+  K(0.031478497753961305264422762047393993665777632794722172786896942),
+  K(7.329438484230852128654618840738757573149710720007528727553604706),
+  K(0.0367886210350045696152057852588912020475874596461869090946995),
+  K(7.431862809993552620594543823210458273489348790195925490916878923),
+  K(0.043292583408839677171340965531056567110114659693805114875444246),
+  K(7.765739710876831116071903109050600880528949874562133621672784368),
+  K(0.07018953414304527194444123196648243417580737984672970074770252),
+  K(7.943514631747740586737083011322220069561465727707094863340574686),
+  K(0.088182031375577881411720970568665691966725536281585557953809041),
+  K(7.945508951357952395009054191683232781973811150088474586524496676),
+  K(0.088398077634149680178926262681236617257717709643544207577410014),
+  K(7.948421230297634817706272664977463865761163135466451227996105101),
+  K(0.088714120557657319965161051687374841872856960526696429989148574),
+  K(7.948590698296375882196744643319731102244647118552298381609767117),
+  K(0.088732531574463919096004203757376994408265284585908512582322049),
+  K(8.034261921219539118495809109016763093986481346390003955316664675),
+  K(0.098319953506971769896169355959077184808915562359241438557115457),
+  K(8.381033026960014655186353702850513468969357098409938559569737324),
+  K(0.142172896647630600281432786697762800845712529999717406865438856),
+  K(8.391698946237925602085614809346864395756582455641193255053093886),
+  K(0.143626715481732339981903108666467390147372275136817107652391033),
+  K(8.509223237742272805228459527442073303412764595410485676938298179),
+  K(0.159930406928366312251464915197947146509454476244544261454010815),
+  K(8.787468216818310881469801243967501592574025942229381797443150803),
+  K(0.19954870885275463581972466553135882489787580690637387913929841),
+  K(8.838387717464151459427999105915975981173960115617651116924184205),
+  K(0.2067555664796886164862526093040892782635843705188139256184753),
+  K(9.020446213482600980379799637245541533017495989117160292208924285),
+  K(0.23177564424180110865012401054867953979825437264069646736932163),
+  K(9.238075029764871147293809438135951419766095613666817397085888179),
+  K(0.2589363320577390960426819549880415370165409241482848338462744),
+  K(9.394107862065780607944455574212679594365085065415081967695392342),
+  K(0.2755796381776194217037353898435668368665177049590795130832136),
+  K(9.403826021587968591253730621197646260581189211162999416964048599),
+  K(0.27652027359613713125485350397663895367063303018148115948063762),
+  K(9.482631429611136329386843868152715132200726315690007534480835563),
+  K(0.28368756257666842735397650339277325496549956381905687284441628),
+  K(9.57384158600676677298307118178557408811207189369239114981258231),
+  K(0.29089322563189475711791413189136847511424505388941864026559796),
+  K(9.579496713710438370446410142219181900623447298038708716104741285),
+  K(0.2912993442390167865014050173389224726817132591409128284290247),
+  K(9.898805381352259083424177465946904379150016286662794850386098489),
+  K(0.30578025274067965452362363116732089155956609578823372128238929),
+  K(9.960928553383381510479665714011963995914436139323305122378680959),
+  K(0.30655684976209397316743715792954180257778695782916013519574044),
+  K(9.964891506501849562152341355131103093453453524062857913475285611),
+  K(0.30658308305873430711164369084632671531810192069465780512366751),
+};
+static const R b20[] =
+{
+  K(0.06693387991463429117635769350767557549474040989668372479857769013),
+  K(1.33904566345431018596817715662430463161069037572173563051788864e-42),
+  K(0.09191165494044280942507519445999807292932193250502492228205548979),
+  K(7.6082907851079381323380645373470824429960065458069620022631329e-40),
+  K(0.1541140568469985649805675406691426707513940207616777877078255059),
+  K(2.3481208209275345707340463893459502552586503220764485070845191e-35),
+  K(0.3316876470315720622230231462828630647405065089120926763987908541),
+  K(1.06772972375507781384819612073456705334833528175744369428025694e-28),
+  K(0.3768286377087641167589986421488913518169115719800941594298176973),
+  K(1.37010354183006980673033718073706450410370530402590516817587421e-27),
+  K(0.4637716962358066047497169690475490097530412736978685023720386922),
+  K(8.7088375525696066421739310573431557229106235304269602157773297e-26),
+  K(0.6572029687449870312809746787292143848653492981756738322797280836),
+  K(9.2867919176545260485960464963326057290495420298818135971840877e-23),
+  K(0.794557373865493113703697860992150736264132665064722379505369508),
+  K(4.13409671458884050910087156049208375658710955034095335330384227e-21),
+  K(0.8302037889830763267975402973946162383596586559051132075882397008),
+  K(9.9441943995718117991229334257785368764081153927996835077264221e-21),
+  K(0.8560415428432238372524628872087803943460387388017401682079839855),
+  K(1.83557529740841527446844605209017116897093841436662067765789282e-20),
+  K(0.9864600625663830815638886719168102897552297759459177960797975226),
+  K(3.12943206751661501173017659022057337234746071022538624427400709e-19),
+  K(1.110885514735136673565464117847780406837863571443848831601669169),
+  K(3.36714222189982446470995267699085071830640313567303017565996191e-18),
+  K(1.251807001539310156674752299670646099332129298783660812869950874),
+  K(3.66963533565169687000970714500256120006246875858293354891478457e-17),
+  K(1.28275456613850496013770138853585426962447470186309894067611492),
+  K(5.980627704588196306781198761461955802183351187329542573602792e-17),
+  K(1.391538424886067422433958606252873025108821460272773848246662981),
+  K(3.04634752151142961858540666346085269333990947077742463046680886e-16),
+  K(1.536429783617342953094689030949554270101607138668046512453797708),
+  K(2.2086643615287764327452966279662388522117176723663527214488029e-15),
+  K(1.549660013560116437373301577087544863913072912524274156295828524),
+  K(2.6218262814049174498715745304909935205803990693022565647808231e-15),
+  K(1.576104424355645610772290692971784298497974192293839873376969055),
+  K(3.6776900933742591448770185379970616659131859451394989442496041e-15),
+  K(1.598332121298042701874012934333374409591522471539253586210440733),
+  K(4.8664907879004350811588441184909988919625742787849800632057723e-15),
+  K(1.680955194181074458501410984840262260319369909431615657122468607),
+  K(1.33351530222436365873869417435457038321406537547059164420134631e-14),
+  K(1.817508119912079717025454674251844333340813988671465523360954438),
+  K(6.3591860470816449331006039923860858721254161981648634793385357e-14),
+  K(1.82670708438203343228991190889679112495339386103769177894289664),
+  K(7.034811415820125498939075969758474392897947610003867434498171e-14),
+  K(1.858840092508442215407054806061697562263996334778535027787122582),
+  K(9.9704374009217904200433980207109695054544469548584596840272069e-14),
+  K(1.896414134099798754733737380182452727610695107444417064594909135),
+  K(1.48777146417846208488673637031014606770815137087847126500291724e-13),
+  K(1.957543932201093578211890540069919454356359879760086837565403068),
+  K(2.80608048361463031712022554486048755165977402500583344655201067e-13),
+  K(2.165397272924951289882918037885554249946767706078401923122045288),
+  K(2.11149075066595268717803812107424192577447373631791717184888418e-12),
+  K(2.192329740699013232711029708089259279837432483839902751006309291),
+  K(2.70362302345598491244546425270839505821442740427954612776183642e-12),
+  K(2.59585766964892993038088989375077405805362862268891751466907959),
+  K(7.9241052870341682012835804928205869447741732035913969260183777e-11),
+  K(2.609061155227761152663646481798264412532834856122507073786552315),
+  K(8.7696525470053811478696445652559428936690531795432287139362394e-11),
+  K(2.645745682408728768567418011631018615169234111269496812789803118),
+  K(1.15917980543331693070333507780513819633042001732659014703951108e-10),
+  K(2.673963151340306052612905279693712634424258049298908075982804683),
+  K(1.43285931479978531279740252338446646929013554573931020828905194e-10),
+  K(2.688521253383080746107585855960448873251292211128743691996663751),
+  K(1.59702811564170840967231719206670572098532779827810972884018712e-10),
+  K(3.200730132010149866337823983608207688451529103888979654992698677),
+  K(5.1729827571166412530059064814053496057499911020146738493189384e-9),
+  K(3.240940205026831309780269308104288536028774497142197711125124218),
+  K(6.6308248873339238252206276877300139579275927733505708504695151e-9),
+  K(3.263017564673583925094443369631950236967574300092895869058618369),
+  K(7.588867906162644999690939782590291510226798592465942923720658e-9),
+  K(3.549039381760414927143120538050957184542264785231723204175178677),
+  K(4.0156244976079178802546843882233265184778507587882386926636947e-8),
+  K(3.561744768826738449610201386077018523720233584897190699684338688),
+  K(4.3096092541684402236630904484699269124979734541187380894206405e-8),
+  K(3.686555297017824603510412016693164329631943757159364305187463083),
+  K(8.5058668504399743167764607915905614251117158010126717970422028e-8),
+  K(3.779265621856937827388227012999936897350389823054084129642003301),
+  K(1.38701089455281981743638450430500276730046928202141612739613759e-7),
+  K(3.834024440206186267349258888477352291347199752493200156998521061),
+  K(1.8400414036823185322131426006836139076075251148708705670419141e-7),
+  K(4.014384739700590977546321030600325034332095055974845767528834953),
+  K(4.5255993360743631901591687761724152178574937715914089283655852e-7),
+  K(4.099673291456794198898093995132867491528377134735437426685404353),
+  K(6.8174227643366867038881356854589186942190881975876498428461335e-7),
+  K(4.256567168709192005408835046246274143791293910633592631899756463),
+  K(1.41265361956891574102108161773286692246357163683995943762485659e-6),
+  K(4.410065430352607890045920733165384070149128120916548002534381694),
+  K(2.7960728535880801507908702856583355193143117186902506127563626e-6),
+  K(4.854733347540158416037283411639765952369921668466443221948095891),
+  K(0.0000173187926316630848446063633867704043742724953601450091517342661),
+  K(4.905958629243534049962661297441781847911465355094596903611411846),
+  K(0.0000210752071689192096707602075801749655068756757535303102965658208),
+  K(4.936704922402715740435759903068492641120767015522503497810968977),
+  K(0.0000236798826373592625737650146713487146471585783596339409714561315),
+  K(5.034239372286265034496483300150077622501519759740319026892922414),
+  K(0.000034053977861753944829316485115995866907237408883066330186573451),
+  K(5.281117384501575369018524865531718852246999773682694917847984685),
+  K(0.000081934822425828837232077933875150711166167001025179983470424672),
+  K(5.326186311053359057271262292218340865596889667005105268090950624),
+  K(0.000095580334129979665939072113504181289982953757830233765731080873),
+  K(5.375276846150436707776648425563559009337470367610047512611394486),
+  K(0.000112800985314707867540133533515070464713550241043498045966379532),
+  K(5.46496634893956295645954202263046827979842654387593694451002427),
+  K(0.000151810096834162713840393748218847011015201384909093655398183433),
+  K(5.717025580807455442119771738570960307896000615241637528082987648),
+  K(0.00033674016293936158083354199215058253872293081779672418040453186),
+  K(5.772877039849762678596308368206717736345334555992520989217758124),
+  K(0.00039880313423708825345007125561099205785456700856783065864751423),
+  K(5.798716172879271834301965172656000778569476557075857607174419129),
+  K(0.00043088546441842339173580369316372172701286140569190418447229874),
+  K(5.834196870388405239218107995290085518382130063088335943085843469),
+  K(0.00047875259673310055325603828974311283026571765426644438781079958),
+  K(5.924328997008085451836017366972615049775510739678431351179716325),
+  K(0.00062273864351657969430076587846073692360162927116510348325703681),
+  K(6.134491724819840411450893778311254332232737318114879146908309348),
+  K(0.00112082604193193748407691738014782369789396760630660289684758001),
+  K(6.166295060732082851712055905165823337603123147350133955856985352),
+  K(0.00122135915479645757177658130980815799483033063775631171013448111),
+  K(6.211508714819721421904790915372057787340986888044932200516637834),
+  K(0.00137813703666137020318427225631592302162061737612694684485864733),
+  K(6.335947887606084622612079302033376133443777497180296901280248605),
+  K(0.0019060348972865908762965660190378637383885857694693962253189768),
+  K(6.361752502561324619012043844894096814636560043300635272483047372),
+  K(0.00203562537489666053161473749203455197361358071008585444799883594),
+  K(6.38892695618233476433893314930494484653857740231169320950833601),
+  K(0.0021804525730700147644342175233240796370930373572973700223342933),
+  K(6.404963777297438472691361759428638918178605914354302739109898197),
+  K(0.0022701218051866818128406191234869298722517723971366069990979436),
+  K(6.456934621890375649178785796304955542253786168736410714041795637),
+  K(0.0025834425538616533694662659649327475202553492360420850368037227),
+  K(6.538328902067238954953780622584219185319519909269571353042259525),
+  K(0.0031506309109376603204374247106813415443346513772991591089533237),
+  K(6.8666781120250436932864675319597898682130116864930082801705974),
+  K(0.006684318478555422500364198951935845504121476930019118904930472),
+  K(7.078267593595536504911953565069382946599855318512237401426702634),
+  K(0.0104276457131759883669582766420086471864672639222430370894559109),
+  K(7.156417874314012101111820578278668666775501483662038254180738231),
+  K(0.0121946439260658509508134399418631661939488255833894933252670183),
+  K(7.188530495551626969760762550030477551944395330965347921608325709),
+  K(0.0129893426039536131730523478172169577319729006962834111668150208),
+  K(7.493058536856920576368034420090084217114728169427678694307689901),
+  K(0.022849588688123767649541249600440431771672515538962033258584633),
+  K(7.495639311220153657347260782641653192522805011793943566164969343),
+  K(0.022953283130885043396480950117561443065242358977832734626129112),
+  K(7.574519464677664168448604485032685032353313534528605257414883564),
+  K(0.026305688455450444437695841202544914165887296536807904609346295),
+  K(7.587027730540835907563005729004100796728991967564570047604621187),
+  K(0.026870684232283346041111662291482076315989591361076930399103344),
+  K(7.703581459468365087097330235953274831803807379564043765098647132),
+  K(0.032598344021760340454610506800724663647729421298598480497554738),
+  K(7.817076073201509935673648073788819568397150876652876850522368047),
+  K(0.039023565652032293486514924036622462283787621114184917207200028),
+  K(7.996779259339933344875120408239423035435849436234208407157528136),
+  K(0.051038680602777861816943112137679990290350546048419645737251086),
+  K(8.03520466325961067252902989582595723002979757928586920927773374),
+  K(0.053913992607933519800270021288172208732251925606983815758506363),
+  K(8.248451290840668903082329066010968033292881525459082755970859096),
+  K(0.071892184062785359082061025472027822562760661636250266885561929),
+  K(8.266805447363000350440099042656228165076742408337737208034456939),
+  K(0.073600273144828355953437549140312587820637571730928409016661628),
+  K(8.645244134196102759576646482916776212331196311616100429818674619),
+  K(0.11420347636996690840772488109300976076331346091415866213009415),
+  K(8.69189537240802829187600443903002413263147805367453797917212676),
+  K(0.119854617528754692517842099337684994926876502983105017419046081),
+  K(8.791070207862536115994916984521686661958918245060668812825053253),
+  K(0.132254424777304869184097513530318488035600637487145969288388575),
+  K(8.902441390350750634183530699398926740171744033920695666355842091),
+  K(0.146710641032119703373063179240325788296209074084306594102259016),
+  K(8.946066368149110141255374789003126993558334325091828157861335385),
+  K(0.152495980437245607773179805549103742009002596085560376825061123),
+  K(8.94882318294187351099339040233958814697755348852280760454510935),
+  K(0.152863503856562001911356591924986357273307214548792901749699905),
+  K(9.045501250426490281351414546256922241736107400096955808602255945),
+  K(0.16586798905414171628350597163902128373325069028237153059559702),
+  K(9.085415454661193674210502232564917455035986212721683872369682426),
+  K(0.17128584564266298912969834325664146773674387393569909325326193),
+  K(9.140186268778399412875569958126137713519575856592505891497985645),
+  K(0.17874367752833303302483739386630751791739304585568237365579463),
+  K(9.173215567475144013552166732861032402888493475489829446009003782),
+  K(0.18324510584198044475928049280103838555826240069513755971745507),
+  K(9.297992068484677157752446669733307449912354458329340628377895651),
+  K(0.20017053305983903463808610370032245674176458235909487343201987),
+  K(9.298737045785000099191124099470686535468146865885119803044070288),
+  K(0.20027081504635354938178807399012377534401869828010448929167785),
+  K(9.31377982960375102737942251595239144224438724501793795611792047),
+  K(0.20229287524469512399129809515470767359837137929118974439934096),
+  K(9.328337185305740915697863408230054991243396440821745219448002071),
+  K(0.20424413375681668868346425235570881505650892560999481048436523),
+  K(9.637528766868643554839499739581619615996403025250462853610987455),
+  K(0.2434472083801837366819208296175380430135995579798766585656389),
+  K(9.661320969459944193063096179769127285518925722436677603881452533),
+  K(0.24620868225000058825484863489380756570193711799089170849455201),
+  K(9.788457462535254403988457761750976997334520782904728859578414864),
+  K(0.26010104017370757772067019166981554896421048622291567308438225),
+  K(9.863217802684911629052008049870213144410894225992478470256855534),
+  K(0.26750061651240669706473122981094623515248409954537971886042914),
+  K(9.89135836398199294968293418159919943542352091271281998274780508),
+  K(0.27012140215946449289506499131218500101024138401481622522563371),
+  K(10.40973527707881747144219832914017592699437176923548667079740538),
+  K(0.29873378141936225482820809192644127360822691237797370493404394),
+};
+static const R b21[] =
+{
+  K(0.04116874656991056838771429831202905582818993720221644339811403214),
+  K(1.57607407380566072854597901087783946157880018855578175294431793e-49),
+  K(0.138472041319277892473847236745835318113210290319204716956414282),
+  K(1.82079089531426383939338955807226676483718002649162880836833945e-38),
+  K(0.6160271608319140588672259923513693411302779885286212333353963954),
+  K(7.4688401473136373132110380138495745599235972413401139707666811e-25),
+  K(0.7047955844985323714066186579853364881520764235075794044669281857),
+  K(1.26177742982691783011920614094214553308767583471131482678456483e-23),
+  K(0.7264158662070871832227182866002245761904634244166069272441105379),
+  K(2.37984042456859225207060137610751693440093126322337005139750162e-23),
+  K(0.7723485413535384460556675048202006020309808945040946522874681793),
+  K(8.6245418258263024535477270365726211662694245517276677979383049e-23),
+  K(0.8741107598502274037156135630439337456614483371986158068626623731),
+  K(1.16025080597005673058717776870477952807933327415234063806194474e-21),
+  K(0.904122689568272384273473734870035940782584346885289912891986751),
+  K(2.35738666502622651944413047368009171506382364964804892141256679e-21),
+  K(0.9473605062218089615534071973853364631201920804108844233772659775),
+  K(6.2874838169197577455036323215929797617400267634838264907330029e-21),
+  K(1.040837412559414410236354251933046345017474340236049649830477471),
+  K(4.5362488481420053070726984809976409069291416165444099338840097e-20),
+  K(1.149912437839703856454747883775759272637901661768294404509167298),
+  K(3.67803865613686971661326298304679619323412401382791136209846444e-19),
+  K(1.538383976782891742291453907131684670247378303059056533463941083),
+  K(1.65964724690025377859631582903236122642967143330721525612437192e-16),
+  K(1.829808658602233677300929314840887574319033571006245274336364379),
+  K(6.3412481253082856927939286193769810235101773678508864849923906e-15),
+  K(1.86027883998567797619635994979651507066956937525502965513588589),
+  K(8.9700357396696253381988773046051527065537486809610214006736697e-15),
+  K(1.958171915532874453358741481073096805108892107969120476977830413),
+  K(2.63342140798373406628915844072252077033226155275985046580443974e-14),
+  K(1.985853258856111134450203577823563208511547159588693517616887342),
+  K(3.53624543482052003520698033124015943389004966889232377810235604e-14),
+  K(2.190260916376792743024768602266999524362122772533267261131572939),
+  K(2.76721442955208944463090514884915569707889611675125068868119242e-13),
+  K(2.299601312390157554415116360304546143521086258836517583742668833),
+  K(7.6966183449994762977126523520411188909333806200433217191536892e-13),
+  K(2.350559688876424787731559810839197744106816916390927422550496415),
+  K(1.21946300950984230537509199069022255339086174678991469069121488e-12),
+  K(2.436783725584461514702223384735072610994191159219828523949560294),
+  K(2.59816936836451733171692697027335091766566244953968456553481337e-12),
+  K(2.449844890534501172238473209253011482221906147530132933230830381),
+  K(2.90676124088425764915659882391193008169885330338627671728331777e-12),
+  K(2.595491757404046757926689852183353595043331438439918861182466305),
+  K(9.7705731446289718489260826658569725823024430567631919149185271e-12),
+  K(2.647784335130816612686510588106542104946892402013141307355151971),
+  K(1.48504362605179659383271237148778185729612941271371495096147717e-11),
+  K(2.795904780230947042977849727024838668249100641941491873785466563),
+  K(4.6531572842225427206097196596900164963668666066193990131287503e-11),
+  K(2.860784956711875664457027845431582647810731224391991892074185849),
+  K(7.5283905789932860406087541430764429528264288839646954758637913e-11),
+  K(3.010211200395874829893643271258907150406100001525534178508080212),
+  K(2.18878412099159999877834404085204119792204872477902822214494512e-10),
+  K(3.076844057110073127710963823721854997393443554046209148018419324),
+  K(3.4624086899120420031893741131002388103206306643969779334934418e-10),
+  K(3.249089016825550203665732918686708981172289176553037206212675243),
+  K(1.08245303415716079837395658936923448395217342228969521740592634e-9),
+  K(3.558054857815948359966186444923215997587625405728420940929853096),
+  K(7.2056242475748446004572814924181109764823953218337501339968474e-9),
+  K(3.576457384204855185847694933341651172656472600897324901574877413),
+  K(8.0224805825352628349565290815824599345125032754089345054561649e-9),
+  K(3.607697279035907008598905675949951561105100184620330053011016533),
+  K(9.6138706294834384895591978697577336567496606849345365695769757e-9),
+  K(3.631335808283560435012087208303361450892779699276184453023191689),
+  K(1.10124777104343431363081404358679995579845997857831224163887822e-8),
+  K(3.847245268448686892615733341625347942030792177853559294239150848),
+  K(3.6500378254860810154900002085016250268615093563248032002599776e-8),
+  K(3.994531860301152693263848632505861684240447283928042590680141131),
+  K(7.9318936235433507048951434067653669274896365047108731282102771e-8),
+  K(4.04743072944916307301596874970290237813735380236851390290880376),
+  K(1.04015379946182282036678884611884339052498497099196597212772572e-7),
+  K(4.094780199031097613130418420302657353595434831039189118860300409),
+  K(1.32135580152196423401254273792744162549529613870867746109539416e-7),
+  K(4.168012297812090596290433745411065104891296693216678795686961867),
+  K(1.90157933656640847608226174658665541888621088835923652221616623e-7),
+  K(4.236046417756868219918967689885360192976116344767639476168191015),
+  K(2.6496527881474154717253371776732772301381171336984227172508702e-7),
+  K(4.301598504344330602038598735049849159263608751760726323910084014),
+  K(3.6267924831721999785953274929096265506982568757060376831613414e-7),
+  K(4.41937205147867143554421427207848175632943486087733116163617767),
+  K(6.2881587505800061882118261997094501376275115532439413699473934e-7),
+  K(4.674735527858019611356744795105623716517796001394006559047658694),
+  K(1.95798237133941527522266096108478051614584376730233346383797171e-6),
+  K(4.687283492214188614709348194423445481006360955239189276492510576),
+  K(2.06635571539529360188798805341033196472939159317990637736863703e-6),
+  K(4.713946040078945165739269081301435326206219069772155225660189755),
+  K(2.31560712150457337627494838353070231198328198919528667775515062e-6),
+  K(4.718382062078471977259372185654309572031186659274022331309699773),
+  K(2.35972001818203343254781456756789752950210344964981745685818138e-6),
+  K(4.799842268364887640530481205939775061581104482472475052896141431),
+  K(3.3241996189488366879238159822154890493384546688473605342568913e-6),
+  K(4.952640296516245638363213725508772014359040457684112363077509369),
+  K(6.2014736722074374348306007658600316897938482860142569590641093e-6),
+  K(4.987705600029692547561973511869969138629393547594546554547625195),
+  K(7.1309093404418237784263814193251780454518800433610510893968287e-6),
+  K(5.125626056316215687254909206229417954550362955666629863057879993),
+  K(0.0000122021965824941616750660761501654136641156189492385837447759129),
+  K(5.157554170085638958749854662539609644848392541414633859394088744),
+  K(0.0000137807069059512452614501248867928640940194415890961214038993309),
+  K(5.250725615068883330520669483856725717464706168079639205208933265),
+  K(0.0000195427254854060638616165632215948732086479759048906369173883928),
+  K(5.276899928390265647808291097524570978085058324203484114587764689),
+  K(0.0000215255350703004507691650909023349248232238956316624612783541449),
+  K(5.323946094760213996870674918538820352773470015838198802300294242),
+  K(0.000025567077005199804378823393139103833943099084445921491966651344),
+  K(5.340437783452108893389526576875605717111043309054675013146190875),
+  K(0.000027143275753782340304913886885979972743675381400484840490662693),
+  K(5.482087490170912415562381119750272248716573296110135394941824973),
+  K(0.00004490790740261714257106003909383641576859556106816665936549089),
+  K(5.505443084901600940945899239622147128129222054228689348084009873),
+  K(0.000048709526267744186252501016265708564295051248668497435489554554),
+  K(5.507507458934473815060246235553815579541566342400814160378722004),
+  K(0.000049059486836771506328407737468696202590051295824726264094899635),
+  K(5.595195557233422472085093804756545358045147315257598221715728844),
+  K(0.000066262025946443969848911898214435432203034613227215617058088692),
+  K(5.779878264180336044744853751986205351849703487865001854855945946),
+  K(0.000122086632975600740860385839981434703149667078912064749835286514),
+  K(5.87690144299072563554375901185706176685664927879719718792648048),
+  K(0.00016636236529353505528921999567115988093217432487735323785413511),
+  K(5.899706444100606758453536146399261772526131615839196681321626222),
+  K(0.000178710014505234443376253866773446744713977579240542775485918032),
+  K(5.958864083639736843418960174622663338731547817915683517381612671),
+  K(0.00021475502712584536368305014904591135131776924027998315918713976),
+  K(6.120942082772595034747790159036759911046657609129078318313212896),
+  K(0.00035016114950631481367102031095813404386658129486019581418651575),
+  K(6.196356419205536855970445924952029368633298371189753829967990695),
+  K(0.00043649381774025620907914763721043830070950054392562234353442031),
+  K(6.306230394842916749903901360566128408977677874427380081297267913),
+  K(0.00059702395607234771631495036877378645813518978288713686471280425),
+  K(6.374381105873107042147587007054831512257748844637850134152223518),
+  K(0.00072167687744527328295098013406376287562808938841688288102381984),
+  K(6.570414344993508954997208895112451484239810002297026440595164689),
+  K(0.00122127524121984655741546291834209559779514220027076372943881207),
+  K(6.583675684959070983855158293770156159241433379607465649055897088),
+  K(0.00126422834741460377303903309571390228278867693115314715740275824),
+  K(7.066439521565767858978404030094023144220122236562122973528220883),
+  K(0.004086946171167768556186613313475596720947530508014061843325137),
+  K(7.478299440376066887312833049882938708611163086881446149625431477),
+  K(0.009811206590076562069899811185819878992627246341428382169666501),
+  K(7.580728851225521005830974648834764355015688487098776997721055679),
+  K(0.0119912060620632496337024476935311319641528678653886598605998307),
+  K(7.659887543973371922922510726665546884079541209373120865071209523),
+  K(0.0139386777042815789011111005293516503828730946910726050602780325),
+  K(7.785693337380918664306269091637650459415238226473915930992291596),
+  K(0.017562061684749531595528329424089707871424654867873786617741662),
+  K(8.233488437139746682125788112202373274858410677853713644554422452),
+  K(0.036939505033331109554511227218902876240459835556935078952443244),
+  K(8.233524777879634180431980792062402293286840367541879039058041106),
+  K(0.036941552701820765527249300969405448495663438159302550250552242),
+  K(8.236391347988304665944931401789697685840176178761807128491200021),
+  K(0.037103339733214711199355790859137390422465427174626906330915998),
+  K(8.25565322251165685798118902986852586135650419438043621369890325),
+  K(0.038204152592634322542246727823964953871085891989974455719494538),
+  K(8.493305072770336477588071761974499231639754078499786762973231509),
+  K(0.053819914558696159384313892854949234328044437257508168765246158),
+  K(8.660975887860664746596985358948007682045266340508703255132992258),
+  K(0.067194313641489406500121257905028409868846808889321247787702999),
+  K(8.787618400942453080880131356345054496763576022642870562475945188),
+  K(0.078609162119017200846676970848256813380053420421254041590988975),
+  K(8.899187837522032192322080516771815898410458935584094019414741849),
+  K(0.089579811493387283941121557844019350221347229030647346447440831),
+  K(8.955164788651586743817253102534410634340925385033402600101651326),
+  K(0.095394127078443554559744387173341024151465439464838215213161027),
+  K(9.044692243092814446083990873876510697412861036362230224669463217),
+  K(0.105101114924198347252812109565061903847160091048717795010525874),
+  K(9.073876277795643771263413737275765705742704820796058714660698337),
+  K(0.10836862609121721085916079251803428955039289985935148273359116),
+  K(9.186559686155895652123894675632327412741204801860370394829047724),
+  K(0.121422719774591132219073964929572142523342859575641081623909928),
+  K(9.321261307251496259774556321305238660301771480003860801811171597),
+  K(0.137822575425165485778306158339314878792002910998456169452386083),
+  K(9.370590367218116945219066342115905014368559954606984205008658193),
+  K(0.144005051487827683258897645745595338889227054419342486232626306),
+  K(9.449331072721875740587523024037126709389874622805106503159678357),
+  K(0.15402468363149105585946214994084454304939183025765374640343167),
+  K(9.517737646242414674682146287739912057915247347010283148756835909),
+  K(0.16284239429108672515027058277471300473746274320132259805449616),
+  K(9.538755162565811571110496151539325225314919671776011837195018536),
+  K(0.16556631817077659517695885790424823256564864449918747371344432),
+  K(9.61157620891258555824408538650765058367992883245657863515397478),
+  K(0.17503396232975022342284135064903111461844705128024559159568763),
+  K(9.742877269183538555554866869360219220585962944852873907797840095),
+  K(0.19208484939012956207081740129494265107408385212651979178709914),
+  K(9.783069585608342966103116989577860978634341499135884884521137887),
+  K(0.19725920964246982822510130249744723979299495202605867680567629),
+  K(9.820214796138897528771542868556515594221584171976889261882250621),
+  K(0.20200774712768809405837117471941830553221982765348985507519849),
+  K(9.942470355093105916373476119887728704553922663229807495246032733),
+  K(0.21731022772513102670075763177548802904321378174839649830377236),
+  K(10.11999150153575028453210327970041869965467805574309783846721945),
+  K(0.23817617267024745222916141737688272414736578634060392438551491),
+  K(10.29568745930759326875493819100092564380119757913217792854057112),
+  K(0.25649234733751574262191586233878715836349439138751922447459564),
+  K(10.48474697881923370259549349408521011508089827036479177076125873),
+  K(0.27270552731901558699455337684756562845042073162247991985417982),
+  K(10.71573253809275333133261391284692490154076607712284334560233557),
+  K(0.28641375662542880107626898546706990763304832182908575541858194),
+  K(10.87396817407724856702515337238896816076663631200696550654269931),
+  K(0.29139188224877535371160627739869230153174135089665194669042399),
+  K(10.91359098529204806905517272290734009439119370529568359119075016),
+  K(0.29204349471749501354988757606246050618655339688943940146889447),
+};
+static const R b22[] =
+{
+  K(0.04540014061400229853673920055338588219570387496005275012908343267),
+  K(2.53800084728826965200833242079030933272585966117858854342103337e-51),
+  K(0.08258657273543742346706342040976759627290352217086243164233072052),
+  K(1.32202956783166686260575239950858496319851295644705329014702032e-45),
+  K(0.2637819608595011097065584156438641520274869557577872966530122055),
+  K(1.64674153111890881065309132637480501073170231896420617595040775e-34),
+  K(0.4167509350436602611389301098822388381844519893974447745302566584),
+  K(3.85938612801635511459520382497352385525037158449722551048499236e-30),
+  K(0.4239259046372471134493365366528322682938852782694898579324047639),
+  K(5.618397094984373504893719355856439949203871494089186898247903e-30),
+  K(0.489937499408398779536701589228355158974158859120967973924527614),
+  K(1.35621453777574696441934405095879023407780324451592747987164301e-28),
+  K(0.6929618684847564202568322236703314802851272149023470374201713022),
+  K(2.78508741307790173970635076990649443322033191252845963947627658e-25),
+  K(1.216731699682166193221161247581198236038000192257370850945118385),
+  K(6.6606944604397293686445203124839184405158599971170816066181642e-20),
+  K(1.269467075207349460899030222746235578178473845388150949414944218),
+  K(1.69396768492884770605823442671198343753140653489038240350299574e-19),
+  K(1.380254895869496235083297263211717782757472835550587796116468025),
+  K(1.06742636612100797081269955347577955857070613081960714132662871e-18),
+  K(1.585033859755975670692749166548559526733380785151327495131365526),
+  K(2.23914065494003545300332876594195633642045538796083434989131462e-17),
+  K(1.826085055096031708529233362886499844167506721923244113944986505),
+  K(5.0430722698911228677045369055473468060365985124856897616576196e-16),
+  K(1.954866039264707467777690988877801898348656539169308241232337832),
+  K(2.25842683547161453439998160046018597579229226965022451563497288e-15),
+  K(2.144828796432530392185442699975457162976601302395630420621523169),
+  K(1.73724584292450303183984721330319875894528902671302996370045038e-14),
+  K(2.395924952888142295560959255578905640652328000428606200116967674),
+  K(1.98415300713903293062369244928125444741982316158581195438163835e-13),
+  K(2.630914339645071055506665627218418823687634757106574954976736812),
+  K(1.55350031087677572930499774227705711199517414592120435205661573e-12),
+  K(2.641818078767832983666489842161516331082011168168919165314556714),
+  K(1.70142306985321777600879556818653956653188108175853083399877798e-12),
+  K(2.695217906058710053374677220945727619748056739779789688366297446),
+  K(2.64196859992502469371848967419914837997464930926069112264322583e-12),
+  K(2.71918731314389573636947118591363248664992817769615533532663468),
+  K(3.20980087417782300504353801136821349593772261536123444102733583e-12),
+  K(2.759045390887709424409908388867820181316763193257954058469535939),
+  K(4.4200561322299464849349148945365153818509678662686810461775577e-12),
+  K(2.782009904822012655174847094293506664996342619749479766924868467),
+  K(5.3035865932666224904775299198754304529091707939569912516775464e-12),
+  K(2.889669932165302700547622275305652429710445458092608392840458957),
+  K(1.22185628664432467226828102155629136204405875052919597614889535e-11),
+  K(3.039142904102219373262094532134345135682546980546500095115930568),
+  K(3.7001368485798502360352106504263512518542641787854693062029179e-11),
+  K(3.192780286736553560160951102960049785890939368042302398045523466),
+  K(1.09238573415072902602922394973230479769945595700838166170594507e-10),
+  K(3.590891480332253226340026448605428666633726039111602668540124888),
+  K(1.43224007056504640765176728685511785053971645682158961126858145e-9),
+  K(3.637242103069072755495884034780581039037117855645565151785600031),
+  K(1.89527473770533227056032019952872746504615442258290870364724946e-9),
+  K(3.688831203465202202284849297648172129645690158959489215564305679),
+  K(2.57733498472237319770794745144826753070722802474109469186284336e-9),
+  K(3.714101362618293912935788561945765081946831558079800829675029697),
+  K(2.9911931793471740072991376287495163641193194243372235906855082e-9),
+  K(3.846318137772616069014456515557566247110799558309317038095691275),
+  K(6.408636407987723487276782598093280411175552757364067395834165e-9),
+  K(3.918440147308837741542730668132186254914847246114587526796568722),
+  K(9.5979426367146811640472065620810854005950234852933156343444556e-9),
+  K(4.406116511206288931866130168478362903443277023625617145350630059),
+  K(1.20928193745210896027784944039033635513670927402125143085797189e-7),
+  K(4.536779729437864673858740794861713231558775565917470675512984006),
+  K(2.26021340011040089938356244004521948426929931825262090129103244e-7),
+  K(4.620471901137742440823376191431958979544043072668194141292396432),
+  K(3.3373636757498760634416399687094398034092800188717378795139009e-7),
+  K(4.675215883891736333185797086196643622408202891328182713397291036),
+  K(4.2872466082225856414331646489739007020619955339430270577236132e-7),
+  K(5.045135995972097943899537727028005548930794105488335538010299354),
+  K(2.1338818656735772398929389461625007032470643103744458489280514e-6),
+  K(5.130109171512449553744915708234386830408090312843175890394163823),
+  K(3.0226387277258764036387801707994538956950296261083483357253843e-6),
+  K(5.166810720061194982873033124143864239280716854470932324422407511),
+  K(3.5052608113681875139270450190795701132889729293762425616726666e-6),
+  K(5.287509836683053612295731378379708968471188111059451014169094844),
+  K(5.6522320127702961739141061016533190283439118408711167347654594e-6),
+  K(5.388531016869270831979831409426251126335711532893552488210115406),
+  K(8.3405774699039290432031965975371016890341677456847069982607618e-6),
+  K(5.45792557813170025757209143599124628820233493870325084143886337),
+  K(0.0000108356269723118952799396539341034212833607522906637435089944527),
+  K(5.506825164550843324128342108223179592416297731524185054117725388),
+  K(0.0000129952171566245577036796051147802616372519010098917280922929596),
+  K(5.77801959026655805419144145978532125299511101581857002453096304),
+  K(0.000034248202514810956255274592883589165407938002267259169680813074),
+  K(5.855520161743421019699007500100758821461720432331668341934474553),
+  K(0.000044648821663124647392918191839219654315926374525460981268361901),
+  K(6.22400200014338712301662961871035621930343183075872405996215718),
+  K(0.000147222839316914836659295613969070514732009528743369854168127804),
+  K(6.3924942011544174538969237903665238083940909890465572332843786),
+  K(0.00024511271885867056122119823650905821864585167866592542523923097),
+  K(6.406743206656657612999234531003805471033278673078652708113273896),
+  K(0.00025565632714418141932532168108750405864482461535718631008743797),
+  K(6.504490779116859052829217179218997614011039933892075543028051914),
+  K(0.00033989530211226751095066626927240445657797221013032866434443893),
+  K(6.505296604188492523795474000578074558119810701433364896016591723),
+  K(0.00034068419172813456574688666373320047297831224190289977499965216),
+  K(6.58380130960530718739044214624918354722906937302133221052544854),
+  K(0.00042602978897407999293412125612856167756632394804406395366825377),
+  K(6.612810385190839519211926085833772445363121161427216201527248078),
+  K(0.00046218849582026895759133886216621096391768553280676982924980696),
+  K(7.209783580357177100355537611687095983446337301608437710259180483),
+  K(0.002165557688640728626751342102099302991121382320206942532018997),
+  K(7.214806007725568108730182722061481787919495004373189492048358306),
+  K(0.0021916132373958800885865443769091945399839172098509732383944448),
+  K(7.301920709756504139349245859607994310631033373705322608262860366),
+  K(0.002689704343035560144223306619706197143112475377142544079075244),
+  K(7.343365295744736416704996653619952125729690041072999465464628782),
+  K(0.0029597648353289352575837925254735274652497255008454975932128097),
+  K(7.358947718178262772180539944058920650374507662284839440866749594),
+  K(0.0030672856605584948627429533017442247106550447365529152423378102),
+  K(7.460427159543084966379444168753395116532400484527739977092807615),
+  K(0.003854820706623035497859535273974020298350199103513409058964433),
+  K(7.525448666715548130677446440466455545941203780151485014168882806),
+  K(0.0044471738753376549118569299237945944755077891692991730478308881),
+  K(7.573730992790303615725105138632176303610140856736679664382882761),
+  K(0.004936560349653807274015810827440190589553987100745561713103688),
+  K(7.612804337952498112135952543471343444586513766869271656023172886),
+  K(0.0053659565535419418584114207881521135433355012365895243263970409),
+  K(7.657363606069725798492955848517082228623488311254804785674191738),
+  K(0.0058944781428254462951693355334300896022801132578360421233684819),
+  K(7.969778706790433352268615859962851932781840592422533753334957871),
+  K(0.0110016041904434558827399805872681351942990684000660826035169139),
+  K(7.982077013140320700599901810248164596033309770163832090194359756),
+  K(0.0112614285086095736282694777255219047354917074238029138325834678),
+  K(8.222843540933716276644846211119413017577467695824412398695448418),
+  K(0.017462944666859216355260817972396601046167846666058224876188283),
+  K(8.330864485646630331490494305132345690537153821637430114397438714),
+  K(0.021025503035998016883447233903643079644716743972590885219165682),
+  K(8.336905915676524035341564575331372626960522882338074605184729457),
+  K(0.021240666129794674520624779794541210211164182191986343807454893),
+  K(8.351139018022728099370116099169557109358518904043190018424432873),
+  K(0.021754484432462732013441511180731112639680426949549410580854678),
+  K(8.568820923283737906631797119086538952405594421765238876155745756),
+  K(0.030899930355594588035659643196187216813117310929174867676425121),
+  K(8.747777772825528279036843121176948304475778143925826798411058516),
+  K(0.04040406345161797630648123565721196429171632962066544231651335),
+  K(9.072363834095442846940985779304056456411778803550056452884499611),
+  K(0.06276712216851514169413128178364394423908819894982321703861204),
+  K(9.184131769146321844170962017813015395248994661007632976100646278),
+  K(0.072068734774924164756106656542143060090026146282787307946555717),
+  K(9.233693833347750520275877945255441271302184919010724331808142641),
+  K(0.076455634668430226561107857626786331529332294087833378356852282),
+  K(9.273670308628532849943068297216207511366962153256966076903594663),
+  K(0.080109734096721493870732859791826738712357350245541748773231032),
+  K(9.363475032941537554990869341005104651311564553951919342266761306),
+  K(0.088686952334120983562578658784310099397571464389669858452610927),
+  K(9.423286045827504335719177494933523385504806330067019588125002261),
+  K(0.094673745860999861333517388806475323074317615584694506771598848),
+  K(9.576876724020045425034903103119864871584872265994371416579610987),
+  K(0.110982539200408673390785134461535174508476281620713089713529432),
+  K(9.60388348630463105403633595081081958181877792396216681647851318),
+  K(0.113978993674782290619101104690375988441493035224633112105949216),
+  K(9.659016130339577349440983290138763728590902296581798017969447471),
+  K(0.120204405992348387411769784350637536582173468991517613068210161),
+  K(9.739086608091055207591635083531242820219228107950325392537097619),
+  K(0.129483051293125028039314117990210844221687513234623867982902783),
+  K(9.995616316872913490771108127390735756592669886981167504456747247),
+  K(0.16060737044393002417584383245777506909392166463972576859938618),
+  K(10.04605980118755591747028435305038682089582141998457556830988398),
+  K(0.16687647210122515119665581492335291152873493079748791108843038),
+  K(10.10890413132495531015721249762931661099050102875481653372825443),
+  K(0.17470483148283821582317683772085004724908397441462825177759508),
+  K(10.3423705705462547530187827349111069890838870109992932273956258),
+  K(0.20344733824679126905463353486355751417151210610565702461235743),
+  K(10.35147120381116561350419561695689466731428419428889967026713403),
+  K(0.20454170162781678723756568074263915404273494500410146257249401),
+  K(10.51456202133606008119339567110543964845571279166728067418873883),
+  K(0.22355562284831141516588494942031693140821045854099074198183337),
+  K(10.57501439470202133529098528745243312080146471354390703571266091),
+  K(0.23024098112679785373520045947581944116962370987916629454213114),
+  K(10.59618955066559517045783587642638853879527002907299032798956568),
+  K(0.2325263418254359538587436883761832284124309533987708080299331),
+  K(10.60861969799871742890472531757101927717515256387089348989436268),
+  K(0.23385334034120976815767957648739859231011820441150436612415896),
+  K(10.67779016987082185516330423693580202866579495008548361685062564),
+  K(0.2410278058972605340222425320449087817932413883032530460236391),
+  K(10.70766556333420593315790074843059839007953579053012434252367299),
+  K(0.2440089491581267476566568071676259570192830727906718758753565),
+  K(10.72346592430876869631659727624469993837176560650546696927994513),
+  K(0.24555506381371713830728374161589597461212995606176477318971731),
+  K(10.74456297763757260769290503214086795063570170338917197818125664),
+  K(0.24758539059240400868870199660493680122425013263224228815232667),
+  K(10.88683124749924589146186967507468600216971585697927125195265127),
+  K(0.26017060513267788271211044807934466283051369197276160027673569),
+  K(11.04506895892639913628178126964357909054530271112764413998980674),
+  K(0.27160313092354664720334068445643698269850428629007647131748044),
+  K(11.08044668761013738716599275675356674834260520928146924900371271),
+  K(0.27374861827487199406013048888961951965731022754204634005276104),
+  K(11.18119371337978336452853761300731213309340758926694187311245863),
+  K(0.27897576715309927834444614732255325506957458507241983535877601),
+  K(11.2530711080215144267334112773182429040825553141774024482596267),
+  K(0.28187449813444171942970945901675004100254787409898268112093025),
+  K(11.26672227068664408277654353325030517584018033648175471002053569),
+  K(0.28234456514769060952484886118755455478181872129042898767902481),
+  K(11.27078771442588332828830120949490955289305339309462379088916898),
+  K(0.28247953283988908623092097179500859955167321758156061886830672),
+  K(11.33289419559083833772355641058488640997700072021795377811925003),
+  K(0.28425224417214807808717714066329301871429061770081838977879454),
+  K(11.35528917501526824776021092831362468419989034348829523063653818),
+  K(0.28475716143806481922092164219451469862764315895047153860786075),
+};
+static const R b23[] =
+{
+  K(0.204394056114945914007649949176725896122521178077979285078134578),
+  K(5.3490369844667728962504025949161324169200335284068337594328093e-39),
+  K(0.5367532984371432112358850149716089151139719773752694903565865409),
+  K(2.35680784912918744415763797398352055412099879973504354389850548e-29),
+  K(0.6385127948655304992554370535841569286655909402298054368307145748),
+  K(1.27763402999756901923122225785553446716061234851054921598039352e-27),
+  K(0.6454324827338114635906272939557705673182201017864779304287567974),
+  K(1.63709693182271534269606492265157649458920361824851209721684566e-27),
+  K(0.8984476326910921320177473632822277714553656578162669857042158459),
+  K(3.294877341858585599738349009109689685221828948893652029060455e-24),
+  K(0.9408174647015740496595958007229712335292233741868735246619801432),
+  K(9.5088741371807624523209302904372649309517708682141062108920519e-24),
+  K(1.116465312347434143981835426177860209276193461806323254963150378),
+  K(4.8746783418319279408070652689714945482638512603650814176261765e-22),
+  K(1.138829190204849527327414133456872004359102241770181452839830136),
+  K(7.6922457347314611476163188670713430710715190365798818983470023e-22),
+  K(1.140344281829036254411310262454020286503386609903710942314560389),
+  K(7.9310981118856583223200586583826644316510719635790022605836711e-22),
+  K(1.410484853048248990540117940520247312599144914897133292148715062),
+  K(1.05433684991679349396638413517007521767714723117701604951153072e-19),
+  K(1.454072464797843686757791788137286468326522748273601888538914075),
+  K(2.12316981879438503907894313247160609189294172377614640535472282e-19),
+  K(1.698771933322143341381768267491431126126245370436660349615016796),
+  K(7.5964788027740482184631986541428298569952538220364089585701955e-18),
+  K(1.894640687894475845334161324839933121181151476205019861060367919),
+  K(9.345940468378640305728777256254462232146527911571225957763682e-17),
+  K(1.996515729692573947739163395363087875788207003931306730966905952),
+  K(3.11729074188800854798664608505390585210495261076170560382303321e-16),
+  K(2.378741577206570236237767022199360997140460270012853402752451103),
+  K(1.7516828081780622940002288237604601442869170882341863147595184e-14),
+  K(2.527804924364943634842252572346260658299470884044052837812387011),
+  K(7.0877756362426576859233866688192887789081459921976871647532001e-14),
+  K(2.688962600245124493008951044963405974424509049723779436746249202),
+  K(2.9357501157340708503750686452721243800433593643118445747854024e-13),
+  K(2.745647638400653611969226172645595937931785745847389606163484138),
+  K(4.742680674968294769291749806896833617832311732651683690521839e-13),
+  K(2.745800419806434628792428405806423732606488660206318456522812057),
+  K(4.7487517304174297736258827926417244895847050369832561507471677e-13),
+  K(2.782548853912217886998521112440960637099583330263481876472055651),
+  K(6.4464175910432270533940804873784826738189574558473627358195757e-13),
+  K(3.03288312918860608114480532672433361937084148832260799239997651),
+  K(4.6680243075068327002591324662351241380570209152558805479158882e-12),
+  K(3.125791838561255758018165515814917684158130709257354562151369301),
+  K(9.3350306608646755551797102304585478592959827612972027148008977e-12),
+  K(3.153302729218745621602950914403364621769721221201207775929658338),
+  K(1.14156143121050780366773827883849645475790453978259188500735923e-11),
+  K(3.248795736788149156715691053074508397135583875457041710863539236),
+  K(2.26418156121366880106104127193325611267080095351369766097950803e-11),
+  K(3.282000771652696079584096997355516905539853828288279977255409545),
+  K(2.8591998539373089320385517261047152380365940807839931032506413e-11),
+  K(3.305369892032578736776207775545377596914311137927318116892978619),
+  K(3.3646135307290514070793356747557535534075545429425728381445872e-11),
+  K(3.332646952686521896924533002581731132344220244561971417977198708),
+  K(4.0625947798516945097426696496619187109805305268385121680613859e-11),
+  K(3.592872469501941764329869922636888599751254416638525049520834133),
+  K(2.27445705908979716918316845596058170956895304980429056176557887e-10),
+  K(3.756760990092865111465765136419524966205889245220539951841244156),
+  K(6.3051470972859141267566552444017841916855513350603121989934202e-10),
+  K(3.797765098563858606465098490552832886771660222057370803313166541),
+  K(8.0782976057459248451449152529855816142693294207681578761506898e-10),
+  K(3.841105268043535534692823993271597255159681131207185660052770999),
+  K(1.04652951952220643907526581804455626895943843951983095145701975e-9),
+  K(3.876773779851326764778310753056401025842603030319215766344545415),
+  K(1.29204921548711945556977564898064697978885809245303878867509827e-9),
+  K(3.926245805820257060735417619930193085154555338739190578584005831),
+  K(1.72487503712254946740418868209071672938502163198485351440831489e-9),
+  K(3.949539311243807415753525908596217396835856385767320255408468918),
+  K(1.9735869772916941262897322514879988985145040313931295351500563e-9),
+  K(4.153020599068744367072756933743230710479727320880908074772618533),
+  K(6.1808085365651704563773033098399234510439888396093452776499701e-9),
+  K(4.463944170949725919750636673624817390705885330855683029364565089),
+  K(3.1589305656577665127492158340805330395076103947312011516833452e-8),
+  K(4.552450212345243889162898980867676012326060950159917055924174606),
+  K(4.9111362441091229010348891641288132663686268759335876954857391e-8),
+  K(4.558674629788502966328246746970490808910988556272593967060691705),
+  K(5.0640788393557680655682455295581841372951734679627697751882193e-8),
+  K(4.627000398328078107761843546755841663722876204634255902644147523),
+  K(7.0688437549353855191223124974036531386190044784051937724552785e-8),
+  K(4.796243308565904196680015391193509599099984190681962767709816207),
+  K(1.57678059983799805513278224893896390993548922837424055430741431e-7),
+  K(4.871871052696031619743544973923487307123875669631124808297387422),
+  K(2.23282463703934858706566821030997516786229175823715581284704735e-7),
+  K(4.874014932343914466303244847951582258101478476842708504757331316),
+  K(2.25474303383075197646607355597107760088141217191250101150768396e-7),
+  K(5.054755676442435644487922935424568718903216890245085364214250859),
+  K(5.0460380238877768270490844140583235209254843529967173431538902e-7),
+  K(5.17973794677049512485433797091915583414436108071164020588128019),
+  K(8.6322005734873323170355676236718805604334635051019367484021917e-7),
+  K(5.259017256218069882491890612237664425256537081129258094918824978),
+  K(1.20352116076256736025463133150713432673688536986989424366097713e-6),
+  K(5.424865972921043475136195661469259002946137042408727179396478937),
+  K(2.3643866782475848984708070154742272963665431788930546102235113e-6),
+  K(5.486049639122468911738974985932796452063066338272234330065903637),
+  K(3.0131740516638862938677301502835213007598442498969700959521287e-6),
+  K(5.501019365709870187633838031862638857173984090548423185476600937),
+  K(3.1956375471827626356205956447187496428068008217562551451023557e-6),
+  K(5.513296125861897852914151854933421425823674462908729548698598902),
+  K(3.3529728674019089986820660263306795111278199576347813784179277e-6),
+  K(5.56172133462010166179223415367304612398386767183542379896662125),
+  K(4.0473581495112883888961358337638143682754952145648782998587164e-6),
+  K(5.605195053278392948611981987346239310135254642914310341064990742),
+  K(4.7836690095140145023253749707065604091515834456124529638861678e-6),
+  K(5.60618651763511279751485421648015407628035074496605803838805514),
+  K(4.8018424637378983214363001281640005072071917299696870325201574e-6),
+  K(5.752641518241597033228062569233095379349893500941737705429594937),
+  K(8.3266473260759863541107760518970171310891263023000867922394518e-6),
+  K(5.776405850775297668117573167131185044701018544005126604231040579),
+  K(9.0883749700488788012209433967926527082243954748911989998700774e-6),
+  K(5.779095783027342238235329574931896751706839896286247598498952619),
+  K(9.1785885141491255844010849630394106347801028324810859364088993e-6),
+  K(5.873468559723375278681878713186978303784894643864080897619943204),
+  K(0.0000129287815522066112599319829155738051112212413638273428758254803),
+  K(5.895153185261382811366242613054431990965992496858215406006813352),
+  K(0.0000139725918982169267889992401479226025440256639302227540980833688),
+  K(6.10264763001000674795109457537971831891831238081768685158965526),
+  K(0.000028794511157785588866958653975687616936097803176512076769919072),
+  K(6.236701337291698223991842121786437452120864574372507192469793274),
+  K(0.000045092654618983551223615830898629728632728032893592013386088928),
+  K(6.59894255645669302012684303591562419749513514365460052237148527),
+  K(0.000141315974666394633579698660807401759696871815313763463752434283),
+  K(6.852235259802422172056656432184434293031449962955369674460749799),
+  K(0.00029648082006601313553742692915565633028480394723707515255451428),
+  K(6.90118361661060730421749691689180076346484597834096181611194553),
+  K(0.00034032709055955952820453795470970101040147316199584694644424512),
+  K(6.907424811211996706865850160246216399051748328254645661265100145),
+  K(0.00034632331396967776836369675542872996874373782071454325410075195),
+  K(6.954714049641515260630429996599181716759348872087247140349243199),
+  K(0.00039497691045359167269359678205769159092729718662986028490478701),
+  K(7.055016028692127932075860822089716813011196457116541528677815439),
+  K(0.00051932715161983895810476102119698099625657797791503706599558048),
+  K(7.218248020332660037097373562175027019670974789000733878090953965),
+  K(0.00079898829162152647024080329284246304905358694069729039147845875),
+  K(7.367859279656719511936760466427514750956267755104636061902841177),
+  K(0.00116750859809037923642047107080510662242034920484914871568631391),
+  K(7.409832368237253672132139460049159434516748573693362432561549226),
+  K(0.0012951761439996993350614932785414191237170707339700644067792214),
+  K(7.677788062733489723991234431488881989929454147341368067649941888),
+  K(0.0024461816845667487650135359020972343298590383482256670229663181),
+  K(7.745747859234628059921917177192666627367032091906940158379337347),
+  K(0.0028536732014614819328028936292110936447954813991968319124962582),
+  K(8.296434123911692978587721233581876961188933375714484898638254139),
+  K(0.0089669100923001665945096004924213446593261683555972883151047118),
+  K(8.307585897925311924415961556686113942825219658472665758702052062),
+  K(0.0091601877769914288093949579485837040246595810005581517719491894),
+  K(8.580429606463087549886934004055016126870236684097707275338800547),
+  K(0.0150938136702605917673331659486327490571162976090017291314094203),
+  K(8.593881540672007082635992375745113790102102867814926855400059712),
+  K(0.01545307403482126775807722202594269424272769726832421755345979),
+  K(8.72498164534889887226749389608336924285203911495455422311790297),
+  K(0.019331146841776833494262058567104903487491963059983804556489355),
+  K(8.762445359386816050057552296835506144785712912385911045922851876),
+  K(0.02057203992405822264033982247064119254384677351014374224525771),
+  K(9.243663268635119506787473521069334559097332926315512892378596078),
+  K(0.042708009301143791426391786455686956567683509506955051384124202),
+  K(9.30201047937129009774751852383655118347330605914581573237876189),
+  K(0.046266555960478977022355773805730056371979308853332508624767296),
+  K(9.492786162782088329425594263302559666716293740161986851560714498),
+  K(0.059349553241435188010180556577186283363810490866242719249255523),
+  K(9.645703461396637562089330314617785127380167159456510436948041561),
+  K(0.071463129173472306578731187765458867897998685259228170658231614),
+  K(9.724835367814852500028523844102503162713276600102873008718746204),
+  K(0.078295798264389233154554439430853525616782960308627355319948255),
+  K(9.795689270097070335790549091497342625659544887066994241285487486),
+  K(0.084731793845696649251288990335635190217897742467910047787768853),
+  K(9.898273310177720781679799474296006355885795138410574619755253553),
+  K(0.094562464962361932443146345320726813374127698877729476933748987),
+  K(9.902437208514277194963763348833647016244475054164680538239782698),
+  K(0.094973845199022411962335227213641530777955781980731693774944615),
+  K(10.02483807746929039494831985300363216428848855408457803324518149),
+  K(0.107471575141617529981149772055403662443688679719832171826527273),
+  K(10.10084314877906027062507308053147187219963441725618878091445063),
+  K(0.115599412950087699259605111118636302299377296438415605228122121),
+  K(10.23599008768354757165608794107818978490706836557779794992683522),
+  K(0.13064688639511570661598025655625991540565975297077291275260231),
+  K(10.59594886805022327556253279120408386535369282715509611052545557),
+  K(0.17302146420068631960633594580135861263148896027569243324728362),
+  K(10.6224628421650115725887780629465692445054016915783779399594419),
+  K(0.17618559926095532832572054223967468522246065723762060330176911),
+  K(10.81444326083019368285145365298793600646978876986512149844731726),
+  K(0.19880201374929945929141536566473658937799806715080530095178496),
+  K(10.9290368590676527636011705904441120070664850113079638923739686),
+  K(0.21180759613411321663773921794071845050139575816155017653817082),
+  K(10.94914587743157292873895387809961757762996975746645076193401058),
+  K(0.21403255091693202777999168355873920324083167284979732889737959),
+  K(11.0009638673514292149789839011393342289424320104938298763989246),
+  K(0.21967189479361634176514408240511692839069015270877334558358078),
+  K(11.43269342918094073051109052696704487042674344149952361466579225),
+  K(0.25915858962286671160285364221393486929874482171660484564399408),
+  K(11.4917469720069376356047642128135282536077482661708101449129711),
+  K(0.26320764264689476392710101434580572537236682873551461522496792),
+  K(11.52411729145048598448306698327318494369575234240621391679454311),
+  K(0.26526184206300489725660067238470945167161364725136069109423842),
+  K(11.53153877367559093945342373040802689123206723834894665157723703),
+  K(0.26571587337620703682259461855909052302065290411525648072281538),
+  K(11.65009107471899127567766024904231471659613501218188144394446704),
+  K(0.2720802319598936723282775050778027018274536670349412690908822),
+  K(11.76819982047189390412381046080240587182670483583594856263641785),
+  K(0.27667761463307933605310047189117574717095907755750893864017231),
+  K(11.91269129301412647376537293556358046222990510405485821052288379),
+  K(0.27980571171176117545970352630179090922938396672918392723356558),
+};
+static const R b24[] =
+{
+  K(0.07349580226577594214975439735370679223684749587002609016664423055),
+  K(9.9447797314567565467032693663482300103931618199183276941526834e-52),
+  K(0.2274095008394659754011127372963256755077015821753236688567044287),
+  K(5.8979467616688755158178609479402500909244983475027528794143852e-40),
+  K(0.3626867592217289479575878497918734192464025152022883587807041546),
+  K(4.3256875921956770221462719097330593381171473536099603649741351e-35),
+  K(0.5085275404521157925673159710476544284922169741605004324743200692),
+  K(1.44159014256843913623526871845641668553011906040918351595137321e-31),
+  K(0.5370136410935730665643532374099725300146823684815337865344492683),
+  K(5.3326361727319705491961694907403719411349435097973279500914005e-31),
+  K(0.5729208851717318051855222391371368554557583205399813348886607761),
+  K(2.52096044636504559237751194855174776536755149411390881312962734e-30),
+  K(0.6700615157536754099030482977432216739784835385528729921561462646),
+  K(1.08154984663103181967953158353572935257238866130451317105600706e-28),
+  K(0.7484822269780349745346634954052539928156048519003115497594277607),
+  K(1.54045900400730507849963500240160696182514014439668941197343177e-27),
+  K(0.9848862764815517313808341558262414354241288682217430474968777891),
+  K(1.11830532637691604114038394904754482704318734635746118871266346e-24),
+  K(0.9888683293795167815018461586920274910934847103201823147243718656),
+  K(1.23201943708362225957773402141505688865886444449542364593829775e-24),
+  K(1.164380340514153916544511884003109654944731490679070459981395532),
+  K(6.2168597486160679563539012732348700648995420516386704429622816e-23),
+  K(1.186084324140515395227475841861231840792498107772470893800765267),
+  K(9.6842929021475473959941943097753384492453156718837239397938518e-23),
+  K(1.289917139164400831506628085374681789033891023378672468719306773),
+  K(7.2573463266163195048482349694432513306920629137549395442476478e-22),
+  K(1.550087633356140134913232572866908777863163687419241769181713037),
+  K(5.9682136942682837837367721021513479545829031469726561065459374e-20),
+  K(1.555411865641269524019810670205659558200831915244256837526651548),
+  K(6.4801359073460291649113906621161165261733405834406799674788438e-20),
+  K(1.563761950871626494186532079259359667626197709290403008203372316),
+  K(7.3686805941596885012793970919773048471066591495541824589831804e-20),
+  K(1.563993974196599006656787432878670567930244325927179600811203501),
+  K(7.3949653044167908352937867379846911395774769697795632355531561e-20),
+  K(1.72456902971892097805486607449470685160893841807655861040563601),
+  K(7.7201955967341943515436302185723308109669211641011126738802839e-19),
+  K(1.817228450814943280941083963224552706614124046634597856546666615),
+  K(2.71095894659654250812719657618153987734566576356123967820570525e-18),
+  K(1.931930126601847528021756978460323561702288443692978106661618962),
+  K(1.17784465359659890206559410487401919901264096885171963227344535e-17),
+  K(2.051061115268637099531879248413381166627279895051225298291759447),
+  K(4.9519880820152588756073279705967124345680071391382484475855185e-17),
+  K(2.278631236132158614184105560530385033623275387302534811185280503),
+  K(6.1867295573477071471978528391999128984015027669889246251981355e-16),
+  K(2.342375998545393426421822987973180168237106334048877422443108948),
+  K(1.19959833915965088311580929152347864296637516683894205408964971e-15),
+  K(2.409928805250153740513709210829559869565844431710476679098110262),
+  K(2.37338042967913716293521064196503795733480617825219284762127945e-15),
+  K(2.58791136407939484277263518669506633837268918112784845579080512),
+  K(1.31217514458320484588230610724222671266367967571950389743737805e-14),
+  K(2.648406012651783581005974348834386122125452165127669708665463485),
+  K(2.28454551826453502148164460882996636101958941839494797905482535e-14),
+  K(2.866254735810288936650876000247973827985709771001423037023172734),
+  K(1.52223965371093875785379792477835616219814854575686202860720683e-13),
+  K(2.916402209458744817736111827586208881216762530574820474670580693),
+  K(2.30768235764816021924097544352472489986323082447166758561826977e-13),
+  K(3.102986994927687254325998969638225126014198592831823441289054494),
+  K(1.02106837830386409791574106434198125480444257797778945209945169e-12),
+  K(3.178163116445933040814489883470549504742164173356236419306251644),
+  K(1.81246132499999152650279753175322597851421639175389522645217918e-12),
+  K(3.275633341160403290821960439335136193439042341244989475839096072),
+  K(3.7380361343397800227798286275844095235357602495297446529897256e-12),
+  K(3.284744950993290297290236745267749145041386982691258385729197833),
+  K(3.9952571391661825025711973405758793475759494029322332272176469e-12),
+  K(3.405438551510307434902341947591725906288949662449477736552888717),
+  K(9.4810448112740614915880388043084058983520957173575905533023563e-12),
+  K(3.461717375759941107792373673488138573675063356824922808358661683),
+  K(1.40360661261296783920581602378267996551865923584623544257135984e-11),
+  K(3.669576034617258352025338253204344305564215571926090856727747961),
+  K(5.6598104686840411278059467698308509798171885967381835615682944e-11),
+  K(3.876553258402943459261333682442549650196976505035870867352496777),
+  K(2.09643061741400645524443740856543592743330470446226387771648021e-10),
+  K(3.901958039781177240619119283081898158109163912676421422231171201),
+  K(2.44954566601833863461210321346666863226021338076623519853845668e-10),
+  K(4.024795537302541637244401730270025267505271002272781226325243891),
+  K(5.1233951961362466542006657808115259273445776310180650283087972e-10),
+  K(4.159326499741636095388322060336750257814831190055270860369022322),
+  K(1.119018723346797242940688916081085359194638417904186967866225e-9),
+  K(4.429004691144618704960655971888794520075306908616340621509229968),
+  K(4.951182877327073110213279734300163284944255369136009419164969e-9),
+  K(4.697150121430550126050140640860046965287707006433869430538878267),
+  K(1.97412324132430396132395823260182234782911227647017618950529443e-8),
+  K(4.761705460806015656555802521175341378736654100157568102913191928),
+  K(2.7179150768633328518240170394650076793689671530206241806169484e-8),
+  K(4.859707663218050031991741996550266685018755935091823173246536322),
+  K(4.3750776656681369919194769377315198018188732785035156011654819e-8),
+  K(4.902098482830237126348640894924522670410756224786974314633514031),
+  K(5.3571427576105361897945930143022287097714547798720732720607953e-8),
+  K(4.923092204170545948811011407155919703354646670291165342572298503),
+  K(5.9178345170968919026336384574579735298423465457323384438597046e-8),
+  K(5.037878222232966691544449191192888020218293470758882251625328004),
+  K(1.01107257764551483712536710961351874899779348512169360142217156e-7),
+  K(5.15916392479717296562898739416631345269308881046338013433623982),
+  K(1.75336965819832737758027436945555069915028588504725889226508263e-7),
+  K(5.693213656385194254877059761116255418520386150977566100213800494),
+  K(1.66160775034107670835109078269051939643758196161307379983378437e-6),
+  K(5.728945635376453848018946954789107910066809018500273621345488259),
+  K(1.9129925127054387239240323735970991587518937348381145999307101e-6),
+  K(5.735346636106721836365232629983789376175603050510581446915760881),
+  K(1.96164948418192066193235687193750254000965116232849305024889299e-6),
+  K(5.849488500418714202638038058188430619607993220963215400105170347),
+  K(3.0513442407113590212542108662317312641763568097950764540989557e-6),
+  K(5.951054222105575607759677053807874326660555887182864581306745771),
+  K(4.4780144545268346967504649169778562895612529737195159006624151e-6),
+  K(6.253881781695712618327076664949791198052395627792538949141998819),
+  K(0.000013352804100945998661273921393045264815696604374851687629315171),
+  K(6.404373434537874715348824273731403425582523552264932742499095699),
+  K(0.000022359966807649925008517359610220384144853743229047350625635835),
+  K(6.422056855988009401284303982927041294369864975499498701155517448),
+  K(0.000023728925566545461503646322106305364589879070843747569362739906),
+  K(6.428473659675513009244960653039006986667546255112734959582438839),
+  K(0.000024244701962779744278111838662213006530268290669467397325325868),
+  K(6.449721743598688142839384816601431332130896330631231837334344287),
+  K(0.00002602811365020575783255651941544069101584005643869928730586413),
+  K(6.469874460265268443390701310656230323369004391924180351709726732),
+  K(0.000027831781894421489420081019761687602965902868520493168393241556),
+  K(6.487386697005694991695726372979115350445759073768606785150725217),
+  K(0.000029492918977042889493046134651572543063160226811546463982275648),
+  K(6.73903131245971726945051016043016578674676243509237062710394563),
+  K(0.00006614647912243608780539393074187354928411888307621474582701594),
+  K(6.76874820108929125969319370590393906359335414506299714657240276),
+  K(0.00007254366660313995558135692746676610244580097828140039986303681),
+  K(6.819805642916524089462233317194632361811743063180882822163363288),
+  K(0.000084886765349427524553970037747305946189887230228836822639574211),
+  K(6.94657836955651312443439127020791486622193663354968080088846219),
+  K(0.000124393758751579093944454375184190419543096890947618311876062458),
+  K(6.955082727231547768549408744991464962339586223801621145929476005),
+  K(0.000127572196544918834186586777230467178780207916941547065147130946),
+  K(7.157146856036625799955827589266394649468357533829320239154869418),
+  K(0.00022894427542713155191339020879038313890633540725041902545743206),
+  K(7.190547418444319478613187125554284862610494539063733176626230059),
+  K(0.00025150563213509974172872848252645111048458486508795704146172266),
+  K(7.21389680472342033787710795519503475741405769495245080047274849),
+  K(0.00026846585928785332489233765285708567409369496938505479578438728),
+  K(7.284537089984382598046754648732757035428550436158465818064136059),
+  K(0.00032633945228626683830082364439316559687041077449878020041569889),
+  K(7.334362646759381941909926680947553127901884162741965667616889975),
+  K(0.00037377070389809804682779231864448557091393842000416569303659239),
+  K(7.465559420264402812028915397567829239831219484401979967352186817),
+  K(0.00053017057563315549497323181074046036705390344875731622868825072),
+  K(7.526364847045554695203376883117397043096133002177296322768500607),
+  K(0.00062106253428047249634755813824070243651076609606119510350675211),
+  K(7.610916989894110967809379522313730328455208258484276763898975831),
+  K(0.00077088427238152792213176351061345488009701065126077995887740811),
+  K(7.678353496046464609274833637383819189382358841873884674571841036),
+  K(0.00091293072453343179088988094845293619405589242867667744407393578),
+  K(8.195925434598458883106585183927514776888324974077340058496702533),
+  K(0.0030464287331113925536204491097377481560685365874312743782413578),
+  K(8.59075745153193006800023228971183538721253587915481778012728551),
+  K(0.0068685419941190240078794943879888780649372291816931009248460734),
+  K(8.687023873042440891816935300676519933655969132033280798523210812),
+  K(0.0082625384821627573559770456640872386912365438668997901741183956),
+  K(8.946188263980223625828203882633909993271006853193918658036160785),
+  K(0.0132454331939018970326261646688329419354138485092423047392402218),
+  K(9.069811361008471283472018570083564167268676131957652130925877193),
+  K(0.016376328276237562579597655551454911867000047276943960490349231),
+  K(9.322027592091815708719962674244309308803169934270721741722101632),
+  K(0.024614046417858430462696821488084203865712355094969299441608605),
+  K(9.337159803737355608928090629755310841016799450186193718317636285),
+  K(0.025196160826812744084740862870272042016039062579565650325048039),
+  K(9.362420968225307219276780935554480769121267288956391526358771089),
+  K(0.026191720211386510521881796511640973923296373051656386524275405),
+  K(9.577280745526732342509622562319812075857291656326712919224314732),
+  K(0.035929294198346047866809194624678337490351675360666306199068533),
+  K(9.598990867530131151757154707006651273120173060508258643682394266),
+  K(0.037045945789890524006300267704771667605466647780407827007765747),
+  K(9.685687268275614173848483202731242586775443927464823664731087762),
+  K(0.041760701940194137427106088669554959410003602916515490360235118),
+  K(9.866601346398295522932862839830633534760846895144269223804008482),
+  K(0.052960006395884761130660046793976201426077487129292120455734292),
+  K(9.874737011612574926200848537603861949456026502574373310534158922),
+  K(0.053507898695766130372748017616032132479744275642135322199944516),
+  K(10.00094622730083811895928012131749562207503861858202173651549942),
+  K(0.062502324458346798039744355869766834236478544400068311703170834),
+  K(10.03642340678139839396815517826126523650662067813938848665115337),
+  K(0.065198264021662614747592269478177053289415168656434029619072176),
+  K(10.34144228186817748242061419238545733154697990363005415795342717),
+  K(0.091336153763075119262560858937048859154219533197739060766001525),
+  K(10.55556250558538009286195143022519053897437287186541842900135075),
+  K(0.112582696742709926442954125242269990340727349618068527625345436),
+  K(10.65719842097811416442421868628725612466888476943337212414496449),
+  K(0.123358955257884529357639521593765528510110929960182239370098236),
+  K(10.86681679641469917125996135052468179803359265050806836609339054),
+  K(0.1466083805775715267765926439394927435001561341739744980257053),
+  K(10.91724585028337303902757844508329905705063680242696898636956191),
+  K(0.15234252325933163533243015440999906546447604650006325601544137),
+  K(11.12266647396321787515207320015998949175214419758196135007919232),
+  K(0.1758747465041952151554622540106312192946246352701195794517262),
+  K(11.12512828283076744560975637449730012242951238810165254570363591),
+  K(0.17615613658779871968577050604970705207731695892780495654656677),
+  K(11.14943833330452641176869461007014547611641065825642387962790269),
+  K(0.17893125074048389811277371694276075858627427539221249578930036),
+  K(11.22964629380562037349180515037265740019829108300714501864812374),
+  K(0.1880241223255465572886834951151836048522070253766148285315838),
+  K(11.2299889023499694805017266492578738804701131850604014119123509),
+  K(0.18806269818479279044341607649911267451221132318190275082972856),
+  K(11.31692839252323373679361684388741725649526607726295015245779915),
+  K(0.19775387950355816948161496661692354421375591317108138549665036),
+  K(11.50991623684351122363832648050598722697045533761056398513375705),
+  K(0.21826663799312855317652953581412780051173980747197140667594498),
+};
+static const R b25[] =
+{
+  K(0.08553030160997890504891982830617760493759754146541604395612134041),
+  K(1.29525240945837890580403170221215833888472711227541948096694198e-52),
+  K(0.3177996334865021204815590223579790827690693944507696535545163205),
+  K(2.30775192192455332488562900003367865915723244156215324515774113e-38),
+  K(0.3443330239487544020158250568293529766237750875877199573116604638),
+  K(1.71325195389719584120549572469191519821763589469001358211668177e-37),
+  K(0.3888552228868858877031008113429607015995645193626838989458463894),
+  K(3.58139921815557376902804590676258216002183442118684998300823415e-36),
+  K(0.4561328396258611814486953630408968656534404006777891059724955662),
+  K(1.93480784327379057421113637195692876889055216548754500901907965e-34),
+  K(0.6225244896985212994626602949968490204611077983935453889420716587),
+  K(4.6053786696548946877850458622501639835339495588111272161711451e-31),
+  K(1.137926083483340650162367048737174132196774802450451573780439938),
+  K(1.63006766085342586467510572380286925782948384961058718124648631e-24),
+  K(1.245844817860114662437005163010893710796676839246179486343829132),
+  K(1.5701931303697256078234233631692804501281103434078767597462689e-23),
+  K(1.574628535034305952393731087384401469477457036806426803402309278),
+  K(5.4803368706296074113794060322751156099481172338249230953106181e-21),
+  K(1.670791603224390539162513552063348882695140609749473285247926122),
+  K(2.41218948327038489018480585667720675194608518148966943804163232e-20),
+  K(1.697867215943362071038396196561530257287790839185207884199376964),
+  K(3.6053496098335465738015022630010545188815246816654937538009119e-20),
+  K(1.722501165011157124504352290846111405062094030614088742915281737),
+  K(5.1682370470663441908633942954861916148298898472944945014562581e-20),
+  K(1.824564474112214528843344761359261657573538757714703294008853996),
+  K(2.17938851081045585304991878662047611018640442145084413018839432e-19),
+  K(1.921347614264102190460318421119127977520415289016401462754108619),
+  K(7.9341944322019505832507852826598622865781151397977371783224798e-19),
+  K(1.924118433155665048228337344400277650075093543895760913715610641),
+  K(8.2252518118695144074004074135904118736557621792560370766628972e-19),
+  K(2.185085550985334160059803834841640626279313652163576023698170178),
+  K(1.97725591308201146294308047811602785870735127582455882963616757e-17),
+  K(2.221890152940757923944316772012492752261384347546571560443667007),
+  K(3.00203182675345635059555639962550467897752975354933139039119853e-17),
+  K(2.484187263677524383090817034176192383761312696184459997958641419),
+  K(4.8857779659795898186648064160420122582644740033916767775255064e-16),
+  K(2.785148829438629856609144776015123658296120117951823639692200695),
+  K(8.5191685089098442264403033112667869574337370007953144182602412e-15),
+  K(2.853452359082790850948980623004142509055507431777317404896561884),
+  K(1.56094121596449326814147737054979917522364668164031594320770315e-14),
+  K(2.898215944311501192285281054929454680191575977414493479158557324),
+  K(2.30322091960867636632460383665781508455863112288808943398798793e-14),
+  K(2.908941316154546953615294606270082756673533216275303652184898995),
+  K(2.52596180709263886699718621979001688780255639236439808888896601e-14),
+  K(2.965583282022577060154108094335076870993509171309895067522320641),
+  K(4.0899748971038553100075741705549366537162398105431809121500403e-14),
+  K(3.2736171861451149680489220000491058547676255556263750227367329),
+  K(4.8284234038703909430767777741863665395159532097389334598683605e-13),
+  K(3.307907150772405079921037553475293124314721657509289015147085747),
+  K(6.2631162908213257734466158980199025553215541362476146656130126e-13),
+  K(3.340155665109281407996028903204512857595137068208134861119014603),
+  K(7.9794227750036196190144018958940103085016872236515357949346291e-13),
+  K(3.443840146101039827801283178691392798042421417004448533186277016),
+  K(1.7111699145301953795482797596851868031039858094153219639814185e-12),
+  K(3.453294616068205123144700215838817467576894848334042440102085608),
+  K(1.83230823840343438123013216093513397316198876001735709314621975e-12),
+  K(3.540222845970572391182538370512750396046023147996152481959614633),
+  K(3.406432584259888678570890949890548758463633941549047227707145e-12),
+  K(3.554005459226740763227094020637946394570426035193947892793422572),
+  K(3.7529872534428043179655454136618379182033748305225882711719059e-12),
+  K(3.74300869009677361429389806481287177828894999013051737933262882),
+  K(1.36485406390546231887853787062293603392013187832002895177429977e-11),
+  K(3.776900976805904210090429175968056184782556242524920734548545979),
+  K(1.70822690337691085260747552034300643683630385456048883735290062e-11),
+  K(3.788229468883504198397493849777583524197242891808333780286668153),
+  K(1.84043269813575035812249940183198741099301532248159496916678937e-11),
+  K(4.133539943123787394719252399678033829623564912603964356958913492),
+  K(1.60755616050159524238460201819471084646425314099562284469805602e-10),
+  K(4.231225426801237697958548145571136064596845789474330985457034243),
+  K(2.8672896079644755680080363951736412987338787890732609443531703e-10),
+  K(4.329749168491688924620289372395725057421368271853706886014289328),
+  K(5.0669743434878870517804745268555511907596838495579029516792368e-10),
+  K(4.374732409135831489672233125497253988163919976917290185187288803),
+  K(6.5410828223862763910918747995676508283378587346213228041576611e-10),
+  K(4.391858684245273657492124004848945327259856449560791498132266947),
+  K(7.2036071215949675034067012128460752855535416740260809565625558e-10),
+  K(4.623758760105604462304735228054877413148329618025201525175931498),
+  K(2.5588211801743451450062638445400756552519690814162204624156725e-9),
+  K(4.705300828014744652829996487250064408172960420893272524118711587),
+  K(3.9304271075799112729958791931321072163298668986090978720837763e-9),
+  K(4.755192366244650594863450315864535235695121421266634341751264485),
+  K(5.0901242693285381264264204457716439299347328870281972818941783e-9),
+  K(4.772797286537067312998825941351445890106731330077554176503244817),
+  K(5.5723385494893051060179939732561696821946556695757994212539359e-9),
+  K(4.86062644467513981610011490707599916374933029519582256392220887),
+  K(8.7045476709879259916505858591725828017339824865178810539825429e-9),
+  K(5.037997862734078758629973527932515994876090725845862012988014735),
+  K(2.08507347776554117395883132368887129419342169656522020422473411e-8),
+  K(5.198351466990546363059692893469268114962464211243732813536473184),
+  K(4.4574864746559230495884344735212773121152172377567370378508638e-8),
+  K(5.34224876108285795876389169797981642186336237332030923530186824),
+  K(8.6135557265126861402689651555409193574091304255870664660175477e-8),
+  K(5.454476517817193552566143198107423321564571230879206253697851839),
+  K(1.41904584276240495163702925469884809830566810693144011961343556e-7),
+  K(5.537779894032613218348009361815157189448707088440696529517628835),
+  K(2.0392220380091804928639149883878607450517501888959473516780494e-7),
+  K(5.840012544105402778833264047079272656388377982878765729128314247),
+  K(7.1951464696766918336174202687376810580804270098843110843816474e-7),
+  K(5.897003858203440220108405669503286637357838155000453718382031286),
+  K(9.0422846938130202898193394256387954250927195935283242879890745e-7),
+  K(6.270395611147176588747432838819859699627954981762410449424533951),
+  K(3.773294220310844138721030690028623663864368445664441383352815e-6),
+  K(6.301906678173223412727816663982584394114922047909217477220157478),
+  K(4.2344790882766049067314465133190328615206473270790776103030488e-6),
+  K(6.303983418674984303176569025178050579249845095633558299948681593),
+  K(4.2666633048712896257563271906623539284101923471316537825377052e-6),
+  K(6.307422077527786141458103636574128936601894113555787976284800294),
+  K(4.3204598914742053466467685244769356970178444409000362024922445e-6),
+  K(6.330380848486293415433384985137670067504479321576331189375088987),
+  K(4.6963134056169899102323371655520582984505929875300823041225246e-6),
+  K(6.337192549029099393928237359613042792582364815817348936765697553),
+  K(4.8136049288105160690675839172551161097789615738193044391281178e-6),
+  K(6.342829727840532148439940764040413471659355190586565141953362798),
+  K(4.9127478736735316183611942458204648759243408462127940392059779e-6),
+  K(6.345985972542699844811248593429979364313117562405901178502596289),
+  K(4.9690923203375396138224413922677053752564491198143269470303797e-6),
+  K(6.521506347506494228347864961781782588547242416396520123505561836),
+  K(9.2549801119437249776298746793629944825408699083644065137421908e-6),
+  K(6.758401830700631696929837273007136086126217667634451415609274297),
+  K(0.000020644499879681237573336293432974282261025566283635812187869577),
+  K(6.763477559198375647816604794103705026651806006211507334686386311),
+  K(0.000020992908212318930114941981027300722475118286522310159812040074),
+  K(6.851247888033835982934093487669276212808375979002623692065711765),
+  K(0.000027955953351533028990156914254959537761085254914236156679406844),
+  K(6.906772301257499142720326935599543940008669083193814253095051999),
+  K(0.00003341424643176547139184134335436128037484988811677630565604826),
+  K(6.968700511546421349194986559111045458759313446825930186765349034),
+  K(0.000040663259557869990731829822589769825670874481761626169793399418),
+  K(6.989070584255401373311262665980555481891921666038339012061172792),
+  K(0.000043350502744749224494150084854989722887279338334937226936737565),
+  K(7.021165617729787707049330738124187859150078956623569101233267352),
+  K(0.000047921179747059286503914067290744349833636034274029782713205177),
+  K(7.501355464504383544431265269151519298606945775386914541275527586),
+  K(0.00019751289773221533301323331301606769989312449619519220773973177),
+  K(7.78754413272279743820966544255344996167575840349823480253471814),
+  K(0.00042772018979258599470418092606641658802615375673131274702255842),
+  K(7.912070238177157932594711789867419776655010482800776971144122442),
+  K(0.000589180140400419503923897783308948893695996108470191417010487),
+  K(8.138186667659206981911845186126925314161888205686322872269130994),
+  K(0.00102891475012687402613883982658875475119337954981241810023534833),
+  K(8.169021999891122685025848079148623081567777753605497031354495114),
+  K(0.00110757596429717035891656482381394590941524140137713739980402516),
+  K(8.232401546960928047356661349773972343814648525393891925716366994),
+  K(0.00128638951736723047625588621801203922179382158678146184237909081),
+  K(8.371959046996579121669896508324844722077838278743996136374930088),
+  K(0.0017738362816980120753480419014889037433731235049492374571489484),
+  K(8.607372503765149821403619501205920836661402160872422584135446964),
+  K(0.0029738633489137329161747949459734392990218856609357894003516514),
+  K(8.696119887823458984460305861460895298820853067963309033836532265),
+  K(0.0035842856061467359495692969590895741246126279576941628829457466),
+  K(8.833049294105611168333121336835394152878420438002806350364041872),
+  K(0.0047401081249989067135766905388920774832605962254844655205156029),
+  K(9.222113024855221532278071063062548692124710552530247843658526447),
+  K(0.0099214028995906118964569915098296956112561573516653425538687657),
+  K(9.404401315293630141224621779374500479941259723397273056408907922),
+  K(0.013641630320810666522190390487240453452024218427269875962366766),
+  K(9.405716074663240890337269759852063707158593420200190426918293963),
+  K(0.013672135784262587284144451460425726097731182567303446335951299),
+  K(9.534182341722883740583695248089311441523965225838594461056189694),
+  K(0.016933673255243707983833502276824081492489141122926637502145421),
+  K(9.922487596638519948603491612409198990021169599134319767383740467),
+  K(0.030715297353333773424301259896264001249854041580443035791731731),
+  K(9.961316269667633201004088504936510067672501816387955406541176174),
+  K(0.032463898512477887270856608436557563963732368796990816859397722),
+  K(10.22884463835364437147296305063551357466742188120088129424363915),
+  K(0.046586342121266128576707830600024201731978728431959089455038128),
+  K(10.52646573906323553565902877124178320983937120090061932828791984),
+  K(0.06681762655234952605314961366017605507845476078729635414671932),
+  K(10.60461335767654260022714530873940064242702536196624415087427614),
+  K(0.072935314464730708640980470388872438128171814753356881985906883),
+  K(10.81926644226887057379835225533459162600674413069386006269101456),
+  K(0.09139417619637672442089769350318507106647961752143580634513657),
+  K(11.10067074174281875145596482050790989021300878774948823899622446),
+  K(0.11885277546289165818813298280955184764842741329206944437019426),
+  K(11.12209533138600129509566490313569550195708078048609694472949498),
+  K(0.12106910472997670517674560290107161517944930796248539832184207),
+  K(11.23793949582516416496440578946087600513183869820805724272836263),
+  K(0.13329252468364053203776187780787180163587317008752864220348575),
+  K(11.44524174015865629149634628947587294209226417862649760105913436),
+  K(0.15587913126651846011390902358320396919642606058579813943062062),
+  K(11.89829548988894055464257077521395200387957372994117744530143944),
+  K(0.20482721004528777865438036755807678852811564542105367369082397),
+  K(12.4686383859092801668416870365670269409276257142485913858371174),
+  K(0.25283189242291494716944515814197327844223139679169732571065732),
+  K(12.54328741562241920463448239077886232940512952288051908244070929),
+  K(0.25707556159790987289036452874224744244273268285824512206452261),
+  K(12.59278857018941549263889195008838840053589872693022386909281969),
+  K(0.2595680761852044475294513852453923173870513468070511777435028),
+  K(12.63741341825584216495230286443804122870092067441368486359087707),
+  K(0.26158746551628225639162426845801168842924336228676749130145179),
+  K(12.72677964519049847729822461096122831265944903804307206153908762),
+  K(0.26496161754038704844326176102335187154028055080148986085290795),
+  K(12.74728620898340633867676124840270751952696676970661873191121445),
+  K(0.2656068971499960963434653298106982135054996753080104717978818),
+  K(12.76625864569589928605351468744656457218354732761850379903489998),
+  K(0.26616031702376091085791847426956978963998860128971537411909249),
+  K(12.83549895902016321510743209568070951077107224309587260390375444),
+  K(0.26782055637252219711418916975375424181154713416555639799287119),
+  K(12.87850975772973822058691981420767216617809626404028508713497356),
+  K(0.26856446004215031038508581075345700664220340458643505711556123),
+};
+static const R b26[] =
+{
+  K(0.2290893825859197135808195577060716098217656197590551832909068863),
+  K(5.6821144785358829990749548989121157666200506142600923087979555e-44),
+  K(0.5636890289809691837595059732310218398212495181397598313244418455),
+  K(8.3446881710240479461703255817154083487078783986588585203590301e-34),
+  K(0.6226132482221750034538280019780946297514424395498142117190418128),
+  K(1.106772269666827465860065235162116011570388127678733166522787e-32),
+  K(0.637798012781228350137752628042343516398821962523138344902720951),
+  K(2.0708239486156568764030094844901556018415536014053768865592804e-32),
+  K(0.7979959271400136001210533017137993446294876055688722333239866208),
+  K(7.0209926343168309297645670643125097285881578285710595468528393e-30),
+  K(0.8918792126034195987052236363601794517200496879340122816783666966),
+  K(1.26572121368484155819498354692146612296845344282681522278684155e-28),
+  K(0.9256308467530635076362329161050302700181751158298780929945897287),
+  K(3.32479038345795365859621325421611595286697850925128400189535483e-28),
+  K(1.101482003002047207767741595852858352629068907512293729107071713),
+  K(3.06050800787363742052978117925204339090157089863793155570793355e-26),
+  K(1.136087333475479388544684201592390223832761884762374549637920067),
+  K(6.8404651747843530560978887289165564420617951704286888959568468e-26),
+  K(1.195606534941608739233675932496946751893234189962408211961166232),
+  K(2.58033597173073803997197966653527853246215257255005474003661786e-25),
+  K(1.293272744581301721072119509127918522921046314288996993658444799),
+  K(1.98757819499086828120434232055233112159259086139707875447938805e-24),
+  K(1.338265966855683019570114712355552987897238962125256059179983279),
+  K(4.83597723997278893899111158350763334444824837519472176847488e-24),
+  K(1.354924524190713332943666719119640620951204537474167716226976132),
+  K(6.6707346669429076555327480544603566289389742869572174537487898e-24),
+  K(1.409685205021093763841435133201296897135008974703944689927448931),
+  K(1.86877346354300142990947188055007765753162461995312675026383832e-23),
+  K(1.541655797443561778151569799351050965759334305738572461725475412),
+  K(1.91449353659815114697438465097489138257847377200504287356898248e-22),
+  K(1.714251438751949693802465661843262490602444871513051515132080682),
+  K(3.02216770379758330562289949096400336556231529108786496470154378e-21),
+  K(1.846972568677012398210153092208015189698880260051480900957852315),
+  K(2.1006443641046529844184081206310149459954571526833065582632124e-20),
+  K(1.897586677524422379388519875247007979830711442291136086903392993),
+  K(4.2425123976457563894566743069431268131922370708596658299067895e-20),
+  K(2.507484085259741025062908804220726570935795547622534906556999012),
+  K(5.9504899584039437812267499830764740293913710508785430457906537e-17),
+  K(2.519814698475639533210278907100216690931650938267681105959662029),
+  K(6.7599235635048625073097153183767427146815312584893305600090446e-17),
+  K(2.536569606742494751074403869657640943612132898613743270839850921),
+  K(8.0310386715187403644353415130650863348263972038671326434858924e-17),
+  K(2.715696629150730855333904764190375058414497407587039141236166581),
+  K(4.7338778278220414996673306166219694796397433266534356422863337e-16),
+  K(2.722715222676169568225538737261174203695026001258007364661932014),
+  K(5.062431065894447077075172808249347966250286593645533092799566e-16),
+  K(2.782236035657796950342072205482000079158919961798202071251355874),
+  K(8.8820776519708177744528350511182047503309311397397576970141411e-16),
+  K(2.78295915692593713146033000514623386886811505133403941876213855),
+  K(8.9422857368314439188339963981865933587776918197098733016311905e-16),
+  K(3.186714992777995448356474450294448150576661581645881067674843322),
+  K(3.0244639886040545991673521734334244658392909436115626940260767e-14),
+  K(3.272273116989669889474106411722170609198659505811074560239044512),
+  K(6.0196998541510500418542933859647913772849413133202926607683751e-14),
+  K(3.303067192524865888534620920490325830200420122509764018061983706),
+  K(7.6778342157345021733382466197127738735049018088353585636742607e-14),
+  K(3.333975264613646728207811192715789051721705253429847881491125038),
+  K(9.7790833883718832245825306872361235137295196436229482657565633e-14),
+  K(3.6485255569800167007198366977632232057549535090085974912961847),
+  K(1.01529289167741654233875933088455715619408317131034378888163594e-12),
+  K(3.734102707128976688783701181452172195239529494699460448978907506),
+  K(1.85210468646383215634159911289120781406348269628715790449694846e-12),
+  K(4.172340576330813434365685935829480890495818855914758937629623352),
+  K(3.2712452821233568066292928470047327444332904926750453192979966e-11),
+  K(4.192928201165480093448374330662223770741556484590958890029930618),
+  K(3.7144728963644628376906256348382574687062464189592956145374522e-11),
+  K(4.422974810665575703901965323284138431434573285378075694565069831),
+  K(1.47147795415174048316304511257751414671372156185625548122250444e-10),
+  K(4.474992457054916236086007742693896951325536785583534531516700237),
+  K(1.98771623140358476947184344790955130985408904390019970962681472e-10),
+  K(4.671802725328781774558796001871678821150982488738545973270554467),
+  K(5.9993416143489042450002210263580962973473692232003382438313802e-10),
+  K(5.046591005524268340825754634122989122206732018119816903292227897),
+  K(4.2983913360865196315145920801879032908088861141012923620049223e-9),
+  K(5.149605555688000074228949755433754420187429889840667230352595066),
+  K(7.177055419352057600757321487135730426177502167196509717807012e-9),
+  K(5.254762265508881677307347934589615723851717148242234673316978287),
+  K(1.19681784048091387236824049827582345287687428623564000539875209e-8),
+  K(5.282896356867827461413868433824028963403480681537248783299620185),
+  K(1.36954758652023069204883133592618529989905589381177212975782166e-8),
+  K(5.300690110911525584389684099590770125329040592197669439472908116),
+  K(1.49080539673287267587144309490663846956394352881878574484581778e-8),
+  K(5.371729195217721611913704553480967171773414728182871999192073007),
+  K(2.0849368992272411054346561481813803223818064375979036467843903e-8),
+  K(5.510572094363265223256314511851296629713020091881184265235623536),
+  K(3.9571111722832946038376244831830596837567325469773463790124207e-8),
+  K(5.779790750521983018507671816701299219317127306392487035496862272),
+  K(1.29958102337853905691474110832263349637042717959663276984680439e-7),
+  K(6.156960768280499243240871338179514813123319384632621456829407227),
+  K(6.1552265865388055803069358806212684163052001470675023109828309e-7),
+  K(6.389683137862588940888474415799463463302233779454853161252842516),
+  K(1.51334230738748296177374633158609770733999369659236392966027375e-6),
+  K(6.412732276155610769894560411797371438014557626875802850604435617),
+  K(1.65044033652598113109799809950921597641089368638162211918012065e-6),
+  K(6.535323368367422162903058023765986075633571144958214812076003557),
+  K(2.5993990679082605235594281524578016490093170351357668945157241e-6),
+  K(6.576241396780931092251044871674772710828326259373780895638487457),
+  K(3.017119500070707791929969029998153030816480034267676408446683e-6),
+  K(6.642858353688399352380428514004171343953485287677839992185476181),
+  K(3.835069387155835339167848066471702023983726346018824728294646e-6),
+  K(6.713416317804704377389554054030653097911318694309226060518071145),
+  K(4.926436620806756035671046302518442231065281793877102963119586e-6),
+  K(6.8260457482737942435417682795899237658507660058726555382812476),
+  K(7.291545810779900987221249279591105134482869861667353136310391e-6),
+  K(6.878174584201252535439126769886907585679755637289427580781407174),
+  K(8.7150839538358674126007919729785597732690866687442794745664299e-6),
+  K(7.007657487047567538598190756642870610996571425433557403706266643),
+  K(0.0000134583275446984639464198199304454596024533895799518055636252887),
+  K(7.028153524114122651226533995206301380616831705086736636855764116),
+  K(0.0000144009358443523706555619829702958170300778749645801824267937921),
+  K(7.197340736574148137441374500276616187723327061098269842442586952),
+  K(0.000024901595743991679899605232585604165025472525048630366140124784),
+  K(7.342775529138532088822412724062706232465712500450780951741359557),
+  K(0.000039254926481336801789542997140563815147160127596548484155163417),
+  K(7.469098866805160580552607164541784720678361402443205204187113667),
+  K(0.000057626535343601762758012586126719270537296852129723902905584422),
+  K(7.716458392608816067892498008591374765750332311183449594548738299),
+  K(0.000118603495630815772014245304511335243501388686729783324303819836),
+  K(7.810020013472836995265995181477091243136166890801027455498693511),
+  K(0.00015427102151422688278149495944566991946130074062913365937916849),
+  K(7.834265968528249527722470133452734395290917809615898019473906867),
+  K(0.00016500220532475683128870006187891899560890183041873318399973512),
+  K(8.139896379584872636869266059030994902348223590598260266897016885),
+  K(0.00037350409112178971530052767868309042736254237763808319926119289),
+  K(8.165220899890457405804906319693593654829956450121161122046398575),
+  K(0.00039866048070926323129860883005170691299541498601823832172228734),
+  K(8.175801043641172377851514190877886504212958731610348911133457803),
+  K(0.0004096198345818889269908833576688624975021265434461854684060366),
+  K(8.284255612233656215397614004199880021498173289810582522816050429),
+  K(0.0005388484810500347725664133016974145053218080686290266162156164),
+  K(8.323353034787614655948514869705904281787996152332597741533540768),
+  K(0.00059383534738779142988534396273319646619598868930073057457284011),
+  K(8.756623131888017526713676241857892573091728176360448116546631509),
+  K(0.0016443501839189525252432818703472512085242393268582603495532772),
+  K(8.8940170804199528193513796886239426529520158437406624679711714),
+  K(0.0022222143720708933678707058868800140857046522860381403035457585),
+  K(8.907927088994694713021187990956126316596312663383182589824927996),
+  K(0.0022897001860594639070578876295289916749965915679599959516956123),
+  K(8.996272168789903138163917784488234286740177491166724454783961658),
+  K(0.0027620910776067770856073745864047663534500556702991017057130343),
+  K(9.004609953615776861821421947477510116860237763696081039539032002),
+  K(0.00281081160795204678018846615596632095205350602447361848710957),
+  K(9.050503951510114797796120286210132690529758473033472941798153513),
+  K(0.0030927219764611650366354039664766048241530845268188219408917773),
+  K(9.059049391670842593891053518298125271569206119690697617409922146),
+  K(0.0031478634411161481845697921267710806025002320280219636024181885),
+  K(9.15064256854883742241300200860139373662750639746060790454814217),
+  K(0.0037950743710060769696413139183200458994047287571023650922077564),
+  K(9.58856494535693274349842474034031416368992564107713917920687355),
+  K(0.0087326730196405219404150747564571618236445994827114181517221135),
+  K(9.684460527034473878632130558095460492709922263734528157781944979),
+  K(0.010344242399194568983263468119866271882605965505821056265367252),
+  K(9.893982172650604039642318372033812983988079213420259588012095936),
+  K(0.014737393451079045578690964551015545821891154562933188994460887),
+  K(10.43315425290999962121800937564108152389251605373790285477240797),
+  K(0.033182008963396159599650022736411304884202164061532599553894277),
+  K(10.50235500817729802157132825957034099854070109666964263801673769),
+  K(0.036453020974283088352240966638634806590956964688694114934096112),
+  K(10.60512695905045312695546261076625228410469794481320047956603624),
+  K(0.041739767423705453709070612298790629644745880779072022383676211),
+  K(10.7427687405537937359298467017878669399979514464784281316927043),
+  K(0.049651380022201045836076716292599045058387687325273474969831063),
+  K(10.82828412947602000315113707810586172580050257961829894130491665),
+  K(0.055058129382611673516417978638827632755756745459632340574206833),
+  K(10.97489561885871885502449468886370573777423719829667505169558798),
+  K(0.065213972839471589213565996312567696090795894680390716236936404),
+  K(11.19252791709306656420402212631148754395819920145030373400324947),
+  K(0.082322228154232569549580809815039117004551617893227009568221059),
+  K(11.21010858192479698211814872035732973565942165046864558835816685),
+  K(0.083806526156629570290185931074469048923293597215230128144886408),
+  K(11.63199291131015624900181594474700527849044289568017377385033684),
+  K(0.12336727265437410508929137655969688263579456147943389973118405),
+  K(11.65306522448903167825974197048423178447187489629602510118767462),
+  K(0.12550794791692413461400130686672425209206134176880587657064736),
+  K(12.02644943614053742409932497274350649417710573543727532245989418),
+  K(0.16471937036851887111104122941238038002037149241948572703883706),
+  K(12.05526951128413189460605204916677981801869603734425078107907867),
+  K(0.16777881686963768630255814750448903317546353627150728813008982),
+  K(12.11223011163623753325825389603456479396958251273194962928602898),
+  K(0.17380535365030987499515387535640799635777176043193210306280461),
+  K(12.36763495599134101675041402736470873829844415691203928308246657),
+  K(0.20004386709984483941151047460327846084150167143436385294469145),
+  K(12.46204491350106866803231700378630644813340085821618903873448274),
+  K(0.20918811069517024208906264334891644332384386145794329248231713),
+  K(12.4699069458895642797107629335951199527185172636990743014800721),
+  K(0.20993110695225136669857656262008157459206762792093549544291328),
+  K(12.61482661171428606257768711354056905583081291310069603975516546),
+  K(0.22302337417106005853750915065045471678101222546234797600638665),
+  K(12.64946095099566034741313842819969648119346618915814979792706867),
+  K(0.22596321867493137902431245153298120267080081171161397865082109),
+  K(12.78597449108490326564814040815578857431281124076529941860447894),
+  K(0.23672035079584166414068489734968191315736528169966831281388288),
+  K(12.88540735172442183431896940034339374489134159267281944012950703),
+  K(0.24362488039893217607143682714494073882228680654493605952090335),
+  K(12.98304141981645158118847416870423712219962592992197962481870498),
+  K(0.24955096605637477944948679646714543992105941781855898244705577),
+  K(13.27009028525120421847861713650410558595978290065262860096025551),
+  K(0.26145888516206068927314841525609457294366783452640434732463013),
+  K(13.49304530194604162587390886788730158804121191630746376920465234),
+  K(0.26447706249323006393954674624653902134946597202066653081597604),
+};
+static const R b27[] =
+{
+  K(0.4879754450119812325577635234960756748716443009356335335327277305),
+  K(3.54619298672917945887738222591717921733667722371196758882580682e-37),
+  K(0.7956024605423168633631417444339971771528565741133176972722403721),
+  K(1.91342914115601851284070485032320650188824369584181792002704318e-31),
+  K(0.8113633297962628729008428800804231420996725519827357207299435628),
+  K(3.24961827464277590177162247729945574621356629515231573797276608e-31),
+  K(0.8729785123178196687967415597507785442263125134978694699801942955),
+  K(2.34483974911240932677007332970991564929677796850169518947880756e-30),
+  K(0.9049347700687930664128995096102927410158220099497186864379329111),
+  K(6.1899001376331676982953087273240931781986211898544501309051266e-30),
+  K(1.06713020233155607557356009219335431863050456289712159400920738),
+  K(5.3074672569375546445708868903734538236286821855608130730088363e-28),
+  K(1.319818818804666208734873416275670509428387544394908953840296118),
+  K(1.64779717854325443254001511265031282888013726563205886598174263e-25),
+  K(1.587745048614767251639521629063170516576184359258627853250568696),
+  K(2.42157497431446474983293249995274690521146677824448318842398267e-23),
+  K(1.729021186536062876325813870653866336570818541396425946484827727),
+  K(2.41894342559746520562765951126335867441253145842585949248735929e-22),
+  K(1.840183066643807704872166754557984970978137355224352633180387441),
+  K(1.30096319853791050257591485126029551378791374805572470338023506e-21),
+  K(1.859374742024453355775711472126161918925919262632248585658269741),
+  K(1.72156819745545963193958038711619783123594334582150476605832616e-21),
+  K(2.033519656561028612104756008274793887298405517138114527751140897),
+  K(1.93073730068891902853668134156253948025442611014168181419848954e-20),
+  K(2.197503319821045624452564039297018172911570302138934807757121025),
+  K(1.56716188090287738742618289142111930423042464722740387915624375e-19),
+  K(2.277074212758964179397050787988497493698007644578207888541529986),
+  K(4.0944841451244701159978227984887671112163683978240931960649593e-19),
+  K(2.340368405348101564154522077106081003474448529924476377607086937),
+  K(8.5839619449105156550500593287452831261685588866146010243321322e-19),
+  K(2.346201255604331975515993470406979544956214233809203207056657233),
+  K(9.180695479804193004693620541234386284326452433063966924320282e-19),
+  K(2.487553048158471293525314625894540128294049414835513524741216032),
+  K(4.4551190589933380872942079760902962195424415339112319236436442e-18),
+  K(2.536871328398471199645807447627136709387821802071084457069056953),
+  K(7.5693562291869906160599005195517113044707715322909159691724684e-18),
+  K(2.642688710814212453033235259578547034447634498223688499734637123),
+  K(2.28153495528561716513531762546403059862567900939710721234479257e-17),
+  K(2.854850969911988528420744191401373077906876578113790565890994841),
+  K(1.83511522416440376809565655616434185923916495730774532328908635e-16),
+  K(3.15893350299122905240583965359603791879754994794033342117118516),
+  K(2.819625716662466163650537459504677896992103950523771913035343e-15),
+  K(3.168278182849891159842464014357974839646955852401758814309331168),
+  K(3.0535985870169954616594813658288620523232309434159606681445954e-15),
+  K(3.259236079464829180247448721924230037239289049088261853033303439),
+  K(6.5543623586132153364760971639101467541824907233139189198832743e-15),
+  K(3.334978262686280023114631038784389498114399284534137101163304978),
+  K(1.21821521525617925858144420890334789448253423596928920864107942e-14),
+  K(3.359492200428807366701514564821612213057672196275120810402128007),
+  K(1.48432925140020591290899011696469107983478793054007604798750665e-14),
+  K(3.694217200669152203513512242960635365774051373266233168975777846),
+  K(1.92175374443596716111882740199730629803941679118873875626127027e-13),
+  K(3.740738482816203547281102093720814059678525767373097593844424775),
+  K(2.6922696614595366220754056907637739487469315379235617769250203e-13),
+  K(3.792713278248528675411818692193812428406079568837918758969937008),
+  K(3.9041198219019341926335509313838757779581316064975289282508537e-13),
+  K(3.888388569081602387205078580570024180528789864621639475424562136),
+  K(7.6350098609033760876380621186053367947778901625239831334197145e-13),
+  K(4.329381839803500102495777306279336627998387459927465260694673133),
+  K(1.36862242419518813207449083393534942918638501616729571740334238e-11),
+  K(4.556049030812977439052031972974058302465271102525489567445566107),
+  K(5.3648286993106780284244580002630937189620358660978511317496861e-11),
+  K(4.682394568492304528453313749295239535177358992670049312056450541),
+  K(1.11370211778946149634958150779383832812471247930310336463546396e-10),
+  K(4.682939187475848363278833789449866161605532829458393656510410667),
+  K(1.11716274724382016121254544009503213129919565858956512365944505e-10),
+  K(4.876910514348365933454009203626983382035775459979311562167965384),
+  K(3.2924651404628437414268850201207839817684596397550917722476348e-10),
+  K(5.006361040129323101566688280458694196633505812593568977899166351),
+  K(6.6006120198689196078516864088239295482875485388299063061979129e-10),
+  K(5.030740385867485283068650835593576667941778968071859448898972261),
+  K(7.5077038274725709037206578312991323141414035981125113450864074e-10),
+  K(5.03513760633230877066283707793014417214102556789673508851742307),
+  K(7.6835476167072024564423823258248876357506125177818665522326494e-10),
+  K(5.466300227438653069675575295009293852943171603335044879000077899),
+  K(6.7023810475614672642658859574238306555629574489886445054889055e-9),
+  K(5.677527078915781539691922227759694661052673502960624721200101163),
+  K(1.80480463684131170648378059003903789273619289802377762512658286e-8),
+  K(5.765661511733902265762191060108744576534592630729327454530554248),
+  K(2.6938779203310793425744282084030791515053110383661627058065258e-8),
+  K(5.940397336719550579608628123689406843698357277449280509734722468),
+  K(5.8341479326495440737609365390132424135717550758366333527466867e-8),
+  K(5.965307215827391547945875723041873857653007737073297111921185544),
+  K(6.4989075996491286059031979552231902472881760024674485141097968e-8),
+  K(6.00869486940634718510866860930781245392290532683577701702404881),
+  K(7.832380054891760758026187267868923195206211583650647678704302e-8),
+  K(6.444596800180567364390605888895598626588104663347713974044970898),
+  K(4.6716686777258582409466269140065179883710326202383596605538359e-7),
+  K(6.63925294055162618353703130722024248168362165788848773713582845),
+  K(9.8669629127353271818130288648628584716801204354092786587370066e-7),
+  K(6.858437637816507059775799115822843194198301762658322283484826867),
+  K(2.2119107700322770950440515826260617091816492694675602989751655e-6),
+  K(6.866773735003001885337487777488229947922598552622076145581016266),
+  K(2.2792677677224061789455679413289528666897104054225325516956673e-6),
+  K(6.996862013230294193071327641135354783201167886379032922646383349),
+  K(3.6162782830344378201833716355111746765829965314457004553070547e-6),
+  K(7.033605131682410647151238027415182413629595896723744270128399753),
+  K(4.110815098708956682588199525069280353231419593897401686022594e-6),
+  K(7.046244947305024488107555343527737084440573421663476794493495913),
+  K(4.295178052985080240068525624985598785055410708186629762282982e-6),
+  K(7.223107104434225172284541488790679062614779570191054546426154126),
+  K(7.8431051939482013516086826108877827670615047411916371368488002e-6),
+  K(7.394657062838783767481586371528856800137208228210925665595158664),
+  K(0.0000137798698808373652443367441952070599834547452388682604614240316),
+  K(7.534186512090329474776846815715968336608604145333815579778799374),
+  K(0.000021480009448452235516548843818289122129454152192010335007463868),
+  K(7.54056049830038968295305390866249671864931817623587410845828464),
+  K(0.000021913371103367219066821766492422753996094978341617779609395933),
+  K(7.60692749544848085078118001299184611602065321642424989000140453),
+  K(0.000026937232090362995649817840792357726633304125592628307431956623),
+  K(7.859200113280388640416868860432228760837261976686497292924172996),
+  K(0.000057542536126616352791972451609746245954639138803129881077886916),
+  K(7.907173439717618177886790862740071238573748467306761339825517465),
+  K(0.00006617881280081956829039150666502178228801111472313116346376223),
+  K(8.140011562482704214624637553819541837000154516628818610561433431),
+  K(0.000127886195741582855011084869631889448798124869751838328838596403),
+  K(8.270927769561987149870094979350026962418597419647516489936984869),
+  K(0.00018260415273306091088195059547736358305701869006089893160890952),
+  K(8.273628490464296929597911510638592255121672693402585460322344785),
+  K(0.00018393132361640821530588803310714290927166788585471061515921482),
+  K(8.384424681310153863534464903758301205170152175884195467494495936),
+  K(0.00024665648044729675026714397478127812913162817296238312147671384),
+  K(8.397127325754937519155593774659511166002387633898726642804714841),
+  K(0.00025497993894910845047113495421520659787595962593114770180161134),
+  K(8.601809118966106033423265732642165034289059201433519495106882946),
+  K(0.00042977826683345269332523186262902641760467986705559094221472393),
+  K(8.603984790036778881904005881545297629073153010308907355058384259),
+  K(0.00043211499337620609833993078537545911816324699766818571588702382),
+  K(8.612860970689149318419071457355648296736308219630973241448660692),
+  K(0.00044176848387818159162103563368931998091346859942652034309341343),
+  K(8.631201203964239517275600223647839727979488269264375214728078646),
+  K(0.00046233882537644492105897298799700125455026069159814899074042831),
+  K(8.672534764519827602023232102248553996864757986119583584151270193),
+  K(0.00051192630365810941623156727084325584727328393628867147079539635),
+  K(8.847512970719619044117946499168553977722067553128022336208997632),
+  K(0.00077978373424977915478938211974006904031294448965471404613293482),
+  K(9.018772232190951703897272333438989487950944899988823402194374881),
+  K(0.00115834912928883163160949046881202136611092122550882839013797357),
+  K(9.023332349342364270842774259831026223760282230617906533572922041),
+  K(0.00117036702521671322602353408416484189959873120186650982118984853),
+  K(9.215589704111767275513579749414015566855081567779015486634955063),
+  K(0.0017903943959990781458195496845892151696314267487169067324613215),
+  K(9.731115515631175576199419619019836077474170879055012442271944632),
+  K(0.0050925092332132361476691264229546863944786410011776500646312537),
+  K(9.783750998713763561399108839287486230162429957477903335831226605),
+  K(0.0056233734766088051772680899608699836863177544212079917062420962),
+  K(10.01909424736649271436965215765863366348650463597513745710225473),
+  K(0.0086153853108796828171265598559602185913422227652282186913791202),
+  K(10.21714303366100393592672957833786920746155907886122878729399668),
+  K(0.0120809232487773642048598290350346569675621536151261723833287336),
+  K(10.81472567336533331221789210517821901947462207105373105676283521),
+  K(0.029925662415322976868945945616090297272773589481046847976981985),
+  K(10.89836161601598684666587831552879221544423963242618678838546384),
+  K(0.033528553863925079021647937607121828453855844837394348082553051),
+  K(10.98614733138286495420133706355235148678999212286241085089175789),
+  K(0.037647621895321123935114940266124234903477406759732034295723205),
+  K(11.12565050406963200801833790190678201473634760131194119879094014),
+  K(0.044933443005176724816248324474550084822692666442671046721019507),
+  K(11.28870729582746745141744816764851248215236164442576545838405521),
+  K(0.054642150587192023697743727939168013073965286670255348438559561),
+  K(11.64269568740387658019155534881179621797435630376374197062962586),
+  K(0.080202843249437746451160478782986706656612006365311942851183167),
+  K(11.96735363173200136454544810374906676858579966590921521434591643),
+  K(0.10862239537570417411008573457389678004585268761699102823572609),
+  K(12.05776734020914619650288184702901902468981878273175602114412089),
+  K(0.11723174038546278629022373419443142012635531389985864715435771),
+  K(12.15414702998303334877510308315617894583477413688315229612654001),
+  K(0.12666605866156841308405964457441284238671891299718510338505375),
+  K(12.37971035636335249242032641618633656462724248139438399469871707),
+  K(0.14945828286046529648332959715064087977232306021329769333111834),
+  K(12.69091840667329917394738100115403024642339810787568374476699466),
+  K(0.18117409046752021377089639249516720959449408038996139767127822),
+  K(12.75124588964562690024028090281055913449680720003487756185967826),
+  K(0.18716288032037579965603511439090806811684980201180642743236655),
+  K(12.86239170805370326052620109935230007002035314479225600811339589),
+  K(0.19791605089396679763912384366917835304735732876509649117451593),
+  K(12.86731328407708378670403999342079973951996927186735973566913035),
+  K(0.19838217140888183659880423784316071571803667514194403378142773),
+  K(13.00852341288932406855894498524664490879572314925707650105428756),
+  K(0.21130780944138899750462618623391319860698578922513334781937216),
+  K(13.09427618123850752158967329475759847831865217561536224681939487),
+  K(0.21866213675098387773311669159948462338565023486181004031913776),
+  K(13.39200128729998180660741900385154929229472029759685810061759366),
+  K(0.24037791434384793854759966907850036158069861955071847938195057),
+  K(13.4036650972855430747974838304180482306025711891477250853888768),
+  K(0.24108788135452703465510999858062935508936464405435452303893773),
+  K(13.41244069443552304637915523479973337165529423676418732049465527),
+  K(0.24161430893269324984913527672524989108456713118774948733397288),
+  K(13.44193818725000226804701162741210009352459837080327183786865408),
+  K(0.24333443969882103323566931640090048191116155429825533629641448),
+  K(13.52921666158605434846182368201983944057194818148195802558522424),
+  K(0.24796412053243020440530053758679310511515621719098140417424021),
+  K(13.63089372455798258756892184539206451601493291229377523153341844),
+  K(0.25244753405397358766492479699255838706769557001521345175526974),
+  K(13.70814799400817696346849720513275615508163983726490594530596415),
+  K(0.25516638486192987294079944705440213336950044720985676076250834),
+  K(13.88590539060396775864632102517667854779348618668051421081969931),
+  K(0.25905791733391926611621569756875088139230251240049071365355311),
+  K(13.92774873579236121987169337731766735115090151110216572851187982),
+  K(0.25948190793173819685540646380755513857151498417422122285610899),
+};
+static const R b28[] =
+{
+  K(0.211883164585198969344089468675699272364797539158272609836353194),
+  K(4.4315922889202922877497278460838854178298980795820156509200425e-49),
+  K(0.460723800383833985896136318137651243047742308564111522367852614),
+  K(1.23650910674410785710079075760062948671181983098302399917619957e-39),
+  K(0.5948739849006803984178554242384864011869324618254550226822577792),
+  K(1.58401221365256792108286156232231710609962207717502556214947861e-36),
+  K(0.7769758995525812122279364793007212945331576135686600967617377398),
+  K(2.80072533642008443550759069565749289825525225974501553958575155e-33),
+  K(0.7858749251558667620117117610466477332502485672046313742291625985),
+  K(3.8526120052561645137394270560256969058896528002857235891478015e-33),
+  K(0.9190663931504951204650530533547839369562976243622698753148929456),
+  K(3.08725129625319419289347921388816824485800379602960801391248041e-31),
+  K(0.9396169034619349141699732278734728158308157892946254855985132512),
+  K(5.7343231879073784278333185824669299865678953981981737188494551e-31),
+  K(1.24285714725753469260609153153099583309623040659916501364471294),
+  K(1.44428590747654492437016702918613201721942820617300241589963136e-27),
+  K(1.262650902513495277477903553769081893379258878242481039465183936),
+  K(2.24797457780382929955704483657709682431137193287180607460511279e-27),
+  K(1.76522462343582341686694001504808561151777360517536992613528271),
+  K(2.66844667919397263106177753562455730587115341846404327622378925e-23),
+  K(1.799659452964674507151421961920806816438299468852597965255776097),
+  K(4.583407492379102054786286497884209002839621578692687277291012e-23),
+  K(1.890048688182301602178045456760251305944771101457872199259903124),
+  K(1.80760253259073770804074099383292557916289221431870835565784979e-22),
+  K(1.9095155640359381764952349361324600330862538441342555706154526),
+  K(2.4082903050788128552319635814237328777369063245241070249763828e-22),
+  K(1.943072830254857132400024504884632083463815001246171863586492029),
+  K(3.922413481586683200107439129265950447241868564481270810433339e-22),
+  K(1.99181305161882536608425021416951788808512739454138674924902818),
+  K(7.8490880821105877697133978482332282776146524924106522208281958e-22),
+  K(2.089052891325226935495742121243817316375904650902426289330851588),
+  K(2.9815577601331884649123065272877514753943335662297532333596339e-21),
+  K(2.091465942928213957501153684713565383410135028809336270908661277),
+  K(3.0795080101957656957806639036707549732862556635057853573806442e-21),
+  K(2.095915904635678350915605052315363590623444688371926735840132982),
+  K(3.2683375608989813451933328009594501990203729585619979453877356e-21),
+  K(2.347251068139198634784557631234291628764900111181736027123283941),
+  K(7.789762447504212192675859772976824883468017064434658481005455e-20),
+  K(2.73214573930948585207356756628053686932652975474628595246886506),
+  K(5.4692922878890239841049147232256185494525682493613422431099485e-18),
+  K(3.203687153657536329750862337392972250769319881409862602089406148),
+  K(4.7174452415830290457068836875462924585317115969463280561679756e-16),
+  K(3.213521048238650922493436258535089407719600188789635984922324759),
+  K(5.1399887258396582340611896476738476520497258966675208946294395e-16),
+  K(3.292588332919414334012692251589991021994736382124871475486972471),
+  K(1.01486408129747075331397905192728149100363209385666032452194878e-15),
+  K(3.324242629117351468609822232284128343347907732337611972621170336),
+  K(1.32646013799879695362256118522431932964973501216478611133235833e-15),
+  K(3.334655665417553706346325519324156528553407487398888872855141488),
+  K(1.44778665658332352697410415396324734597037291725178130396358504e-15),
+  K(3.444512218640863319701398665245892521128635466132599298758303251),
+  K(3.5857801894976960300199076565093896831172255375927035920912497e-15),
+  K(3.67848707003181684515951725348830668579356232627732504565944781),
+  K(2.25344528062554492617524030101513388548951795172070115621721848e-14),
+  K(3.728440779741742543473229940482528121504081744921771180867760983),
+  K(3.2855521469987459824301158034531197083451281214193607097975999e-14),
+  K(4.104498542236478922705190107646103881936743449662203894047312805),
+  K(4.8089223214538123527623521842757727999079199681372148325514453e-13),
+  K(4.106585903667437325262132234625477135211548534098364870709115015),
+  K(4.8776070026034701389109646484213005546323052753348773436710514e-13),
+  K(4.123711405589267898350041947105404381474760602388293115353411918),
+  K(5.4779302962337907197051584684013470951705526461255355365789096e-13),
+  K(4.26330349450779953109712747797004493318582381900090381781900273),
+  K(1.38555890324274417636504780893964213271163889930809616603440908e-12),
+  K(4.602360814552795021826699219648338092485471034817918358401610446),
+  K(1.16389992705605201114456368149086378474590740118504322274979225e-11),
+  K(4.707901025445943690425956005089205190489284492310536928650126045),
+  K(2.1829379273919294680953270288264683144386939748045762163933275e-11),
+  K(4.863291876604389087020290918185170324550391354728057214755171409),
+  K(5.364192975071064191438907833143381803732275391309676540401498e-11),
+  K(5.077107803040078861103175093201651112962251762990610249896753111),
+  K(1.75914183664924610119246070795952478729933095222931462949121637e-10),
+  K(5.373741738127217420174192117555187076742779622767202763152735855),
+  K(8.3684899608586983720509269318907842899313990094080849308961662e-10),
+  K(5.472998778040288834832439687182361019934722110517129956542875267),
+  K(1.38036670422007295345138434791994853206053596468828303421706523e-9),
+  K(5.671538544186854808994655666649368773031100541977338873338235913),
+  K(3.6438357757483807655126323735887235597483247918206252147698336e-9),
+  K(5.697638562812883576536196218449274281882522908041285389868601602),
+  K(4.1277148225537843150552710901722420848689717796570256471381841e-9),
+  K(5.911401691454011195863181519180596368941079251788708865851228675),
+  K(1.11830777495639894779431126743060277020014391810211801359690927e-8),
+  K(6.142710098739221807906324779497815996278481247735195116540135017),
+  K(3.1362435731963352794725506184457435017703181317872710451148193e-8),
+  K(6.298152121910668337527986404514062210899082753260145115006521875),
+  K(6.1089531327852963829463440575601530417469405832885395048463941e-8),
+  K(6.402129618732815311800647185247112766386843960642419627069048413),
+  K(9.4348632105137836583328844682852328808701171098461751984209537e-8),
+  K(6.436117525985899892211682771078582008006206612424587308525183887),
+  K(1.08543441967919969775823230313545212943494199622392816162540529e-7),
+  K(6.618065866577524571588986501045411389118230087700882846318315759),
+  K(2.2625926588456160075749033535582292142224521737886924670017757e-7),
+  K(6.949846266604092170446861298576109735744404899874373705310084162),
+  K(8.0861236774694985752185808684172869961860999897516697398167884e-7),
+  K(6.954996804413425007328091291003120066915315326040159306560447315),
+  K(8.2422642355857387598442723945425674274433101645103792059847773e-7),
+  K(7.038637025192272963489392864830945485495483797725094662951635113),
+  K(1.12140604777424771804574957020794046845204839185631588233810381e-6),
+  K(7.13488377996404125453216895794675263766970783070544758959217475),
+  K(1.5883325263306917519378532980043124591828033750702730622726039e-6),
+  K(7.497637417144208642351175391204957428987755589129970753974036922),
+  K(5.5678104857678548611731573607024130215790109750801683790315444e-6),
+  K(7.66411661864319914067133977499521984371869076589104504951240699),
+  K(9.6140044359552431090436472572537414712026496984292632391376606e-6),
+  K(7.705524005632591353467040957495222311886391926876403240935652837),
+  K(0.0000109824014810653427424378242491176493392207604907644605394537472),
+  K(8.059324543679829771052538883493395090210626991023010981636821489),
+  K(0.000032766460242378985103496940037174184328907261348277600631016729),
+  K(8.079601349199066786361774460756877715427860872445463847460295893),
+  K(0.000034803583201262704083000318046907198751415540865450849760490836),
+  K(8.104613817373072705637526268749436929734052243908645715798075234),
+  K(0.000037478980125203502318832367799083027805183402932398801092407221),
+  K(8.153622211689888844665739984230131986366655557246335534583715695),
+  K(0.000043284782238780382566043021154917725116074152692833802866831137),
+  K(8.374625943406027046603802196951995775994093969513848200452607705),
+  K(0.000081417914543926964168254264062421183914206257521676710741586767),
+  K(8.424429993432841295287251825874032816418526598414879915315298519),
+  K(0.000093507074717246919730129089586806454203138864159317681102485162),
+  K(8.641579425500858788390741931835516076872240155209518708899712832),
+  K(0.00016819090418848348614087946369264253112014077521672821396885332),
+  K(8.726463201301971985428868639756949252334052095938862825682073482),
+  K(0.00021005514353618543766166291002679870187675824097376147810497949),
+  K(9.326918668094409351140340255322435302495427971177985198017751604),
+  K(0.00090506083095734193447540421853590579539876428285650722856505521),
+  K(9.382637910518873963225201954104804429709894153500429926240074515),
+  K(0.0010264813119045433514331776865507033884087041930451159139637758),
+  K(9.436101251201940480133034275932421686757513449187711480351630776),
+  K(0.00115653422300691211576503704666472340643635176994182806337348683),
+  K(9.481024698661641843156102126525691524848314020573112920301974683),
+  K(0.00127702445030472245931348710119649522694863188684620075486107412),
+  K(9.53685322546909558294815392290054748147529209294392108470814949),
+  K(0.0014423342697254043512056175117138811971764116664728671812888271),
+  K(9.822324953826822173534423543027874265212058962411381615735359632),
+  K(0.0026227156467109116888143999976757490494968348790761099737627205),
+  K(9.826424158177642926722205763566251995706265157016986181047717261),
+  K(0.0026445506608267718808633133573012685600815013612944318588166745),
+  K(9.858775364751088876770966365731638751469250223041516486406637968),
+  K(0.0028225561764221817625704358950417799097116553041600775686012662),
+  K(9.888438150982112664873036583830803684606410709150454952267639929),
+  K(0.0029949247811571934748055282847027794821484157205696679319423221),
+  K(9.948885490115626943170659161208956075366016401115989018212171074),
+  K(0.0033749449751181671606590325602398460158469527192414811976620325),
+  K(10.22829697925464456898110125803448917559061181938575400736363741),
+  K(0.0057290898504826830167311931348447091484463863973009267657995588),
+  K(10.34217443244273435465578957071404550407251612565857250331420119),
+  K(0.0070322852668790789277749431053417481332667868252796806234703067),
+  K(10.65060768936664532506002796784611891737776833469268268994629423),
+  K(0.011882020718718477761700937701191380173113757253834448925151308),
+  K(10.70040028988623707938366657587129192810479697740228798367139274),
+  K(0.012878526652930086296944656216734557462513244824912054807575616),
+  K(10.84142507904803512018676938796935871600407550162624393393314697),
+  K(0.016078482060483615152751991950209242115468967057614125154781517),
+  K(10.90980753920873021135225944659249440773199755849214446824185856),
+  K(0.01784680057155851869446051052558187510920412965213801790601362),
+  K(11.0594449437685955803093507076702961589841982419187644960982929),
+  K(0.02225948209916355320880742938228709480576986496676355384153938),
+  K(11.12739923287138522357874948311858093601190393424087124679528703),
+  K(0.024527100867267281357593561214756089909892313840722957096015427),
+  K(11.17317421868043977989649497127376293100112791304576031859691653),
+  K(0.02615294429119215406054830573489864683757678313265422176773517),
+  K(11.19103583177773881227590788561218787951029848545598196021794481),
+  K(0.026809404013574226023970573250569900501072928349051859726309295),
+  K(11.22172457187572472885657444536931180784442868259407894853156921),
+  K(0.027966719446535591278153380802030326711316174884326402998278273),
+  K(11.37988809249603126048762586806212198253864923259098578464857656),
+  K(0.034542907252653661233063342904515073228248484337362963493256712),
+  K(11.46021350637512235024015996951026541104483259180333898351308614),
+  K(0.038291535216129920866485139509222513015843463899321663623295786),
+  K(11.60907299193116950639665213558788325431272078026520396461715836),
+  K(0.046001895174037409101080094364708823638833269069802055244979679),
+  K(11.71484737074811920101143420837309467408147722842184297405363215),
+  K(0.05210031129065271707628257994047283720011639070750783419540331),
+  K(11.89978267013363284212118226957417220158175538013113044848256281),
+  K(0.064020183777222042761557968792540437519628302742617752902161146),
+  K(11.93687011863742159867791678577858128050759097211213450007128289),
+  K(0.06660263397035756043349573820505283274653115572029500687224749),
+  K(12.02398552280029779521671267256813306696755356229014749951802483),
+  K(0.072916631255593191335709132389598061269708924022063317239855685),
+  K(12.39449415800510369216510650162337569010134768104829941164886847),
+  K(0.10338621021119927234693747362533711272518805910207931305715165),
+  K(12.5766350484861927299330458577052922311812583611381948874089185),
+  K(0.12016744425748201971007297542994969596091395160080851940150515),
+  K(12.86811858625103544456501829608899115091391781915938469304129075),
+  K(0.14852697367870520246912873760952605773688370918688933235309476),
+  K(12.91994939687992009730716371119247158142996684607509666895919187),
+  K(0.15366063451181068156713995263085710274021054800877786142542499),
+  K(13.06093892435105843941229967260263313150154220775310561729377514),
+  K(0.16759608454500329139362259027943757898740175844344758075488746),
+  K(13.0793799722644774183173356332278401073293849884063042278716405),
+  K(0.1694070732946275635137415021967266437855850337400852560272109),
+  K(13.71259006438299284450981118589429970234689036634672171388457354),
+  K(0.2251289395957687776144920632070510696511068511810110692388519),
+  K(14.0460895347242055786449858281402883992191336253738644013054049),
+  K(0.2448533668807013693971339781220916066532184855622736760695771),
+  K(14.27571774395293139790494525506514511383160001491233551028296232),
+  K(0.25270648707379947106205944848880215079057773111643723216936165),
+  K(14.28227006006514277406289984874344725585459516188963916023369173),
+  K(0.2528548624313559111185162522534630710772336491687814083231871),
+  K(14.30329062318580677298062486976380834979665718761431155242887092),
+  K(0.25330169196800849362481174954057509002386207754355961667117064),
+};
+static const R b29[] =
+{
+  K(0.03775998304299144469484236386806100599212493732694665014735571645),
+  K(6.1289080676768494338299932544757944901070020627513194759359579e-73),
+  K(0.1015511572801342861577960252214150571640673622256197277288417249),
+  K(1.76735019791104447760018716349556594416606564443327683254380193e-60),
+  K(0.2593277648393924408839551353438185259997733188197595884425524031),
+  K(1.13522688685455094058106638706519972209428243502752933513559248e-48),
+  K(0.3182750981701491280766746230844842480721256644602722037957355682),
+  K(4.3125916937341556025084921759170267033681539335124357313147595e-46),
+  K(0.3872052050071549457756063938971066843919395401445330028178580908),
+  K(1.26985926957636866921688039842201295555689677149184739771064303e-43),
+  K(0.3950947147110780888889597164700126678461269374808525806640230597),
+  K(2.27927412931828718274382162782452474347591101561612881229492491e-43),
+  K(0.5363161417406287274106050011582636510134112869531411387515390795),
+  K(1.60940875972719324974667216364034634697540739173806593035182037e-39),
+  K(0.6488714533741344761275375058457121500635896071635254424172631388),
+  K(4.0370353751003754043297813187037238691426183934986973737167745e-37),
+  K(1.498225089138058060559820632739913706751561741430301407364433734),
+  K(1.39699894413362238745433882791061664344470711527214553829157972e-26),
+  K(1.577859058887629980228861049517424768238557417521627622264862868),
+  K(6.272478758124321443854724302250708867350241311249791177473806e-26),
+  K(1.66480416088126310969916515522520141370629342245128652999566788),
+  K(2.97161544210268569157900529677729619683774548098537972003531673e-25),
+  K(1.87723437950624345620087653814563873472130418137997621520421005),
+  K(9.671585032215698846430397539193158717606378491829792484379654e-24),
+  K(1.946915533531168694918871480655387051096679794075168949013339327),
+  K(2.78309072328386551842850345019908800586074375250925729714180965e-23),
+  K(2.069662038824899775603346345866771659740519017137272321024449225),
+  K(1.63887074651982914158815845079185195737810809809777401933313142e-22),
+  K(2.090725536785564487470939121114124025134681674765079727936950527),
+  K(2.19823839555623304794781001878151385277184339687167801778128034e-22),
+  K(2.161832467215956839788530439452273253831304029201543589869111357),
+  K(5.7982908526932166851574490276295182365087384826774217094102716e-22),
+  K(2.506731526382276182386578667383479909870579522808022698180440473),
+  K(4.2421204143908084877972185799038656030357016271258333135824811e-20),
+  K(2.700278850109228057785826250698136325268918631131250737960070511),
+  K(3.6668365323474321031759066093913740636492859095665063754667718e-19),
+  K(2.741702223040676353547767917995279854262672718875016349986560325),
+  K(5.7019613486380015976476852645254978668490700558529169366932229e-19),
+  K(2.809361479619557472682194090127564919199835707501341333370802097),
+  K(1.15623150482332621524892355735304961403192812541122560928099279e-18),
+  K(2.821085414551172770020459432880955091494829721634984112184880003),
+  K(1.30464386675041660225848835048192983722783098893865732438506243e-18),
+  K(2.948045262349508411997681972935143649607299374132833432243771106),
+  K(4.6759794235686956361184767886844615788046428045690358462922926e-18),
+  K(3.016802160479909277570670911177550850702834269039181108335761791),
+  K(9.1244935386552013487567407757057076191307963384583955858912957e-18),
+  K(3.07323989678427818994617301088221091077608852705714913615520564),
+  K(1.56176208092509619121950499889020688395333768583048659104648751e-17),
+  K(3.119073816107549756553192377673807922640156515302491518516088332),
+  K(2.3989915547198370109631394937263764876449161854189298411581131e-17),
+  K(3.125559852821611137958046442373646730430695053169764143076647523),
+  K(2.5479240610688970013769515004403568146834700352415295576081125e-17),
+  K(3.256936584002261806728230941335874402400521269593863100525743844),
+  K(8.4065514045505662866625795680416879046885859012177123651356825e-17),
+  K(3.347324455625350911376389210706958619553318923656591488042196531),
+  K(1.85889814812623563011989149834411500654465292262803164717264419e-16),
+  K(3.457026389234672932485887127821539769425917450849505821118772863),
+  K(4.7335458964936961954661929080938126499487734981580822875721288e-16),
+  K(3.672567623500755451401012882941378887175271537386557550043841411),
+  K(2.7308017170817223710240855606719123013582016790669742098841766e-15),
+  K(3.788132609246460383022165957421130669060730622767414753720721737),
+  K(6.6986929442073158761092801443286605009694355519556247837030183e-15),
+  K(3.883977358093260363048973562716371025479190300349539065099637014),
+  K(1.38088737497351759441484073726098991499669421242390591027325439e-14),
+  K(3.920887522587959309380994305494137848177426136242795284993692731),
+  K(1.81572519180217689538315187760057173799210266706062361196651977e-14),
+  K(3.957935482621607048725481402756182702631445995205459434028545434),
+  K(2.3836698494134843591620216985583417877268953137905040090612708e-14),
+  K(4.012630010829107645839861470728686473827682392047866367489575573),
+  K(3.5456514989782009791484986139838188952287133386464995730347134e-14),
+  K(4.359894261281177523749673648599586811633980377145743422484110934),
+  K(3.9029876900529433395140888353929914714979458380544520737511732e-13),
+  K(4.658620065378444852192949383225356495169868778810834098314277025),
+  K(2.636226565487254098628100146958981314800418824275100843877678e-12),
+  K(5.158652990175937216586293482700363829263780046087722841956491484),
+  K(4.9114821479259740642687090454526082675377908206778074983246304e-11),
+  K(5.601299015203258018402380478198072811016947775422915034597208915),
+  K(5.1123406470147202252574383349155846850402657822230206089709984e-10),
+  K(5.667386398780461324548728391713348712842629817547816018904745669),
+  K(7.1248859233700458647930971405709449464036230856622833157804172e-10),
+  K(5.779937885767770249641522565352830930902990754322809465208607499),
+  K(1.24146226191705804824013057726422184938379130405550453637204977e-9),
+  K(6.173353721448590724635745262175037386302327040127966990929715335),
+  K(7.8688622049758953497130655010413021693212645425816495665533288e-9),
+  K(6.440525896996119550100693901783967136359844583550618909730218423),
+  K(2.5499754259500937411201628204605122690608838961215279821048715e-8),
+  K(6.454569713488818782954266199868778533415679138192865331880695887),
+  K(2.7080490649247314735585273465625989428957071077684130255817471e-8),
+  K(6.476933249046285767952535367613422652442802444854958807114863331),
+  K(2.9792443971928968686223004740402761819631391209967502201451896e-8),
+  K(6.613364949888335712028909899322131905101451260703194235748395773),
+  K(5.2864623264949879831551696339531850488623679275809850931157194e-8),
+  K(6.822051226074663320912666507400880873654388733023991530280322447),
+  K(1.23536510012840714370388973393406730433763824468817630457671595e-7),
+  K(6.870864611207687309560604680313558296431508507128004010633711754),
+  K(1.49943703011139299594836673068905450209159365041476827130076212e-7),
+  K(7.109644595293488148472970723842666214552869107854222394121189151),
+  K(3.7707455262720772921729815725422765828943962074416584089623189e-7),
+  K(7.29439332702088956106920302802365870379883039196196288849325638),
+  K(7.4832044424501906093144106073988799600176944544486645971984848e-7),
+  K(7.434221475611506138115223938789483075622049410767740447554986467),
+  K(1.23747204500222593018600141673618828512386645654250693406013165e-6),
+  K(7.572517094564079964187502043928464279828478148299309452354922973),
+  K(2.0088714243022317100753432842445523875181027990037786300110295e-6),
+  K(7.603262068248110153286075715742406478874633109449278203114499336),
+  K(2.2334822462307428947870263278016411435296165520056580057109096e-6),
+  K(7.690903583758021733086299311319557188882293006845731102666184626),
+  K(3.0110954378991797165044135612143236224409219327851049104289977e-6),
+  K(7.834415965937398105276548730568591801274239304991212568028093023),
+  K(4.8588919441921060911851075325645600201954563280287813018536232e-6),
+  K(7.932041465699773106999937021875284771164975024714912419811461549),
+  K(6.6783537169458487296511912180162840124390437114437107493052258e-6),
+  K(8.05782103991356208473885868273674049604517338112274749971482166),
+  K(9.9735642327373798216884555101054121005530773614309432141167572e-6),
+  K(8.10431962511796392820851107021525494600562005382245083964672029),
+  K(0.0000115392437999359732972390118642134492738718451637123079875429169),
+  K(8.414135816374521132200762878527920981663871750291466450600425128),
+  K(0.000029497775090537300035509369548667014885445902329824140546170557),
+  K(8.480452112929628549921439384402099853150249050285285338125672178),
+  K(0.000035798527886933042513471094840391579210353354001583430511695617),
+  K(8.515524281239079685554847740343339163788511557308649050340167358),
+  K(0.000039617388105725316244978189179870268871806686699116641362708697),
+  K(8.701977608244809593428208651052359455665755827189167031504421163),
+  K(0.000067115291122034474980407219333920123251945710203972228478925783),
+  K(8.775616075604415979411077186012610526689533727827064712169933546),
+  K(0.000082206796537096498640826668523072476110724993093966859589137765),
+  K(8.80130008479412988623094437303866341322659164872116420223570908),
+  K(0.000088170700360622841642917866493485991025760719634101553897102251),
+  K(9.093256222003289316426812492823022495957668416200844930563038931),
+  K(0.0001905932659479307433238006318391857197753528434562506939605384),
+  K(9.614668365468098811223330188883975109488256531818313015406718692),
+  K(0.00067521815245109871333835412461682453557221692408531041119780706),
+  K(9.748973779779403597932756889104369028501093603188515154071450395),
+  K(0.00091453795341365518241221503627887821823648484780275665164586499),
+  K(9.8106021010013053805314399356245279714552461815147893730745183),
+  K(0.00104799180712465998101087267883556786413596339638125895056241005),
+  K(9.920687362982892944831852393604741371922565630768020543202198067),
+  K(0.0013304770071677755879626648708413540252100430544213720360641378),
+  K(10.33351586178221902689637885095593873155219893344652340004018434),
+  K(0.0030906271557716308143411195159875601090934551110982829718772603),
+  K(10.45263669885243368564689528188131742194132451144271466596355378),
+  K(0.0038827658208611422909685612513986333330287307227419101556402281),
+  K(10.64318701701148780604797585610669344605587465290087044597011623),
+  K(0.0055169794398831590464879636603403530031146864304352864590833646),
+  K(10.98247547110718383435538347267163961547192712561858158164875401),
+  K(0.0098970012139687546693635800156444849829212449627085727087154431),
+  K(11.18285443028747183407365045976298512420277992484943794545478927),
+  K(0.01364116881401731503715244854495600637502725325257672681013092),
+  K(11.19238099686747376620668391828363428098949726191393641794975676),
+  K(0.013844715591846575329828306927916880603535079588911504362477672),
+  K(11.29064536980281378023315270013943980598141668721626374879737088),
+  K(0.016092384545404490538376320883174483187911710901728733363489531),
+  K(11.36418113514132467221037423840889924020146461866801800737502857),
+  K(0.017960196104770552210893506349948414650718710246311871595030036),
+  K(11.5164141167128693960631931749041620571059873483396447128675176),
+  K(0.022376255150908769952491077904752417598603234107803937814857195),
+  K(11.66087637789067255076613397317091524311857718443759840108037491),
+  K(0.027312655264573170590805894208704205453226033571540076643937136),
+  K(11.84388562392006742001647136917033854151284061754524123775132381),
+  K(0.034710684367321907267575668551749177940135459120139029147664348),
+  K(11.96103859011078923027702116675424196781166578297923812754866087),
+  K(0.040165666643407108703228328984254930746034928473992347510909121),
+  K(12.02989996407172971873708482572363762935277533148322494565020215),
+  K(0.043645631594714261960272568438614768703938264404357643074488125),
+  K(12.25343965192999769639025567064589426594139384100425386382770316),
+  K(0.056380151342589387328256982618013343553096739604350327314462394),
+  K(12.34521104590164333343699689391814272947139941952768980425358639),
+  K(0.062251591521775250845419425797351272266771366988299515672136145),
+  K(12.34880072661571348266605954362958288707658591414809857951620877),
+  K(0.062488846345538475837886995690508845858561390516619671937609028),
+  K(12.36382129463453895656385704270313877853577371365865381136709155),
+  K(0.063487778320227951953779835994427447598248501790816352077923844),
+  K(12.42240576119794147543459349299484398936704998098127713739941203),
+  K(0.067478599421926139381099550801161077133211574688184778668316231),
+  K(12.48961816335741146302260334288056418883582264846129854704643767),
+  K(0.072240776187562887323941367054623843862849708694673335815238083),
+  K(12.63541404180032541739684068799817271814407369218610947747551142),
+  K(0.083224055867166718868655161109051726308499810415569685643449648),
+  K(12.76905610054923887769386459684424726072666677086364638577548504),
+  K(0.094030209113861041397520119419772181560708074820638509456621706),
+  K(12.96019823177930598664700031767541039336965886450546547358338351),
+  K(0.11056140583626998681016000252084865320252135554329009443330361),
+  K(12.98579109495053801283472088937231387421540699019631171339827038),
+  K(0.11285798188276930305982387742126753051331657564115170373729495),
+  K(13.08079804252441297688551868434741062444789171673062027772292704),
+  K(0.12152663236843447739812054107853925634768837329468275180718154),
+  K(13.80511924935555887259893401158848861154254719073042643791803361),
+  K(0.18966398705143978276275369400231926435263040155217093406315102),
+  K(13.85062848045299157585991018417089185943470101418763703200246745),
+  K(0.1936867105705341051798246807010932420560663342677518524409449),
+  K(13.9793653286889744561365513241728097062482987498674034247291982),
+  K(0.2046235733838439536637247369445690082810766006482626681648351),
+  K(14.15995892080041915567230866040255402364426067068467955303613866),
+  K(0.2185885653464975091363234134539889036700274481586135946383175),
+  K(14.45575795111474872474909823812313648498267705156900588324601358),
+  K(0.23688190843022201909196817775725537695425293785864791925763857),
+  K(14.87652410100398528916115320208946456414637966402362828445778478),
+  K(0.2502993277424188205112945367045750646971645996913754672427736),
+  K(14.92664741378414156099749980886870522712206733295427894041083629),
+  K(0.25078386548394807293491625982208509187281570046302874134368113),
+};
+static const R b30[] =
+{
+  K(0.04863444069345366670739960223702094085942163887595673806645189288),
+  K(1.52988116497881427727402876307113358241091924030981833854671824e-72),
+  K(0.3625909573443363622158332600856230059060557569326308174843506293),
+  K(2.28480423885331475181855898355482242559914883947586745705024512e-46),
+  K(0.4585070473824530446178885278467011061804908647423413550054210485),
+  K(2.61048008057685879072498453621838191992195318559493492572072799e-43),
+  K(0.5943404915553289821918158671478817556052010730437077494754512429),
+  K(6.2719053919521175479535011637420024895549623612455288698746008e-40),
+  K(0.598966163212995611760343623370206504668010454807949959652607312),
+  K(7.9142286412269362711402232693918734218008593102814043183320345e-40),
+  K(0.6773380892144162089671939643277751339853859405972039356533257008),
+  K(3.16595598824654734560047035692860826667386051433353130378764037e-38),
+  K(0.6954721285651956872209255940414092743198551113473782000354262208),
+  K(6.9940998403596928909002101154151941378072507724632904027035363e-38),
+  K(0.8258305112506100794271127097497832203103488003434373412307602326),
+  K(1.21078673769708158388158496587031713687333989937449073283284152e-35),
+  K(0.8751924110978951592897087196280064085178981159209303635833329169),
+  K(6.9094936271563667512785664582012246675296021815673266860391992e-35),
+  K(0.9680330508743083302687795827135943837542431669881047824327988735),
+  K(1.42247776402049267907078402120534905684279038589459369265061693e-33),
+  K(1.132808417737367585527063841291519880724661619482284124961008412),
+  K(1.58867093897011684903983088237851733967271207766421408347503187e-31),
+  K(1.181215411871876894525241342046428549765870247095284690687296634),
+  K(5.5745917571512272590991382111361996489245520306287115521308949e-31),
+  K(1.264525975642090637165463025581242497909056055281024405446961585),
+  K(4.3069772123362772143160890110096797927845804492353739699019518e-30),
+  K(1.45435957229714313435914622786707109831897544048823797969361773),
+  K(2.86084109822270100010848981177716962763794953799820195889771665e-28),
+  K(1.584417325520729055645055658334799140035670016831195890031261537),
+  K(3.7361766976831642076203292713871031569930460248310367019542439e-27),
+  K(2.399926083745360219199162862590332147381542532537319445804232975),
+  K(9.6000749781969695729015970200924971161908656811643711508191821e-22),
+  K(2.451508482427656798208409343007732055048822109925345650858195159),
+  K(1.81693727573342619956355075510673982656128916607736282560996279e-21),
+  K(2.492950859854383585035301281919941927159693142014368094275950572),
+  K(3.0043370283949224302245279499795984443097669770985139908553612e-21),
+  K(2.916484385316361310952150554858262904302372261058393184634294766),
+  K(3.3272393028473616863669177687864560940784037098249806833855019e-19),
+  K(2.938634361602823693452752363186141596479979056795925466537065211),
+  K(4.1749881965186496310292607102144767349223260678357338106104122e-19),
+  K(2.997881534825712878250887160606845192701023817110341529387243951),
+  K(7.5980905109794319356676403023797307241555928224635721693497667e-19),
+  K(3.037151992348938796276666163460697131068493734396165902926569516),
+  K(1.12266815938785430794255264605448445529147871675198016037440234e-18),
+  K(3.063531459624309096514200157277142384250246398298474687533702443),
+  K(1.45517281261078038447900866715304920614470137341437145412455212e-18),
+  K(3.093574373784798147240885615064064568723638144130163039010395965),
+  K(1.95005386415673812556768156639895404261940147184820676394293333e-18),
+  K(3.248390296127582446009085348710615502638362257415372327357726336),
+  K(8.4366417558732645700789865627762705396680441216915659570956727e-18),
+  K(3.253535185409385302015016761969674763649491375054247127409245771),
+  K(8.8467568851819636595431868068394575409018972964567560289408911e-18),
+  K(3.365822210925306195967627573277643834980950446768008359949836596),
+  K(2.4475495404282517093947815432234069560125468865953579822669072e-17),
+  K(3.627048733411073244079691753185448769424934599682910436758838376),
+  K(2.30195250061158368895560756853596106248203651477647834457725944e-16),
+  K(3.683044934943782713134078734347926056927943846150754037311817391),
+  K(3.6437217679121069450684663889333883283719178651838824494021446e-16),
+  K(3.724789617208458313555073713743213279412269587280102636488037794),
+  K(5.1080253964680279429363602280136740051816075746114650037754583e-16),
+  K(4.058533323434710433149399279383868181913266012903605940344492842),
+  K(6.6777241152451080358303007968753982526345150161658525451910892e-15),
+  K(4.81075769601353857738714777661093195373063379205616072770540741),
+  K(1.07199968002557711814108209873387642018089959941043896019349264e-12),
+  K(4.867095452251034700970125960721057548443556553784704884369934527),
+  K(1.51591661799417173660711560302134214975304638673749620470836163e-12),
+  K(5.082777927158479361621712573816007497860703747689280531354911277),
+  K(5.4978268925128930803955035694546338595078140132512678284955143e-12),
+  K(5.106321321793997106376925324759281371243643099040768532080236325),
+  K(6.3056382210661200274710658566078090764642675229845983160391389e-12),
+  K(5.108951035946263235930333197702300776259567152594198157167458496),
+  K(6.4026677100542680302807328710270079366584089187730933790424363e-12),
+  K(5.137872158190385723943867844330923359728716801267168785785166592),
+  K(7.5693193425287785338154789296817961189040968155526358275520621e-12),
+  K(5.344042260542788033502555521425132279652075172249371242496453867),
+  K(2.4256452541360361178113326770967386184641413214198152340307015e-11),
+  K(5.543208664107554352001451722118332480412879259243038146570927536),
+  K(7.1384999766662492298202565426366666471617757156153189855054677e-11),
+  K(5.919110503910169156356294909732026869731568810818938208067799547),
+  K(4.8903519596330426245422578340841372300695715881150539390395099e-10),
+  K(6.839933838952560468346180095262468777166721144910762592457093649),
+  K(3.1581356197256590746297818896493376311890456320862021596176111e-8),
+  K(6.867636696901592375135833293108350049215847977837474081674712565),
+  K(3.5416435212720840615273780251646550485821828632818480477284037e-8),
+  K(7.003603884526196499751070719309224739228517533969534181416009526),
+  K(6.1637116683404365036363163201552486515337911207141749644097387e-8),
+  K(7.038050638049835956633194125353745385132824050066702076125467281),
+  K(7.0770999658411170970205382061828869070409751674113370284051303e-8),
+  K(7.277181546633139795829787977633483330771648080795875833372406),
+  K(1.8036339549647683639509635218036125235178663328494902504854783e-7),
+  K(7.329767643124433155948507768384300549462099671928444841749959828),
+  K(2.2035599332216578305835896555166032210102487283542179228373168e-7),
+  K(7.503109302469727803028231827546930801193021185397306756374172681),
+  K(4.2068173788494407516383200573162927050444541394555196170115159e-7),
+  K(7.576691474490803332400877311478036675728796572781459689102532893),
+  K(5.5015679751946144271710796876515966908505411385382753563854058e-7),
+  K(7.653731900156144681856834361266861466765442859941490002902109371),
+  K(7.2580356002898018571366462524415924964493553910574674293155032e-7),
+  K(7.680791134078970882786329790240366875513499415249894276409309727),
+  K(7.9924712496750401967992522660330598135730936750026731992783906e-7),
+  K(7.707512911185169823862675713524448643038010674475894506644558354),
+  K(8.7865212730458321887408277550237939856234093389267030756297874e-7),
+  K(7.775792086317270189407329309523228108269858373402975615171619528),
+  K(1.11689473273224961001616635870764406402979301723296587380309343e-6),
+  K(7.795949992093029453206710012586240448901380473901041211867061201),
+  K(1.1981848369205437476186375921271491908533441118956066787712364e-6),
+  K(7.847884764331556533729819121998266384068690508060016477820797861),
+  K(1.43421172379142595582248466447607570005946727336664229855462254e-6),
+  K(8.327310339157066301112964490178923521165379607827614138523700265),
+  K(6.9676626456264066994868568389891786393038959440882760972969014e-6),
+  K(8.569111182731737097726914694287744001240191634576450491699122293),
+  K(0.000014678262796916303409337392666611369153173108897435521275680847),
+  K(8.951304364976505137734273605763629836190701712285834627544469187),
+  K(0.000044541178412239953501012887598883241662892664085939971504977764),
+  K(9.037631695667362727047248798975615475164670717302377730476599245),
+  K(0.000056600953023458837404374740571712569981251312499262061143629759),
+  K(9.471237899624761386475885682515013955302760009531540487637183045),
+  K(0.00017765327701449233608794899434257550859012764553994613766601925),
+  K(9.561328003327206921860051815882553978792028079453724054001576763),
+  K(0.00022257775300868013091344333869051498749282654679792290072990859),
+  K(9.61510803146121550898655040128605895467354773082505009689577184),
+  K(0.00025414306382959461494443259828541590948732161470095497166479636),
+  K(9.745303914401534429045156270557193262144963919904714130140426272),
+  K(0.00034826122918627144847695730039075822820855784059615731313208797),
+  K(10.17229451707635202134690906809470370937006973810983236583111517),
+  K(0.00092313943246795472301085281782007216523403383138714478946282457),
+  K(10.5149331170130411213970504469436077228500483501105700482693984),
+  K(0.0018952533188307718411071188972355377119016296416031516849205117),
+  K(10.60561882649686687412707768204435848639302115576970877681361333),
+  K(0.002271862360587999834283615636619491694924105118472351559358952),
+  K(10.78118825264234898022008999629517535023060719220605833790806609),
+  K(0.0031925355526717678269888155352724160286112300916610691667522076),
+  K(10.78617814816121791984559189191457452578241304509956663388676909),
+  K(0.0032228961496338996383380273515234679735100064674600312917229928),
+  K(10.8096673979816390787186459848154261172621337218404650274504757),
+  K(0.0033692303079733421244839137211751316090116100456431620876568708),
+  K(10.87486318615447014313179826207000017908771356560536357199942464),
+  K(0.0038061896203947124389418912389735367256311145583042890309422775),
+  K(10.98170867565177164629017051828951562160106944386744614489589956),
+  K(0.0046290830395556903637010575206412799709878206746116165070934718),
+  K(11.24088140606170986667257382353597362367595071452997585750864885),
+  K(0.0072871850169947716156154385028288783184627665563924336620795303),
+  K(11.82812311152688838126778231516538262785214049321761797118146451),
+  K(0.01829298487137343503594930224532142602409118611127498463610001),
+  K(11.85760159726611454538420142759544467592930479822238015473434816),
+  K(0.019084056217436655038046652735600444508300329757283248564796737),
+  K(12.06020678490528370421374447630576575120408872131450122368724358),
+  K(0.025279287338726008805515318074709881270005462771265029168518767),
+  K(12.36110936767852598583227309999275993831018618248525679820039799),
+  K(0.037192757708899673163301704411323916475358110053071674213411199),
+  K(12.42696264974084804094002460885785967247691705012310790689939337),
+  K(0.040272255512227265024216255069391662581107408555896977765348053),
+  K(12.50048993130091550639884459771966265383029711359512242731795256),
+  K(0.043921035906371332800645621217060473721646157252686971824279704),
+  K(12.76785338659063480337864446741569079768342258673844988046667998),
+  K(0.059104822788457618219679617433860516271582705536350429827148078),
+  K(12.78224770036495545378991678515257296968574962067166162090721712),
+  K(0.06000819406754068090280369550296204785629763709867072533491248),
+  K(12.83896153196517490410990068602368149880084838326625774958575983),
+  K(0.063652410347441647242255858281508748175742812395738410508137458),
+  K(12.95996350632159583693464738359288731001952235368644844923236516),
+  K(0.071874637874226656442835628148219972362877531257223631263859277),
+  K(13.19484997545570161788623678146981620653487314346760977047774375),
+  K(0.089489802117758201526126809874463688180098332459227459465801975),
+  K(13.85184864255674249868559706560228752402650510251971011998411398),
+  K(0.14723915792516092034091581121037634976415335115681949136879101),
+  K(14.02668385422158990643403416549099229903110274232231129651470496),
+  K(0.16341217288900145231637291079313428026813340696933952989251944),
+  K(14.02771339126193334997730039964659946789233747759310633676308322),
+  K(0.16350677157284519374395039785357919985927928703971263156157893),
+  K(14.1648384514967696343039559713768476015373828227451180751259897),
+  K(0.17596506664932476817739459873536929376424322176530785803429087),
+  K(14.16542670069152426591765629028324747759215974132306111526738805),
+  K(0.17601776120103504198145141924318471478998378370297819676749559),
+  K(14.38603529771007628451526880793922460897772326247174998084002688),
+  K(0.19509788575393317830989104525974502286523399407243483659409339),
+  K(14.41734093723551659089835003614701269994267695884872283317346405),
+  K(0.19766892084896759298771445010526993119361038751333112601227889),
+  K(14.4514175694780156188289627566734759298596529034243245210868481),
+  K(0.20042054430970276047930172865295896388112624535199855143085229),
+  K(14.57733406397546435801804748077471448128118101920965181674097288),
+  K(0.21011330438582511721177327421235709661657334372205630750405979),
+  K(14.69179499512638317680816104901350396317750590196293863077566809),
+  K(0.21818064807188167088117905356260851709728241833911872426393943),
+  K(14.71985119176432698413364946100402823592695041881810902103644983),
+  K(0.22003696632978313800818059548056788054787816374196649730868422),
+  K(14.85360819914592592187710888567316221464135719039680744109786518),
+  K(0.22816320128876067720806260009666608763032575628786512716547537),
+  K(14.96442151928193479149641632250822185813308142673420928656148499),
+  K(0.23391207125767642386584572438688975518528224084727000823610053),
+  K(15.09198805599875400518643565726688476470367019728800472825838386),
+  K(0.23932132342609152786262701422200965407928935108398228689423077),
+  K(15.16917405251099092176676667071808641853587958116779639833339883),
+  K(0.24192699203746064453916872974085076964366007483611183834935937),
+  K(15.22189598318078945679052280117796763696914221630837307362345766),
+  K(0.24340615698602401858985265552378964143504360111849992441699181),
+  K(15.38267497789712439192725521738075552267986404685942850480190865),
+  K(0.24636179792154708599756969484986104605022723440964665902382041),
+  K(15.44071413336911022494417191952253082031513933837340567448079451),
+  K(0.24684163539601499376496292031270154746415289827073608174217318),
+};
+
+#define ERR(x,y) IF(ABS(x - y) == K(0.0), ABS(x - y), ABS(x - y) / ABS(y))
+
+#if defined(NFFT_LDOUBLE)
+static const R bound = K(15.0) * EPSILON;
+#elif defined(NFFT_SINGLE)
+static const R bound = K(20.0) * EPSILON;
+#else
+static const R bound = K(15.0) * EPSILON;
+#endif
+
+static int check_bspline(const unsigned n, const unsigned int m, const R *r)
+{
+  unsigned int j;
+  R scratch[100];
+  R err = K(0.0);
+  int ok;
+
+  for (j = 0; j < m; j++)
+  {
+    const R x = r[2*j], yr = r[2*j+1];
+    R y = X(bspline)((INT)(n + 1), x, scratch);
+    /*printf("x = " __FE__ ", err = " __FE__ "\n", x, ERR(y,yr));*/
+    err = FMAX(err, ERR(y, yr));
+  }
+  ok = IF(err < bound, 1, 0);
+  fprintf(stderr, "b%02d: err_rel = " __FE__ " %-2s " __FE__ " -> %-4s\n", n, err, IF(ok == 0, ">=", "<"), bound , IF(ok == 0, "FAIL", "OK"));
+  return ok;
+}
+
+void X(check_bspline)(void)
+{
+  const R *b[] = {
+    b0, b1, b2, b3, b4, b5, b6, b7, b8, b9,
+    b10, b11, b12, b13, b14, b15, b16, b17, b18, b19,
+    b20, b21, b22, b23, b24, b25, b26, b27, b28, b29,
+    b30,
+  };
+  unsigned int j;
+  int ok = 1;
+  printf("B-SPLINE\n--------\n");
+  for (j = 0; j < sizeof(b)/sizeof(b[0]); j++)
+  {
+    ok = MIN(ok, check_bspline(j, 100, b[j]));
+  }
+  CU_ASSERT(ok == 1);
+}
diff --git a/applications/doxygen.c b/tests/bspline.h
similarity index 80%
copy from applications/doxygen.c
copy to tests/bspline.h
index 710c986..04fa7a3 100644
--- a/applications/doxygen.c
+++ b/tests/bspline.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free Software
@@ -16,8 +16,8 @@
  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/* $Id: doxygen.c 3775 2012-06-02 16:39:48Z keiner $ */
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
 
-/**
- * \defgroup applications Applications
- */
+#include "infft.h"
+
+void X(check_bspline)(void);
diff --git a/tests/check.c b/tests/check.c
new file mode 100644
index 0000000..be9582b
--- /dev/null
+++ b/tests/check.c
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <CUnit/CUnit.h>
+#include <CUnit/TestRun.h>
+#include <CUnit/Automated.h>
+
+#include "infft.h"
+#include "bspline.h"
+#include "bessel.h"
+#include "nfft.h"
+#include "nfct.h"
+#include "nfst.h"
+
+int main(void)
+{
+  CU_pSuite util, nfft, nfct, nfst;
+  CU_initialize_registry();
+  /*CU_set_output_filename("nfft");*/
+#ifdef _OPENMP
+  CU_set_output_filename("CUnitAutomated_threads");
+#endif
+
+#undef X
+#define X(name) NFFT(name)
+  nfft = CU_add_suite("nfft", 0, 0);
+  CU_add_test(nfft, "nfft_1d_direct_file", X(check_1d_direct_file));
+  CU_add_test(nfft, "nfft_1d_fast_file", X(check_1d_fast_file));
+  CU_add_test(nfft, "nfft_adjoint_1d_direct_file", X(check_adjoint_1d_direct_file));
+  CU_add_test(nfft, "nfft_adjoint_1d_fast_file", X(check_adjoint_1d_fast_file));
+  CU_add_test(nfft, "nfft_1d_online", X(check_1d_online));
+  CU_add_test(nfft, "nfft_adjoint_1d_online", X(check_adjoint_1d_online));
+
+  CU_add_test(nfft, "nfft_2d_direct_file", X(check_2d_direct_file));
+  CU_add_test(nfft, "nfft_2d_fast_file", X(check_2d_fast_file));
+  CU_add_test(nfft, "nfft_adjoint_2d_direct_file", X(check_adjoint_2d_direct_file));
+  CU_add_test(nfft, "nfft_adjoint_2d_fast_file", X(check_adjoint_2d_fast_file));
+  CU_add_test(nfft, "nfft_2d_online", X(check_2d_online));
+  CU_add_test(nfft, "nfft_adjoint_2d_online", X(check_adjoint_2d_online));
+
+  CU_add_test(nfft, "nfft_3d_direct_file", X(check_3d_direct_file));
+  CU_add_test(nfft, "nfft_3d_fast_file", X(check_3d_fast_file));
+  CU_add_test(nfft, "nfft_adjoint_3d_direct_file", X(check_adjoint_3d_direct_file));
+  CU_add_test(nfft, "nfft_adjoint_3d_fast_file", X(check_adjoint_3d_fast_file));
+  CU_add_test(nfft, "nfft_3d_online", X(check_3d_online));
+  CU_add_test(nfft, "nfft_adjoint_3d_online", X(check_adjoint_3d_online));
+
+  CU_add_test(nfft, "nfft_4d_online", X(check_4d_online));
+  CU_add_test(nfft, "nfft_adjoint_4d_online", X(check_adjoint_4d_online));
+#ifdef HAVE_NFCT
+#undef X
+#define X(name) NFCT(name)
+#ifndef _OPENMP
+  nfct = CU_add_suite("nfct", 0, 0);
+  CU_add_test(nfct, "nfct_1d_direct_file", X(check_1d_direct_file));
+  CU_add_test(nfct, "nfct_1d_fast_file", X(check_1d_fast_file));
+  CU_add_test(nfct, "nfct_adjoint_1d_direct_file", X(check_adjoint_1d_direct_file));
+  CU_add_test(nfct, "nfct_adjoint_1d_fast_file", X(check_adjoint_1d_fast_file));
+  CU_add_test(nfct, "nfct_1d_online", X(check_1d_online));
+  CU_add_test(nfct, "nfct_adjoint_1d_online", X(check_adjoint_1d_online));
+
+  CU_add_test(nfct, "nfct_2d_direct_file", X(check_2d_direct_file));
+  CU_add_test(nfct, "nfct_2d_fast_file", X(check_2d_fast_file));
+  CU_add_test(nfct, "nfct_adjoint_2d_direct_file", X(check_adjoint_2d_direct_file));
+  CU_add_test(nfct, "nfct_adjoint_2d_fast_file", X(check_adjoint_2d_fast_file));
+  CU_add_test(nfct, "nfct_2d_online", X(check_2d_online));
+  CU_add_test(nfct, "nfct_adjoint_2d_online", X(check_adjoint_2d_online));
+
+  CU_add_test(nfct, "nfct_3d_direct_file", X(check_3d_direct_file));
+  CU_add_test(nfct, "nfct_3d_fast_file", X(check_3d_fast_file));
+  CU_add_test(nfct, "nfct_adjoint_3d_direct_file", X(check_adjoint_3d_direct_file));
+  CU_add_test(nfct, "nfct_adjoint_3d_fast_file", X(check_adjoint_3d_fast_file));
+  CU_add_test(nfct, "nfct_3d_online", X(check_3d_online));
+  CU_add_test(nfct, "nfct_adjoint_3d_online", X(check_adjoint_3d_online));
+
+  CU_add_test(nfct, "nfct_4d_online", X(check_4d_online));
+  CU_add_test(nfct, "nfct_adjoint_4d_online", X(check_adjoint_4d_online));
+#endif
+#endif
+#ifdef HAVE_NFST
+#undef X
+#define X(name) NFST(name)
+#ifndef _OPENMP
+  nfst = CU_add_suite("nfst", 0, 0);
+  CU_add_test(nfst, "nfst_1d_direct_file", X(check_1d_direct_file));
+  CU_add_test(nfst, "nfst_1d_fast_file", X(check_1d_fast_file));
+  CU_add_test(nfst, "nfst_adjoint_1d_direct_file", X(check_adjoint_1d_direct_file));
+  CU_add_test(nfst, "nfst_adjoint_1d_fast_file", X(check_adjoint_1d_fast_file));
+  CU_add_test(nfst, "nfst_1d_online", X(check_1d_online));
+  CU_add_test(nfst, "nfst_adjoint_1d_online", X(check_adjoint_1d_online));
+
+  CU_add_test(nfst, "nfst_2d_direct_file", X(check_2d_direct_file));
+  CU_add_test(nfst, "nfst_2d_fast_file", X(check_2d_fast_file));
+  CU_add_test(nfst, "nfst_adjoint_2d_direct_file", X(check_adjoint_2d_direct_file));
+  CU_add_test(nfst, "nfst_adjoint_2d_fast_file", X(check_adjoint_2d_fast_file));
+  CU_add_test(nfst, "nfst_2d_online", X(check_2d_online));
+  CU_add_test(nfst, "nfst_adjoint_2d_online", X(check_adjoint_2d_online));
+
+  CU_add_test(nfst, "nfst_3d_direct_file", X(check_3d_direct_file));
+  CU_add_test(nfst, "nfst_3d_fast_file", X(check_3d_fast_file));
+  CU_add_test(nfst, "nfst_adjoint_3d_direct_file", X(check_adjoint_3d_direct_file));
+  CU_add_test(nfst, "nfst_adjoint_3d_fast_file", X(check_adjoint_3d_fast_file));
+  CU_add_test(nfst, "nfst_3d_online", X(check_3d_online));
+  CU_add_test(nfst, "nfst_adjoint_3d_online", X(check_adjoint_3d_online));
+
+  CU_add_test(nfst, "nfst_4d_online", X(check_4d_online));
+  CU_add_test(nfst, "nfst_adjoint_4d_online", X(check_adjoint_4d_online));
+#endif
+#endif
+#undef X
+#define X(name) Y(name)
+  util = CU_add_suite("util", 0, 0);
+  CU_add_test(util, "bspline", X(check_bspline));
+  CU_add_test(util, "bessel_i0", X(check_bessel_i0));
+  CU_automated_run_tests();
+  //CU_basic_run_tests();
+  {
+    unsigned int ok = (CU_get_number_of_tests_failed() == 0);
+    CU_cleanup_registry();
+    return IF(ok, EXIT_SUCCESS, EXIT_FAILURE);
+  }
+}
diff --git a/tests/check_bspline.m b/tests/check_bspline.m
new file mode 100644
index 0000000..3c33048
--- /dev/null
+++ b/tests/check_bspline.m
@@ -0,0 +1,39 @@
+(* ::Package:: *)
+
+(************************************************************************)
+(* This file was generated automatically by the Mathematica front end.  *)
+(* It contains Initialization cells from a Notebook file, which         *)
+(* typically will have the same name as this file except ending in      *)
+(* ".nb" instead of ".m".                                               *)
+(*                                                                      *)
+(* This file is intended to be loaded into the Mathematica kernel using *)
+(* the package loading commands Get or Needs.  Doing so is equivalent   *)
+(* to using the Evaluate Initialization Cells menu command in the front *)
+(* end.                                                                 *)
+(*                                                                      *)
+(* DO NOT EDIT THIS FILE.  This entire file is regenerated              *)
+(* automatically each time the parent Notebook file is saved in the     *)
+(* Mathematica front end.  Any changes you make to this file will be    *)
+(* overwritten.                                                         *)
+(************************************************************************)
+
+
+
+AppendTo[$Path, NotebookDirectory[]];
+<<PrintVector`
+
+
+P=64;(* Working precision. *)
+
+
+BSpline[n_][x_]:=BSplineBasis[n,x/(n+1)];
+Generate[n_]:=Module[
+{
+m=100
+},
+x=Sort[RandomReal[{0,(n+1)/2},m,WorkingPrecision->P]];
+y=Map[BSpline[n],x];
+FormatVector[Flatten[N[Transpose[{x,y}],P]], "b" <> ToString[n]]];
+
+
+
diff --git a/tests/check_bspline.nb b/tests/check_bspline.nb
new file mode 100644
index 0000000..d56e792
--- /dev/null
+++ b/tests/check_bspline.nb
@@ -0,0 +1,237 @@
+(* Content-type: application/mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 7.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       145,          7]
+NotebookDataLength[     11028,        228]
+NotebookOptionsPosition[     10447,        204]
+NotebookOutlinePosition[     10835,        221]
+CellTagsIndexPosition[     10792,        218]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{"AppendTo", "[", 
+   RowBox[{"$Path", ",", " ", 
+    RowBox[{"NotebookDirectory", "[", "]"}]}], "]"}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{"<<", "PrintVector`"}]}], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.4975401175502357`*^9, 3.497540122081654*^9}, {
+   3.4975401577475357`*^9, 3.4975404433537083`*^9}, {3.497540482896634*^9, 
+   3.4975405759100437`*^9}, {3.497541105993033*^9, 3.497541123798511*^9}, {
+   3.497542050468046*^9, 3.497542062974934*^9}, {3.497542456642642*^9, 
+   3.497542474403122*^9}, {3.497542524646307*^9, 3.497542533911161*^9}, {
+   3.4975426113736467`*^9, 3.497542615636695*^9}, 3.49754300944394*^9, 
+   3.497543161820746*^9, {3.4975433080968943`*^9, 3.497543333089579*^9}, {
+   3.497634816866467*^9, 3.497634822396894*^9}, 3.497634889182472*^9, {
+   3.4976349550362673`*^9, 3.497635002695628*^9}, {3.497635080038419*^9, 
+   3.4976350905563173`*^9}, {3.497720303149754*^9, 3.497720340683272*^9}, 
+   3.497720446950582*^9, {3.497720543770192*^9, 3.497720554263856*^9}, {
+   3.497720624718094*^9, 3.4977206409163923`*^9}, {3.497720745653871*^9, 
+   3.497720821394751*^9}, {3.497720852170191*^9, 3.497720892717999*^9}, {
+   3.497720926142789*^9, 3.497720963010685*^9}, {3.49772100166604*^9, 
+   3.4977210066482897`*^9}, {3.497721154131791*^9, 3.4977211732733927`*^9}, {
+   3.497721253141778*^9, 3.497721260212431*^9}, {3.4977213873833313`*^9, 
+   3.497721394326082*^9}, {3.4977214268766117`*^9, 3.497721450684969*^9}, 
+   3.517368305980814*^9, 3.517368338946211*^9, {3.548337349389185*^9, 
+   3.54833735124184*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{
+   RowBox[{"P", "=", "64"}], ";"}], 
+  RowBox[{"(*", " ", 
+   RowBox[{"Working", " ", 
+    RowBox[{"precision", "."}]}], " ", "*)"}]}]], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.5173364544175253`*^9, 3.517336455143111*^9}, {
+  3.548337583667452*^9, 3.548337584482711*^9}}],
+
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{
+   RowBox[{
+    RowBox[{"BSpline", "[", "n_", "]"}], "[", "x_", "]"}], ":=", 
+   RowBox[{"BSplineBasis", "[", 
+    RowBox[{"n", ",", 
+     RowBox[{"x", "/", 
+      RowBox[{"(", 
+       RowBox[{"n", "+", "1"}], ")"}]}]}], "]"}]}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"Generate", "[", "n_", "]"}], ":=", 
+   RowBox[{"Module", "[", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"{", "\[IndentingNewLine]", 
+      RowBox[{"m", "=", "100"}], "\[IndentingNewLine]", "}"}], ",", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"x", "=", 
+       RowBox[{"Sort", "[", 
+        RowBox[{"RandomReal", "[", 
+         RowBox[{
+          RowBox[{"{", 
+           RowBox[{"0", ",", 
+            RowBox[{
+             RowBox[{"(", 
+              RowBox[{"n", "+", "1"}], ")"}], "/", "2"}]}], "}"}], ",", "m", 
+          ",", 
+          RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}], "]"}]}], ";",
+       "\[IndentingNewLine]", 
+      RowBox[{"y", "=", 
+       RowBox[{"Map", "[", 
+        RowBox[{
+         RowBox[{"BSpline", "[", "n", "]"}], ",", "x"}], "]"}]}], ";", 
+      "\[IndentingNewLine]", 
+      RowBox[{"FormatVector", "[", 
+       RowBox[{
+        RowBox[{"Flatten", "[", 
+         RowBox[{"N", "[", 
+          RowBox[{
+           RowBox[{"Transpose", "[", 
+            RowBox[{"{", 
+             RowBox[{"x", ",", "y"}], "}"}], "]"}], ",", "P"}], "]"}], "]"}], 
+        ",", " ", 
+        RowBox[{"\"\<b\>\"", " ", "<>", " ", 
+         RowBox[{"ToString", "[", "n", "]"}]}]}], "]"}]}]}], "]"}]}], 
+  ";"}]}], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.4975401175502357`*^9, 3.497540122081654*^9}, {
+   3.4975401577475357`*^9, 3.4975404433537083`*^9}, {3.497540482896634*^9, 
+   3.4975405759100437`*^9}, {3.497541105993033*^9, 3.497541123798511*^9}, {
+   3.497542050468046*^9, 3.497542062974934*^9}, {3.497542456642642*^9, 
+   3.497542474403122*^9}, {3.497542524646307*^9, 3.497542533911161*^9}, {
+   3.4975426113736467`*^9, 3.497542615636695*^9}, 3.49754300944394*^9, 
+   3.497543161820746*^9, {3.4975433080968943`*^9, 3.497543333089579*^9}, {
+   3.497634816866467*^9, 3.497634822396894*^9}, 3.497634889182472*^9, {
+   3.497635656084387*^9, 3.4976356567772627`*^9}, {3.4976358827461843`*^9, 
+   3.497635902805756*^9}, {3.497639560178165*^9, 3.4976395887805*^9}, {
+   3.497717629788444*^9, 3.497717664775313*^9}, {3.4977177954171267`*^9, 
+   3.497717811441677*^9}, {3.497717946124824*^9, 3.4977179590024843`*^9}, {
+   3.497718091880231*^9, 3.497718097174159*^9}, {3.4977181869580393`*^9, 
+   3.4977182306418543`*^9}, {3.4977182817373667`*^9, 3.497718295439774*^9}, {
+   3.4977185155717163`*^9, 3.497718516178872*^9}, {3.4977186098337307`*^9, 
+   3.497718655031732*^9}, {3.497720354018293*^9, 3.497720361711935*^9}, {
+   3.51646665501819*^9, 3.516466703700296*^9}, {3.516466744180666*^9, 
+   3.516466850500287*^9}, {3.516466920776816*^9, 3.516466924558702*^9}, {
+   3.5164671087352133`*^9, 3.516467132940102*^9}, {3.5164672595898933`*^9, 
+   3.516467335735387*^9}, {3.516467446831277*^9, 3.5164675178909597`*^9}, {
+   3.516467566236536*^9, 3.516467602081119*^9}, {3.516467646594492*^9, 
+   3.516467693982851*^9}, {3.516467799630619*^9, 3.5164678145625057`*^9}, {
+   3.516467907906891*^9, 3.516467931231696*^9}, {3.516467974227989*^9, 
+   3.516468069686613*^9}, {3.5164681647268057`*^9, 3.516468322329309*^9}, {
+   3.516468353208788*^9, 3.516468402515073*^9}, {3.516468569358057*^9, 
+   3.5164688697654257`*^9}, {3.516469069967986*^9, 3.516469104912592*^9}, {
+   3.516469281838047*^9, 3.516469282536112*^9}, {3.516469343196455*^9, 
+   3.5164693448977213`*^9}, {3.516641118739716*^9, 3.51664112101792*^9}, {
+   3.5170662585360413`*^9, 3.517066346582275*^9}, {3.517066422311091*^9, 
+   3.517066427735291*^9}, {3.517068514164235*^9, 3.517068550246681*^9}, {
+   3.517068593075931*^9, 3.5170685931933107`*^9}, {3.517068669073209*^9, 
+   3.5170686693269997`*^9}, {3.517068780917268*^9, 3.5170688290906487`*^9}, {
+   3.517068882706683*^9, 3.5170688831366453`*^9}, {3.517068913481579*^9, 
+   3.517068922846977*^9}, {3.5170689796719627`*^9, 3.517068986237167*^9}, {
+   3.517069122334919*^9, 3.517069164248382*^9}, {3.5170692558435507`*^9, 
+   3.517069255983468*^9}, {3.517069318241144*^9, 3.517069318331732*^9}, {
+   3.517069353096478*^9, 3.517069353285783*^9}, {3.517069394183385*^9, 
+   3.51706939429727*^9}, {3.5170694669148607`*^9, 3.517069467074445*^9}, {
+   3.517069521880518*^9, 3.517069561354265*^9}, {3.5170708977239847`*^9, 
+   3.517070898060605*^9}, {3.517070929587063*^9, 3.517071052229973*^9}, {
+   3.5170711918685713`*^9, 3.51707122081702*^9}, {3.5170712579552593`*^9, 
+   3.517071258184224*^9}, {3.517073554532979*^9, 3.517073566800956*^9}, {
+   3.51707363019388*^9, 3.5170736389107037`*^9}, {3.517073698959797*^9, 
+   3.51707370067715*^9}, {3.5171618948918943`*^9, 3.5171619115024137`*^9}, {
+   3.517250721250164*^9, 3.5172507217341347`*^9}, {3.5173346932505627`*^9, 
+   3.517334838578896*^9}, {3.517334905472475*^9, 3.517334917950143*^9}, {
+   3.517334957247117*^9, 3.517334978535076*^9}, {3.517335011733391*^9, 
+   3.5173350406442137`*^9}, {3.5173351201064262`*^9, 3.517335137793874*^9}, {
+   3.517335375660467*^9, 3.517335412963312*^9}, {3.517335455731798*^9, 
+   3.517335551041175*^9}, {3.517335604376453*^9, 3.5173357376825*^9}, {
+   3.517335798572322*^9, 3.51733580322344*^9}, {3.5173358514269238`*^9, 
+   3.517335963393672*^9}, {3.517336003163329*^9, 3.517336058165167*^9}, {
+   3.517336256363311*^9, 3.517336305265251*^9}, {3.51733636389287*^9, 
+   3.517336367248146*^9}, {3.51733647413474*^9, 3.5173364746654367`*^9}, {
+   3.517336559248983*^9, 3.517336561848617*^9}, {3.517367626541649*^9, 
+   3.517367705336946*^9}, {3.517367791656136*^9, 3.517367810533764*^9}, {
+   3.5173680054015837`*^9, 3.5173681448802223`*^9}, {3.517368202592416*^9, 
+   3.517368212221806*^9}, {3.5173682793361473`*^9, 3.517368279723124*^9}, {
+   3.517368363455708*^9, 3.517368401466815*^9}, {3.517368451212386*^9, 
+   3.517368463409952*^9}, {3.517368495795951*^9, 3.517368510236106*^9}, {
+   3.517368551091064*^9, 3.517368595286662*^9}, {3.517368631352521*^9, 
+   3.5173686772721653`*^9}, {3.517383983727648*^9, 3.5173840466805964`*^9}, {
+   3.517384159065975*^9, 3.517384167298918*^9}, {3.51738422514648*^9, 
+   3.517384227338999*^9}, {3.518195295280732*^9, 3.518195305846961*^9}, {
+   3.518195456601633*^9, 3.518195460327448*^9}, {3.518196187080405*^9, 
+   3.518196205713777*^9}, 3.518196243875588*^9, {3.518197087019044*^9, 
+   3.5181970888272057`*^9}, {3.548336163833386*^9, 3.548336166412342*^9}, {
+   3.548336343704324*^9, 3.548336358860406*^9}, {3.5483364701780357`*^9, 
+   3.548336484144067*^9}, {3.548336529883884*^9, 3.548336540969346*^9}, {
+   3.548344607348515*^9, 3.548344608870598*^9}, {3.5495594857527237`*^9, 
+   3.549559510417324*^9}, {3.549560400322785*^9, 3.5495604776526413`*^9}, {
+   3.549637907930561*^9, 3.549637922452034*^9}, {3.5496379565093718`*^9, 
+   3.5496380035909367`*^9}, 3.549638040226357*^9, {3.5496380802428503`*^9, 
+   3.549638098056082*^9}, {3.549638145230761*^9, 3.549638177884942*^9}, {
+   3.549638229589314*^9, 3.549638251723818*^9}, {3.5496385676394567`*^9, 
+   3.549638588241356*^9}, {3.54963862593426*^9, 3.549638633324247*^9}, {
+   3.549638677797104*^9, 3.5496387048832493`*^9}, {3.550420775634617*^9, 
+   3.5504207791029*^9}}],
+
+Cell[BoxData[
+ RowBox[{"For", "[", 
+  RowBox[{
+   RowBox[{"j", "=", "0"}], ",", 
+   RowBox[{"j", "<=", "30"}], ",", 
+   RowBox[{"j", "++"}], ",", 
+   RowBox[{"Print", "[", 
+    RowBox[{"Generate", "[", "j", "]"}], "]"}]}], "]"}]], "Input",
+ CellChangeTimes->{{3.549637948757147*^9, 3.549637966272908*^9}, {
+   3.549638115113505*^9, 3.5496381154327927`*^9}, {3.5496381489365187`*^9, 
+   3.5496381686007137`*^9}, {3.549638468322133*^9, 3.549638481257453*^9}, {
+   3.549989078835218*^9, 3.549989116077559*^9}, 3.550337480630468*^9}]
+},
+AutoGeneratedPackage->Automatic,
+WindowSize->{1440, 786},
+WindowMargins->{{0, Automatic}, {Automatic, 0}},
+FrontEndVersion->"8.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 6, \
+2010)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[545, 20, 1621, 27, 43, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[2169, 49, 352, 10, 27, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[2524, 61, 7387, 128, 133, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[9914, 191, 529, 11, 27, "Input"]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/tests/check_nfct.m b/tests/check_nfct.m
new file mode 100644
index 0000000..3a88dc3
--- /dev/null
+++ b/tests/check_nfct.m
@@ -0,0 +1,84 @@
+(* ::Package:: *)
+
+(************************************************************************)
+(* This file was generated automatically by the Mathematica front end.  *)
+(* It contains Initialization cells from a Notebook file, which         *)
+(* typically will have the same name as this file except ending in      *)
+(* ".nb" instead of ".m".                                               *)
+(*                                                                      *)
+(* This file is intended to be loaded into the Mathematica kernel using *)
+(* the package loading commands Get or Needs.  Doing so is equivalent   *)
+(* to using the Evaluate Initialization Cells menu command in the front *)
+(* end.                                                                 *)
+(*                                                                      *)
+(* DO NOT EDIT THIS FILE.  This entire file is regenerated              *)
+(* automatically each time the parent Notebook file is saved in the     *)
+(* Mathematica front end.  Any changes you make to this file will be    *)
+(* overwritten.                                                         *)
+(************************************************************************)
+
+
+
+AppendTo[$Path, NotebookDirectory[]];
+<<PrintVector`
+
+
+P=64;(* Working precision. *)
+
+
+GenerateFilename[prefix_][NN_,M_]:=Module[{d=Length[NN] (* Dimension. *)},Return[FileNameJoin[{prefix,"nfct_"<>ToString[d]<>"d_"<>StringJoin[Map[Function[x,ToString[x]<>"_"],NN]<>ToString[M]<>".txt"]}]]]
+GenerateFilenameAdjoint[prefix_][NN_,M_]:=Module[{d=Length[NN] (* Dimension. *)},Return[FileNameJoin[{prefix,"nfct_adjoint_"<>ToString[d]<>"d_"<>StringJoin[Map[Function[x,ToString[x]<>"_"],NN]<>ToString[M]<>".txt"]}]]]
+Generate[NN_,M_,FilenameGenerator_]:=Module[
+{
+d=Length[NN], (* Dimension. *)
+file
+},
+SeedRandom[1];
+II=Table[Table[k,{k,0,NN[[i]]-1}],{i,1,d}];
+II[[0]]=Sequence;
+II=Flatten[Outer[List,II],d-1];(* Index set. *)
+x =Transpose[ Table[RandomReal[{0,1/2},M,WorkingPrecision->P](*Table[1/4,{j,1,M}]*),{i,1,d}]];(* Random nodes. *)
+fhat = (*Table[If[i==3,1,0],{i,1,Length[II]}]*) RandomReal[{-1,1},Length[II],WorkingPrecision->P]; (* Random Fourier coefficients. *)
+f=Table[Sum[fhat[[k]]*Product[Cos[2*\[Pi]*II[[k]][[i]]*x[[j]][[i]]],{i,1,d}],{k,1,Length[II]}],{j,1,M}];(* Function values. *)
+filename=FilenameGenerator[NN,M];
+file = OpenWrite[filename];
+WriteString[file, FormatIntegerRaw[d] <>"\n"];
+WriteString[file, FormatIntegerVectorRaw[NN]<>"\n"];
+WriteString[file, FormatIntegerRaw[M]<>"\n"];
+WriteString[file, FormatVectorRaw[Flatten[x]]<>"\n"];
+WriteString[file, FormatVectorRaw[fhat]<>"\n"];
+WriteString[file, FormatVectorRaw[f]<>"\n"];
+Close[file];
+(*Print[filename];*)
+Return[{FileBaseName[FileNameTake[filename,-1]], FileNameTake[filename,-2]}]
+]
+GenerateAdjoint[NN_,M_,FilenameGenerator_]:=Module[
+{
+d=Length[NN], (* Dimension. *)
+file
+},
+SeedRandom[1];
+II=Table[Table[k,{k,0,NN[[i]]-1}],{i,1,d}];
+II[[0]]=Sequence;
+II=Flatten[Outer[List,II],d-1];(* Index set. *)
+x=Transpose[ Table[RandomReal[{0,1/2},M,WorkingPrecision->P],{i,1,d}]];(* Random nodes. *)
+f=RandomReal[{-1,1},M,WorkingPrecision->P];(* Random function values. *)
+fhat=Table[Sum[f[[j]]*Product[Cos[2*\[Pi]*II[[k]][[i]]*x[[j]][[i]]],{i,1,d}],{j,1,M}],{k,1,Length[II]}];(* Pseudo Fourier coefficients. *)
+filename=FilenameGenerator[NN,M];
+file = OpenWrite[filename];
+WriteString[file, FormatIntegerRaw[d] <>"\n"];
+WriteString[file, FormatIntegerVectorRaw[NN]<>"\n"];
+WriteString[file, FormatIntegerRaw[M]<>"\n"];
+WriteString[file, FormatVectorRaw[Flatten[x]]<>"\n"];
+WriteString[file, FormatVectorRaw[fhat]<>"\n"];
+WriteString[file, FormatVectorRaw[f]<>"\n"];
+Close[file];
+(*Print[filename];*)
+Return[{FileBaseName[FileNameTake[filename,-1]], FileNameTake[filename,-2]}]
+]
+MakeTestcase[NN_,M_]:=Generate[NN,M,GenerateFilename[FileNameJoin[{NotebookDirectory[],"data"}]]]
+MakeTestcaseAdjoint[NN_,M_]:=GenerateAdjoint[NN,M,GenerateFilenameAdjoint[FileNameJoin[{NotebookDirectory[],"data"}]]]
+Formatter[x_]:="&"<>x;
+
+
+
diff --git a/tests/check_nfct.nb b/tests/check_nfct.nb
new file mode 100644
index 0000000..695d840
--- /dev/null
+++ b/tests/check_nfct.nb
@@ -0,0 +1,1185 @@
+(* Content-type: application/mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 7.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       145,          7]
+NotebookDataLength[     47562,       1176]
+NotebookOptionsPosition[     46722,       1146]
+NotebookOutlinePosition[     47111,       1163]
+CellTagsIndexPosition[     47068,       1160]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{"AppendTo", "[", 
+   RowBox[{"$Path", ",", " ", 
+    RowBox[{"NotebookDirectory", "[", "]"}]}], "]"}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{"<<", "PrintVector`"}]}], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.4975401175502357`*^9, 3.497540122081654*^9}, {
+   3.4975401577475357`*^9, 3.4975404433537083`*^9}, {3.497540482896634*^9, 
+   3.4975405759100437`*^9}, {3.497541105993033*^9, 3.497541123798511*^9}, {
+   3.497542050468046*^9, 3.497542062974934*^9}, {3.497542456642642*^9, 
+   3.497542474403122*^9}, {3.497542524646307*^9, 3.497542533911161*^9}, {
+   3.4975426113736467`*^9, 3.497542615636695*^9}, 3.49754300944394*^9, 
+   3.497543161820746*^9, {3.4975433080968943`*^9, 3.497543333089579*^9}, {
+   3.497634816866467*^9, 3.497634822396894*^9}, 3.497634889182472*^9, {
+   3.4976349550362673`*^9, 3.497635002695628*^9}, {3.497635080038419*^9, 
+   3.4976350905563173`*^9}, {3.497720303149754*^9, 3.497720340683272*^9}, 
+   3.497720446950582*^9, {3.497720543770192*^9, 3.497720554263856*^9}, {
+   3.497720624718094*^9, 3.4977206409163923`*^9}, {3.497720745653871*^9, 
+   3.497720821394751*^9}, {3.497720852170191*^9, 3.497720892717999*^9}, {
+   3.497720926142789*^9, 3.497720963010685*^9}, {3.49772100166604*^9, 
+   3.4977210066482897`*^9}, {3.497721154131791*^9, 3.4977211732733927`*^9}, {
+   3.497721253141778*^9, 3.497721260212431*^9}, {3.4977213873833313`*^9, 
+   3.497721394326082*^9}, {3.4977214268766117`*^9, 3.497721450684969*^9}, 
+   3.517368305980814*^9, 3.517368338946211*^9, {3.548337349389185*^9, 
+   3.54833735124184*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{
+   RowBox[{"P", "=", "64"}], ";"}], 
+  RowBox[{"(*", " ", 
+   RowBox[{"Working", " ", 
+    RowBox[{"precision", "."}]}], " ", "*)"}]}]], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.5173364544175253`*^9, 3.517336455143111*^9}, {
+  3.548337583667452*^9, 3.548337584482711*^9}}],
+
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{
+   RowBox[{"GenerateFilename", "[", "prefix_", "]"}], "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{"d", "=", 
+      RowBox[{"Length", "[", "NN", "]"}]}], " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Dimension", "."}], " ", "*)"}], "}"}], ",", 
+    RowBox[{"Return", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{"prefix", ",", 
+        RowBox[{"\"\<nfct_\>\"", "<>", 
+         RowBox[{"ToString", "[", "d", "]"}], "<>", "\"\<d_\>\"", "<>", 
+         RowBox[{"StringJoin", "[", 
+          RowBox[{
+           RowBox[{"Map", "[", 
+            RowBox[{
+             RowBox[{"Function", "[", 
+              RowBox[{"x", ",", 
+               RowBox[{
+                RowBox[{"ToString", "[", "x", "]"}], "<>", "\"\<_\>\""}]}], 
+              "]"}], ",", "NN"}], "]"}], "<>", 
+           RowBox[{"ToString", "[", "M", "]"}], "<>", "\"\<.txt\>\""}], 
+          "]"}]}]}], "}"}], "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"GenerateFilenameAdjoint", "[", "prefix_", "]"}], "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{"d", "=", 
+      RowBox[{"Length", "[", "NN", "]"}]}], " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Dimension", "."}], " ", "*)"}], "}"}], ",", 
+    RowBox[{"Return", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{"prefix", ",", 
+        RowBox[{"\"\<nfct_adjoint_\>\"", "<>", 
+         RowBox[{"ToString", "[", "d", "]"}], "<>", "\"\<d_\>\"", "<>", 
+         RowBox[{"StringJoin", "[", 
+          RowBox[{
+           RowBox[{"Map", "[", 
+            RowBox[{
+             RowBox[{"Function", "[", 
+              RowBox[{"x", ",", 
+               RowBox[{
+                RowBox[{"ToString", "[", "x", "]"}], "<>", "\"\<_\>\""}]}], 
+              "]"}], ",", "NN"}], "]"}], "<>", 
+           RowBox[{"ToString", "[", "M", "]"}], "<>", "\"\<.txt\>\""}], 
+          "]"}]}]}], "}"}], "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"Generate", "[", 
+   RowBox[{"NN_", ",", "M_", ",", "FilenameGenerator_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"{", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"Length", "[", "NN", "]"}]}], ",", " ", 
+      RowBox[{"(*", " ", 
+       RowBox[{"Dimension", "."}], " ", "*)"}], "\[IndentingNewLine]", 
+      "file"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"SeedRandom", "[", "1", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Table", "[", 
+         RowBox[{"k", ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "0", ",", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], "-", "1"}]}], "}"}]}], "]"}], 
+        ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"II", "[", 
+       RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Flatten", "[", 
+       RowBox[{
+        RowBox[{"Outer", "[", 
+         RowBox[{"List", ",", "II"}], "]"}], ",", 
+        RowBox[{"d", "-", "1"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Index", " ", 
+       RowBox[{"set", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"x", " ", "=", 
+      RowBox[{"Transpose", "[", " ", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"RandomReal", "[", 
+          RowBox[{
+           RowBox[{"{", 
+            RowBox[{"0", ",", 
+             RowBox[{"1", "/", "2"}]}], "}"}], ",", "M", ",", 
+           RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}], 
+         RowBox[{"(*", 
+          RowBox[{"Table", "[", 
+           RowBox[{
+            RowBox[{"1", "/", "4"}], ",", 
+            RowBox[{"{", 
+             RowBox[{"j", ",", "1", ",", "M"}], "}"}]}], "]"}], "*)"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", 
+       RowBox[{"nodes", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"fhat", " ", "=", " ", 
+      RowBox[{"(*", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"If", "[", 
+          RowBox[{
+           RowBox[{"i", "\[Equal]", "3"}], ",", "1", ",", "0"}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}], "*)"}], " ", 
+      
+      RowBox[{"RandomReal", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{
+          RowBox[{"-", "1"}], ",", "1"}], "}"}], ",", 
+        RowBox[{"Length", "[", "II", "]"}], ",", 
+        RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}]}], ";", " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", "Fourier", " ", 
+       RowBox[{"coefficients", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"f", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"fhat", "[", 
+            RowBox[{"[", "k", "]"}], "]"}], "*", 
+           RowBox[{"Product", "[", 
+            RowBox[{
+             RowBox[{"Cos", "[", 
+              RowBox[{"2", "*", "\[Pi]", "*", 
+               RowBox[{
+                RowBox[{"II", "[", 
+                 RowBox[{"[", "k", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}], "*", 
+               RowBox[{
+                RowBox[{"x", "[", 
+                 RowBox[{"[", "j", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}]}], "]"}], ",", 
+             RowBox[{"{", 
+              RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "1", ",", 
+            RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"j", ",", "1", ",", "M"}], "}"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Function", " ", 
+       RowBox[{"values", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"filename", "=", 
+      RowBox[{"FilenameGenerator", "[", 
+       RowBox[{"NN", ",", "M"}], "]"}]}], ";", "\[IndentingNewLine]", 
+     RowBox[{"file", " ", "=", " ", 
+      RowBox[{"OpenWrite", "[", "filename", "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "d", "]"}], " ", "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerVectorRaw", "[", "NN", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "M", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", 
+         RowBox[{"Flatten", "[", "x", "]"}], "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "fhat", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "f", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"Close", "[", "file", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"(*", 
+      RowBox[{
+       RowBox[{"Print", "[", "filename", "]"}], ";"}], "*)"}], 
+     "\[IndentingNewLine]", 
+     RowBox[{"Return", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"FileBaseName", "[", 
+         RowBox[{"FileNameTake", "[", 
+          RowBox[{"filename", ",", 
+           RowBox[{"-", "1"}]}], "]"}], "]"}], ",", " ", 
+        RowBox[{"FileNameTake", "[", 
+         RowBox[{"filename", ",", 
+          RowBox[{"-", "2"}]}], "]"}]}], "}"}], "]"}]}]}], 
+   "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"GenerateAdjoint", "[", 
+   RowBox[{"NN_", ",", "M_", ",", "FilenameGenerator_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"{", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"Length", "[", "NN", "]"}]}], ",", " ", 
+      RowBox[{"(*", " ", 
+       RowBox[{"Dimension", "."}], " ", "*)"}], "\[IndentingNewLine]", 
+      "file"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"SeedRandom", "[", "1", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Table", "[", 
+         RowBox[{"k", ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "0", ",", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], "-", "1"}]}], "}"}]}], "]"}], 
+        ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"II", "[", 
+       RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Flatten", "[", 
+       RowBox[{
+        RowBox[{"Outer", "[", 
+         RowBox[{"List", ",", "II"}], "]"}], ",", 
+        RowBox[{"d", "-", "1"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Index", " ", 
+       RowBox[{"set", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"x", "=", 
+      RowBox[{"Transpose", "[", " ", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"RandomReal", "[", 
+          RowBox[{
+           RowBox[{"{", 
+            RowBox[{"0", ",", 
+             RowBox[{"1", "/", "2"}]}], "}"}], ",", "M", ",", 
+           RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", 
+       RowBox[{"nodes", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"f", "=", 
+      RowBox[{"RandomReal", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{
+          RowBox[{"-", "1"}], ",", "1"}], "}"}], ",", "M", ",", 
+        RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", "function", " ", 
+       RowBox[{"values", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"fhat", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"f", "[", 
+            RowBox[{"[", "j", "]"}], "]"}], "*", 
+           RowBox[{"Product", "[", 
+            RowBox[{
+             RowBox[{"Cos", "[", 
+              RowBox[{"2", "*", "\[Pi]", "*", 
+               RowBox[{
+                RowBox[{"II", "[", 
+                 RowBox[{"[", "k", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}], "*", 
+               RowBox[{
+                RowBox[{"x", "[", 
+                 RowBox[{"[", "j", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}]}], "]"}], ",", 
+             RowBox[{"{", 
+              RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"j", ",", "1", ",", "M"}], "}"}]}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"k", ",", "1", ",", 
+          RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Pseudo", " ", "Fourier", " ", 
+       RowBox[{"coefficients", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"filename", "=", 
+      RowBox[{"FilenameGenerator", "[", 
+       RowBox[{"NN", ",", "M"}], "]"}]}], ";", "\[IndentingNewLine]", 
+     RowBox[{"file", " ", "=", " ", 
+      RowBox[{"OpenWrite", "[", "filename", "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "d", "]"}], " ", "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerVectorRaw", "[", "NN", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "M", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", 
+         RowBox[{"Flatten", "[", "x", "]"}], "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "fhat", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "f", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"Close", "[", "file", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"(*", 
+      RowBox[{
+       RowBox[{"Print", "[", "filename", "]"}], ";"}], "*)"}], 
+     "\[IndentingNewLine]", 
+     RowBox[{"Return", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"FileBaseName", "[", 
+         RowBox[{"FileNameTake", "[", 
+          RowBox[{"filename", ",", 
+           RowBox[{"-", "1"}]}], "]"}], "]"}], ",", " ", 
+        RowBox[{"FileNameTake", "[", 
+         RowBox[{"filename", ",", 
+          RowBox[{"-", "2"}]}], "]"}]}], "}"}], "]"}]}]}], 
+   "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"MakeTestcase", "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Generate", "[", 
+   RowBox[{"NN", ",", "M", ",", 
+    RowBox[{"GenerateFilename", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"NotebookDirectory", "[", "]"}], ",", "\"\<data\>\""}], "}"}],
+       "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"MakeTestcaseAdjoint", "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"GenerateAdjoint", "[", 
+   RowBox[{"NN", ",", "M", ",", 
+    RowBox[{"GenerateFilenameAdjoint", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"NotebookDirectory", "[", "]"}], ",", "\"\<data\>\""}], "}"}],
+       "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"Formatter", "[", "x_", "]"}], ":=", 
+   RowBox[{"\"\<&\>\"", "<>", "x"}]}], ";"}]}], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.4975401175502357`*^9, 3.497540122081654*^9}, {
+   3.4975401577475357`*^9, 3.4975404433537083`*^9}, {3.497540482896634*^9, 
+   3.4975405759100437`*^9}, {3.497541105993033*^9, 3.497541123798511*^9}, {
+   3.497542050468046*^9, 3.497542062974934*^9}, {3.497542456642642*^9, 
+   3.497542474403122*^9}, {3.497542524646307*^9, 3.497542533911161*^9}, {
+   3.4975426113736467`*^9, 3.497542615636695*^9}, 3.49754300944394*^9, 
+   3.497543161820746*^9, {3.4975433080968943`*^9, 3.497543333089579*^9}, {
+   3.497634816866467*^9, 3.497634822396894*^9}, 3.497634889182472*^9, {
+   3.497635656084387*^9, 3.4976356567772627`*^9}, {3.4976358827461843`*^9, 
+   3.497635902805756*^9}, {3.497639560178165*^9, 3.4976395887805*^9}, {
+   3.497717629788444*^9, 3.497717664775313*^9}, {3.4977177954171267`*^9, 
+   3.497717811441677*^9}, {3.497717946124824*^9, 3.4977179590024843`*^9}, {
+   3.497718091880231*^9, 3.497718097174159*^9}, {3.4977181869580393`*^9, 
+   3.4977182306418543`*^9}, {3.4977182817373667`*^9, 3.497718295439774*^9}, {
+   3.4977185155717163`*^9, 3.497718516178872*^9}, {3.4977186098337307`*^9, 
+   3.497718655031732*^9}, {3.497720354018293*^9, 3.497720361711935*^9}, {
+   3.51646665501819*^9, 3.516466703700296*^9}, {3.516466744180666*^9, 
+   3.516466850500287*^9}, {3.516466920776816*^9, 3.516466924558702*^9}, {
+   3.5164671087352133`*^9, 3.516467132940102*^9}, {3.5164672595898933`*^9, 
+   3.516467335735387*^9}, {3.516467446831277*^9, 3.5164675178909597`*^9}, {
+   3.516467566236536*^9, 3.516467602081119*^9}, {3.516467646594492*^9, 
+   3.516467693982851*^9}, {3.516467799630619*^9, 3.5164678145625057`*^9}, {
+   3.516467907906891*^9, 3.516467931231696*^9}, {3.516467974227989*^9, 
+   3.516468069686613*^9}, {3.5164681647268057`*^9, 3.516468322329309*^9}, {
+   3.516468353208788*^9, 3.516468402515073*^9}, {3.516468569358057*^9, 
+   3.5164688697654257`*^9}, {3.516469069967986*^9, 3.516469104912592*^9}, {
+   3.516469281838047*^9, 3.516469282536112*^9}, {3.516469343196455*^9, 
+   3.5164693448977213`*^9}, {3.516641118739716*^9, 3.51664112101792*^9}, {
+   3.5170662585360413`*^9, 3.517066346582275*^9}, {3.517066422311091*^9, 
+   3.517066427735291*^9}, {3.517068514164235*^9, 3.517068550246681*^9}, {
+   3.517068593075931*^9, 3.5170685931933107`*^9}, {3.517068669073209*^9, 
+   3.5170686693269997`*^9}, {3.517068780917268*^9, 3.5170688290906487`*^9}, {
+   3.517068882706683*^9, 3.5170688831366453`*^9}, {3.517068913481579*^9, 
+   3.517068922846977*^9}, {3.5170689796719627`*^9, 3.517068986237167*^9}, {
+   3.517069122334919*^9, 3.517069164248382*^9}, {3.5170692558435507`*^9, 
+   3.517069255983468*^9}, {3.517069318241144*^9, 3.517069318331732*^9}, {
+   3.517069353096478*^9, 3.517069353285783*^9}, {3.517069394183385*^9, 
+   3.51706939429727*^9}, {3.5170694669148607`*^9, 3.517069467074445*^9}, {
+   3.517069521880518*^9, 3.517069561354265*^9}, {3.5170708977239847`*^9, 
+   3.517070898060605*^9}, {3.517070929587063*^9, 3.517071052229973*^9}, {
+   3.5170711918685713`*^9, 3.51707122081702*^9}, {3.5170712579552593`*^9, 
+   3.517071258184224*^9}, {3.517073554532979*^9, 3.517073566800956*^9}, {
+   3.51707363019388*^9, 3.5170736389107037`*^9}, {3.517073698959797*^9, 
+   3.51707370067715*^9}, {3.5171618948918943`*^9, 3.5171619115024137`*^9}, {
+   3.517250721250164*^9, 3.5172507217341347`*^9}, {3.5173346932505627`*^9, 
+   3.517334838578896*^9}, {3.517334905472475*^9, 3.517334917950143*^9}, {
+   3.517334957247117*^9, 3.517334978535076*^9}, {3.517335011733391*^9, 
+   3.5173350406442137`*^9}, {3.5173351201064262`*^9, 3.517335137793874*^9}, {
+   3.517335375660467*^9, 3.517335412963312*^9}, {3.517335455731798*^9, 
+   3.517335551041175*^9}, {3.517335604376453*^9, 3.5173357376825*^9}, {
+   3.517335798572322*^9, 3.51733580322344*^9}, {3.5173358514269238`*^9, 
+   3.517335963393672*^9}, {3.517336003163329*^9, 3.517336058165167*^9}, {
+   3.517336256363311*^9, 3.517336305265251*^9}, {3.51733636389287*^9, 
+   3.517336367248146*^9}, {3.51733647413474*^9, 3.5173364746654367`*^9}, {
+   3.517336559248983*^9, 3.517336561848617*^9}, {3.517367626541649*^9, 
+   3.517367705336946*^9}, {3.517367791656136*^9, 3.517367810533764*^9}, {
+   3.5173680054015837`*^9, 3.5173681448802223`*^9}, {3.517368202592416*^9, 
+   3.517368212221806*^9}, {3.5173682793361473`*^9, 3.517368279723124*^9}, {
+   3.517368363455708*^9, 3.517368401466815*^9}, {3.517368451212386*^9, 
+   3.517368463409952*^9}, {3.517368495795951*^9, 3.517368510236106*^9}, {
+   3.517368551091064*^9, 3.517368595286662*^9}, {3.517368631352521*^9, 
+   3.5173686772721653`*^9}, {3.517383983727648*^9, 3.5173840466805964`*^9}, {
+   3.517384159065975*^9, 3.517384167298918*^9}, {3.51738422514648*^9, 
+   3.517384227338999*^9}, {3.518195295280732*^9, 3.518195305846961*^9}, {
+   3.518195456601633*^9, 3.518195460327448*^9}, {3.518196187080405*^9, 
+   3.518196205713777*^9}, 3.518196243875588*^9, {3.518197087019044*^9, 
+   3.5181970888272057`*^9}, {3.548336163833386*^9, 3.548336166412342*^9}, {
+   3.548336343704324*^9, 3.548336358860406*^9}, {3.5483364701780357`*^9, 
+   3.548336484144067*^9}, {3.548336529883884*^9, 3.548336540969346*^9}, {
+   3.548344607348515*^9, 3.548344608870598*^9}, {3.5912500481984653`*^9, 
+   3.591250076895479*^9}, {3.591250218861248*^9, 3.591250226338402*^9}, {
+   3.5912503577979517`*^9, 3.59125035946841*^9}, {3.591250425060781*^9, 
+   3.5912504274191008`*^9}, {3.59125045807473*^9, 3.591250517668788*^9}, {
+   3.5913636962940283`*^9, 3.591363696669777*^9}, {3.5913637412519007`*^9, 
+   3.5913637418707523`*^9}, {3.591363784735084*^9, 3.5913637858698893`*^9}, {
+   3.592188435538052*^9, 3.5921885183195467`*^9}, {3.592318134032817*^9, 
+   3.592318145573595*^9}, {3.592319106996645*^9, 3.592319107070669*^9}, {
+   3.5923191695725107`*^9, 3.5923191698321753`*^9}, {3.592319345047551*^9, 
+   3.592319381468974*^9}, {3.592320322009972*^9, 3.5923203459587812`*^9}, {
+   3.592320424194415*^9, 3.592320424408709*^9}, {3.5923204643719273`*^9, 
+   3.592320464668322*^9}, {3.592320709306924*^9, 3.592320749880023*^9}, {
+   3.5923221381469707`*^9, 3.5923221595925426`*^9}, 3.592322285620206*^9, {
+   3.593188530743766*^9, 3.593188552283791*^9}, {3.5931886098703938`*^9, 
+   3.593188613659782*^9}, {3.59318887481059*^9, 3.5931889151003733`*^9}, {
+   3.593188946789352*^9, 3.593189039411675*^9}, 3.593189097027725*^9, {
+   3.5931891428499613`*^9, 3.59318914310351*^9}, 3.593538366087583*^9}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"1", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "1"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "2", ",", "4", ",", "10", ",", "20", ",", "50"}], 
+      "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "10", ",", "20", ",", "50"}], "}"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_1d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.5173840443832397`*^9, 3.517384081724496*^9}, {
+   3.517384180922477*^9, 3.517384425381447*^9}, {3.51767461454566*^9, 
+   3.5176746284180737`*^9}, {3.517674660990048*^9, 3.517674671275931*^9}, {
+   3.517674784712487*^9, 3.51767478525749*^9}, {3.517674879128593*^9, 
+   3.517674881205332*^9}, {3.518114950576809*^9, 3.518114954403322*^9}, {
+   3.518115098971106*^9, 3.5181151104874153`*^9}, {3.518194668914782*^9, 
+   3.5181946821969357`*^9}, {3.518194734269782*^9, 3.518194735094262*^9}, {
+   3.518194773462639*^9, 3.518194875034071*^9}, {3.518194949105473*^9, 
+   3.518194987735242*^9}, 3.51819521869759*^9, {3.5181952521605186`*^9, 
+   3.518195257942354*^9}, {3.518196034802575*^9, 3.5181960559626827`*^9}, {
+   3.518196971634709*^9, 3.518197069048802*^9}, {3.5181975442351294`*^9, 
+   3.518197547442575*^9}, {3.518197629827517*^9, 3.518197630432558*^9}, {
+   3.5483363721060057`*^9, 3.548336382723646*^9}, {3.548336568717052*^9, 
+   3.548336631597205*^9}, {3.548336745404522*^9, 3.5483368903217897`*^9}, {
+   3.5483372613781643`*^9, 3.548337281078226*^9}, {3.548337760289608*^9, 
+   3.548337791653308*^9}, {3.5483379559441223`*^9, 3.548337985056346*^9}, {
+   3.548338045405122*^9, 3.54833809056406*^9}, {3.5483442863008347`*^9, 
+   3.548344431490254*^9}, {3.548344516346612*^9, 3.54834452160181*^9}, {
+   3.5483445634454823`*^9, 3.548344603589292*^9}, {3.548344673892972*^9, 
+   3.548344674043014*^9}, {3.5912505876217327`*^9, 3.5912505881199083`*^9}, {
+   3.591363841844906*^9, 3.5913638423075933`*^9}, {3.5915428347310057`*^9, 
+   3.591542837929201*^9}, {3.592322290766035*^9, 3.59232229166604*^9}, {
+   3.5931891661553383`*^9, 3.593189167918091*^9}, {3.59318930167062*^9, 
+   3.593189306206168*^9}, {3.593189412013714*^9, 3.593189412511335*^9}, {
+   3.59327456018216*^9, 3.5932745607433968`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"1", "D", " ", "Testcases", " ", "Adjoint"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "1"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "2", ",", "4", ",", "10", ",", "20", ",", "50"}], 
+      "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "10", ",", "20", ",", "50"}], "}"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_1d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.593189194755818*^9, 3.593189238850958*^9}, {
+  3.593189308082303*^9, 3.593189312920251*^9}, {3.59318941509933*^9, 
+  3.593189415475584*^9}, {3.59327453400912*^9, 3.593274534716311*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"2", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "2"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"10", ",", "20"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"20", ",", "50"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_2d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->CompressedData["
+1:eJxTTMoPSmViYGAQAWIQvc02e0uu2SvHjHfhW0H04oW39oNoCWG7OyA6f87u
+5yB6TctFMJ1zdOI7EN3TOAdMb9z8SO1d/ivHPSVxWiCaJ2qjAYjetF3PBEQ/
+NtG2BtFzVtjZguieu04q74F0wJJYVRBdnX5yddAhoL6052tA9JGNLk9BdPL7
+MDBt89uALRhITznCyw6iNZIN5pw9/Mrx0Z4HYJprmvoxEF2jshZMq2yvMDsH
+pN+x7bcA0beC9fxAtMPCff4gOs/4XP95ID3BeMsEEH3o97tPZUeB5j1j+Qyi
+v06wZy0H0lfZfcC0yr+8gLnHgO5sywoE0av9PewWAOnJR2eAaQAqPrJj
+  "]],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"2", "D", " ", "Testcases", " ", "Adjoint"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "2"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"10", ",", "20"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "2"}], 
+      RowBox[{"(*", 
+       RowBox[{"20", ",", "50"}], "*)"}], "}"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_2d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.593189278068646*^9, 3.593189284894328*^9}, {
+   3.593189420873682*^9, 3.593189421399495*^9}, {3.593275075595599*^9, 
+   3.593275081980492*^9}, 3.593792151330961*^9, {3.593792207329873*^9, 
+   3.593792219290654*^9}, {3.5937981230042877`*^9, 3.593798125037159*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"3", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "3"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_3d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.518197606681448*^9, 3.518197615153542*^9}, {
+  3.5483451910722103`*^9, 3.5483452622079287`*^9}, {3.5483453352624826`*^9, 
+  3.548345337453582*^9}, {3.548345370487627*^9, 3.5483453706498127`*^9}, {
+  3.5483467419758577`*^9, 3.548346746749652*^9}, {3.548346925708653*^9, 
+  3.5483469438417873`*^9}, {3.548347041873805*^9, 3.548347042368384*^9}, {
+  3.5483471141121607`*^9, 3.54834711944681*^9}, {3.54834715646264*^9, 
+  3.5483471569767027`*^9}, {3.548347414821805*^9, 3.548347416066527*^9}, {
+  3.5915427341204157`*^9, 3.591542743990086*^9}, {3.591542788982143*^9, 
+  3.5915427947782373`*^9}, {3.593189355304345*^9, 3.593189356127204*^9}, {
+  3.593189426850175*^9, 3.5931894272246532`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"3", "D", " ", "Testcases", " ", "Adjoint"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "3"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_3d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.5931893517565947`*^9, 3.593189366525586*^9}, {
+  3.593189429437948*^9, 3.593189429912216*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"4", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "4"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_4d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.548337660709242*^9, 3.5483376910598288`*^9}, {
+   3.548347420747239*^9, 3.548347430447401*^9}, {3.591543705757052*^9, 
+   3.591543710105554*^9}, {3.5915437905916433`*^9, 3.5915437911266193`*^9}, {
+   3.591543853165766*^9, 3.591543856741955*^9}, {3.591545189200889*^9, 
+   3.591545190137417*^9}, {3.593189432012995*^9, 3.593189432538142*^9}, 
+   3.593274576174675*^9, {3.593538732977047*^9, 3.5935387337241173`*^9}}]
+},
+AutoGeneratedPackage->Automatic,
+WindowSize->{1920, 1068},
+WindowMargins->{{0, Automatic}, {Automatic, 0}},
+FrontEndVersion->"8.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 6, \
+2010)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[545, 20, 1621, 27, 43, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[2169, 49, 352, 10, 27, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[2524, 61, 21721, 485, 808, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[24248, 548, 4521, 102, 163, "Input"],
+Cell[28772, 652, 2922, 80, 163, "Input"],
+Cell[31697, 734, 3029, 83, 163, "Input"],
+Cell[34729, 819, 2993, 82, 163, "Input"],
+Cell[37725, 903, 3279, 83, 163, "Input"],
+Cell[41007, 988, 2702, 75, 163, "Input"],
+Cell[43712, 1065, 3006, 79, 163, "Input"]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/tests/check_nfft.c b/tests/check_nfft.c
deleted file mode 100644
index f67ca7c..0000000
--- a/tests/check_nfft.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
-
-/* Standard headers. */
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <complex.h>
-
-#include "nfft3util.h"
-#include "nfft3.h"
-#include "infft.h"
-#include "cycle.h"
-#include "check_nfft.h"
-
-static double trafo_direct_cost_factor = 1.0E-6;
-
-double X(trafo_direct_cost)(X(plan) *p)
-{
-  if (trafo_direct_cost_factor == 0.0)
-  {
-    int M, d, Nd, x = 0;
-    for (d = 1; d <= 4; d++)
-    {
-      for (Nd = 4; Nd < 128; Nd *= 2)
-      {
-        for (M = 4; M <= 128; M *= 2)
-        {
-          X(plan) p;
-          int *N = malloc(d*sizeof(int)), i;
-          for (i = 0; i < d; i++)
-          {
-            N[i] = Nd;
-          }
-          X(init)(&p, d, N, M);
-          for (i = 0; i < M; i++)
-            p.x[i] = K(0.0);
-          if(p.nfft_flags & PRE_ONE_PSI)
-            X(precompute_one_psi)(&p);
-          for (i = 0; i < d*Nd; i++)
-          {
-            p.f_hat[i] = K(0.0) + K(0.0) * I;
-          }
-          {
-            double r;
-            ticks t0, t1;
-            t0 = getticks();
-            X(trafo_direct)(&p);
-            t1 = getticks();
-            r = X(elapsed_seconds)(t1, t0)/M;
-            for (i = 0; i < d; i++)
-              r = r / Nd;
-            trafo_direct_cost_factor += r;
-            printf("%E\n", r);
-            x += 1;
-          }
-          X(finalize)(&p);
-          free(N);
-        }
-      }
-    }
-    trafo_direct_cost_factor = trafo_direct_cost_factor/((double)x);
-    printf("--> %E\n", trafo_direct_cost_factor);
-  }
-
-  {
-    int c = p->M_total, i;
-
-    for (i = 0; i < p->d; i++)
-      c *= p->N[i];
-
-    return trafo_direct_cost_factor * c;
-  }
-}
-
-R X(err_trafo_direct)(X(plan) *p)
-{
-  return K(30.0) * EPSILON;
-}
-
-R X(err_trafo)(X(plan) *p)
-{
-  R m = ((R)p->m), s = K(0.0), K = ((R)p->K);
-  int i;
-  for (i = 0; i < p->d; i++)
-    s = FMAX(s, ((R)p->sigma[i]));
-#if defined(GAUSSIAN)
-  R err = K(4.0) * EXP(-m*KPI*(K(1.0)-K(1.0)/(K(2.0)*s-K(1.0))));
-#elif defined(B_SPLINE)
-  R err = K(4.0) * POW(K(1.0)/(K(2.0)*s-K(1.0)),K(2.0)*m);
-#elif defined(SINC_POWER)
-  R err = (K(1.0)/(m-K(1.0))) * ((K(2.0)/(POW(s,K(2.0)*m))) + POW(s/(K(2.0)*s-K(1.0)),K(2.0)*m));
-#elif defined(KAISER_BESSEL)
-  R err;
-  if (p->nfft_flags | PRE_LIN_PSI)
-    err = EXP(K2PI * m)/(K(8.0) * K * K);
-  else
-    err = K(4.0) * KPI * (SQRT(m) + m) * SQRT(SQRT(K(1.0) - K(1.0)/s)) * EXP(-K2PI*m*SQRT(K(1.0)-K(1.0)/s));
-#else
-  #error Unsupported window function.
-#endif
-
-  return FMAX(K(30.0) * EPSILON, err);
-}
-
-#define MAX_SECONDS 0.1
-
-int X(check_single)(const testcase_delegate_t *testcase, init_delegate_t *init_delegate, trafo_delegate_t *trafo_delegate)
-{
-  int result = EXIT_FAILURE;
-  X(plan) p;
-  int d, j, *N, NN, M;
-  R *x;
-  C *f_hat, *f;
-
-  testcase->setup(testcase, &d, &N, &NN, &M, &x, &f_hat, &f);
-
-  /* Init plan. */
-  init_delegate->init(init_delegate, &p, d, N, M);
-
-  /* Nodes. */
-  for (j = 0; j < M*d; j++)
-  {
-    p.x[j] = x[j];
-  }
-
-  /* Pre-compute Psi, maybe. */
-  if(p.nfft_flags & PRE_ONE_PSI)
-    X(precompute_one_psi)(&p);
-
-  /* Fourier coefficients. */
-  for (j = 0; j < NN; j++)
-  {
-    p.f_hat[j] = f_hat[j];
-  }
-
-  if (trafo_delegate->check)
-  {
-    const char* check = trafo_delegate->check(&p);
-    if (check != 0)
-    {
-      printf(" -> %-4s (","OK");
-      printf("%s", check);
-      printf(")\n");
-      result = EXIT_SUCCESS;
-      goto cleanup;
-    }
-  }
-  else if (trafo_delegate->cost)
-  {
-    const double cost = trafo_delegate->cost(&p);
-    if (cost > MAX_SECONDS)
-    {
-      printf(" -> %-4s (cost too high)\n","OK");
-      result = EXIT_SUCCESS;
-      goto cleanup;
-    }
-  }
-
-  trafo_delegate->trafo(&p);
-
-  /* debug */
-  /*for (j = 0; j < M; j++)
-    fprintf(stderr, "f[%2d] = " FE_ " + " FE_ "I, f[%2d] = " FE_ " + " FE_ "I, err = " FE_ "\n", j,
-      CREAL(f[j]), CIMAG(f[j]), j, CREAL(p.f[j]), CIMAG(p.f[j]), CABS(f[j] - p.f[j]) / CABS(f[j]));*/
-
-  /* Standard NFFT error measure. */
-  {
-    R numerator = K(0.0), denominator = K(0.0);
-    for (j = 0; j < M; j++)
-      numerator = MAX(numerator, CABS(f[j] - p.f[j]));
-    for (j = 0; j < NN; j++)
-      denominator += CABS(p.f_hat[j]);
-    {
-      R err = numerator/denominator;
-      R bound = trafo_delegate->acc(&p);
-      result = IF(err < trafo_delegate->acc(&p), EXIT_SUCCESS, EXIT_FAILURE);
-      printf(" -> %-4s " FE_ " (" FE_ ")\n", IF(result == EXIT_FAILURE, "FAIL", "OK"), err, bound);
-    }
-  }
-
-cleanup:
-  testcase->destroy(testcase, x, f_hat, f);
-  X(finalize)(&p);
-  return result;
-}
-
-int X(check_many)(const int nf, const int ni, const int nt,
-  const testcase_delegate_t **testcases, init_delegate_t **initializers,
-  trafo_delegate_t **trafos)
-{
-  int i, j, k, result = EXIT_SUCCESS, r;
-  for (i = 0; i < nf; i++)
-    for (j = 0; j < ni; j++)
-      for (k = 0; k < nt; k++)
-      {
-         r = X(check_single)(testcases[i], initializers[j], trafos[k]);
-         result = IF(r == EXIT_FAILURE, EXIT_FAILURE, result);
-      }
-  return result;
-}
-
-void X(setup_file)(testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f)
-{
-  testcase_delegate_file_t *ego = (testcase_delegate_file_t*)ego_;
-  int j;
-  FILE *file = fopen(ego->filename, "r");
-
-  printf("%-25s", ego->filename);
-
-  /* Dimensions. */
-  fscanf(file, "%d", d);
-  /* Bandwidths. */
-  *N = malloc(*d * sizeof(int));
-  for (j = 0; j < *d; j++)
-    fscanf(file, "%d", &((*N)[j]));
-  /* Number of nodes. */
-  fscanf(file, "%d", M);
-
-  printf(" d = %-1d, N = [", *d);
-  {
-    for (j = 0; j < *d; j++)
-    {
-      printf("%s%-4d", IF(j > 0,", ", ""), (*N)[j]);
-    }
-  }
-  printf("],");
-  printf(" M = %-4d,", *M);
-
-  for (j = 0, *NN = 1; j < *d; j++)
-    *NN *= (*N)[j];
-
-  /* Nodes. */
-  *x = malloc(M[0]*d[0]*sizeof(R));
-  for (j = 0; j < M[0]*d[0]; j++)
-  {
-    fscanf(file, FFI, &((*x)[j]));
-  }
-
-  /* Fourier coefficients. */
-  *f_hat = malloc(NN[0]*sizeof(C));
-  for (j = 0; j < NN[0]; j++)
-  {
-    R re, im;
-    fscanf(file, FFI " " FFI, &re, &im);
-    (*f_hat)[j] = re + im * I;
-  }
-
-  /* Reference function values. */
-  *f = malloc(M[0] * sizeof(C));
-  for (j = 0; j < M[0]; j++)
-  {
-    R re, im;
-    fscanf(file, FFI " " FFI, &re, &im);
-    (*f)[j] = re + im * I;
-  }
-
-  fclose(file);
-}
-
-void X(destroy_file)(testcase_delegate_t *ego_, R *x, C *f_hat, C *f)
-{
-  free(x);
-  free(f_hat);
-  free(f);
-}
diff --git a/tests/check_nfft.h b/tests/check_nfft.h
deleted file mode 100644
index 15f22ab..0000000
--- a/tests/check_nfft.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
-
-/* Standard headers. */
-#include <complex.h>
-#include "nfft3.h"
-#include "infft.h"
-
-/* Testcase delegate. */
-typedef struct testcase_delegate_s testcase_delegate_t;
-
-typedef void (*setup_t)(testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f);
-typedef void (*destroy_t)(testcase_delegate_t *ego_, R *x, C *f_hat, C *f);
-
-struct testcase_delegate_s
-{
-  setup_t setup;
-  destroy_t destroy;
-};
-
-typedef struct testcase_delegate_file_s
-{
-  setup_t setup;
-  destroy_t destroy;
-  const char *filename;
-} testcase_delegate_file_t;
-
-void X(setup_file)(testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f);
-void X(destroy_file)(testcase_delegate_t *ego_, R *x, C *f_hat, C *f);
-
-/* Init delegate. */
-typedef struct init_delegate_s init_delegate_t;
-typedef void (*init_t)(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
-
-struct init_delegate_s
-{
-  const char *name;
-  init_t init;
-  const int m;
-  const unsigned nfft_flags;
-  const unsigned fftw_flags;
-};
-
-/* Trafo delegate. */
-typedef void (*trafo_t)(X(plan) *p);
-typedef double (*cost_t)(X(plan) *p);
-typedef const char* (*check_t)(X(plan) *p);
-typedef R (*acc_t)(X(plan) *p);
-
-typedef struct trafo_delegate_s
-{
-  const char *name;
-  trafo_t trafo;
-  check_t check;
-  cost_t cost;
-  acc_t acc;
-
-} trafo_delegate_t;
-
-double X(trafo_direct_cost)(X(plan) *p);
-
-R X(err_trafo)(X(plan) *p);
-R X(err_trafo_direct)(X(plan) *p);
-
-/* Check single test case.*/
-int X(check_single)(const testcase_delegate_t *testcase,
-    init_delegate_t *init_delegate, trafo_delegate_t *trafo_delegate);
-
-/* Check multiple test cases.*/
-int X(check_many)(const int nf, const int ni, const int nt,
-  const testcase_delegate_t **testcases, init_delegate_t **initializers,
-  trafo_delegate_t **trafos);
-
-/* Size of array. */
-#define SIZE(x) sizeof(x)/sizeof(x[0])
diff --git a/tests/check_nfft.m b/tests/check_nfft.m
new file mode 100644
index 0000000..4352aa6
--- /dev/null
+++ b/tests/check_nfft.m
@@ -0,0 +1,84 @@
+(* ::Package:: *)
+
+(************************************************************************)
+(* This file was generated automatically by the Mathematica front end.  *)
+(* It contains Initialization cells from a Notebook file, which         *)
+(* typically will have the same name as this file except ending in      *)
+(* ".nb" instead of ".m".                                               *)
+(*                                                                      *)
+(* This file is intended to be loaded into the Mathematica kernel using *)
+(* the package loading commands Get or Needs.  Doing so is equivalent   *)
+(* to using the Evaluate Initialization Cells menu command in the front *)
+(* end.                                                                 *)
+(*                                                                      *)
+(* DO NOT EDIT THIS FILE.  This entire file is regenerated              *)
+(* automatically each time the parent Notebook file is saved in the     *)
+(* Mathematica front end.  Any changes you make to this file will be    *)
+(* overwritten.                                                         *)
+(************************************************************************)
+
+
+
+AppendTo[$Path, NotebookDirectory[]];
+<<PrintVector`
+
+
+P=64;(* Working precision. *)
+
+
+GenerateFilename[prefix_][NN_,M_]:=Module[{d=Length[NN], (* Dimension. *)},Return[FileNameJoin[{prefix,"nfft_"<>ToString[d]<>"d_"<>StringJoin[Map[Function[x,ToString[x]<>"_"],NN]<>ToString[M]<>".txt"]}]]]
+GenerateFilenameAdjoint[prefix_][NN_,M_]:=Module[{d=Length[NN], (* Dimension. *)},Return[FileNameJoin[{prefix,"nfft_adjoint_"<>ToString[d]<>"d_"<>StringJoin[Map[Function[x,ToString[x]<>"_"],NN]<>ToString[M]<>".txt"]}]]]
+Generate[NN_,M_,FilenameGenerator_]:=Module[
+{
+d=Length[NN], (* Dimension. *)
+file
+},
+SeedRandom[1];
+II=Table[Table[k,{k,Ceiling[-NN[[i]]/2],Floor[(NN[[i]]-1)/2]}],{i,1,d}];
+II[[0]]=Sequence;
+II=Flatten[Outer[List,II],d-1];(* Index set. *)
+x =Transpose[ Table[RandomReal[{-1/2,1/2},M,WorkingPrecision->P],{i,1,d}]] ;(* Random nodes. *)
+fhat = (*Table[If[i==1,1,0],{i,1,Length[II]}]*) RandomComplex[{-1-I,1+I},Length[II],WorkingPrecision->P]; (* Random Fourier coefficients. *)
+f=Table[Sum[fhat[[k]]*Exp[-2*\[Pi]*I*Dot[II[[k]],x[[j]]]],{k,1,Length[II]}],{j,1,M}];(* Function values. *)
+filename=FilenameGenerator[NN,M];
+file = OpenWrite[filename];
+WriteString[file, FormatIntegerRaw[d] <>"\n"];
+WriteString[file, FormatIntegerVectorRaw[NN]<>"\n"];
+WriteString[file, FormatIntegerRaw[M]<>"\n"];
+WriteString[file, FormatVectorRaw[Flatten[x]]<>"\n"];
+WriteString[file, FormatVectorRaw[fhat]<>"\n"];
+WriteString[file, FormatVectorRaw[f]<>"\n"];
+Close[file];
+(*Print[filename];*)
+Return[{FileBaseName[FileNameTake[filename,-1]], FileNameTake[filename,-2]}]
+]
+GenerateAdjoint[NN_,M_,FilenameGenerator_]:=Module[
+{
+d=Length[NN], (* Dimension. *)
+file
+},
+SeedRandom[1];
+II=Table[Table[k,{k,Ceiling[-NN[[i]]/2],Floor[(NN[[i]]-1)/2]}],{i,1,d}];
+II[[0]]=Sequence;
+II=Flatten[Outer[List,II],d-1];(* Index set. *)
+x=Transpose[Table[RandomReal[{-1/2,1/2},M,WorkingPrecision->P],{i,1,d}]] ;(* Random nodes. *)
+f=RandomComplex[{-1-I,1+I},M,WorkingPrecision->P];(* Random function values. *)
+fhat=Table[Sum[f[[j]]*Exp[2*\[Pi]*I*Dot[II[[k]],x[[j]]]],{j,1,M}],{k,1,Length[II]}];(* Pseudo Fourier coefficients. *)
+filename=FilenameGenerator[NN,M];
+file = OpenWrite[filename];
+WriteString[file, FormatIntegerRaw[d] <>"\n"];
+WriteString[file, FormatIntegerVectorRaw[NN]<>"\n"];
+WriteString[file, FormatIntegerRaw[M]<>"\n"];
+WriteString[file, FormatVectorRaw[Flatten[x]]<>"\n"];
+WriteString[file, FormatVectorRaw[fhat]<>"\n"];
+WriteString[file, FormatVectorRaw[f]<>"\n"];
+Close[file];
+(*Print[filename];*)
+Return[{FileBaseName[FileNameTake[filename,-1]], FileNameTake[filename,-2]}]
+]
+MakeTestcase[NN_,M_]:=Generate[NN,M,GenerateFilename[FileNameJoin[{NotebookDirectory[],"data"}]]]
+MakeTestcaseAdjoint[NN_,M_]:=GenerateAdjoint[NN,M,GenerateFilenameAdjoint[FileNameJoin[{NotebookDirectory[],"data"}]]]
+Formatter[x_]:="&"<>x;
+
+
+
diff --git a/tests/check_nfft.nb b/tests/check_nfft.nb
new file mode 100644
index 0000000..b120b33
--- /dev/null
+++ b/tests/check_nfft.nb
@@ -0,0 +1,1200 @@
+(* Content-type: application/mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 7.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       145,          7]
+NotebookDataLength[     47414,       1191]
+NotebookOptionsPosition[     46574,       1161]
+NotebookOutlinePosition[     46963,       1178]
+CellTagsIndexPosition[     46920,       1175]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{"AppendTo", "[", 
+   RowBox[{"$Path", ",", " ", 
+    RowBox[{"NotebookDirectory", "[", "]"}]}], "]"}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{"<<", "PrintVector`"}]}], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.4975401175502357`*^9, 3.497540122081654*^9}, {
+   3.4975401577475357`*^9, 3.4975404433537083`*^9}, {3.497540482896634*^9, 
+   3.4975405759100437`*^9}, {3.497541105993033*^9, 3.497541123798511*^9}, {
+   3.497542050468046*^9, 3.497542062974934*^9}, {3.497542456642642*^9, 
+   3.497542474403122*^9}, {3.497542524646307*^9, 3.497542533911161*^9}, {
+   3.4975426113736467`*^9, 3.497542615636695*^9}, 3.49754300944394*^9, 
+   3.497543161820746*^9, {3.4975433080968943`*^9, 3.497543333089579*^9}, {
+   3.497634816866467*^9, 3.497634822396894*^9}, 3.497634889182472*^9, {
+   3.4976349550362673`*^9, 3.497635002695628*^9}, {3.497635080038419*^9, 
+   3.4976350905563173`*^9}, {3.497720303149754*^9, 3.497720340683272*^9}, 
+   3.497720446950582*^9, {3.497720543770192*^9, 3.497720554263856*^9}, {
+   3.497720624718094*^9, 3.4977206409163923`*^9}, {3.497720745653871*^9, 
+   3.497720821394751*^9}, {3.497720852170191*^9, 3.497720892717999*^9}, {
+   3.497720926142789*^9, 3.497720963010685*^9}, {3.49772100166604*^9, 
+   3.4977210066482897`*^9}, {3.497721154131791*^9, 3.4977211732733927`*^9}, {
+   3.497721253141778*^9, 3.497721260212431*^9}, {3.4977213873833313`*^9, 
+   3.497721394326082*^9}, {3.4977214268766117`*^9, 3.497721450684969*^9}, 
+   3.517368305980814*^9, 3.517368338946211*^9, {3.548337349389185*^9, 
+   3.54833735124184*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{
+   RowBox[{"P", "=", "64"}], ";"}], 
+  RowBox[{"(*", " ", 
+   RowBox[{"Working", " ", 
+    RowBox[{"precision", "."}]}], " ", "*)"}]}]], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.5173364544175253`*^9, 3.517336455143111*^9}, {
+  3.548337583667452*^9, 3.548337584482711*^9}}],
+
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{
+   RowBox[{"GenerateFilename", "[", "prefix_", "]"}], "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"Length", "[", "NN", "]"}]}], ","}], " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Dimension", "."}], " ", "*)"}], "}"}], ",", 
+    RowBox[{"Return", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{"prefix", ",", 
+        RowBox[{"\"\<nfft_\>\"", "<>", 
+         RowBox[{"ToString", "[", "d", "]"}], "<>", "\"\<d_\>\"", "<>", 
+         RowBox[{"StringJoin", "[", 
+          RowBox[{
+           RowBox[{"Map", "[", 
+            RowBox[{
+             RowBox[{"Function", "[", 
+              RowBox[{"x", ",", 
+               RowBox[{
+                RowBox[{"ToString", "[", "x", "]"}], "<>", "\"\<_\>\""}]}], 
+              "]"}], ",", "NN"}], "]"}], "<>", 
+           RowBox[{"ToString", "[", "M", "]"}], "<>", "\"\<.txt\>\""}], 
+          "]"}]}]}], "}"}], "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"GenerateFilenameAdjoint", "[", "prefix_", "]"}], "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"Length", "[", "NN", "]"}]}], ","}], " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Dimension", "."}], " ", "*)"}], "}"}], ",", 
+    RowBox[{"Return", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{"prefix", ",", 
+        RowBox[{"\"\<nfft_adjoint_\>\"", "<>", 
+         RowBox[{"ToString", "[", "d", "]"}], "<>", "\"\<d_\>\"", "<>", 
+         RowBox[{"StringJoin", "[", 
+          RowBox[{
+           RowBox[{"Map", "[", 
+            RowBox[{
+             RowBox[{"Function", "[", 
+              RowBox[{"x", ",", 
+               RowBox[{
+                RowBox[{"ToString", "[", "x", "]"}], "<>", "\"\<_\>\""}]}], 
+              "]"}], ",", "NN"}], "]"}], "<>", 
+           RowBox[{"ToString", "[", "M", "]"}], "<>", "\"\<.txt\>\""}], 
+          "]"}]}]}], "}"}], "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"Generate", "[", 
+   RowBox[{"NN_", ",", "M_", ",", "FilenameGenerator_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"{", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"Length", "[", "NN", "]"}]}], ",", " ", 
+      RowBox[{"(*", " ", 
+       RowBox[{"Dimension", "."}], " ", "*)"}], "\[IndentingNewLine]", 
+      "file"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"SeedRandom", "[", "1", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Table", "[", 
+         RowBox[{"k", ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", 
+            RowBox[{"Ceiling", "[", 
+             RowBox[{
+              RowBox[{"-", 
+               RowBox[{"NN", "[", 
+                RowBox[{"[", "i", "]"}], "]"}]}], "/", "2"}], "]"}], ",", 
+            RowBox[{"Floor", "[", 
+             RowBox[{
+              RowBox[{"(", 
+               RowBox[{
+                RowBox[{"NN", "[", 
+                 RowBox[{"[", "i", "]"}], "]"}], "-", "1"}], ")"}], "/", 
+              "2"}], "]"}]}], "}"}]}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"II", "[", 
+       RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Flatten", "[", 
+       RowBox[{
+        RowBox[{"Outer", "[", 
+         RowBox[{"List", ",", "II"}], "]"}], ",", 
+        RowBox[{"d", "-", "1"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Index", " ", 
+       RowBox[{"set", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"x", " ", "=", 
+      RowBox[{"Transpose", "[", " ", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"RandomReal", "[", 
+          RowBox[{
+           RowBox[{"{", 
+            RowBox[{
+             RowBox[{
+              RowBox[{"-", "1"}], "/", "2"}], ",", 
+             RowBox[{"1", "/", "2"}]}], "}"}], ",", "M", ",", 
+           RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}], "]"}]}], " ", 
+     ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", 
+       RowBox[{"nodes", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"fhat", " ", "=", " ", 
+      RowBox[{"(*", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"If", "[", 
+          RowBox[{
+           RowBox[{"i", "\[Equal]", "1"}], ",", "1", ",", "0"}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}], "*)"}], " ", 
+      
+      RowBox[{"RandomComplex", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"-", "1"}], "-", "\[ImaginaryI]"}], ",", 
+          RowBox[{"1", "+", "\[ImaginaryI]"}]}], "}"}], ",", 
+        RowBox[{"Length", "[", "II", "]"}], ",", 
+        RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}]}], ";", " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", "Fourier", " ", 
+       RowBox[{"coefficients", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"f", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"fhat", "[", 
+            RowBox[{"[", "k", "]"}], "]"}], "*", 
+           RowBox[{"Exp", "[", 
+            RowBox[{
+             RowBox[{"-", "2"}], "*", "\[Pi]", "*", "\[ImaginaryI]", "*", 
+             RowBox[{"Dot", "[", 
+              RowBox[{
+               RowBox[{"II", "[", 
+                RowBox[{"[", "k", "]"}], "]"}], ",", 
+               RowBox[{"x", "[", 
+                RowBox[{"[", "j", "]"}], "]"}]}], "]"}]}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "1", ",", 
+            RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"j", ",", "1", ",", "M"}], "}"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Function", " ", 
+       RowBox[{"values", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"filename", "=", 
+      RowBox[{"FilenameGenerator", "[", 
+       RowBox[{"NN", ",", "M"}], "]"}]}], ";", "\[IndentingNewLine]", 
+     RowBox[{"file", " ", "=", " ", 
+      RowBox[{"OpenWrite", "[", "filename", "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "d", "]"}], " ", "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerVectorRaw", "[", "NN", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "M", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", 
+         RowBox[{"Flatten", "[", "x", "]"}], "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "fhat", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "f", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"Close", "[", "file", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"(*", 
+      RowBox[{
+       RowBox[{"Print", "[", "filename", "]"}], ";"}], "*)"}], 
+     "\[IndentingNewLine]", 
+     RowBox[{"Return", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"FileBaseName", "[", 
+         RowBox[{"FileNameTake", "[", 
+          RowBox[{"filename", ",", 
+           RowBox[{"-", "1"}]}], "]"}], "]"}], ",", " ", 
+        RowBox[{"FileNameTake", "[", 
+         RowBox[{"filename", ",", 
+          RowBox[{"-", "2"}]}], "]"}]}], "}"}], "]"}]}]}], 
+   "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"GenerateAdjoint", "[", 
+   RowBox[{"NN_", ",", "M_", ",", "FilenameGenerator_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"{", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"Length", "[", "NN", "]"}]}], ",", " ", 
+      RowBox[{"(*", " ", 
+       RowBox[{"Dimension", "."}], " ", "*)"}], "\[IndentingNewLine]", 
+      "file"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"SeedRandom", "[", "1", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Table", "[", 
+         RowBox[{"k", ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", 
+            RowBox[{"Ceiling", "[", 
+             RowBox[{
+              RowBox[{"-", 
+               RowBox[{"NN", "[", 
+                RowBox[{"[", "i", "]"}], "]"}]}], "/", "2"}], "]"}], ",", 
+            RowBox[{"Floor", "[", 
+             RowBox[{
+              RowBox[{"(", 
+               RowBox[{
+                RowBox[{"NN", "[", 
+                 RowBox[{"[", "i", "]"}], "]"}], "-", "1"}], ")"}], "/", 
+              "2"}], "]"}]}], "}"}]}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"II", "[", 
+       RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Flatten", "[", 
+       RowBox[{
+        RowBox[{"Outer", "[", 
+         RowBox[{"List", ",", "II"}], "]"}], ",", 
+        RowBox[{"d", "-", "1"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Index", " ", 
+       RowBox[{"set", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"x", "=", 
+      RowBox[{"Transpose", "[", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"RandomReal", "[", 
+          RowBox[{
+           RowBox[{"{", 
+            RowBox[{
+             RowBox[{
+              RowBox[{"-", "1"}], "/", "2"}], ",", 
+             RowBox[{"1", "/", "2"}]}], "}"}], ",", "M", ",", 
+           RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}], "]"}]}], " ", 
+     ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", 
+       RowBox[{"nodes", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"f", "=", 
+      RowBox[{"RandomComplex", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"-", "1"}], "-", "\[ImaginaryI]"}], ",", 
+          RowBox[{"1", "+", "\[ImaginaryI]"}]}], "}"}], ",", "M", ",", 
+        RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", "function", " ", 
+       RowBox[{"values", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"fhat", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"f", "[", 
+            RowBox[{"[", "j", "]"}], "]"}], "*", 
+           RowBox[{"Exp", "[", 
+            RowBox[{"2", "*", "\[Pi]", "*", "\[ImaginaryI]", "*", 
+             RowBox[{"Dot", "[", 
+              RowBox[{
+               RowBox[{"II", "[", 
+                RowBox[{"[", "k", "]"}], "]"}], ",", 
+               RowBox[{"x", "[", 
+                RowBox[{"[", "j", "]"}], "]"}]}], "]"}]}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"j", ",", "1", ",", "M"}], "}"}]}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"k", ",", "1", ",", 
+          RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Pseudo", " ", "Fourier", " ", 
+       RowBox[{"coefficients", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"filename", "=", 
+      RowBox[{"FilenameGenerator", "[", 
+       RowBox[{"NN", ",", "M"}], "]"}]}], ";", "\[IndentingNewLine]", 
+     RowBox[{"file", " ", "=", " ", 
+      RowBox[{"OpenWrite", "[", "filename", "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "d", "]"}], " ", "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerVectorRaw", "[", "NN", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "M", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", 
+         RowBox[{"Flatten", "[", "x", "]"}], "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "fhat", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "f", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"Close", "[", "file", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"(*", 
+      RowBox[{
+       RowBox[{"Print", "[", "filename", "]"}], ";"}], "*)"}], 
+     "\[IndentingNewLine]", 
+     RowBox[{"Return", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"FileBaseName", "[", 
+         RowBox[{"FileNameTake", "[", 
+          RowBox[{"filename", ",", 
+           RowBox[{"-", "1"}]}], "]"}], "]"}], ",", " ", 
+        RowBox[{"FileNameTake", "[", 
+         RowBox[{"filename", ",", 
+          RowBox[{"-", "2"}]}], "]"}]}], "}"}], "]"}]}]}], 
+   "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"MakeTestcase", "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Generate", "[", 
+   RowBox[{"NN", ",", "M", ",", 
+    RowBox[{"GenerateFilename", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"NotebookDirectory", "[", "]"}], ",", "\"\<data\>\""}], "}"}],
+       "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"MakeTestcaseAdjoint", "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"GenerateAdjoint", "[", 
+   RowBox[{"NN", ",", "M", ",", 
+    RowBox[{"GenerateFilenameAdjoint", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"NotebookDirectory", "[", "]"}], ",", "\"\<data\>\""}], "}"}],
+       "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"Formatter", "[", "x_", "]"}], ":=", 
+   RowBox[{"\"\<&\>\"", "<>", "x"}]}], ";"}]}], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.4975401175502357`*^9, 3.497540122081654*^9}, {
+   3.4975401577475357`*^9, 3.4975404433537083`*^9}, {3.497540482896634*^9, 
+   3.4975405759100437`*^9}, {3.497541105993033*^9, 3.497541123798511*^9}, {
+   3.497542050468046*^9, 3.497542062974934*^9}, {3.497542456642642*^9, 
+   3.497542474403122*^9}, {3.497542524646307*^9, 3.497542533911161*^9}, {
+   3.4975426113736467`*^9, 3.497542615636695*^9}, 3.49754300944394*^9, 
+   3.497543161820746*^9, {3.4975433080968943`*^9, 3.497543333089579*^9}, {
+   3.497634816866467*^9, 3.497634822396894*^9}, 3.497634889182472*^9, {
+   3.497635656084387*^9, 3.4976356567772627`*^9}, {3.4976358827461843`*^9, 
+   3.497635902805756*^9}, {3.497639560178165*^9, 3.4976395887805*^9}, {
+   3.497717629788444*^9, 3.497717664775313*^9}, {3.4977177954171267`*^9, 
+   3.497717811441677*^9}, {3.497717946124824*^9, 3.4977179590024843`*^9}, {
+   3.497718091880231*^9, 3.497718097174159*^9}, {3.4977181869580393`*^9, 
+   3.4977182306418543`*^9}, {3.4977182817373667`*^9, 3.497718295439774*^9}, {
+   3.4977185155717163`*^9, 3.497718516178872*^9}, {3.4977186098337307`*^9, 
+   3.497718655031732*^9}, {3.497720354018293*^9, 3.497720361711935*^9}, {
+   3.51646665501819*^9, 3.516466703700296*^9}, {3.516466744180666*^9, 
+   3.516466850500287*^9}, {3.516466920776816*^9, 3.516466924558702*^9}, {
+   3.5164671087352133`*^9, 3.516467132940102*^9}, {3.5164672595898933`*^9, 
+   3.516467335735387*^9}, {3.516467446831277*^9, 3.5164675178909597`*^9}, {
+   3.516467566236536*^9, 3.516467602081119*^9}, {3.516467646594492*^9, 
+   3.516467693982851*^9}, {3.516467799630619*^9, 3.5164678145625057`*^9}, {
+   3.516467907906891*^9, 3.516467931231696*^9}, {3.516467974227989*^9, 
+   3.516468069686613*^9}, {3.5164681647268057`*^9, 3.516468322329309*^9}, {
+   3.516468353208788*^9, 3.516468402515073*^9}, {3.516468569358057*^9, 
+   3.5164688697654257`*^9}, {3.516469069967986*^9, 3.516469104912592*^9}, {
+   3.516469281838047*^9, 3.516469282536112*^9}, {3.516469343196455*^9, 
+   3.5164693448977213`*^9}, {3.516641118739716*^9, 3.51664112101792*^9}, {
+   3.5170662585360413`*^9, 3.517066346582275*^9}, {3.517066422311091*^9, 
+   3.517066427735291*^9}, {3.517068514164235*^9, 3.517068550246681*^9}, {
+   3.517068593075931*^9, 3.5170685931933107`*^9}, {3.517068669073209*^9, 
+   3.5170686693269997`*^9}, {3.517068780917268*^9, 3.5170688290906487`*^9}, {
+   3.517068882706683*^9, 3.5170688831366453`*^9}, {3.517068913481579*^9, 
+   3.517068922846977*^9}, {3.5170689796719627`*^9, 3.517068986237167*^9}, {
+   3.517069122334919*^9, 3.517069164248382*^9}, {3.5170692558435507`*^9, 
+   3.517069255983468*^9}, {3.517069318241144*^9, 3.517069318331732*^9}, {
+   3.517069353096478*^9, 3.517069353285783*^9}, {3.517069394183385*^9, 
+   3.51706939429727*^9}, {3.5170694669148607`*^9, 3.517069467074445*^9}, {
+   3.517069521880518*^9, 3.517069561354265*^9}, {3.5170708977239847`*^9, 
+   3.517070898060605*^9}, {3.517070929587063*^9, 3.517071052229973*^9}, {
+   3.5170711918685713`*^9, 3.51707122081702*^9}, {3.5170712579552593`*^9, 
+   3.517071258184224*^9}, {3.517073554532979*^9, 3.517073566800956*^9}, {
+   3.51707363019388*^9, 3.5170736389107037`*^9}, {3.517073698959797*^9, 
+   3.51707370067715*^9}, {3.5171618948918943`*^9, 3.5171619115024137`*^9}, {
+   3.517250721250164*^9, 3.5172507217341347`*^9}, {3.5173346932505627`*^9, 
+   3.517334838578896*^9}, {3.517334905472475*^9, 3.517334917950143*^9}, {
+   3.517334957247117*^9, 3.517334978535076*^9}, {3.517335011733391*^9, 
+   3.5173350406442137`*^9}, {3.5173351201064262`*^9, 3.517335137793874*^9}, {
+   3.517335375660467*^9, 3.517335412963312*^9}, {3.517335455731798*^9, 
+   3.517335551041175*^9}, {3.517335604376453*^9, 3.5173357376825*^9}, {
+   3.517335798572322*^9, 3.51733580322344*^9}, {3.5173358514269238`*^9, 
+   3.517335963393672*^9}, {3.517336003163329*^9, 3.517336058165167*^9}, {
+   3.517336256363311*^9, 3.517336305265251*^9}, {3.51733636389287*^9, 
+   3.517336367248146*^9}, {3.51733647413474*^9, 3.5173364746654367`*^9}, {
+   3.517336559248983*^9, 3.517336561848617*^9}, {3.517367626541649*^9, 
+   3.517367705336946*^9}, {3.517367791656136*^9, 3.517367810533764*^9}, {
+   3.5173680054015837`*^9, 3.5173681448802223`*^9}, {3.517368202592416*^9, 
+   3.517368212221806*^9}, {3.5173682793361473`*^9, 3.517368279723124*^9}, {
+   3.517368363455708*^9, 3.517368401466815*^9}, {3.517368451212386*^9, 
+   3.517368463409952*^9}, {3.517368495795951*^9, 3.517368510236106*^9}, {
+   3.517368551091064*^9, 3.517368595286662*^9}, {3.517368631352521*^9, 
+   3.5173686772721653`*^9}, {3.517383983727648*^9, 3.5173840466805964`*^9}, {
+   3.517384159065975*^9, 3.517384167298918*^9}, {3.51738422514648*^9, 
+   3.517384227338999*^9}, {3.518195295280732*^9, 3.518195305846961*^9}, {
+   3.518195456601633*^9, 3.518195460327448*^9}, {3.518196187080405*^9, 
+   3.518196205713777*^9}, 3.518196243875588*^9, {3.518197087019044*^9, 
+   3.5181970888272057`*^9}, {3.548336163833386*^9, 3.548336166412342*^9}, {
+   3.548336343704324*^9, 3.548336358860406*^9}, {3.5483364701780357`*^9, 
+   3.548336484144067*^9}, {3.548336529883884*^9, 3.548336540969346*^9}, {
+   3.548344607348515*^9, 3.548344608870598*^9}, {3.5923892698495417`*^9, 
+   3.592389323105822*^9}, {3.5923893582569227`*^9, 3.592389367606283*^9}, {
+   3.5923894106691723`*^9, 3.592389474381781*^9}, {3.592391112320978*^9, 
+   3.5923912308065453`*^9}, {3.5923912730704737`*^9, 
+   3.5923912743941193`*^9}, {3.592391386648828*^9, 3.592391388062999*^9}, {
+   3.592671923328158*^9, 3.592671924175865*^9}, {3.592672814161797*^9, 
+   3.592672817923629*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"1", "D", " ", "Testcases", " ", 
+    RowBox[{"Trafo", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "1"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "2", ",", "4", ",", "10", ",", "20", ",", "50"}], 
+      "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "10", ",", "20", ",", "50"}], "}"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {X(setup_file),X(destroy_file),ABSPATH(\\\"\>\"", "<>", " ", 
+         
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_1d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.5173840443832397`*^9, 3.517384081724496*^9}, {
+   3.517384180922477*^9, 3.517384425381447*^9}, {3.51767461454566*^9, 
+   3.5176746284180737`*^9}, {3.517674660990048*^9, 3.517674671275931*^9}, {
+   3.517674784712487*^9, 3.51767478525749*^9}, {3.517674879128593*^9, 
+   3.517674881205332*^9}, {3.518114950576809*^9, 3.518114954403322*^9}, {
+   3.518115098971106*^9, 3.5181151104874153`*^9}, {3.518194668914782*^9, 
+   3.5181946821969357`*^9}, {3.518194734269782*^9, 3.518194735094262*^9}, {
+   3.518194773462639*^9, 3.518194875034071*^9}, {3.518194949105473*^9, 
+   3.518194987735242*^9}, 3.51819521869759*^9, {3.5181952521605186`*^9, 
+   3.518195257942354*^9}, {3.518196034802575*^9, 3.5181960559626827`*^9}, {
+   3.518196971634709*^9, 3.518197069048802*^9}, {3.5181975442351294`*^9, 
+   3.518197547442575*^9}, {3.518197629827517*^9, 3.518197630432558*^9}, {
+   3.5483363721060057`*^9, 3.548336382723646*^9}, {3.548336568717052*^9, 
+   3.548336631597205*^9}, {3.548336745404522*^9, 3.5483368903217897`*^9}, {
+   3.5483372613781643`*^9, 3.548337281078226*^9}, {3.548337760289608*^9, 
+   3.548337791653308*^9}, {3.5483379559441223`*^9, 3.548337985056346*^9}, {
+   3.548338045405122*^9, 3.54833809056406*^9}, {3.5483442863008347`*^9, 
+   3.548344431490254*^9}, {3.548344516346612*^9, 3.54834452160181*^9}, {
+   3.5483445634454823`*^9, 3.548344603589292*^9}, {3.548344673892972*^9, 
+   3.548344674043014*^9}, {3.592389147832615*^9, 3.592389157634921*^9}, {
+   3.592389233361754*^9, 3.592389234211445*^9}, {3.592753373285009*^9, 
+   3.592753400216855*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"1", "D", " ", "Testcases", " ", 
+    RowBox[{"Adjoint", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "1"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "2", ",", "4", ",", "10", ",", "20", ",", "50"}], 
+      "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "10", ",", "20", ",", "50"}], "}"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {X(setup_file),X(destroy_file),ABSPATH(\\\"\>\"", "<>", " ", 
+         
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_1d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], "]"}], 
+   "\[IndentingNewLine]"}]}]], "Input",
+ CellChangeTimes->{{3.5923913241559067`*^9, 3.59239137175106*^9}, {
+   3.592391411465201*^9, 3.592391432390818*^9}, 3.59239160556382*^9, {
+   3.592753355642009*^9, 3.5927533696953897`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"2", "D", " ", "Testcases", " ", 
+    RowBox[{"Trafo", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "2"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"10", ",", "20"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"20", ",", "50"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {X(setup_file),X(destroy_file),ABSPATH(\\\"\>\"", "<>", " ", 
+         
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_2d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.518197155351283*^9, 3.5181971627478523`*^9}, {
+  3.518197246832231*^9, 3.518197473939831*^9}, {3.518197565862846*^9, 
+  3.5181975665474453`*^9}, {3.5181976205553493`*^9, 3.518197620890814*^9}, {
+  3.548344631084435*^9, 3.54834465895175*^9}, {3.548344709542242*^9, 
+  3.5483447374599237`*^9}, {3.548344793350206*^9, 3.548344809958082*^9}, {
+  3.5483466580895443`*^9, 3.5483466669263077`*^9}, {3.592389149645561*^9, 
+  3.5923891601308613`*^9}, {3.592389236836712*^9, 3.5923892391240053`*^9}, {
+  3.592753404204129*^9, 3.592753420555386*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"2", "D", " ", "Testcases", " ", 
+    RowBox[{"Adjoint", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "2"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"10", ",", "20"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"20", ",", "50"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {X(setup_file),X(destroy_file),ABSPATH(\\\"\>\"", "<>", " ", 
+         
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_2d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.5927534252297688`*^9, 3.592753429445117*^9}, {
+  3.59275346161097*^9, 3.592753483004318*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"3", "D", " ", "Testcases", " ", 
+    RowBox[{"Trafo", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "3"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {X(setup_file),X(destroy_file),ABSPATH(\\\"\>\"", "<>", " ", 
+         
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_3d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.518197606681448*^9, 3.518197615153542*^9}, {
+  3.5483451910722103`*^9, 3.5483452622079287`*^9}, {3.5483453352624826`*^9, 
+  3.548345337453582*^9}, {3.548345370487627*^9, 3.5483453706498127`*^9}, {
+  3.5483467419758577`*^9, 3.548346746749652*^9}, {3.548346925708653*^9, 
+  3.5483469438417873`*^9}, {3.548347041873805*^9, 3.548347042368384*^9}, {
+  3.5483471141121607`*^9, 3.54834711944681*^9}, {3.54834715646264*^9, 
+  3.5483471569767027`*^9}, {3.548347414821805*^9, 3.548347416066527*^9}, {
+  3.59238915108247*^9, 3.592389162230815*^9}, {3.592389241524185*^9, 
+  3.5923892421869593`*^9}, {3.592753716172439*^9, 3.592753721792017*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"3", "D", " ", "Testcases", " ", 
+    RowBox[{"Adjoint", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "3"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {X(setup_file),X(destroy_file),ABSPATH(\\\"\>\"", "<>", " ", 
+         
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_3d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.592753731395296*^9, 3.592753781509344*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"4", "D", " ", "Testcases"}], " ", "*)"}], "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "4"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {X(setup_file),X(destroy_file),ABSPATH(\\\"\>\"", "<>", " ", 
+         
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_3d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], "]"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{"(*", 
+    RowBox[{"FormatVector", "[", 
+     RowBox[{
+      RowBox[{"Flatten", "[", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], "]"}], ",", 
+      "\"\<filenames\>\""}], "]"}], "*)"}]}]}]], "Input",
+ CellChangeTimes->{{3.548337660709242*^9, 3.5483376910598288`*^9}, {
+  3.548347420747239*^9, 3.548347430447401*^9}, {3.5923891526665897`*^9, 
+  3.59238916503076*^9}, {3.592389244924111*^9, 3.592389245598806*^9}}]
+},
+AutoGeneratedPackage->Automatic,
+WindowSize->{1920, 1068},
+WindowMargins->{{0, Automatic}, {Automatic, 0}},
+FrontEndVersion->"8.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 6, \
+2010)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[545, 20, 1621, 27, 43, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[2169, 49, 352, 10, 27, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[2524, 61, 21252, 486, 808, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[23779, 549, 4303, 100, 163, "Input"],
+Cell[28085, 651, 2959, 81, 178, "Input"],
+Cell[31047, 734, 3219, 84, 163, "Input"],
+Cell[34269, 820, 2790, 78, 163, "Input"],
+Cell[37062, 900, 3258, 83, 163, "Input"],
+Cell[40323, 985, 2684, 75, 163, "Input"],
+Cell[43010, 1062, 3560, 97, 178, "Input"]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/tests/check_nfft_1d.c b/tests/check_nfft_1d.c
deleted file mode 100644
index bc1ab5e..0000000
--- a/tests/check_nfft_1d.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
-
-#include "check_nfft.h"
-#include "infft.h"
-
-static const char* filenames[] =
-{
-  "data/nfft_1d_1_1.txt",
-  /*"data/nfft_1d_1_10.txt",
-  "data/nfft_1d_1_20.txt",
-  "data/nfft_1d_1_50.txt",
-  "data/nfft_1d_2_1.txt",
-  "data/nfft_1d_2_10.txt",
-  "data/nfft_1d_2_20.txt",
-  "data/nfft_1d_2_50.txt",
-  "data/nfft_1d_4_1.txt",
-  "data/nfft_1d_4_10.txt",
-  "data/nfft_1d_4_20.txt",
-  "data/nfft_1d_4_50.txt",
-  "data/nfft_1d_10_1.txt",
-  "data/nfft_1d_10_10.txt",
-  "data/nfft_1d_10_20.txt",
-  "data/nfft_1d_10_50.txt",
-  "data/nfft_1d_20_1.txt",
-  "data/nfft_1d_20_10.txt",
-  "data/nfft_1d_20_20.txt",
-  "data/nfft_1d_20_50.txt",
-  "data/nfft_1d_50_1.txt",
-  "data/nfft_1d_50_10.txt",
-  "data/nfft_1d_50_20.txt",
-  "data/nfft_1d_50_50.txt",*/
-};
-
-static const testcase_delegate_file_t nfft_1d_1_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_1.txt"};
-static const testcase_delegate_file_t nfft_1d_1_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_10.txt"};
-static const testcase_delegate_file_t nfft_1d_1_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_20.txt"};
-static const testcase_delegate_file_t nfft_1d_1_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_1_50.txt"};
-static const testcase_delegate_file_t nfft_1d_2_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_1.txt"};
-static const testcase_delegate_file_t nfft_1d_2_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_10.txt"};
-static const testcase_delegate_file_t nfft_1d_2_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_20.txt"};
-static const testcase_delegate_file_t nfft_1d_2_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_2_50.txt"};
-static const testcase_delegate_file_t nfft_1d_4_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_1.txt"};
-static const testcase_delegate_file_t nfft_1d_4_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_10.txt"};
-static const testcase_delegate_file_t nfft_1d_4_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_20.txt"};
-static const testcase_delegate_file_t nfft_1d_4_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_4_50.txt"};
-static const testcase_delegate_file_t nfft_1d_10_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_1.txt"};
-static const testcase_delegate_file_t nfft_1d_10_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_10.txt"};
-static const testcase_delegate_file_t nfft_1d_10_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_20.txt"};
-static const testcase_delegate_file_t nfft_1d_10_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_10_50.txt"};
-static const testcase_delegate_file_t nfft_1d_20_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_1.txt"};
-static const testcase_delegate_file_t nfft_1d_20_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_10.txt"};
-static const testcase_delegate_file_t nfft_1d_20_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_20.txt"};
-static const testcase_delegate_file_t nfft_1d_20_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_20_50.txt"};
-static const testcase_delegate_file_t nfft_1d_50_1 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_1.txt"};
-static const testcase_delegate_file_t nfft_1d_50_10 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_10.txt"};
-static const testcase_delegate_file_t nfft_1d_50_20 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_20.txt"};
-static const testcase_delegate_file_t nfft_1d_50_50 = {X(setup_file), X(destroy_file), "data/nfft_1d_50_50.txt"};
-static const testcase_delegate_file_t *testcases[] = {
-  &nfft_1d_1_1, &nfft_1d_1_10, &nfft_1d_1_20, &nfft_1d_1_50,
-  &nfft_1d_2_1, &nfft_1d_2_10, &nfft_1d_2_20, &nfft_1d_2_50,
-  &nfft_1d_4_1, &nfft_1d_4_10, &nfft_1d_4_20, &nfft_1d_4_50,
-  &nfft_1d_10_1, &nfft_1d_10_10, &nfft_1d_10_20, &nfft_1d_10_50,
-  &nfft_1d_20_1, &nfft_1d_20_10, &nfft_1d_20_20, &nfft_1d_20_50,
-  &nfft_1d_50_1, &nfft_1d_50_10, &nfft_1d_50_20, &nfft_1d_50_50,
-};
-
-/* Initializers. */
-static void init_1d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
-{
-  X(init_1d)(p, N[0], M);
-}
-
-static void init_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
-{
-  X(init)(p, d, N, M);
-}
-
-static void init_advanced_pre_psi_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
-{
-  int *n = malloc(d*sizeof(int));
-  int i;
-  for (i = 0; i < d; i++)
-    n[i] = 2*X(next_power_of_2)(N[i]);
-  X(init_guru)(p, d, N, M, n, ego->m, ego->nfft_flags, ego->fftw_flags);
-  free(n);
-}
-
-/*static void init_advanced_pre_full_psi_(X(plan) *p, const int d, const int *N, const int M)
-{
-  X(init_guru)(p, d, N, M, PRE_PHI_HUT | PRE_FULL_PSI | MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT | FFT_OUT_OF_PLACE, 0U);
-}*/
-
-#define DEFAULT_NFFT_FLAGS MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT | FFT_OUT_OF_PLACE
-#define DEFAULT_FFTW_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT
-
-static init_delegate_t init_1d = {"init_1d", init_1d_};
-static init_delegate_t init = {"init", init_};
-static init_delegate_t init_advanced_pre_psi = {"init_guru (PRE PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
-static init_delegate_t init_advanced_pre_full_psi = {"init_guru (PRE FULL PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_FULL_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
-static init_delegate_t init_advanced_pre_lin_psi = {"init_guru (PRE LIN PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
-#if defined(GAUSSIAN)
-static init_delegate_t init_advanced_pre_fg_psi = {"init_guru (PRE FG PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | FG_PSI | PRE_FG_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
-#endif
-/* Transformations. */
-static double trafo_direct_cost_factor = 1.0E-6;
-
-static double trafo_direct_cost(X(plan) *p)
-{
-  if (trafo_direct_cost_factor == 0.0)
-  {
-    int M, d, Nd, x = 0;
-    for (d = 1; d <= 4; d++)
-    {
-      for (Nd = 4; Nd < 128; Nd *= 2)
-      {
-        for (M = 4; M <= 128; M *= 2)
-        {
-          X(plan) p;
-          int *N = malloc(d*sizeof(int)), i;
-          for (i = 0; i < d; i++)
-          {
-            N[i] = Nd;
-          }
-          X(init)(&p, d, N, M);
-          for (i = 0; i < M; i++)
-            p.x[i] = K(0.0);
-          if(p.nfft_flags & PRE_ONE_PSI)
-            X(precompute_one_psi)(&p);
-          for (i = 0; i < d*Nd; i++)
-          {
-            p.f_hat[i] = K(0.0) + K(0.0) * I;
-          }
-          {
-            double r;
-            ticks t0, t1;
-            t0 = getticks();
-            X(trafo_direct)(&p);
-            t1 = getticks();
-            r = X(elapsed_seconds)(t1, t0)/M;
-            for (i = 0; i < d; i++)
-              r = r / Nd;
-            trafo_direct_cost_factor += r;
-            printf("%E\n", r);
-            x += 1;
-          }
-          X(finalize)(&p);
-          free(N);
-        }
-      }
-    }
-    trafo_direct_cost_factor = trafo_direct_cost_factor/((double)x);
-    printf("--> %E\n", trafo_direct_cost_factor);
-  }
-
-  {
-    int c = p->M_total, i;
-
-    for (i = 0; i < p->d; i++)
-      c *= p->N[i];
-
-    return trafo_direct_cost_factor * c;
-  }
-}
-
-static trafo_delegate_t trafo_direct = {"trafo_direct", X(trafo_direct), 0, X(trafo_direct_cost), X(err_trafo_direct)};
-static trafo_delegate_t trafo = {"trafo", X(trafo), X(check), 0, X(err_trafo)};
-
-/* Delegates. */
-static const init_delegate_t* initializers[] = {
-    &init_1d,
-    &init,
-    &init_advanced_pre_psi,
-    &init_advanced_pre_full_psi,
-    &init_advanced_pre_lin_psi,
-#if defined(GAUSSIAN)
-    &init_advanced_pre_fg_psi,
-#endif
-};
-static const trafo_delegate_t* trafos[] = {&trafo_direct, &trafo};
-
-int main(void)
-{
-  return X(check_many)(SIZE(testcases), SIZE(initializers), SIZE(trafos),
-    testcases, initializers, trafos);
-}
diff --git a/tests/check_nfsft.c b/tests/check_nfsft.c
new file mode 100644
index 0000000..a5da20c
--- /dev/null
+++ b/tests/check_nfsft.c
@@ -0,0 +1,1355 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <complex.h>
+
+#include "nfft3.h"
+#include "infft.h"
+
+static const R K4PI = K(12.56637061435917295385057353311801153678867759750042328389977837);
+
+static const C f_hat[] =
+{
+  K(+0.5187910942199021924670496864804890704907465499076256014447361523) + K(+0.6861600946447911504923623532492162295422902396261547897329701272) * I,
+  K(+0.8299196587702874048010066719687445427471337596497385288106773952) + K(-0.02336058203118977121512282256807911385554800846496188908300112029) * I,
+  K(+0.2535610670457191642528195065724571230354782789119009392027906057) + K(-0.1952860327539096211791504860394444113670749093775417390039946022) * I,
+  K(+0.8233146960103414274127930176425000268301469075510563344651605858) + K(-0.7401098161688255502164746480545707764069206396799531644428564878) * I,
+  K(-0.9370479052931367101198820670270669249226036578733792472697887507) + K(+0.3685564581950387076305026464189030846263599859858994129020066626) * I,
+  K(-0.5479875123363595835374373526131091671873251881279257144872344302) + K(-0.8064962606521500993462132489218952694760112802571794702866584276) * I,
+  K(-0.3634232442807936931624532540997838599798713141491939821000665081) + K(-0.3012098209410735075489314869655329185447261365231500429319375168) * I,
+  K(+0.7486556295464791390836878775840189020740705622417049999674216015) + K(+0.8092717517815122182830506236680668593679458648863592463284877158) * I,
+  K(+0.0009093903742935279286611207900312913510273633514297437035778646867) + K(+0.8858293723046408467271407759245387811930851335020497268649538649) * I,
+  K(+0.9024177599735620403183452242307173243589786099607003550348586779) + K(-0.3933811326460676205778615884005930742981154275458447360476424035) * I,
+  K(+0.9141196146206810164846325531026988464164699058019777024111766505) + K(-0.5285651434877149120835011027630489239500301360038060588044365774) * I,
+  K(-0.5858650845941639182516996186354812878252353014294256407338444282) + K(-0.8769736704686337617047102854803171611286915290307315235905955121) * I,
+  K(+0.4736963350111976186097470904817340923188432410665667194320025691) + K(-0.1654956647152494517915882898122931602476701407106262094590785936) * I,
+  K(+0.5979889069001015977889008233031918281253015839905385628885202230) + K(-0.2428696150109180254718295909047837563170666313129681389449269599) * I,
+  K(+0.3142814446272417764813001639622132712860837183978526968577292864) + K(+0.1695443901301601562898453902673989624014693466214718940304827046) * I,
+  K(+0.6476380074600053161359735870516252894326207339599861557426300418) + K(-0.9436025599423521695803140114586216666764288471433399221579126183) * I,
+  K(-0.4181119723675847875057529730102122168041484011101782058226600312) + K(-0.6769128004489706239581619953954373698027873909606056137650781949) * I,
+  K(+0.09454273770979170139206702616095394905974748643104775927554334832) + K(-0.8031447358139460619025200119291896009964220703625052024693549794) * I,
+  K(-0.1496852056702927390360963880918193332263215234784601547957102818) + K(-0.2465307119481016189305526321857929056019791231535433593985116127) * I,
+  K(-0.8896640940516886042683882550952119864912360275813168010228729265) + K(-0.7093638666894762905985568614336435539411395335703532799676707812) * I,
+  K(+0.5448147841191301808090416204974602555736045387311502776127400733) + K(+0.04773226368541670743234606333319675309009309829557419204956611747) * I,
+  K(+0.3906623911045387616209050198213951350167471866556469408974539601) + K(+0.6530762949186713747249940972639378357760787671935888322202906629) * I,
+  K(-0.7101207883055357689932327859702284881788356394867546677972228081) + K(-0.5670022197932760837876426626051311218184692799044329839453349403) * I,
+  K(+0.4065818372281019562419603361128888573211367815651883990736400313) + K(-0.3444216620060470899537486402571426138414915899245522869750191290) * I,
+  K(+0.9226910849861955478394153888046094621630905239739427135672438219) + K(-0.3230025171084525875517660989291029775162198061465120450542978347) * I,
+  K(+0.4452600526859432609778739319201135773536041336118662117358520817) + K(+0.7483099382556801857092978951844696847252788536446113141425895447) * I,
+  K(-0.6467969941538605750524580688993145346472280815603254656083297236) + K(+0.4074494226735861776186423971831734423006513088720827445983674769) * I,
+  K(-0.9095197883419727942980944738755914705719172168004082992075269478) + K(+0.8000522902303118445357579174836576277986412030392198738163824086) * I,
+  K(-0.07609123206670422549589525297331010700546770724805390317619462215) + K(+0.5270135994575522059042031033407677565934525903791947742539445358) * I,
+  K(-0.9751441225583376724603163808883725680469390969844274595460015624) + K(+0.1739954655703675885285071491784308233074263456350253032404141084) * I,
+  K(+0.6639368842673528596272213486339934031143511056154451799015992522) + K(+0.6132568935934195578623142941529886747904646484832305968651301125) * I,
+  K(-0.1802738636294117951998369685954592418628892032366140096842936431) + K(+0.7945644531144080212384322239965057632026769816230755173429795175) * I,
+  K(+0.8193046974592595795104602365336356697581003476586701211747960545) + K(+0.7108200524533145115578075590900843641841786217877993895886555926) * I,
+  K(-0.9145344594297042461495955392910633438857045496689126651115701903) + K(-0.4856631207165151881100381685038827674855193892217286933791300367) * I,
+  K(+0.6877299089666235086488767431293637153759530009318287385058772064) + K(-0.5169313560293359578565926512675384042867578894260952246005758403) * I,
+  K(+0.1596955867102727027433905154323718972532840563592043694648514857) + K(-0.5414178105510978309997267530493278846536977387727148145073744332) * I,
+  K(-0.6747811337730093721288652045217423473732159901058759137085916899) + K(-0.8568631967414843337898082790965759873205758343817229919875694762) * I,
+  K(+0.3646996714026809486792387516642745646617772828068105538716909459) + K(-0.5596928237741893456842894666766240321383310338488863206674898258) * I,
+  K(+0.02061456438338309690140420354070795194329230512051279764558585385) + K(+0.4843548982452669513652677517470763467966440138936036906819700508) * I,
+  K(+0.4275342076161847160624191184358062349668656354373351747732476501) + K(-0.5469573055604421909717854509073780452329807750122965576626535377) * I,
+  K(+0.2431137168992355991882082288081185133603218012046746536220860429) + K(-0.9099033864847763514006197136868471784620451007061579557349004907) * I,
+  K(+0.5888672211719146796501220696195063737607418028378171667223451331) + K(+0.01223270372896518193892191175649759920359095035177497113125844886) * I,
+  K(+0.7421681919023358119961858280966848629653951858251681679099331550) + K(+0.3866521986820460918541165179335586839781083300360589211793629832) * I,
+  K(-0.3325456363716838325521581600919102851100075349555949460650274647) + K(-0.1197676216436940259833561586516589777917740566874733594015648539) * I,
+  K(+0.8019955191519129936697740919308824177602521906827251299147985284) + K(-0.8681668300076211599701871823454154203240662136248927050440108239) * I,
+  K(+0.7637744170783317814837046336077807564594153641230798746234243376) + K(+0.9643462995015233247947929845440682791221398324164413372112487927) * I,
+  K(-0.2310756097528814044952912028822037271275326335305930507654606435) + K(+0.1388641415461817265177948721257736172577538351223719324072921994) * I,
+  K(-0.9655438117840325593283872532033553603159715502760342015667627005) + K(-0.6296668510321843295478076219946807945994177892014326799427540979) * I,
+  K(+0.6675693886116659542655946067623955549591151354723777236171665728) + K(-0.1936281154562724107109611570159692227865515119179130225354689873) * I,
+  K(-0.7893288322268184436134524007666926693931762801678871465861418609) + K(-0.7328379463303288477561867792131077403156498026289316258795655340) * I,
+  K(-0.6640351047935882556355196309220606968400956297740973873383017338) + K(+0.3412905065763138969604056637074751803291969440638117238843261230) * I,
+  K(+0.6037429429053351636480549763461253926406748935164762623221669559) + K(+0.1443912361814284534178522198954933358193634438175599266804917434) * I,
+  K(+0.04049709968282266163459897886512329917197220682585409573189513545) + K(+0.4996157064315355326055163752802357217559261356722001044096151138) * I,
+  K(+0.07083949369107481434408869927051740746544665609343821689998552144) + K(-0.6230831346564403465277960796640640381529425470993853422076473938) * I,
+  K(+0.8089384237179930894022798826898087871131378771610462761899107267) + K(-0.9859718194302506453415194469799695492716899449266857330154068920) * I,
+  K(-0.9323578235501902185081335535867230905428055056687366204156814546) + K(-0.9447972032542146762065085125544494444019838261409021171580265796) * I,
+  K(+0.1296912582635094791159968741396517892619496286425923315469017315) + K(-0.2068263551412698141362146248853097226562808217145941255650250778) * I,
+  K(-0.4468637969786996582440457059786106701273890489693164864223273276) + K(+0.3560647254240236998184132124783573327500294448009104919219221357) * I,
+  K(+0.3473182787457166095655272011958304458769059245306263556237198093) + K(+0.1709539908168754281357471207538939126020549623807407322645739351) * I,
+  K(+0.6730239803746776236331496603815032295495982893381947359651507448) + K(+0.6961549906664668387242721491814988874919253730885911841387184336) * I,
+  K(+0.4693370738725782348011090850674669705181930016524837165135435547) + K(-0.7857951766509684715309721671093420092366735888479751894316716617) * I,
+  K(+0.7326407917110484171912153866348997360576951272180219014691797793) + K(-0.9264042768404135962449498334767462274221149823539283099223698709) * I,
+  K(+0.8896584626709136503743525653013008261806443874158277284018120149) + K(+0.4342083932680188831640137494112205832885344495616592824383241001) * I,
+  K(-0.2265701660879125564721240884910281025669999083879807299439909758) + K(+0.5826965779329696556543948737595065286259539387891816832378451956) * I,
+  K(+0.4708396089022274153436964883099718013373450222060073870567505239) + K(-0.07614560539976724478929507601837705779959296707361603096770812404) * I,
+  K(-0.3467653307042932642135932397880869495315733369791291780688045235) + K(+0.08140391788934924007263340518620875310862880106717383821771833485) * I,
+  K(-0.5080828524549865801764991771333278027282032135377193088826402342) + K(-0.9015993674808150849774257821193126837824674793523863303015074642) * I,
+  K(+0.2534127692450978539956353315017964004415010066453586316790137267) + K(-0.4408773323563233079514746557081708900564805902213272281863940502) * I,
+  K(-0.03784601056671346017278579674846485124513850380657478234018907258) + K(-0.8556794408837488879067989165186188363719860359427630650246464092) * I,
+  K(-0.1638418577657418606013589935654438892709892566266603430609537648) + K(-0.9582949377915883573775653232736339745936825411875736736876614180) * I,
+  K(+0.2304646108225628805612015119187584453941236526041793307050945163) + K(-0.6029359107416980190145886360033799209100879829213134524383822786) * I,
+  K(+0.3443531342556848059435866028145119442400421416595575644797323295) + K(+0.01496506396355548904573416247400317308264553726521234859845012006) * I,
+  K(-0.3457869024740416111401551370302798029445165812220497726264305890) + K(+0.08391466779977787090612693997014836974448247120368128925233716376) * I,
+  K(+0.1930926810717222229941597550198194119738225445940276791441241131) + K(-0.8615879740724420315196410236519476092949888956183649241900032710) * I,
+  K(+0.1394763583318256254690481032936703408345465656619632704870704652) + K(+0.4518687507167566315844465663142922149338378387358790932658507912) * I,
+  K(+0.1734811767584588493722112843454839006131847531968834276506799479) + K(-0.3519446213002901954315438884132910866841259910544235976053197166) * I,
+  K(-0.006389377188858164625004291454031199583005375394316488572042410186) + K(+0.8406952425953994624689167858277013624082316446263457797610685457) * I,
+  K(+0.04042188419386758921108111037016068179441026426076429420003118806) + K(-0.5511105036718537388678847059130713045918163116954922262452667422) * I,
+  K(+0.5290424316959729095787232531243315471095869567177665044555007757) + K(-0.9369076098347694150871004195370126676832052828756724957678320945) * I,
+  K(-0.8131449470377295748647538680877719171494622875798434221364184453) + K(+0.1865431920288925081124660456222534502076700460628450382424736771) * I,
+  K(-0.8551112470847734126088465165379136374761294369563813456440043335) + K(+0.1724267077608620610255127423878187619880739648930539245540379734) * I,
+  K(+0.3438037656022972452255624303694813705797659620215279727199990343) + K(+0.6292400617267133394171991118950648279995056038191923434999974927) * I,
+  K(+0.2076671620611933005854453300789753407975699653504255084724785072) + K(-0.3940350761215743064876552283822671451234281933607415834019211646) * I,
+  K(+0.4782723342918177661894737172331898857214260534804273268576670473) + K(-0.7873481830931112487062234135143430200414313606422935291090562665) * I,
+  K(-0.1365419284044311137981741470913920585828739955482983235498100413) + K(+0.01979324182253910239428328531642788054056233192086062572740415334) * I,
+  K(-0.1142020128249069325364922542518282096886140193402810571046258690) + K(+0.8808689040178107728885237199542202440084305521600310781341333234) * I,
+  K(+0.5772196721212842550449075982422857853077764389886736655472466258) + K(+0.5647848814787331057633058645807177893559968406779992012508706684) * I,
+  K(-0.5849699012718161191104095422913651387303161200618405839797499872) + K(-0.9979878948392831992915905917696276707334175615661006184805564169) * I,
+  K(+0.1888928043549689764569782403213440440643725262059280224142667585) + K(-0.9788324922333472874254730558201184176568187810186559998855343120) * I,
+  K(+0.4052218317992207417273075483880724883796845221135309062520078607) + K(-0.1981236481466482635822654686939603544600803040554350154002461727) * I,
+  K(-0.9192215529061250015326145277770822696646723479808599858909969171) + K(+0.6108165274595187458311821779561269734351748378186212890974597259) * I,
+  K(+0.8018434417967885412662035783169008630633733548584016908753737702) + K(-0.07705998763162191656516599968429884635889954186727197087853471503) * I,
+  K(+0.06206781597464059246795880669680164363633061547744939162006577336) + K(+0.02993154510954953354145925477199968114060055030768275499193064566) * I,
+  K(-0.8478409021572409960427753187611909151848289136584503608354059073) + K(+0.6136637399013493530809671603827572679895516739809012955467591939) * I,
+  K(-0.6250146186474650769000212251959050975121254692350090012887931340) + K(+0.5754142034524933105308155344505195268591305356676030743113648803) * I,
+  K(+0.6205573885776820069655825458715568059164575797940385557341970054) + K(-0.6981033788711433173054682856985691369721004773585967029115307709) * I,
+  K(+0.06534453683785326052325366365174581483514125376900657275261662701) + K(-0.3932515130681037026213466872703865718548695785813969475907322261) * I,
+  K(+0.1694127646060695585348699897467356412201432935396842740970405741) + K(-0.04451881667192675644889270678720571833873178312878231316222156346) * I,
+  K(-0.5618600155088621679510921558488675502357090070649825076145124501) + K(-0.9515818973925610266594858566793592879497042261230969910390836885) * I,
+  K(-0.9690095469471989085486956886827710732445194863931686963475442566) + K(+0.3617447383200301817557974675565439736154627067488326269290933466) * I,
+  K(+0.8572629232129391047139134088135219634926764157234453642201639856) + K(+0.7148090491237282187481034068230319449312511241080055705734489509) * I,
+  K(+0.5251426649018816166492143000109868755140014128747404349390212514) + K(-0.7705262094531509858969250840978689758336987077085071141398432901) * I,
+  K(-0.3112227765814012309389531999444809477409220877016387682960147221) + K(-0.7059254382674773269530157888190534605631883008804236332291267303) * I,
+  K(-0.1508031116382738388499919406627025267853335971266846963418020964) + K(-0.9790827758692157248620714982187530552345714114141875594862256317) * I,
+  K(+0.9644162511935579093241410903610234449652984515138670526753535487) + K(-0.3300933979029205070581868837032307671491602410428568658061422838) * I,
+  K(+0.8521405037515876241502942769717282798536195310104325131155797457) + K(-0.4018532443016763802126594607694765668189549777995208300696981674) * I,
+  K(-0.6616989662568875926935486720739743240441451485889619913070279419) + K(+0.1106632389482720323570183639094837864199309989985204657569386781) * I,
+  K(+0.4066037513692233654172581507155154374314137083450641696011272285) + K(+0.7944701691804542025804611341958793933232857160964086586096090746) * I,
+  K(+0.6555384736609781936246354536182731154410552362109741497450337459) + K(-0.09347895492525980007064936261740540768138616119732087566916865686) * I,
+  K(-0.3062548083981121374551717781528451594217189478801249843162446131) + K(-0.7549451847938184775282979602818789314889296048298785034509814848) * I,
+  K(+0.09693733538351156542198772991808467561689422215688338699916029741) + K(-0.4325374975324868612249314307964406940577604645687650910486764276) * I,
+  K(-0.3953730369067839939025678351163433726843498618331996791064572633) + K(-0.1481209826829122869442724836024370478720100718734625865837328739) * I,
+  K(-0.8909075632084579104972519473780447582097296816226607600844510230) + K(+0.5443026481842977101227459082948349013897221766614285932236914388) * I,
+  K(+0.7324515197119674695950532085286097597014647221989440804528415170) + K(-0.6483952163292400890725867874641597701679666306732292092935423536) * I,
+  K(+0.9298428832549888827470214333528791268939604138080126422205147584) + K(+0.7295553166679149168559999960541258881624278233648573378609410868) * I,
+  K(+0.9866189002085929815363116037727884673722755122816265613022807405) + K(+0.2345589322127484248475399866653133861552638764992621813196012142) * I,
+  K(+0.7850749482551828369144922482310461811523194674450306812941750626) + K(+0.4222609768553549893337035220781628115693499265744915130233561170) * I,
+  K(+0.8473313704979348423690430550253950963739845206209727361818441613) + K(-0.7058213189750876882784962377025562886070969746714085869120359815) * I,
+  K(-0.7015477631821363528973032011331148578366560189759559257587070329) + K(-0.4678151251570461185220450417195603655282374460267727063923184869) * I,
+  K(+0.9261008939016042282125265374430537333496961921863980038002663555) + K(+0.3033194798850245050720691754277763011325749053279687123743684340) * I,
+  K(-0.9982961753453067726975817420485761642922690149624467530302722732) + K(-0.9661000027497713376194619967015662405602761560357887374779637831) * I,
+  K(-0.3373408769160774173199442927404934035294014389477070592559712480) + K(-0.3539998147342716162036845617135787367304380999586616637095942376) * I,
+  K(+0.6925686242456340293221353925572444605578662584450055717589210690) + K(-0.4312481380563532132255271591339366155841250211925300720459257583) * I,
+  K(+0.1244988561614427901956887203947039988974857473254855233673339541) + K(-0.7376501584337611540176798704234296969331603580606360589562884345) * I,
+  K(+0.8348642341925357467587412651280331583645526161800388121955944327) + K(+0.2448800135253409401132382069711438429556679213456775074236767732) * I,
+  K(+0.9071404040655905638015823676672702555127105698911383552968686913) + K(-0.005390798646370928931558152976433350276179014523526193286637032564) * I,
+  K(-0.4485791310506140313661511856722369706396616968946054310335516606) + K(+0.5305869128011832005628464629735554948019258297823854065804029224) * I,
+  K(+0.02296531453518727018499295787989688236570420865308323667226251677) + K(-0.3546889388045263115201821193724516329615318407633450403999584633) * I,
+  K(+0.2571571858769719645280353042023686021396404232149522806678415201) + K(-0.5196981062176394831660974508864543990781722450216841206152752956) * I,
+  K(-0.2307401239396443061949151945522591068358529420486258439951760912) + K(+0.08891360119399596749884386376529052312480731555438530279414948641) * I,
+  K(-0.1342069542757424570889506220804300782167771869040928865305092826) + K(-0.7162405317677616445759686152639890518140606338662859288203074203) * I,
+  K(-0.2528496487022831361795387010549624842982228156795355232683589084) + K(+0.01097081486694913046329099199600130944852874001487329289340421640) * I,
+  K(-0.7451856743184566574405465713014591450519492744910662728708856573) + K(+0.6576174759707479419100295251684078172003798452629633230485438672) * I,
+  K(+0.2543645739475612600439757972588590264699481099408823209823142925) + K(-0.1152031912838220239702623578024932918867337277239785412695777898) * I,
+  K(+0.2472555789201360550686257951292662452385647036333260933435509671) + K(+0.05245042717790917458338056175938960598088600910415918752345759920) * I,
+  K(+0.3337231699634354797215160161197761736246922727732086976307169695) + K(-0.5555861231462383289960488924860942243538652113685037026073990591) * I,
+  K(-0.5773466842176447866256908821098953036429099146248960570815957811) + K(-0.7847218887597644352059090550947579197271395022745509599737087632) * I,
+  K(+0.2310346465611621969647520443384695821111293520347316095369545366) + K(+0.6956624279796197387618692909472051404486569551084813077232512469) * I,
+  K(+0.6668633589786994854311594511774044702273391217635839618266072895) + K(+0.6498438902749584443043090023704876089942234142271587995706071709) * I,
+  K(-0.9567569409193584166336988696719511473510196591417440409163517444) + K(-0.8809561712540304841609081467247258426632924926410909273025548033) * I,
+  K(+0.9688749205485018857292047054041581856523121758909548374836674962) + K(-0.7952478494851968971642566979060614170579052655852728439415056084) * I,
+  K(+0.6352177265635140095795868496708024562667660013438182052342682753) + K(-0.7428299034420465839178969045913238182889230859983319084116283251) * I,
+  K(-0.2011328964589948209368317545591699835338171429877527955615168024) + K(+0.9392076940542956663888882908664805201226201845255448292135651628) * I,
+  K(-0.6251595245871862967804957813297773042420193169743309028776758475) + K(+0.06189756252861603684689724983590021886000380034854631981022293682) * I,
+  K(+0.09958929032822524965431295995672428566484487885466648573242138998) + K(-0.9479092212057874303742952491892763559406324982893557721924263134) * I,
+  K(-0.6548250927996704791993841791963935369691196202328559186170531977) + K(-0.6774470530952922706938977456071820360494862715433203350871163601) * I,
+  K(-0.1222708078487543466539141904111687683463100917284779078957517826) + K(+0.2901413574157255190558096379521242964394348055815385325533885466) * I,
+  K(-0.1489839842647844448320755804314126165090837119634106272724291281) + K(-0.8317482771405245622522832896218640067621352296321130930574801187) * I,
+  K(+0.1298191609392687271919613046672102405872535141345336215662879925) + K(-0.2319169219609306735783966251244987646549816731661911398556730043) * I,
+  K(+0.02431372439121580012791414673697527956550112906979694782406572505) + K(+0.4015807188184378592733930827235484910711746851266315629701124662) * I,
+  K(-0.7097754767273637854590364191009000421935977904952745136432081162) + K(+0.3983606831102441116706128321545902344390453985079732430356279124) * I,
+  K(-0.9957684797248752746736940129939630778253672430942038331779982927) + K(-0.3668166453303815433290531550092607945677460654551416771804113898) * I,
+  K(-0.6182503042738413386050260787479723999178060034437478740452453366) + K(+0.09848153275019795286181623277153625108257143217251844236822069969) * I,
+  K(+0.9599350667164602097064987920208214616285567954936519920662590105) + K(-0.3612859986454879757492229483806880829267526972098848545626184323) * I,
+  K(+0.2938262573278622798606035428895281871235906860027842501804078122) + K(+0.4520997210119139511132091679035065311548990860876907060840570798) * I,
+  K(+0.5258811725739402665502120625997516993714558339921552447902711807) + K(-0.3248433774403433573677174145196778645659365686829040107056529750) * I,
+  K(-0.6017446240243853447324554106585316749957745462851488959156372559) + K(+0.6158091913990509274726377492059084001924163646376172758137036289) * I,
+  K(+0.8502405079392475723053034582733293699634270002315523564420647975) + K(+0.1277177663725873721089550701598061124135124942429115327497292885) * I,
+  K(+0.7596601021791837088293882557901637829046811541180956518259825667) + K(+0.2003646386404225383660209440859219360758706434181056568118487735) * I,
+  K(-0.9653518389029426736260271523033784704684908317432304470169388053) + K(-0.01085032903578773102157671656829956959220004905360306543650121899) * I,
+  K(-0.3447877142057833814343579612597239848506117417774848551473335705) + K(+0.3269173216759952020685171445083394207020867462620033061195229043) * I,
+  K(+0.6650517004032010948747070011478036784757121648846766203973889979) + K(+0.5292890409368328221052826593043011503645261308795073568145839499) * I,
+  K(-0.3535910303587964395641185395495097243975084716019640034063119228) + K(+0.5644753007073346040992897306120132956306638666901777220121106225) * I,
+  K(-0.7951323625068113723158625935496970264433400875678422735692671894) + K(+0.4248856825427021893639314422686960891087367915837002306426661241) * I,
+  K(-0.1164163635218733885246851203412551608400709152171000775797758439) + K(-0.3497765725638947964526168719398135900928182017448308756123207081) * I,
+  K(-0.2942029355186264453936118835043250512215600572666184714405901126) + K(+0.2232559635425089903933183561345583265063465829199775869366449358) * I,
+  K(+0.8509001730530253759462362437689576975783520658898955339651393362) + K(-0.8951850879115748535563858183506409808532639061179192890493077637) * I,
+  K(-0.8583563710730539840595404254361122867157044618942922268688038280) + K(-0.5156200572063233297921970678900788442132562212799342541263029007) * I,
+  K(-0.7983138879143760741165777669339430214612213030619354356597769169) + K(+0.07381299284602129402719582883608095054637386598916856560963249042) * I,
+  K(+0.8095259082700107171825214339402396170926856278630581486532855943) + K(-0.2705955937709261461311881364790767699807898920233889944804275812) * I,
+  K(-0.9224458007104349799706511279209716052610521255970061779066090306) + K(+0.1701743714578343780276363729743533048964877074513406538303746533) * I,
+  K(+0.3394322851638336739753839484831558379886115435945768965354689785) + K(+0.2083077340151472716872031262762495807044554824469264848994359883) * I,
+  K(+0.9592708062607786671867341804397778427014328983466680823177985734) + K(-0.8830716109505104881163683215736472373394084061209240597600807573) * I,
+  K(-0.7361500204987354827490157786120413890780585017734432253015747555) + K(+0.4515621970640184006009306613134866509435019402910827592517462832) * I,
+  K(-0.5945775652207438772872421266732388747714577236892427625979073499) + K(-0.9350901895046316704137671351529081079551929559810408453885780341) * I,
+  K(-0.9482167693077142828553782579689823931927368907118077504734664596) + K(-0.06014891839315446042375796508204252279614678465899558674893192211) * I,
+  K(-0.8166109672576379199658321777785070114678570932357195649257082196) + K(-0.8322292507511666964236897315919071736693250142412765563288625397) * I,
+  K(-0.8244372338427646134526887365543127247760724230944755553883638929) + K(-0.3097367617767747009969098885351738264681578356128830149017959546) * I,
+  K(+0.3160935609684555227620005885112973322847811500753654811048976874) + K(-0.3932590217832267674270885173801068685097437239396254095859130172) * I,
+  K(+0.7537556732702545598037755307816387008523858589893845146513079447) + K(+0.03589903299902697372681527783652079084309925781511316554638379184) * I,
+  K(+0.7055175301694533350324514606416264665249906551006279257194649495) + K(-0.4734988187050715352978552759397129451421822858370480333859491378) * I,
+  K(-0.9094596141156307990470697479328808839868630070517247820115544511) + K(-0.03180779673909519120683353003896260513060889595487689457655802755) * I,
+  K(-0.06309633695479189718314491183021402408972153342116631283455929289) + K(+0.6667190839018824472733919157821912050609170219749823266853561045) * I,
+  K(+0.5096301034138135642295324762866955916648364748354415498780267537) + K(+0.1657033448993123801615300523169438639731064763271733682303346816) * I,
+  K(+0.4784392820670900188042277752662579249802813350561614925974158665) + K(-0.9116984271075268200140080403800040441390874356893194571996765240) * I,
+  K(-0.8832745491903480277294167035974233234878108195547885424491258980) + K(-0.4409284345784698461231017826670311180599415154657482035611726886) * I,
+  K(-0.2235044780950896659720320589223489076669296160891597911620860387) + K(+0.2906902071434968474006719057101011707259425971827749629123515624) * I,
+  K(+0.2241127793152276028598518125491148078608893287432865471648796650) + K(-0.8195644764520402901083661759295697710088549699896031861593312144) * I,
+  K(+0.8425708874014594622936795546155085851105542484838902753378774203) + K(-0.9928576681491780376980595382359490863199305403871022043377442877) * I,
+  K(-0.6448583262186071403692800723957111208495905332922426110718335219) + K(+0.4447068534697065596509877091171244265699795835563445923434174765) * I,
+  K(-0.009096222817938798447368559581750977738176813515555690155708136475) + K(+0.06000374527444900304156712488412548935478079493483835200393857698) * I,
+  K(+0.6439240211139871050454676568755036138864641896534656536833174923) + K(+0.4233055910440917594127092207415722625441085709802670696935971538) * I,
+  K(-0.2500645366295277424248707218074136849617472158022633224285653688) + K(+0.7390308427210412932993638198868459665071679658796273933281117969) * I,
+  K(-0.8405592967119205156062703873564502051459867138153736323654803287) + K(+0.7606606924418702225342212023405265844886932554854313707501699129) * I,
+  K(-0.6452787623036607386464268288402643467181846890314108969120184718) + K(-0.4875499999879047033465693480588003906689922279559936394514942354) * I,
+  K(+0.1282669030202716539681165302331304544553614643763319962048499166) + K(+0.4040838685885191404971545055639505506828808776499882025897575794) * I,
+  K(-0.8375503487717622224530515119233160752709433789054117393489935270) + K(+0.01819552988102567371315746217525908318717662559635533046910024463) * I,
+  K(+0.9800619815088495005996354235085856347194940108277983709439214836) + K(-0.8022565338902891692463093126129665410059919718974803332053920392) * I,
+  K(+0.4380494524152227595681939796818601041513244437613887842968968894) + K(+0.007935176361027398825274389961977805470435163262100840467273486149) * I,
+  K(+0.08860403266473917705997473675058673452219036585984281857398100964) + K(-0.9103765369423980609623388365646936837162501578207947370666162167) * I,
+  K(+0.5099783530466409660867178049422041293288072164921230179972533788) + K(-0.005775606772744272719728035308191432976544591690191956847537297087) * I,
+  K(-0.1596716064405435361152043802657858305115621048200548686276666879) + K(-0.4104169761460309101892155677824721508193050760494095959533155651) * I,
+  K(-0.6810557409574377633097451350585899499802439706625932749162775062) + K(-0.2672276175585291039044541300200083430015505236929999237128608789) * I,
+  K(+0.2489894426728731685118815269432622353079476003675018610526152843) + K(+0.8606166860535069609851397467177179575191425563461271252866415329) * I,
+  K(+0.8506508397619027982676986275636725812248634004594272390818033044) + K(+0.04925914075178258188670177126518535766296770687510522032291611786) * I,
+  K(-0.05947507624470946675021404865689200568851602857999843210093148656) + K(-0.7321112351852172635774151903219896168119668231550046709303383563) * I,
+  K(+0.9739550579065299580026179673539750726156134485738574687578193572) + K(+0.7573586739881835663553509061561661211429331021710966417235025597) * I,
+  K(+0.9255416027285865633734143409244548513747123269669616046090556392) + K(+0.06692102331778971506387180347450213823901628957126770811551281668) * I,
+  K(+0.2392206264657781337054392851182162882202179548706184150867332207) + K(-0.9560574291342402036650276456641371374223618500088606827533152365) * I,
+  K(-0.9011437036115681055925982237309768783773366301539393980908335471) + K(-0.5734871774994161290407387891657799592400717693363727526705717044) * I,
+  K(-0.7364116985550050836854575743451371879865367048884298360591145752) + K(-0.6502361893143356816741534035616834106830328582687276322912511327) * I,
+  K(-0.7572668484391989916622869154862089943468039294156966242481363471) + K(-0.3390496345913181316915634059207279968987837294137886615035143241) * I,
+  K(-0.5772757533581359477539768791841518666026553845404247336899510608) + K(-0.1407996277506742695183923393177040881373826350132273991384504150) * I,
+  K(+0.3637363714532628109880953579671515095090379764406796830332955141) + K(+0.4319126055482282087059540297349743866418348939894618813421636914) * I,
+  K(+0.2967039646895491298595210172552598784054130309047168989638185730) + K(-0.8529782490843390708808993716234205390368916934862277934168273003) * I,
+  K(+0.9773655530099821891917709850846236227747053148987299909373103499) + K(+0.1076681058547118329695770424062521306496232908705722611728754212) * I,
+  K(-0.2313667531318478308766404005017050820112378838516306447500353098) + K(-0.9688553779592586660234357602846334819571612394430724270030022744) * I,
+  K(+0.9221011090587491853074299184608533856791887035534760105044036080) + K(+0.4273753563252363722506001083241481757089457577370206234455951503) * I,
+  K(-0.4157149990465158788962357806953067725682098597110283620326858431) + K(+0.3448127533851371742200294908978476145811438009908216554475142725) * I,
+  K(+0.3939636621374263895022035626052702723626799445691976661240070720) + K(-0.2782997216973340522154667632940840329848679752855922290276363179) * I,
+  K(-0.1695847389451206806370286993142181585708979023091295112089437044) + K(+0.3804655468858981830099213673571916436895322946479420243673486092) * I,
+  K(-0.2720363613414129273507956938532410176859962782699311583776773530) + K(+0.4901136987732815252180365576465952446044351612716063836935767447) * I,
+  K(+0.01042896653227312415023003305198045190524413866176498921615863500) + K(-0.9500138543105071607657499844068514527557249067263273194553627925) * I,
+  K(+0.05730298688017074332797003099530047295791547822097203915116888290) + K(-0.6677147057008947997978090462949778552550312904587293752022212740) * I,
+  K(-0.9944740368098729538564720451163954997845964076731012693030531368) + K(+0.1301059667627928323366118322595162057732697937911195935168118259) * I,
+  K(+0.7223363942309820546013897292288598944499098603398871933686941530) + K(+0.3109567337117650810242672251153906975276952088139356801408242817) * I,
+  K(+0.2807950223678356778024748159757154175656982095028802121175759831) + K(+0.9624729939306386106491113608371582294845898455313934176573633871) * I,
+  K(+0.2051627517926630751722950664722997554009198638609211081063449128) + K(+0.8227511023476245321636672041212029169480725948106523194143947097) * I,
+  K(+0.2187410207913535738951335139506203809947707722952831601168299341) + K(+0.06857079915236032101552301418427801356140527060725386012517610281) * I,
+  K(-0.6164165868086236592260894736259595566725279984627557379719223825) + K(-0.4144343062532604380124792449338913708091404974995415854520558525) * I,
+  K(+0.6633220658760418239885703169383728624828917778395079158952128337) + K(-0.6938479368619079653185757967341071840421423015975724810980976586) * I,
+  K(-0.1401226563463201132974658766336975992782906666007252854894520535) + K(+0.2669205807983703246384708037823316978703172804706903825260674343) * I,
+  K(-0.8710271730752299000861932767133074557709365404736968044117141263) + K(-0.1030381392252131734135396601986098588263147223589706666634583354) * I,
+  K(+0.5806146371844275984952356122744968248161513666716592440990351930) + K(-0.7662104538087767128127052827146345783738526624114091171966895460) * I,
+  K(-0.9232528808215254538102568763445122342893196327285120138315242355) + K(+0.07822225063291268771840315245812858693770368754568991927419757884) * I,
+  K(-0.7717476468147440717400524588876320543604536938248605821389042652) + K(+0.04868395592980535257918463177540036613082145058925953340006569328) * I,
+  K(-0.09909899962420227736000388821656662530128249742457994345772454248) + K(+0.3185803167934116390942394142718212675070175314206945944537126142) * I,
+  K(+0.2065634397510256566978978622797194192545629267581350543005708970) + K(-0.1497960396825874727883558188352567944041731882888192554551963893) * I,
+  K(-0.04790607170037866821113552300374560024536469447850458690626959412) + K(+0.3326658553703319287739090880891024148897212350736207490991064395) * I,
+  K(-0.3017715161041522484001327408356279879116214544208747760105764048) + K(+0.1651496761435738514055086204484201239595318049898820669873525510) * I,
+  K(-0.02730025281437285604135078302803574992234076002537705417273482767) + K(-0.1197610844347735620184039224012416659918097590630805295278783851) * I,
+  K(-0.8962599574016225826405515715500817238829543725937689611558172487) + K(+0.5041804371853829391167543548710701715494935376019789219540291688) * I,
+  K(-0.3039368340867884725625354676502652208704818053470346721587905592) + K(-0.5747557901399845616502227621038430323817805374029780906246134866) * I,
+  K(+0.08976014121529817223922545544553050682338617171043437785454168847) + K(-0.4312550427102329358884985783819343673308683091188923201666152248) * I,
+  K(+0.7836979184143426285194342455702802493290221421425950386092514047) + K(+0.4371158304540517221364928228755829093704678226914635218634428798) * I,
+  K(+0.7866165265604333887028161515998284930776944521598201815074812703) + K(-0.5453044328965967526412157942275508057010273945963191815417557900) * I,
+  K(-0.2959469127012690470715706308175813940683893420430018810083452182) + K(+0.9431316552809429993567505642794468014360760148701020862570117346) * I,
+  K(+0.9839465311696166360938595256439479020333654757596118847584421407) + K(-0.9386795842403934923076133395046522634780454664377959414653495662) * I,
+  K(-0.7295512424846779560526178451407277996420860385406456171211186842) + K(-0.9071322050344350214861663193920334031999359170624424161242870554) * I,
+  K(-0.5734859340249927177041293109463920733156355640715107463723088987) + K(-0.7899106350378392670914653586156035657514616763611561402560358095) * I,
+  K(-0.6802437960660276763587834566790933380788293104220584436370985977) + K(-0.1569661847222951873581934525868057792552201318035042747987729793) * I,
+  K(+0.1497649113654655133783597828565588660607642167354116073123795869) + K(+0.4411421395682736498399796539382212959115078196976702672734105877) * I,
+  K(+0.8867298774769700199925913188176541492635860358896736714239223747) + K(-0.7282083893935475813580241093579524626705319280407669578229726435) * I,
+  K(-0.8752515215864305827151183877348399201587236639340144967611151338) + K(+0.7668939494832659319477805812566187192255503638370055257646007528) * I,
+  K(-0.7201617293917598525296543346641416058512141219963494340616424667) + K(-0.1482159387526724783106655712239308395209421842855438555330688550) * I,
+  K(+0.2690126032634582200019677184095852277949186263397302630218337021) + K(+0.03851070301456312909086271082716627532772248751809848643840744353) * I,
+  K(-0.3730733704214551800640473712454784176332153517228811064648231567) + K(-0.8905316737567179038911762419651149343043729239953693969159610529) * I,
+  K(+0.3082714695840894683576631824626028008928681276302798942725502314) + K(+0.1227251432811091391815534252907446987108550842196219932024255871) * I,
+  K(-0.2987967105280014420073116046973414674468600923650387546130897510) + K(+0.2112038132526177108978486918470076731176035007959364022765155370) * I,
+  K(-0.2000951134404436946095652040367275677128746370504197225789724850) + K(-0.1696273388660750077068783889700127372117263534988539280073553782) * I,
+  K(+0.04408273980065905091197921561136354984723877628206147301652685496) + K(-0.7069282882938740622670070941643749925480013249861393551591332048) * I,
+  K(-0.7297202043152315067044763430638620779328768044156804768966644531) + K(-0.4633651244671009157563364007007371689257529213752429659480918708) * I,
+  K(-0.4457965002036897720847549424948006136603782944939037586465296909) + K(-0.2877319496209650714301600014612761880121340156534594863849840981) * I,
+  K(+0.4340920733153823860505694247823687165841582489112064447855256833) + K(-0.8448984489729436155365934500291724225525584810348929979003036995) * I,
+  K(+0.9511048506839730335733822809137841865931642174385739999991139200) + K(+0.1331344091257903087809795500520681993475416107848396617090004660) * I,
+  K(-0.7401059429721667431273379499929477791865703625070894757010602088) + K(+0.8141531518361978273705091921873697146002364707890241726367901509) * I,
+  K(-0.4092479608664280766380668991489306263757014395158398468963314903) + K(+0.9802412809915029360488331356355875020253585274966050582147144964) * I,
+  K(-0.7313218163535299929527294922870077337926490435498704681755798878) + K(+0.1166608264503253163647784987040246029071163773372558630400367237) * I,
+  K(+0.6110376183866484754920703112974249929219559684208111499218281493) + K(-0.1843354752611871910141291792123852776671618149701790823035651695) * I,
+  K(-0.8862000322715966695327553532707558139300831354267283950147273015) + K(+0.3609667175193408363854574418356643584381060422172516610040031218) * I,
+  K(+0.1630848742830569005817123509841830738097995985846930030237351073) + K(-0.01248374953972694388923344798818104877982877220723889129177300228) * I,
+  K(+0.4014607910563290449550039502488821952766875489552562105895772781) + K(+0.3793020126418015177172134367837836608425738340129988242627070738) * I,
+  K(-0.4566856311258568314471943703782753685871300455525628683770873783) + K(-0.1380156489095767121625602619461977921665529748250314893447804898) * I,
+  K(+0.8281754994927412623254071984611693613289490561603509579518356070) + K(+0.4454813958597333657711394728649113659270502924620041791103340472) * I,
+  K(+0.6760720797795224714675711686651709979749868244245466650721132681) + K(-0.8022564996513577190885076819346753150071354409843636941478617909) * I,
+  K(+0.6607395831909333650594029817502785066839489139335307598992708434) + K(-0.7264025285247545096683502726147098986543268369166135759921519201) * I,
+  K(-0.02210168988106958335639253976020663016518324665800641169662116698) + K(-0.06455311423882060254214968025310994085046619635227993859856120037) * I,
+  K(-0.2245413655397294850293890745253334587186497994598627227893983885) + K(+0.1514621158454726655502411906531727105081305454011105348123075764) * I,
+  K(+0.2436103488358762454423676628745265098394088465037428051938261616) + K(-0.2067930590214930064481697957237172113772695089772819617809094310) * I,
+  K(-0.5683045746254675285626375278156614867357715694552444825191990224) + K(+0.4469792143900330016786640798072566885315433209117643485851388241) * I,
+  K(-0.1415843488117874303011799917126425991790001175126813092000731312) + K(-0.3893281858513342338544726126284910753861028763176906714360667786) * I,
+  K(-0.1540400652193158062147877024235246170914086837551876880427074560) + K(+0.5318143396763262475274064952124011066705325366138209806102776345) * I,
+  K(+0.6700004281157037057859473264254934452077265563965601393495592711) + K(-0.2810925811250377189774845951773505917088094282808449896706296345) * I,
+  K(+0.01363213233759045478522152671936645326270858597114263069749918319) + K(+0.3481465693910355045301822238051668299740263484449974634774890144) * I,
+  K(+0.2757173211602678528086675606622744653854694186322805566074284564) + K(-0.6352668390573280172761060068177174083280359585777411541049770614) * I,
+  K(+0.3395619426276593623455680156723507487006117022664333026524024864) + K(-0.9137700188358494788276582146806965633113065954845178714962394746) * I,
+  K(-0.8964251963617578624580130200523512237161425272298893060792035169) + K(-0.2165887641996181497622927628473350034893711945610182849914293918) * I,
+  K(-0.6798946221252043885769009469703837486455986916783420070178543833) + K(+0.5592183524119207401050142211908223369639587742344369099940210971) * I,
+  K(-0.5650488736576005276525275636848646827425632923884710385620154131) + K(+0.3583740956051584066067786050408846001840802257276822321423096004) * I,
+  K(+0.5163726848821795770226317592910073407765161266641398352921347851) + K(-0.9800526894289191923971923020670567607643434434441309143089297768) * I,
+  K(+0.5712016304343972987746019299725399823665423238427686293021299908) + K(+0.1577226678519263735427921007103755059842224490723627677977511026) * I,
+  K(-0.1768545480073226618712608429300708454315735533629761421780498913) + K(-0.1533530642318423731790017300729525169799848461238431835942470003) * I,
+  K(+0.9038111625259216266440797340164586498546425158344144143221457528) + K(+0.4890607028327765859593392843696071090700227156999142044922209104) * I,
+  K(-0.09443014234869123439569796704273088460916147516498649725915111030) + K(+0.5115795229074654639404752657256627225134088655004914132378922455) * I,
+  K(-0.8462709327039094322602243221742571036980701996346912497983838355) + K(-0.3553487614663213329943700510818329222807510909363000123438466338) * I,
+  K(+0.3801667858291253818463388391257814015297938378116846862854313997) + K(+0.4882164988161059411495467580071385684135547004120232008314618025) * I,
+  K(-0.7298076590930508177860475802130057645853553425906179292055378156) + K(+0.5101171582194795210754380677842894725193597589092155469776581860) * I,
+  K(-0.1361135925923655985153999475727062726486431859685153311868136665) + K(-0.4182989718755847073533114089157212657710712272129671427058450535) * I,
+  K(-0.9501207102977787089608030250227278300703551667186336909388893908) + K(-0.8979401446636229706796706052977262614119521936125359622406003522) * I,
+  K(+0.03159618310577205229868112671371156210259713657227168184962006250) + K(+0.8521337606838357290242633407070465798008937658083518086624832637) * I,
+  K(-0.1338622456171996633020804026614394905621593515873135690993235824) + K(+0.8674147779153207009940356976175051202942378024237841391456145445) * I,
+  K(-0.2691827143494725271011915296465645342090678244186001541943208857) + K(+0.4991559751598721951176619480014929469538037476328250592032746956) * I,
+  K(-0.06843869380703630203346991722303087591182862647206557577869577947) + K(-0.3538694191006108653382993155410372522741913005564396438861895209) * I,
+  K(+0.06618544899959273916942107249606960745312955716267114069997456756) + K(-0.6482557883646904030963231842438779590940961284000015552548540384) * I,
+  K(+0.2503143545021830132728617721010718850634503200007392192211975089) + K(-0.4104248202847837335480681319586231553342002172172992614349360595) * I,
+  K(+0.9516755357329593871720436832929372429186443596205698117495862253) + K(-0.3843484578236373385048234095163746488260096413975343055616577934) * I,
+  K(-0.5665761135786829843970113615586623033421333593697455584134046694) + K(+0.09515149636410997937276692756709007681901186984387812347376609407) * I,
+  K(-0.09881564805399776444847445809672243980035306673607891530045714759) + K(+0.04194633333622757809792261624399220884588360072311019958294699192) * I,
+  K(-0.1520938944959151204142628659195121081358746367418747509260693222) + K(-0.7079066969822893391984862417641681236574923786349632853846533381) * I,
+  K(-0.4628984694472276797358042597073693579628372033565860106172312820) + K(-0.7021046224530392114369883463504061044152308625053472397051830454) * I,
+  K(+0.6882385322639036603283844386452917651967126100824798405655582575) + K(-0.6857380998360064336317049062272911674146618260835475604463065180) * I,
+  K(-0.2200660423411483106611251501987288305955964430339835919248663955) + K(-0.4365242475453950013194456182037304690934408998997342169410360699) * I,
+  K(-0.8734575310781055345506830691581707790328304003797002474221958986) + K(-0.2501976214094881624624623880530605025692350315374643097156204010) * I,
+  K(+0.8083783047446051965329029065427292782149905420751194751531417995) + K(-0.7491747875107950469480221622523738895007844484921805658468992484) * I,
+  K(-0.5720696231186340823930152667064808802482081896096684006905943630) + K(-0.2042321574996881028003469753380329870594387395208036049390362545) * I,
+  K(+0.4942581777210745002423000961287494631037123385816629872124763187) + K(+0.2870846202865290683707218208265756399956084941885672546646651672) * I,
+  K(+0.3576045438927104090305733600314668672810999408316528345525845623) + K(+0.9911313524953943509787153508065453650506023937154222495639123599) * I,
+  K(-0.1842721945849529582993164314116476592942743423367264039018705868) + K(-0.4052382798534345748131741639962758685236582504626608658984113460) * I,
+  K(+0.4557440020156115794221183385286260974154466317941839054282538176) + K(+0.3968602418728344360464171482124130094297960627813247221471943800) * I,
+  K(-0.8292725622441489105412476265665201436850221048079459839221552979) + K(-0.9546200889232778028888064717952852638287920447533741484309926196) * I,
+  K(+0.7526496059602092944702468292256074268148389120297763278702128042) + K(-0.5770343638133719621384014676538299263647530637637122801333886960) * I,
+  K(+0.2055426077903897674634947232675150593437612905687105701079274989) + K(-0.4741247979594316213236064600433784492765033776667150379114007533) * I,
+  K(+0.1877276971696165384144125198719093886539671074414140096665495110) + K(-0.9128696463888074089249629640837309709521519023134078641316022166) * I,
+  K(-0.9397091884729801080334241081675713512304258906448567938715948657) + K(+0.7415282153523771802712770455350307203567117340861906371138701525) * I,
+  K(-0.7290626735873727811447567924790290994196939828564252711039152327) + K(-0.7373269335397143232079677851416041229457458436008611972740017844) * I,
+  K(+0.3436620584567753409227181044591500466809698862204544130285382641) + K(-0.7885652869331560367759899135031859542966977043538175546111055532) * I,
+  K(+0.5329315450731112792243135741928445913070806578401126487872276586) + K(+0.9991005609104289742650630077116371071086898091460800933566173906) * I,
+  K(-0.2941614885776499924820891270562008702218591376918530385305821791) + K(-0.7615763713973028230495908267851639321514158297531581284290317599) * I,
+  K(-0.5882618839300487198663835756281318214086603492831213156604521858) + K(+0.05304898722662266886051489440731174842186155061628873404217530120) * I,
+  K(+0.3957773068767623282272171816289733460502194335972310305504799291) + K(+0.6065075040186496664635412105174628448735771347524348968638249026) * I,
+  K(-0.3327939012934247521929422134376887204482610468120138075797032341) + K(+0.4788108915602561633319640367591197710984751647562139437712836110) * I,
+  K(-0.4868798069385043495143592138585186006001659380986309495892744818) + K(-0.01939278621255186222550052843313076974855187318043573346323392348) * I,
+  K(-0.9155919954593639196892761194963676176194678260017847006434259121) + K(-0.9419701082891052493092108602944851034213138813467660788823810566) * I,
+  K(-0.6444220979866274044070934268257803867553128017177457100042027412) + K(+0.7593285052308131871479566390143603269041091824321114300721752123) * I,
+  K(-0.7713491861470832333315710283301443754324305875280853521889992790) + K(-0.4877483652477563635717813409013410964452371875715915224059840318) * I,
+  K(+0.9250440745277792134920324831837016985576565251929850312239571350) + K(-0.02031546022878939331123155327122910944227217961699985567847319368) * I,
+  K(+0.5170966008062976438874314326629582452487630590568851324961154794) + K(-0.2074145938376057741503719651539659249570946436216701148055404114) * I,
+  K(-0.9065502266467108173132475564027714637435594748415552058966914812) + K(-0.3126653959246686594010143007642277623875655852704894180336975485) * I,
+  K(-0.2905367033985758888140026326511953780930658881401448973019605240) + K(+0.4072556890800834684402400682429143421158478367485883131849237079) * I,
+  K(-0.2467242887574960767922848618625677338694658842864107285233116432) + K(+0.4032591137190155176469664757463483640413368517579461617725847185) * I,
+  K(-0.9145801211059790619049745849687860322232415161124709467637647816) + K(-0.5108121164824082103120323447228567593432013467085624301191994548) * I,
+  K(-0.8675150324924925380945711423359425955593125246833503672108923480) + K(+0.1415784730356975097400691335497543948966071935533976347209319117) * I,
+  K(+0.6167827160596026936549262601397045254832074626548829009885767397) + K(+0.3725966401207280210587993806770002179494249913276760591314698165) * I,
+  K(-0.2565049745831414869217083361593043407538776801434412907510923540) + K(+0.6172421203376810354219264420127923526050968583743476695986736209) * I,
+  K(-0.4526307703157022099150143144840328403486044363775766300250882872) + K(-0.7326273986866696635298031941516937915483838728471825558566788408) * I,
+  K(+0.9812656990203720780963170706950085118197059090702668023927796767) + K(-0.3747341193822465015919372055663965642958892918222470319024259512) * I,
+  K(-0.02238709691900161098778845763455345803494507927550647343981793496) + K(-0.3040257824066606119821115835040950067349147672739605207232724957) * I,
+  K(-0.3872761700231253366358534387486325648202355215005657080724794988) + K(+0.1578731858984103322291147584093911021873976689740845308548268731) * I,
+  K(-0.9193563679182356699188336811686296311105888544036355187589772037) + K(+0.2453445841406040663906191236403687135240291337477311050972034229) * I,
+  K(+0.6314600290763893595698493212081883657997943533873592734641874991) + K(-0.3097903726992357828000764115456104940646792645738208309792432600) * I,
+  K(+0.7486004425046300680359495088810315584401893147425827870063069930) + K(-0.7152494008309397587561549631612885347469880269701746361675820168) * I,
+  K(+0.4177697705441441595956028295293302918912869963011895779160899137) + K(-0.4895249036287130770561240142823990222672192495372232515551592661) * I,
+  K(+0.7396335445801478387859020010546979458246436349502851249288987786) + K(+0.1260995295823341251339878954245503870255838180068300711540124930) * I,
+  K(-0.07352328718230905321884161880241235984668269361069852586583982559) + K(-0.6642293769805484768395388240252377490667161049119830442988981380) * I,
+  K(-0.6702993800290650104800124131972417288809160338992876016034363041) + K(-0.9348445238396301471043223934506717215231840990113526231414989448) * I,
+  K(+0.4210632877538638621728143964059824833285614307330518318518297300) + K(-0.6917364309809086576136631005641483069167021205057024741474672735) * I,
+  K(-0.5682378593512904657710153449813991649615599269710977524104766506) + K(+0.4082147865448591582052777300569271445027810267736003962283828473) * I,
+  K(+0.7680778094839316722272822278888724567189765094881269377317001446) + K(-0.8944999632728503577731631034233038949106041550252132923759837912) * I,
+  K(-0.9994133117915292654879342752593618860125890294547443374409886461) + K(+0.2311219770578731073853769027435963311865674481994164988926241472) * I,
+  K(-0.1105698931352317245439499206486337238547622255714499084097329764) + K(-0.07760146487211720834664836616117970884674185413330157539066350263) * I,
+  K(+0.5666290727994814921785166003636085011091464356239162950929010430) + K(-0.9354809389737285069486147665165529793088170565449099889877962209) * I,
+  K(-0.5016865596129103468462584829119291416209229443763799185986913123) + K(+0.2029236160018615280676959308336013032681499220601237066026180448) * I,
+  K(+0.2618064177586527108512130528173447824405499903367418599753861242) + K(+0.8774412461315983424953269416864689758994587367414602482405197636) * I,
+  K(+0.1629373853588442893940235869862622245828777615139674731681552184) + K(+0.7174585335892875504597631223187974094603243566394780135835334807) * I,
+  K(+0.6911319189444447675712428888147945333937940301380797634112925152) + K(+0.6958163221909964863501154185191306961487505304153301747270005281) * I,
+  K(-0.2270217078508394865090507826379186091110864274613834975225273754) + K(+0.008907836788665594646344447850392232016642296771511692936361982698) * I,
+  K(+0.9212559468146364526231521485756329596121091489633449782055051373) + K(-0.3856186943371093655490268176235162418673880584995663441613142081) * I,
+  K(+0.1702987579823588390048195574628203202351253546046653530020142267) + K(+0.2539557874199129933089169031445953065296773225101067726688199572) * I,
+  K(-0.7684763991516999563139518687614718347063897698646568061097206508) + K(-0.7393204809038121208243826498625641886021482893677844495373140145) * I,
+  K(-0.4672151443102925127062091016944772273171034440397527476442801566) + K(-0.8642407506095927869676604248418961967382082268947741172527595726) * I,
+  K(-0.2418866856887109289496626109055442461325908322454009984401686051) + K(-0.5130519319648377615338038722193672224595580806862422610726804944) * I,
+  K(-0.9220046037974919008804713090560035730649644552767261230159199280) + K(+0.7695068967378136351192697731307223380686969680445264399333567446) * I,
+  K(+0.2935813213946611876923038492366822938508861386676449568438727074) + K(+0.3182172629769212800131539175159214028837015554826586652671897829) * I,
+  K(-0.6805869494506066445179249024318091977746771571392553737501778402) + K(-0.7049025854900427205617449326486849761594889598890071797843237998) * I,
+  K(-0.3401631819599555091735030015872024609094853132869541747184144474) + K(-0.3540786339516014995679167112875673489227327906787456411452001181) * I,
+  K(+0.7267396265330587295579033141002343653605366530731102514843458849) + K(-0.6203305208554837638316050664011305745590656955881897307816187117) * I,
+  K(-0.8588692983170300339766621900543999377940166948280474378238406105) + K(+0.4295851428142820550884898780525435005138417225651539185753135536) * I,
+  K(+0.9061037247503422213300897598020481572427011345943724871697878028) + K(-0.9987843853683244098539107396029025821646079728078972985036696021) * I,
+  K(-0.4957188186893372526987279293128150133785880898880836653278833173) + K(+0.4612906303277103719108416377331376258759991190715980097496435610) * I,
+  K(+0.4086969723803085352752557693322557498688199711458954215566315444) + K(+0.9779685308428806071605578440591302891168295775886881284870577884) * I,
+  K(+0.4540046336223921269643257870345496573320402689347703294011804110) + K(-0.3344574198436226891744369816134241046254929996841727866608904394) * I,
+  K(+0.1376632018111228491355107050672554448223762348197723194916897363) + K(+0.9692718451553110737915847767057036095283576995283836191390683139) * I,
+  K(-0.6912607478193528080905258617326608988096552964039401287349559703) + K(-0.7104176077120395779599579242182242987114254753507831477136999927) * I,
+  K(+0.4985050896566418329812920047837636902593792336785375491932531230) + K(-0.5924365758687955347661417661458424297332488265832673334562734729) * I,
+  K(-0.7831949848629160045215626040705855617440464636354717242270595384) + K(+0.4768169259086813346409226889784653625847428237133854693283259577) * I,
+  K(-0.8990140064541207485004925981977412687365781980475312618099281068) + K(+0.1090683700027394438027541427545181955795208716710805810276645453) * I,
+  K(+0.8962019828621576294802162162959281521347692205282695451830117567) + K(-0.3521426909834397325995772383793045174125024429193703006565892158) * I,
+  K(-0.7293873114103472055077004026396959644809007625492648997271138418) + K(+0.7046642197680372869957966887672637529880734893599889747682122321) * I,
+  K(-0.9033036197250120483361862812485160108044394263706838374640927605) + K(-0.04971296282528126558510414804726381550601231875852421232523598204) * I,
+  K(-0.6358729911972543349604903916122599404047523391749605158616409626) + K(-0.3287282402940817632143134371470648476181872184661926814005417128) * I,
+  K(-0.6050306720016446790679150072832012615974160019647142794444941017) + K(-0.4195104939815955952545032744566864435680392516293583614714703781) * I,
+  K(-0.1155559353804391847936526382204519304530689046630813941284316797) + K(-0.1342018948598678034764048984726259446538923766278509730272143480) * I,
+  K(+0.7760367952213508936785083875724467518325082903165384266363547967) + K(-0.9597717389556105999697809816230258537030801699391629090830195940) * I,
+  K(+0.9270072404862044062222230329601110996842555428649107098067476795) + K(+0.08876987583918408909061894885816201033317717809200725407383383536) * I,
+  K(+0.5104957184406321728149098885387164982701327400428902294981512804) + K(+0.03018492408063679249638559911667131281971324457286133980305677373) * I,
+  K(+0.8204170398987068909809819072931422261926973231068272582542271765) + K(-0.9794987691966310388418623823574697529842879513456598204313051501) * I,
+  K(-0.3215578706623855887402380500403755928392230705932612004098922232) + K(+0.07871318811696571550371188266072936730106428306263691202736310286) * I,
+  K(+0.9958752269115317368620198226357257454188896114339582918193791184) + K(+0.8595628403863357796076104810584761683708835915306488481645493021) * I,
+  K(-0.8948094090372067874571769103606843453547320714616156748136690047) + K(-0.8777419110470584518492388577721940242100156922507446464553438903) * I,
+  K(+0.3098621689883239902805164500493087238905334877261860771423150904) + K(+0.5512132343864820646346282187182203731036283148387061399338285458) * I,
+  K(+0.3159598453965445230137065518611402968445853601120306692155053968) + K(-0.4438565382489868486646912494910306504022708984432607639589062708) * I,
+  K(-0.3677928574160760354881678377303334954251972663152701023010990440) + K(+0.9246521159836779584105375692353389361028728128527164589664825662) * I,
+  K(-0.06170041845803751477560233320823353533406299897996963507927815531) + K(-0.8570037107886083550738437618613633504677579254950884195182946531) * I,
+  K(+0.2342934258593672952341922087954759088179459447710826770857459565) + K(+0.2759435600968417048869908592554398137903544867178303783749285864) * I,
+  K(+0.6641974987358021842336065184434664620170222397233693651048340160) + K(+0.9808692433633529589232188405960780264204193321183911776403976346) * I,
+  K(+0.2787616691461004403941732117767720479896596039633377731316417855) + K(+0.4858708091148677601864496549741356427959468831022473125276964375) * I,
+  K(+0.6956998910742789034822345837151387638738034644818822352967587299) + K(+0.3727515855765760241900682678165727433590455300757591655922605375) * I,
+  K(-0.1868910559634402491001216878564720919091436538080838016561382711) + K(+0.1103197409325959527252243880355213168740825223642682149912925816) * I,
+  K(-0.6351490934083920923396300892996683122320577697034988042802249776) + K(-0.4363314111439546356258738588496288474190494260108872229055834948) * I,
+  K(+0.01733328715382547729796203142052213039106271212691799262376042947) + K(+0.7734483443143726490354790038584497222919664565102338471186525786) * I,
+  K(-0.2139653576464025507797772256173860575067079212014914089649278139) + K(+0.8200505962255095836614703758086956823372759605751418327047913698) * I,
+  K(+0.6130264889031828758992146750231742581851751799661188100900377721) + K(+0.2303430931951195386021233111389680321398559561267401943247190281) * I,
+  K(-0.6995641013156027418813214037523977507903427632820874426936906400) + K(+0.6826295723912660503108297106173098875550044129299999035688986758) * I,
+  K(-0.5355913694195772662422408549650625879884434057186887581129429780) + K(+0.8676620848030150945902427237548241931093790929948350732180988214) * I,
+  K(-0.7476850666224824626356066115693632599578766930656994294002149072) + K(+0.4940330337471183543680316921838143571479261927985522057462432178) * I,
+  K(-0.04820626581391157795202688745896353904724854781936746725580793558) + K(-0.9013240061169180751292856778473495054700178089895255010027079936) * I,
+  K(-0.1966962831195654797651928866697593183476215762360747140445502715) + K(-0.9347764128376593655775455846967944032900010457766309969616849707) * I,
+  K(+0.9281378318468456478076091413160503107936221129526707434606377358) + K(+0.2106005153122343054352243097624810793875925600442876197746263458) * I,
+  K(+0.4842280599931284896470621917435150431456580238432673977132137755) + K(-0.7516485938327514133306914490883208459173837409045056497108900353) * I,
+  K(-0.5472837488208118247117071650435724084354076986573259968410396111) + K(-0.8417224154504212888507944183332889702114012708467103610782280794) * I,
+  K(-0.2586410402343641499823958834835435221001337193816425103250774244) + K(+0.1967910141689372665530369305272672244432318113809654449623603518) * I,
+  K(-0.3796418158113016352895209133933301507892346819140153973969370930) + K(+0.3870659347828124461644498676076788251755897539364581496598418183) * I,
+  K(-0.7963463537023835851176888657105417990615480856016629275600245623) + K(-0.1503573417195160964901221953426063907123900173508356930167482785) * I,
+  K(-0.09616129827861225992024512714255628821739868171006413603111396108) + K(-0.2615642812602631426397010924048881502969357806195799395056650456) * I,
+  K(+0.1790376186934244600334126512824849015111006223474826301014085370) + K(-0.6076270817310725541957483215446142196233585443753226100208277103) * I,
+  K(-0.4605316576476571054109493139126990250143744036896205168050045221) + K(+0.7166598183628966070039674557909347520879132782069133652935637543) * I,
+  K(-0.5544735338854627684363451060524023097288657326849169811045114678) + K(-0.5316885141334897589348449993528164902606602932770065797571940225) * I,
+  K(+0.3657337017849054605291848841367393721344913778002341404860270628) + K(+0.7862113900208461220487959702026352369586212245879090349814314881) * I,
+  K(+0.8664251076685818038401670107151518180645655253222298680526512156) + K(-0.8603469641133616146246121469817355678680024641793457543381402065) * I,
+  K(+0.3503792969192140639965642658883906899484955968147429460937375229) + K(+0.4602523791241454875009043071799611837045974703594133402855268091) * I,
+  K(+0.8992981482414206875584102838773417269499521543794277993308471482) + K(-0.001343679446893187094731835076928823283229832402171801051605039726) * I,
+  K(+0.3761058270166232761749072194377461973130325853892203863061348554) + K(-0.1933666189616109963575891719147003086630091725308586943244644314) * I,
+  K(+0.1410263371322216718523097534645914832785374084592399202138690032) + K(+0.1814368651568451686124285432300029351062851445737332517076227770) * I,
+  K(+0.2128904100175200110045881127690079334360584064969759996619834084) + K(+0.03487862628042809356659585410740928160050551568370179898572773958) * I,
+  K(+0.4507691181245620130581715203327594805436454449821793969949210471) + K(-0.4295399252242128203309955079148335876952512685680250973986150274) * I,
+  K(+0.3492969206097731054028762931590489398788637789015644504274560331) + K(+0.3693407258399284446013199832837168576754549645427530119859096755) * I,
+  K(+0.8650417612313888549681351931600418703181838867230682456813727694) + K(+0.6695882263329552647981617788892315950020987368298771857938369347) * I,
+  K(-0.1330159458785796366841048302877355344690630465342918869225136422) + K(-0.9171589855177539074524766155065167382630219428438852243808092639) * I,
+  K(-0.4033559989823588632829062770535782145959909210867355054581533363) + K(+0.3538387509853371912035863520107158761520423451401074112344087683) * I,
+  K(+0.9783290497838670721123246728237338393635766520386674630227144429) + K(-0.5918341763309450063949026395724651193695762635335306742342091680) * I,
+  K(+0.4184603418341436902365226856101409070036806375131127603660173436) + K(+0.3335878613273931368367215630891741890742991201097739615379262738) * I,
+  K(+0.9180530118798605974000404239133595569843585370892613422179188198) + K(-0.06212199842027151486546752547500904964997651738167594019768191830) * I,
+  K(+0.4681867481132565934595872388039579882346728384466023389767009955) + K(+0.1920367699353928252412554028262890904781624320690124001252855462) * I,
+  K(-0.4942739735366962068170050127201858021211372292066745989403391337) + K(+0.07631535342395517625567156409215215352610850380888264788293330125) * I,
+  K(-0.5490096289977710101808013418171248761306667605924801489887992352) + K(-0.9082467530471811094857127061665123806843806691377373422589516844) * I,
+  K(+0.6875685053434594709057883111582189514327584922516453246541963980) + K(+0.04010347024940966389984518238381237591871022815998350441856374258) * I,
+  K(+0.4201613555252044290517439934596988097798103314980509138749935503) + K(-0.1245151730865876686131415502483381923018057063424053329283575664) * I,
+  K(-0.6134908202239578424414094966221913587095426986702919901732171752) + K(-0.6434507804178724136823527931853692313202939858642203203153734887) * I,
+  K(-0.2242837600292000308002980339515005722754375211826529701305588370) + K(-0.01029755290047412999538054792741560730173324799922683205844289384) * I,
+  K(+0.1078241736908751519756973714801717313698499549202597829757518266) + K(+0.6132208523600275130972532085451720975914641327865025620766466665) * I,
+  K(-0.04031676455448718041715992569585194001783030609276653538855510170) + K(-0.1988543819076537789749176128089809636738244407837156602103808920) * I,
+  K(+0.4839330201164067839693013019952851015388405411010453595419347996) + K(-0.8223891967945358592927816458364349144294040610166838295907257804) * I,
+  K(+0.6433911655883402615798485870569141425666910405550301590682677239) + K(-0.4765768077604321065489470574703567537946937754161662072299544451) * I,
+  K(-0.8740610995777948526105903233099813327025176179570710217579122911) + K(-0.06821127961900017649324341131026170841887986971464884464488117915) * I,
+  K(+0.7909859052627031047735967360845921939834796628158481716875274039) + K(-0.1684037528898662083985780492324157642113561825938912894779829766) * I,
+  K(+0.6354098200192527628914111119808250315151080189487321077245623957) + K(-0.04308604130606642178214289424519338008737994829634442908028714178) * I,
+  K(+0.5899271466762738011600568455437589147862602318638343581936819506) + K(+0.7934201037748059155462471891440915884443282604824984881852090326) * I,
+  K(-0.4558823462243831672303522855819397339297323463021545756999735568) + K(+0.6624217576421472116225316453085578738676413030477186922078273778) * I,
+  K(-0.1729175660309261133440107086890287530786152062431811586409047441) + K(-0.4728853292098649229199057550708216910448594227575851827661059219) * I,
+  K(+0.6302888331783718066526036914084777894966194077438196044816387246) + K(-0.6290433214223894565753416312856443967210701987933834367498954563) * I,
+  K(+0.9162739632275587862260092703031544294058766733845498987674088356) + K(-0.4987031975273430285207341093336472885767477505963661316557523152) * I,
+  K(+0.4363881437215215516350998381445881472656427070981973141000189593) + K(-0.9982516861280904122873346977136503654118245897216282235954868640) * I,
+  K(-0.6484122838687255394995232341661476113480871485647714805889425392) + K(+0.4186207708843831044722050229855771181791055884631589205039094447) * I,
+  K(-0.9968849873192832763157623385814354028415172914572754918685127339) + K(-0.1403044038744373581760170132236737741847413801000289215696134118) * I,
+  K(-0.9534010519803048896882519505809242742716271835576343539237749252) + K(-0.1950980614311106523719244497184795109888810665528602068676395689) * I,
+  K(-0.9373367639088301623981503444778831537931359314674094255714366280) + K(-0.6958713855934960203260203494709799844321392406830177244689863649) * I,
+  K(+0.5885667473579219333671490269639827139610011778102641018916144241) + K(+0.7404833574736889943830519615585567556681801857159163135192609188) * I,
+  K(-0.5952515118764742537908364002098862074021903656461053980814667442) + K(+0.9584197495125917607073368351630829906364149823504332658905948046) * I,
+  K(+0.1190418314282995341934455337012099672407278019013650011057472094) + K(+0.08089980617140605752168224147725357786983304567767070856788763025) * I,
+  K(+0.7443138339058520628786007807586225984862404813240074367351560902) + K(-0.1580069239436989936846451488645757705325776940244714138632622664) * I,
+  K(-0.8029632209541450117775772212435795959963525284415060378038093415) + K(-0.5239932542604709677052961810332428063231142647764941331727990876) * I,
+  K(+0.4131208456381353491450185846546566230181337282964616867056122884) + K(+0.8647019288818498193244014881648072785202743828828193646421573576) * I,
+  K(-0.5561815933239741942343400476880640737001601449390745776852062706) + K(-0.8830510585260110685873199240005661835095605228376093969030915497) * I,
+  K(-0.5167410481645399941191881931578101179727175253243295297230478639) + K(-0.4093498037413872270806838100787678488435692600675823823965112107) * I,
+  K(+0.6730424659065933645717959010356858232061218971939746399491981380) + K(-0.5417152880472589466451269994732564577889737068500203192360484283) * I,
+  K(+0.2215014027785240900669645201577949442386609402252327650555075715) + K(+0.8930358967306740448250583536107258317698222913806198391279734245) * I,
+  K(-0.04609435091150120600943758314302773878674644454843618690129115061) + K(+0.1531627213384465323007970873255729477832016746098621139693760758) * I,
+  K(+0.1645669120878402852868903794767545531226707668040799655444493491) + K(-0.3574157567583997898214010148160526200062108843208515221588632612) * I,
+  K(-0.3037446171262969834140824734391425378056266672593970076168982646) + K(+0.7804132721351160537328277883602680647978761546267767994632095504) * I,
+  K(+0.8515870282615757028727759714649077201485382111192051430177329529) + K(-0.2179143802250100363393239912437201969332108506183123968505647623) * I,
+  K(+0.5319614510308273996258398234490275563517129750303962714291860700) + K(-0.7986783910846145318549322030891860784760280424774239467814263299) * I,
+  K(-0.7929739019413495694106835961757434882044238781383873461941471630) + K(-0.4546384392954930450308618336889136600682024179129482373915109569) * I,
+  K(-0.5672581488189720338238577588519340576665164845778513316668210641) + K(-0.9137851314663103482916606248700277899547306196256154222245248169) * I,
+  K(-0.8265732570317464350933740711034140782674265641134018633936798933) + K(+0.1746553029038461204645417342920112337702640870208738315712526329) * I,
+  K(-0.6901596186071516359924512820369044841565050271088942018359257835) + K(-0.8746274396239658332006004633925005324845981484259560493304241065) * I,
+  K(-0.01979228945341833747467884910575070260336274853045742261644768367) + K(-0.5698282161350386694272741596893755543475527078576137315978030467) * I,
+  K(-0.1951188606123486953091056099258212542689279342964680464912607099) + K(+0.4807055720460056270208825393446933924387017823558718533006423545) * I,
+  K(+0.1363777523388211505660439937311676338291180675297893448715379333) + K(+0.3962891530306669429822652485922028195719181655678591856036789947) * I,
+  K(+0.004465987962392687940799223405612120169638498689501925993367830418) + K(-0.1864354197400938920089500114282195613159280100830071269314203387) * I,
+  K(+0.07817084650033459920680197308590414881671680503814493975924236019) + K(-0.3968888038422173072567764806711103772046534246658073424626562599) * I,
+  K(-0.7543912422948843485389648322902410306938363564446800999027293683) + K(-0.1033324381144976803807398958496218140338422124216547274585948087) * I,
+  K(-0.1082222642740784278002307166045929241397718267129730972196565795) + K(+0.7030449361387901694874757713877261858838987249061966257787613557) * I,
+  K(+0.6838534585276111103924295099601714809784503040294965929155503789) + K(-0.4304796057786340694401296764096413870976418065958478514771706125) * I,
+  K(+0.8642299219882527852389967973268114519710767826903641203511752161) + K(+0.7853803911310079980836218153309886103159619879954670231797468971) * I,
+  K(-0.7706816301673345047460885751908616045267112862826732602405859557) + K(+0.2849625164797870807549761331653836596242314752925211786813497247) * I,
+  K(+0.3170371459916901320572527802733871452370236978556501128012202292) + K(+0.9720058849666279536304828587546391059086275558990551094191395500) * I,
+  K(-0.01748824403406788133097536694776655734763349646909567915764224592) + K(+0.01180448547315042160945933184275380301910021646476410255865210785) * I,
+  K(+0.9281234652750614586470267724189638551271149202810966784733353909) + K(+0.03872155614811258488223561639227944499296732628302141511725063975) * I,
+  K(-0.04838081218967662368012249512625755239470398158407988031687565955) + K(+0.04110682701054082677543634874910087711237862076225318042005746536) * I,
+  K(+0.7332047533556445901301102107852191808355313316623187182929976127) + K(-0.7374765733885024909318467912317461226932109726855404969781685307) * I,
+  K(-0.4794524670205544776750932889887060292595941089927385156796095718) + K(+0.5000439192198788716534511377198417962508684246108447461374567638) * I,
+  K(-0.9865786685105799774885066937620660799572886211245945764957583059) + K(-0.2957781293030783561390868005735183874431847343764848751633007474) * I,
+  K(+0.8372422447657714744756989943805054221254779084396746342781583693) + K(+0.9927903666821270820548820103364290308381828326876363888841816761) * I,
+  K(-0.4417166906745064143775346874063013467716476594760647581761557453) + K(+0.3898454595117027466476362179105263432935230423712276757439354880) * I,
+  K(-0.7205488244655741491601611538369181179468664269580473685527720373) + K(-0.5617304712342051414028892417913080938912018609066714873282026349) * I,
+  K(+0.2815261543472967845935041473159211487737748078463470202449292652) + K(+0.7401928470810159563129614531652046233845237156760057307717496295) * I,
+  K(+0.5174960448885232341515786560380347219917502017326115214684964880) + K(-0.04506916407923013330616584088898501760901826926963641228708260154) * I,
+  K(+0.1559516584675741565557514559873538299621934362998849436823168103) + K(+0.7250564379365653486943759726683025979975721181461774008425681308) * I,
+  K(+0.3263421144669247978315746849152002569741072724883078077048704702) + K(-0.7906392465367875843943807563904809589827886945139020559992731170) * I,
+  K(-0.4929157286363817818172133581199182580732621839605316745625897241) + K(+0.02147862523689553556381605693097417501613239030668890571156768606) * I,
+  K(+0.6141278639594728970188779871928445070551952170321541436008617310) + K(+0.2046556223426512272449000952468339458081297081639612848720451788) * I,
+  K(-0.2374118174341923850945271023210975838711708011331183187023284200) + K(+0.2863386911086480209702993142314166907363784225523292212645113221) * I,
+  K(+0.7519480088138910659288360917132951018937255419591763341200784703) + K(+0.1594798202779678456584867109265661834964842180782944691628446508) * I,
+  K(+0.7718957447412108835227657904105536707369928688293302219476972780) + K(+0.1200100285573860958777664573072435338618236410670831973930149699) * I,
+  K(-0.9582224449897466044521618377224060254592666251881976826213121218) + K(-0.5676655392922657637040409866262645854716731099840387643958962288) * I,
+  K(+0.1881869084814430611201886208141572491797456050076713184561118729) + K(+0.3014184913113554504677166828140692983758625285024874845563167154) * I,
+  K(+0.5706654357646353743764863152098476579651353211863139813095183594) + K(+0.5518251696664533448644768097661309985109666595312151840942669682) * I,
+  K(+0.9085422175574979876290495391703267219574040311517456346552936639) + K(-0.9473806328429647327465940808512807035291973782196451227257946583) * I,
+  K(+0.9433386185217242856923055770386766682922177613262824086064606459) + K(-0.01324991022157573518647987227465940330805825833772308375520487939) * I,
+  K(+0.5536278848093752780037614035914609337567059537229917340464182657) + K(-0.07254783491264946635765468525572679766310050063433224414117172241) * I,
+  K(+0.9818014289416607210227642897395802311857508448558338577946210500) + K(+0.7666792622403670166147132445068739435742362098716162577561486663) * I,
+  K(-0.1055467797663273348961086375770872900869806723013259136705799209) + K(-0.2486124392343828084043924931871982058935152680100952030803305157) * I,
+  K(+0.6196647263651191691812330359162118985187038609994434054115557078) + K(-0.3965178499960413837123797490109928019753710789241058868405520517) * I,
+  K(-0.6396558421280489000363718188310881389988825306669617589899411725) + K(+0.8634873174001793117812836282249164200588772935969349125159740139) * I,
+  K(-0.7030754011382638429572749194244751950279770883841531916627777123) + K(+0.07832459483270826725065770756472955450066955375354900238098233612) * I,
+  K(+0.7049477117440265060283916018110044517923671357151579270097688216) + K(+0.1875098234576405085012032104802159301936745273804068291512136795) * I,
+  K(-0.8049016426694294983632000383978477729504834119480955793096640645) + K(+0.6124173877567333457272881572345417469686434511000612292159597974) * I,
+  K(-0.1093815347615159125824124740763687724077620947255442005136083888) + K(+0.8859736121741899242612531407243428289943443651896757449985670320) * I,
+  K(-0.2072730619053660260431394233913532064378350155506149720831660311) + K(-0.6785400735410656436934514620673705441904939627986926836520842978) * I,
+  K(+0.2885936572358518373970491239016484302235803169364620159877055661) + K(-0.5642259739477792008873466114306081834609838808309336363627189947) * I,
+  K(+0.5292005384264007284146389611271141932177943933814378648630365296) + K(+0.9462381146561608322492926945884471962459114783756008697004027671) * I,
+  K(-0.6250500537821770725864775904451892089049237240593252638033831764) + K(-0.7900509851971784079397109164844957950266078316773921216917254749) * I,
+  K(-0.7882204460023338959532283471661007945284120010940056292533352692) + K(-0.5536207220305389768720243020069138969317452896181093817007624546) * I,
+  K(+0.1692710847775583984408743416810363432125895898161767226307217567) + K(-0.1610692114756289644613129402788703963878084471938667555512097838) * I,
+  K(-0.9518880367348230248608536480074681079515056481436357654344348340) + K(+0.3316593882602436482085928990428993858781771154698432349367717182) * I,
+  K(+0.3129345334880581722501537016763519933496822851767210985208152240) + K(+0.9399644594585295297963421693813853435770815787300117803596684507) * I,
+  K(-0.09789910697937671059639853180961580313396541747556697276630420756) + K(-0.2764470963388389181549775845967194401765324640336438746922502085) * I,
+  K(+0.5805168585758493544671113605036732852756744748905627981465806899) + K(-0.1981034049438379006651056679283198963026511813889368075166074931) * I,
+  K(+0.4364998504577406376253892253627396334334723201768264012613005404) + K(+0.7086115248305800690056876262777406931052664621111869154897459177) * I,
+  K(+0.7355866210646285376921500698823827735218866238759895162904099933) + K(+0.2641344265459892721146992922746081222119172583505058614383667949) * I,
+  K(+0.5572084541171624583681285541358225630004169762219713354408621636) + K(-0.2437018942755864807033523011813135635790204345730952294648050151) * I,
+  K(+0.2893787395886493663987779466378917196307833923008006394721660980) + K(+0.4367526115799470263130400887982920985533732539338898393979101335) * I,
+  K(-0.5639636598779108528561405222530608792428359923382055654493465870) + K(+0.5814332186818052244320370351469713822566700158679135577735047118) * I,
+  K(-0.4089076733709597042984172502213789904778013855816624520836099919) + K(+0.6445201903055868986735537742585099962527699478698049926030008156) * I,
+  K(-0.9997965467564057216475327908521172333652996356595505307758131829) + K(+0.6218434741285362973532507513058894488593202716551071103377843235) * I,
+  K(-0.3155052979972371881950128145511246021937649107318926085301086533) + K(-0.2158460810551641993907684378296272096170553954971073519918195756) * I,
+  K(+0.9407006004610520385748286546610755107199674461953795374572011747) + K(-0.4438147756123136040894139851025983037483286998170279431665819595) * I,
+  K(+0.9588872984214709505145410805021104969810294454507068237492709436) + K(-0.03511993104517799380828514451492999463482329492976616987529391959) * I,
+  K(+0.2304725619478993967692713187808478770952851079812184570294077601) + K(+0.8009882550811022509033279404856101208553451361341368071863866349) * I,
+  K(-0.7256318565428838537589143370652667772182614690341398232367179956) + K(+0.6882459231851377975530560067289834043958532215259039730386267473) * I,
+  K(+0.8320652453953516530684999047457210820600784431583929976931301928) + K(-0.2516097863372763576117129318769752051355677337758493321613683320) * I,
+  K(-0.9860335907199208170434507368204798230363111424513971157142443891) + K(-0.9939478038085680107526215318366016621266186046866847828089410235) * I,
+  K(+0.9790516377285112085770168615313303565335639282365217387978743761) + K(-0.009183400966008863044227465112905838510364509826782670363656987590) * I,
+  K(+0.8769897190398631231818464736686279579829401032324480212557522136) + K(-0.2980541507309422178259279545930874939042834789732642298431174779) * I,
+  K(-0.6862087676565811774205097725637535143583264146717051564569955787) + K(-0.3403136425921129677742030363260278938398315040994733529878377805) * I,
+  K(+0.9218971431475612683150363706027284373753729193228682797937495133) + K(-0.5494616294392324934782699129530644027941423339320038534490825852) * I,
+  K(+0.04044155054491831569632383175422726404855049525615401443619878879) + K(+0.9119550446921266288839011828782184037834662960448174079988580607) * I,
+  K(-0.07062011336206730154212527872603615732270738943278927311976745462) + K(+0.1748156565722054624708901268246340540824930005068246675885000468) * I,
+  K(+0.7314594726118731661987704368511420051403499686705481630860372894) + K(+0.8146573672710095003931104298901295466265969836449907611320037118) * I,
+  K(+0.1938836581751577956351921772133313098951051069665421240121013257) + K(+0.3278181385731155091810739331814560761273636565555915521650556895) * I,
+  K(+0.5718320027432586502150267992872115574657881252108418576934031785) + K(+0.8037341313326068010005422053293194782865090345152498228442250693) * I,
+  K(-0.2432560459164173240486492603541417975366796584262065586208119530) + K(+0.5237937874668247601562481478504586158418059507461520370723832718) * I,
+  K(-0.8971483377491173630939313916181810469324823601987470158809767665) + K(+0.7556088462728119842386303052215414610241945492576515265018672507) * I,
+  K(-0.6176683163992439163784433472721981849785980301612751542944936060) + K(-0.4029005311299735501208389197646287223991116312890244499600097778) * I,
+  K(-0.4763244014957225098812356159256717464515300140774586790748984632) + K(-0.2271040975519382696105694753903445529182685177489046464671477868) * I,
+  K(-0.3449512055301327373911699217205801398683416349225429372084117829) + K(+0.6362016206155379017701833129278974983543066526281095057651263312) * I,
+  K(+0.01893767570445554687740277001375769407239341866652356584795989280) + K(-0.8727123027116455952618512033616696169793276371529515733086281070) * I,
+  K(-0.1968616387895902361245700383176863996726267209792910631093783984) + K(-0.5890249660015956507965291983652583998695741691399313586113478615) * I,
+  K(-0.8863983756303306677637080794067260516978269080018540309921054623) + K(+0.1276087226938310265533357874384554133855296991375883200391085251) * I,
+  K(+0.3071519430308110347322243525711880604069853138385413595284723212) + K(-0.8507129425071674880314572865281051703677274785663972103049335178) * I,
+  K(-0.009195702402450042498757797167902076750935940935298673502558328552) + K(-0.6091211755634502531883085844623597404925841690229994736459466159) * I,
+  K(-0.07725361405123836792540126728474054818078322208519819694100955780) + K(-0.1810005497353680203287607956925740152022644494275956197486318236) * I,
+  K(+0.1672053271237698188125013028001958713652610440710199130688582337) + K(-0.2335416597870025493731859393989398266356857672188785622370790246) * I,
+  K(+0.4192864502030762029645171144097299232398286335915712970176502071) + K(-0.7737834431818909273188738023018212101119009781318695564579689445) * I,
+  K(+0.5926851030345713925965718890231967691563655518300918536104007173) + K(-0.07206468783397228955257257888407094270024557997674704942968914793) * I,
+  K(+0.4684342868907384842586301640701767339493637687029201323271447237) + K(+0.6547722802061450634675002793347866374611663692231773615169564662) * I,
+  K(+0.8278986569983924918025752156317519832305578556112079574179641768) + K(+0.5523924147272948953010790445945650741727973422191083478149854231) * I,
+  K(-0.5936828943486070472826948795506305305459484487123474728494023626) + K(+0.7847672996027235189428130952958497700075003063112387551153135521) * I,
+  K(-0.3300841047280081437980690693001763190382021259389999685585780281) + K(+0.7056696451692460342936400517564432953067042379262896150269727591) * I,
+  K(-0.6323290668394719225038758109802882594178345426259963857163515093) + K(+0.2114595316966167032234217815557633282593854086298042881684160277) * I,
+  K(-0.5776528747238483592545196496580213526556125659195011368705815258) + K(-0.9682393415854316620983422907023660976512088502333330900880086390) * I,
+  K(-0.9409524293923860921041127319869339260139848647168095185209120152) + K(+0.8719812427657024063899646890051641066385678172403733882124605223) * I,
+  K(+0.2953002170508770219809286019904202842527695310085836524734232129) + K(+0.1580087029405780597995566668508522457319992375298308152316038177) * I,
+  K(-0.5073696768667651515978126119604155979795816909005784750907473642) + K(-0.5546781514575013460544359048711138610372673310055994106597843783) * I,
+  K(-0.4263517325388219124173654481860105054963539881515772151511665697) + K(+0.6273653737521452961427136380523341116628694180777602390427631601) * I,
+  K(-0.01639318315149397162041711281077139587301675843248389587755457984) + K(+0.3927753282382731979877388656850245574371206488338698325222788440) * I,
+  K(-0.9433176203121414181783492177409093862852060327417650797322318358) + K(+0.1931602792697362116142513024101232793075922598902723029062995786) * I,
+  K(+0.4091400902697634121216647161279008392475007472128202190972974001) + K(-0.9241411971442003049929150700039466560371121210172425599063467240) * I,
+  K(+0.8996190943626299052495374843861321217581631180308148647910298609) + K(-0.2835319692706243765567264066942774895613561770891659388153874625) * I,
+  K(-0.5734790240976182854395733753912762912816570781715590243601232245) + K(+0.9310689277229052431416094328956556359294137838878218294403802168) * I,
+  K(-0.9706555760241429004452369839775968868325009660352686358541858893) + K(-0.7661135944914934028340295992335173239580823598379099061065560231) * I,
+  K(-0.08551705064179311195834806157601824259776344227135051184347014775) + K(+0.8951261364134745717516723349075353359778764190538842239749043323) * I,
+  K(+0.3101143534021302968229264340199635728255401469914649144400995486) + K(+0.4890754957079365610369747719257677967408109576116903642555316987) * I,
+  K(-0.8467250373148320898084729714710572049986725165409336928016193854) + K(+0.4690849045941944434186410775704886003456339577163199004068876110) * I,
+  K(+0.4528645394227646675749005040480913362190309491988875243760804171) + K(+0.9746827093954126827392614353158418173587259462640486865229155177) * I,
+  K(-0.7890821770144572993523103936707637346134247540472534125883675515) + K(+0.03709866131113552390862917819559901689739295081604088903217680614) * I,
+  K(-0.8261575059600968767638526138014192521308409989889249557722635191) + K(+0.2359215919059496429703961387303300861580884301020355166097979324) * I,
+  K(+0.5517211641268242442649889948189371701125488590512932449035252266) + K(+0.8498100792393159342583604065849810363814350942457631023245556278) * I,
+  K(+0.8597122161196648369699543115332541436334682626175497405833935785) + K(-0.5908570748801968544021087405528945991820264834295235931376341160) * I,
+  K(-0.5621559666921444792741949379475728719081718370101072504326075359) + K(-0.3394036726112115999038309988220439922758864200763189401425854824) * I,
+  K(+0.2467145697995531043026448621634628082958397196902502491846761382) + K(-0.4221317752506940828058884612740547423204890354901802995417505746) * I,
+  K(+0.9426795330979194112279256118815420279480792909910404435412290894) + K(+0.6632502094175489640403173962281764793681088748856594130187933468) * I,
+  K(+0.4925270152972272315190126986455880929248736197370189402545503169) + K(+0.6236121505872285421315656541097958756088750590702243615941899657) * I,
+  K(+0.06491442586599827291154879428181059163788693143338726906030151322) + K(+0.2538882286215041655511631113239525226799811095726255883017672827) * I,
+  K(+0.7694207568057503855858403639857784935063497504789357316278426790) + K(+0.7697371914758023316765145968475591314620610107301687016679409372) * I,
+  K(+0.4578580077508486133673886137198041211065498764802183822671879953) + K(-0.6611387189964508047361810800188158333540172332410004586428307358) * I,
+  K(-0.9922341369715278330574317761949493610647205346542696528399530039) + K(+0.01901682941281857407667930256356723681416184998755124608149978123) * I,
+  K(+0.9443594822931952731985385166961356825026244038790098134999506109) + K(-0.7402663055316142017464011161728364916512354152061272424804940165) * I,
+  K(+0.07941208160962145531799849086880618827903329121078299081088004325) + K(-0.3003058824228962844711808728880258290598725759724749436385693932) * I,
+  K(+0.5407433408095482145535067738010232184802961482621087004376003791) + K(+0.4082747638388719699544297719047364845027827913795647311694146767) * I,
+  K(-0.6179498895680464325463459471817040969639946253193465213210555194) + K(-0.9817063161900551409256887667979325507259737169854403579656423929) * I,
+  K(-0.8137771950588244445060621048176992327733292633222021573639516827) + K(-0.1509747643567205295030066954464904392515344462212781631786195109) * I,
+  K(-0.4291798167988418921153555872095462081060838146687814186322741603) + K(-0.7070783134489328270952958939658439257898088576719070955995669363) * I,
+  K(+0.1052909420786459449757724989361434993051794206444355889068930361) + K(-0.6843197572469670035041195405914456824121636889358012358822234635) * I,
+  K(+0.9752888327447117486299482738684836222986577066462479072605537034) + K(-0.1252288800308351328156577541043330065165842242291817354659882598) * I,
+  K(-0.05898224894780123903486735206469564308508165845637693376145228451) + K(+0.4555347000565132235682525447544193574964904413301855844911355179) * I,
+  K(-0.7760171393906860936217574749271766914976525717277739870766616673) + K(-0.01711170073314901178923106624672451563742424839692440419530460808) * I,
+  K(-0.2021359284876537053739550998879673792571054603819347441270144133) + K(-0.9756254516897732607478509031003468406898651146363868254837667651) * I,
+  K(-0.06259712693759936977413788191281391781952087080054461006306628836) + K(-0.01649946823644040039075506265213082967291360978727300140998007168) * I,
+  K(-0.1666024683184612329704875959322736856710312289903139663553323365) + K(+0.1938646355001205575751542630371345537780783580850365415081533832) * I,
+  K(+0.7779370736239963611356438927618855953622126535671201826256781063) + K(+0.7759063237095079317541380014855373755621157121929509603299697337) * I,
+  K(+0.1047797964339250213384683402693543243317592129910780124830498670) + K(-0.3978244133745494540204079999190293233496927102840616799873530446) * I,
+  K(-0.02682743297496726161183153902375716932903767051579817306495112256) + K(+0.9757939511522832771510226289335491526635587155806783959532354201) * I,
+  K(-0.1924079225394107220177060393892821014522756536919337038881771441) + K(-0.02806334228246066914632099804340708888758884814906666094720448317) * I,
+  K(-0.9949594728843700400668906637254056108564092296500698310050203921) + K(-0.01497505731760724216700280240763107270825594886331850608839808928) * I,
+  K(+0.3170610482471332261668843084879323340332912510282978456687166235) + K(+0.9076285806727924752940347754614455175750973425084019393149451671) * I,
+  K(+0.2528342594689791750676049977997500107301265183233189421057035230) + K(+0.4717430697770548322101175981507483526534106860087299910344269148) * I,
+  K(+0.9594707127592607008774679622484525657744757278914395917439597196) + K(-0.3781633533200910175002703465321220042514135497545035761305689957) * I,
+  K(+0.01181104976401880679890071626661922640689741291677064770854085772) + K(-0.2340063812773068022736532941650276805627857154920537092103750023) * I,
+  K(+0.5336546130474137326679338240700937955689462563320224763423812716) + K(-0.9403461068115945953639344421862484209221625974278919794210286671) * I,
+  K(-0.2384320202781195621829640075756284429989822583855363253759126964) + K(-0.6375834469676252068632350704555428411146489824020797621794745507) * I,
+  K(+0.3151544174464479620616899540906004393005210502286013530209460055) + K(-0.3674135502537194516334765452729893774402409336605205611386182587) * I,
+  K(+0.2425134587370060019295820715629684907618952841388965381386145696) + K(+0.6285966297073052650556955169730482559933316257019069961206537069) * I,
+  K(+0.5429302725153566387907882080933370521221276732219980035800442639) + K(+0.7984157257557289033365054381431030357823051339595863045274158049) * I,
+  K(-0.4694412265844583389584877526118118013772122687484860584361214185) + K(-0.8080795111937031348642406025465156077574277068549599191500835171) * I,
+  K(-0.7198937142842759860216993112479011691306078055621192604849106966) + K(+0.6542457696203725363985378722041870722351967994537874593526787675) * I,
+  K(+0.05913587966494643208917436156661987768847421669977811867235176890) + K(-0.7819364433317138058271996476017516508371669668215937874473877729) * I,
+  K(-0.1929654899342841040817393623955425093685207043284746548880973208) + K(+0.5919912166551806055629493949917521452869905264697491706661086869) * I,
+  K(+0.6714535322784693494022145169187178652857810313597247247634187365) + K(+0.8965822850041588056097277293607330656491505905440857808158555483) * I,
+  K(+0.3026160436894358991234393062993557283036529935293930936819971303) + K(+0.7742603390930491701432481769693441319860278751879593385748104348) * I,
+  K(+0.3670266786688800379072412590435965106264233003402312623275083141) + K(-0.3236124902129844500922905218460499865601478408956157724485708600) * I,
+  K(-0.3668003319389510140806431126117748874573676075171322461333764892) + K(+0.8533020738941561795513934019213487153711274254680698363611653460) * I,
+  K(+0.0004271887137844777455620245553337454502928829789748116840549878805) + K(+0.5237904961810530694460593827213056150961999221341571305574776201) * I,
+  K(-0.08187402072286208568481041496702800385202452440190355026834496454) + K(-0.9100144039823849765000930250617136120486789200511933492280273104) * I,
+  K(+0.8878807650040420385228182096566860718817093738008498745882819475) + K(+0.6868975032626913332258091640138748525095431506451101476928334304) * I,
+  K(+0.2778760675835914365609363974334625977998810581586180753068985807) + K(+0.7903944642079020546832783837630987512542125781351363656469083102) * I,
+  K(-0.6124581488778618071556939351347100622174071354507882438152411099) + K(-0.2396204378238201870372787700779659425767796145153268002682003163) * I,
+  K(-0.07029357175091748970606590335310221142359726428024207094989178937) + K(-0.1700282200418301443535989437270522473164816159679521496604309972) * I,
+  K(+0.6971883418498405851579399694995516458073731003277114067357175169) + K(-0.7656078348319731747803745745048996943922454278311870333316671185) * I,
+  K(+0.7967144562809598211804137154122858188425582011480776505268289662) + K(-0.09792062099112865271060642474473284036594446890269058919979822147) * I,
+  K(-0.9424360526077164599112040331424203817426864579630979609173961781) + K(-0.7827565416151953839421772962972032280768787040983789994288017147) * I,
+  K(-0.4589410475888157689913941890735858498625729001680690344062873955) + K(-0.06146629320167094528306987512173546665830708996053455170751438403) * I,
+  K(+0.4314139397147338478071132745016541073709545413186645136099963675) + K(-0.5186860155438391023928035550596309181571513884024943639495606354) * I,
+  K(+0.3300125615626590153122645695451893127532890266545371854332962052) + K(+0.04494920605970584232554674303323482817839143433862911513672413790) * I,
+  K(+0.3989228905967701791479828294307327178491289349440272361018145756) + K(+0.1210232432974380596226624524763155940757747906658475921519331651) * I,
+  K(-0.3272726638360447288989563187245860621714712518062475127448980064) + K(+0.4152927978008980439621838333149110750456245589988984439060989672) * I,
+  K(-0.5705581609674721154426677119426650141298998223361485025861006572) + K(+0.8405469954510073324220939129652571110153608816190884757134638014) * I,
+  K(-0.8335808856938191240530331270612288738982438611762017019644927975) + K(+0.3059170926453890847698436814116433808088453460231847368928585937) * I,
+  K(-0.9925337161371183131096421558705273531604705179459567921041209669) + K(+0.5289575398137468084257779605593141050621766227073799470046206626) * I,
+  K(+0.9855027327896559751600530779456196073682502800659489524656244835) + K(-0.9321752446578894375177553794992071631792678438569453689697216340) * I,
+  K(+0.3047958927402431333395045386831758591135010747581885958130910795) + K(-0.4939231943374644559594151509258493426482772456953455165095304065) * I,
+  K(+0.3554034117455386686975218385243995400748926761613882612217522814) + K(-0.9900852218724664900428457182243358904608364881642465693859257371) * I,
+  K(-0.4963765632657733866753461837743469348006513602315134832203660515) + K(+0.1936099386847394047941171895359674458484206458295643960274822937) * I,
+  K(-0.8026988384115624782840343188864227150838701904326416833257949318) + K(-0.5038724013682314838712618722729434990509293796544208628709242662) * I,
+  K(+0.6994547837757112746940809527671832441928906268710384904140209450) + K(+0.05061573166239406153699823058082640206642179856761473876002625252) * I,
+  K(+0.9755325322619697159896946464455971060286259515821700231029353447) + K(+0.08203980377589163398313948645323587265091147479775444766183271412) * I,
+  K(-0.6795288055383507664830703821411952434949810576171671197330939262) + K(+0.7150777617331951410964676512508229436929890168347974989996429537) * I,
+  K(+0.2972125592316656690738463271397167042462699438211418096166226318) + K(-0.9976797831919179765373083319227377924458959013036464862574223293) * I,
+  K(+0.5844836430495149294034374616578027919384773175667170444271728168) + K(-0.5035576803981960556231450009449586462362104936160563219848974490) * I,
+  K(-0.1499157108226156262659879430092401527584695505235070239250545707) + K(-0.4055189460775662466882394747384967325177956654133505757604639300) * I,
+  K(+0.6386588114500974933880818742348399620506770986491918070275239031) + K(+0.8713826000912526026041384099166139070209900868900373057711975428) * I,
+  K(+0.1436641059557912885772539867527176029015379559053444561542810891) + K(+0.3824527624623557899626252772303734549960057802183182535998718345) * I,
+  K(-0.5759732930699637873143935535748353697161098806055537732559482621) + K(+0.6571427252395388308947327878278251239948829086633162395045460771) * I,
+  K(+0.1048383212970328154634345680434060956628006126092324286866352337) + K(-0.2946549134215997126305110605683468302276612423640508641539039696) * I,
+  K(-0.3383109903260470879463212524445929249795505857054957805752659051) + K(-0.5774974286744795486659265612662577741586446125641785809891422872) * I,
+  K(-0.6893081464022297659296471020771564908052836129720079117760102866) + K(-0.04411052518501927523222903115965352239272490604913655855763355272) * I,
+  K(-0.6282011439369282063769302662523474859244375741290765278945358646) + K(+0.05606878446182798200342647028577909565531143452567770299451871051) * I,
+  K(+0.7265794227921631042730867131181257811178661451567824809382539590) + K(+0.2507963447943717368760133521768680375287533174915806201859691707) * I,
+  K(+0.7387906227717273339023920666761313938083607156289113310335744163) + K(-0.06651179952508666842538379426523046011212958332104205683199937149) * I,
+  K(-0.09714175696279606609176968236497007204178927348722081359249088202) + K(+0.5606327721120352338916640679478869774862410250428710607076107942) * I,
+  K(-0.03627651005684656776077295775641701793474480565752238725430265401) + K(+0.6706778972071400451562805952251030143590082975509319155584653179) * I,
+  K(-0.2168067278276459168090042606813395925105945325313146806729780416) + K(-0.4187156839111979345123076334706603403912703127169310883457747817) * I,
+  K(-0.5335891657673039105288411676464238660896110058643847675177328051) + K(-0.7287958786949843086425081912290379985569728926530885803758000663) * I,
+  K(-0.9126250042169909523525835139303829075519532312949160475958900818) + K(+0.07326837789041899159063192739210530752936393138740357615965215660) * I,
+  K(-0.6749664871981536754013495610077505466381224242184934039699276234) + K(-0.5092468887833067934955739243868912533037494782231201998568513683) * I,
+  K(-0.7889313942672380788018638860627700784971515418796781335861780693) + K(-0.2039751709980185875794591563239623505288486211150876313347905593) * I,
+  K(-0.8446976254317627394156872625957584371133402539563408686280818784) + K(-0.8330772101162191260362892038031737719946175581202895012658695443) * I,
+  K(+0.8017151369813244166638582835976092993059228231829410307958153821) + K(-0.01551215745707757107170171402988581423170451910034377459832972390) * I,
+  K(-0.5245288915366062055739392803830132679699890700797822755979224321) + K(+0.8177856652079935314025164541930791983539725384117321953015821579) * I,
+  K(+0.4586577604448259791290225128478032513920194543862378252480784975) + K(-0.3634635865084329264281318787629495818855113136213577999031449291) * I,
+  K(+0.06546124572606907042476198155983217547929498830873089970546476871) + K(-0.5487685093769550105679523855787200510124079885154167311451906148) * I,
+  K(+0.2532054952484120984081223634386396853198512611895219178828744384) + K(-0.7518977955506366037289832033814401009931024786576833948761572381) * I,
+  K(-0.8536111787748305910496495662284597274574713661041921336849023888) + K(+0.5388672070224975742998483137144152340316172278283126664617578215) * I,
+  K(+0.8165728526061915500897859903858086797812467322161733589993288587) + K(+0.8357583377320063947395926061292912400776175648059994509562167241) * I,
+  K(-0.4968003291175744252090699097826113734098405340046529806276090904) + K(+0.6455428593809199790112386414641355943544125634050765091591122008) * I,
+  K(-0.5356148948504710790708273562594776768387583160850301904645300072) + K(+0.4892677177344431877829764022327290253412354307373669874444102503) * I,
+  K(-0.9534913128788515636161123316307734458514496763104651760320384020) + K(+0.4792220083762453300153920390462602730050766740331380495001893149) * I,
+  K(+0.7107398136509627069921458039049927598707480234405440537577920166) + K(+0.6338991153848931843938061880530442262046611376351085975880671782) * I,
+  K(-0.8249136673756817282409390785787007705626159225874855967936269569) + K(-0.7141676712377349871412943132106639291705347577325126271794972266) * I,
+  K(-0.6630294762773014358782780713589573454082275032043808471656319209) + K(-0.2448716603733432047830270091165720963287461096352280427006521937) * I,
+  K(-0.9325736377308224136969199921783668787458632936193182964287497675) + K(+0.5853167365919005394593151545209808763084410723782778995473039738) * I,
+  K(+0.4001575826987994770856624484358229300163447494043804419931744244) + K(-0.6195072899066788104221196784285096273143568259481730851945080706) * I,
+  K(-0.6380156577734882433103665462064192941491521715611775375612348986) + K(-0.3796689843324607283904032819013585255191541615733948531742809904) * I,
+  K(+0.8251005185343547461750764034637336558430609828186290494569865747) + K(-0.3211578574939984994727696455970628244320185760411605912885016132) * I,
+  K(+0.6413931355610670507409243054328434901677309224085472852458198836) + K(+0.2488945759466593721444323203180303773048376746117835911948564611) * I,
+  K(-0.9077147176005280056753476260933879201076110215547418406515032456) + K(-0.6125197538943758665556397234398715313722652802519289604125189889) * I,
+  K(-0.6706070403358945189803071925983263102149446574542809299835727064) + K(+0.2082829775240114317123964543410189277547466169464841198192803111) * I,
+  K(+0.1165516214791020294421410247074940184797534218492284517324623487) + K(+0.8259504918508803941337872238676226437420309998507400199555346464) * I,
+  K(+0.2348256225284499338473768484518300107101858839700709844242113665) + K(+0.1817839761866678712611635146874533575448055786442928824834412828) * I,
+  K(-0.9112299002745172669273198787689094011439316128023381735802376970) + K(-0.5492926059936056890236082914047749314917447831176350171406895659) * I,
+  K(-0.5529023614884813346077776311912214420953774695304422984594925049) + K(-0.2600186716288097612699080971072274428085266673597272583040638566) * I,
+  K(-0.9506469315333533579778035161369958866029320143204820199171917527) + K(+0.7824900529811818443153461150845980654886472495526910921625133887) * I,
+  K(-0.6218280802116897468553100029322387618881137475664679346461276824) + K(-0.3378272644842715697175567334928393580823285803125397887353844466) * I,
+  K(+0.01356526714352777288413228371070366566851199472603351105836234004) + K(+0.01366142939376199277634220805161571650463363474079464996021169952) * I,
+  K(+0.4334125819861412550529606653827560134235419055280547766273132900) + K(+0.5508166893309810242537621179962841939093745877465005368095923177) * I,
+  K(-0.6781621627715488356369344963566141972285059452539817076828217950) + K(-0.8950729692491324339041791824501042154455479116529046188240665834) * I,
+  K(+0.6750998244737758347254296578013227455949239932995953394803954232) + K(+0.3100031744164934791528781351494402431130201138131756501074035705) * I,
+  K(+0.8634096863718776554708327903840271408817425431582754052401473043) + K(-0.9533058329688239159105776627634862053479429828803350074039530658) * I,
+  K(-0.8998809447567389835490706510861337226013520048613296406489812660) + K(+0.6986977826940162638199085721353358416348593304817550734684095762) * I,
+  K(-0.9192452351315289256933069311404271369387375617798612123730730017) + K(+0.8892557550834155636230992491539799713873102487470026960734055051) * I,
+  K(-0.003674644472635383105695479271598062700806123973295035387554262380) + K(-0.7316924659823447933471455861969063298583887356036092519485952291) * I,
+  K(+0.5454848433221500355230060773019347920133018542553353635351970283) + K(+0.9547703702489051714514559231886447337916171734731375704820214552) * I,
+  K(+0.06684027914345481389235477704940402462612686499789789140001129170) + K(-0.3907653387510639571441635270146744856334617519206958292322635073) * I,
+  K(+0.9798781038635975409637105428259499994823875753833347065407910198) + K(+0.8433622274559261388850650172073972008259548184020191431115002504) * I,
+  K(+0.3559867304535681494008348861460202354454010126219439024668831886) + K(-0.8440846898957816423486286651470640264378919302859116873055781357) * I,
+  K(+0.2723284390144714097489628803894150315061371809981568757183296585) + K(+0.2892459018714724200465147087390530489763392727065803296591451722) * I,
+  K(-0.5124475586935114536053498096373729988404110310570838847642077875) + K(-0.06397316383313470000295723675656698556890725012554526094240937862) * I,
+  K(+0.4754678443341823815890012944367194361922553089426533856091624088) + K(+0.09434199001172037418621458925882885345284264637671326044983975660) * I,
+  K(-0.6650383083283095926186659470191489013833159262167848883244799452) + K(-0.9393737482471094102476536738123487839673120103752222755596128649) * I,
+  K(+0.5902991058701076032837179958976413528381439909684321410414067840) + K(+0.8929442531101652991585359084285857070472325741010467195888259713) * I,
+  K(+0.1829939813202374034979364236079296977605290384128518298034933306) + K(+0.2047124084375247144199346192347685919797414724323364713197995311) * I,
+  K(+0.1885370633823871739310168118636986348138511828611923641290968772) + K(+0.3018340187032519691172680933411381588465298483713201129015487600) * I,
+  K(-0.6892111158398223232054853123476026737633001892394284932220435669) + K(+0.4887652011148550032322727957856023511840330413702067812452197560) * I,
+  K(+0.9461009992824164672730615449251633196307780560130405372714007491) + K(-0.6335880209896600534360281460646646085038842433502042513681753563) * I,
+  K(+0.4833118518662508906924235166552474137643038493293815754087792277) + K(-0.4483226382233222897967294663516340141339121909579012884133740847) * I,
+  K(-0.3004943448495989281766672164415000848444153878274995952253263886) + K(-0.4085223471224998337746396251085352186343869200375060655836490916) * I,
+  K(-0.7451988083161350259406974670856617193681026016111443642517872492) + K(-0.6629747363623946466274969345191221010613899822888364707034994312) * I,
+  K(-0.1648849968111618674807979893319759454826855191596780066590224192) + K(-0.03777649025792399922886557033572234862729686024015495583906854029) * I,
+  K(+0.2306011062054656295265883563486732077319381744258013602219967541) + K(-0.1647053734470942375607198132298097575422721568309553512412868601) * I,
+  K(-0.9262188795573949158115859314466080244967132559543076529166320372) + K(+0.5940163910396123431157056440464889521107043342452052719867793533) * I,
+  K(+0.7798866085599888968857083610441898875462935863073634562393974919) + K(+0.7517335220155972863325777934520828927844391420414886559133006518) * I,
+  K(-0.1192199062395545666770588543896291569578296569024141822806510474) + K(+0.6309552703193023685813966009593377968371664683554102946046741424) * I,
+  K(+0.5032840388614729717361101070711972297891875277456619037197140913) + K(+0.8133501345815104872146728945530214397185800645063983851990232402) * I,
+  K(-0.5079743327224035418630093583198991739913266325590634455004141520) + K(-0.3663315374366981725877804145577504684166939645395072232485711667) * I,
+  K(+0.2178664873168638860289771712596580315708682168640763920967932516) + K(-0.3579916317188788346603775790830235504155542842718204183629326250) * I,
+  K(-0.1483409539215602340820076673958439731891585494425542620227552963) + K(-0.6566970045256221747695028275955890510036258593165834955110026043) * I,
+  K(-0.6337578170128106867994636396266521716149313158896095401731507010) + K(+0.6324228587786825747459301038851999732122405060041797767780461594) * I,
+  K(-0.4910347083621581870372613987015158509743193141324583730532304188) + K(-0.1584160550488556300248087276570818066880453700151335213740391945) * I,
+  K(+0.6282688907429816122107265051905982032900903635549476641705827585) + K(-0.3589058563098184418994082021808159558166373173843632391001978079) * I,
+  K(-0.05789152483302420384559312476410946833437607675139337638194936651) + K(-0.2083316894845250042355574216767440348964321640156855571015989785) * I,
+  K(-0.9598541273941382562020510494306595974408089178701659267933594678) + K(-0.3942148407810254968651402511562710457489714782384456834586689444) * I,
+  K(+0.6591032272906371197044358785496829060718818663221162669839838899) + K(+0.3700285651823920795710391288998722621262017782616722806938546520) * I,
+  K(-0.6841847796171043201007793589198413361573122707222650137493385744) + K(-0.8892506955157015627586673016482794701315232492361331171805566342) * I,
+  K(-0.4490382090113379021373358845335453044709703107312444369361269994) + K(-0.3427828787313490964113872534257667011417065426000327051523036358) * I,
+  K(+0.5959767530088681246431914942336139151502265145148217885271404180) + K(-0.3311647754345311284810452963903860082176507661861942285158525766) * I,
+  K(+0.7363287182327324719567350693686935825718194996961756739586744562) + K(-0.4497475317917644916512014385148277702116724424489191663479626462) * I,
+  K(+0.6287591847609035515525283033789389342219852959522679117716113983) + K(+0.6087205673484584931404040415443699523171693622383527217267691607) * I,
+  K(-0.5459506236385083333360732574631520402867007962637282180012784138) + K(-0.4115811594792363440834258455632796424919930613280140554470788500) * I,
+  K(-0.3154884164731788649331953369010876058659159922637661095873392397) + K(+0.4594808885586875425210326968683968368964434371024059558437836780) * I,
+  K(-0.7356079834968325519072737716960043789985936432123631497162464547) + K(+0.7107222920700186922184233267422899750994273989386050071707569100) * I,
+  K(-0.7439937939085200596920771851854612500096266125182499257774690463) + K(-0.9834307112667122059938047261995183680166823206276998193508697584) * I,
+  K(+0.2259741336229993901681417009012748802722968754989122002268213091) + K(-0.05881024942996154580328987453439301088551729100209210919510151306) * I,
+  K(-0.4504972376487225968885246858575950279488610456963886233985691138) + K(+0.1804882686510839855580231337482566943183195681823601215649202008) * I,
+  K(-0.3998193870049613563279720987455599306653729703919087588517795875) + K(-0.1491696174342642333410262224912757663609237454028680962451785192) * I,
+  K(+0.8620428761980095707203776677055528706029654578895906569678604334) + K(+0.9574127402261596301911588233060301441321120212609399138711219452) * I,
+  K(-0.3999594472795792489113496051183414726051219134180559318727897845) + K(+0.9526750071438631316246110280676630480983916031334289040262627220) * I,
+  K(-0.5683496236745915059300657862338897855672643463670025251873552174) + K(-0.5581740122131536246852030759304634294336792577900494845808941858) * I,
+  K(-0.4953163587712331766175861376254934702894822426084064353999022035) + K(+0.9056970150976877386824055684564488188904472004578304864402419229) * I,
+  K(-0.3956584533022154473310841466588191797692618090897753648383519943) + K(-0.1866759605828296911565688241168747631072448806167862942658079731) * I,
+  K(+0.6490730398663891702704071213748030377822129386984802236811118078) + K(+0.6897664921266076457367049239651198758874037925837440024990968393) * I,
+  K(+0.6409129861614716486043933482232738006427515990620744560295911729) + K(+0.4415410295325248272690068789118962488980664431243294713525295832) * I,
+  K(+0.4524204122204909398617470969312723093453645259460874600592837093) + K(-0.5520286702480049877424376966137284638421133618504988325998290465) * I,
+  K(-0.5441405057638994721873863385679604597665542992216947318448070116) + K(+0.5652427575937872816249202601343444658504537918597921662097147502) * I,
+  K(+0.9397330962272531775633434449179993874545865861022686731965759920) + K(-0.9583114144578589556015956315708583008375199990360430737388009113) * I,
+  K(+0.8174282122000282777294431348985426664703982648984950899191029812) + K(-0.5644141518298841315185529691052828426308501947745428418129129080) * I,
+  K(+0.7650528326687435807494094139025837401308682157417945752977003788) + K(+0.9605162745942351990878306802675246183005723477066574569819249804) * I,
+  K(-0.8275415913742612370129017097156704362717934848531284915201158697) + K(+0.9572318094738380497537937020853007165493421426814415684618445487) * I,
+  K(-0.5344205736705223881799463492737897118292436754996772261580187183) + K(+0.5810078558582824100856104992245709584145969464935581411817657853) * I,
+  K(-0.8825805958693646149282592885541946576477028329605722157610083902) + K(+0.2611424860804339202936557825909397840191854251028091458127688102) * I,
+  K(+0.8501598175389059661383119602791260742411506992108184778011644498) + K(+0.8047632441868277768588895792106603865660075238818651567796032066) * I,
+  K(-0.03206786558957849515019832566430842021512540520763920998999733706) + K(-0.1416663824912807956324296750828754150570222102753468294528577087) * I,
+  K(+0.2761266293345805744715036677646265855148255037626491960979338378) + K(-0.03310727247093293095289729002649789856427561682346238112819027401) * I,
+  K(+0.5797977533388933253222951613155906369646791148641171722498975627) + K(+0.8337769391809389398939488302277621472580552905994408399370440954) * I,
+  K(-0.6301986261336408698761878878611306862036125741990658971071103101) + K(-0.7261308877086333686778937450774281440664322189241936468419319883) * I,
+  K(-0.4394771097465111922319557429099501803935899460081469047018581835) + K(-0.4557178634750971751702906056239773386653623487996337433702382805) * I,
+  K(+0.01257776159826495283976432949616909049416429792023320005281444922) + K(-0.1577948514857954743861298114193711963240976178323527625330715503) * I,
+  K(-0.1835485224672122724259108987896566438204647780797278952340150540) + K(-0.1013752416237176093692123584984723539700861932852539871318876100) * I,
+  K(+0.6179505402995065171357704107898154449772474669193892960591234641) + K(+0.4508061769156545135493504841692422664040228521015550731304403311) * I,
+  K(-0.3155120520033388513469003738092690286251880819299608662445677277) + K(-0.4076215490374446263972586004673857468937481887370355477041024666) * I,
+  K(+0.6986283858316789125493235244191481788746296143090405846950937468) + K(-0.9700195332674329366610797417087486072247419419624494697821020415) * I,
+  K(-0.4876563532476417657751796483987116509778485571581820494734743839) + K(-0.8708130110861858699317585051731156210414554322084777189878090155) * I,
+  K(+0.8232644580576667390777726663349145812373613266685354075418201465) + K(+0.1604567427734488926693542624141268223027287022070858066740526676) * I,
+  K(+0.8070846547687141361378739553290816808653249130598611636404845843) + K(-0.2235139265129202301070215025667430078702647154859136992474506936) * I,
+  K(+0.8966295672688665100637233524003378759546944598051542827645567316) + K(-0.3303133032308624565971174149040708109200906003368840512765692704) * I,
+  K(+0.1581799270080592282588536301293625116070980783459013925053828065) + K(-0.6480842105223432162460852557855317675791154443407106922249140424) * I,
+  K(-0.7176104224474691168776778994369965125939606645748211106557194721) + K(-0.06524747399019433996288718012234906105857921475181832187159764645) * I,
+  K(-0.6726166234623792373084697558143568296933464420576355313314945757) + K(-0.5576060156833500139405240035673658119377599436016214285717025316) * I,
+  K(+0.9523396152023298654254897174757154850906582944014960012030679545) + K(+0.6381377533491732854464428134357223019844933539640957396971922435) * I,
+  K(-0.7708351860880353592291986884926071351547298438465440794835725021) + K(+0.1614576823838883001652849668611700188222844936338259195240098388) * I,
+  K(-0.03930973935207432850615318973213241736002619537926065211687982084) + K(-0.9874676652555534248418202699535837895482379952926406102324813110) * I,
+  K(+0.2430787921682270251674914610595159213144763954023036371616835831) + K(+0.4791048328493252429275603951864256993772210852315395407073036761) * I,
+  K(-0.8601958311715732361924852983110132399300858537143688326207084673) + K(-0.04181346067011184402633725829307484016990920092494969402403418739) * I,
+  K(+0.5717185869632246201786178899837673196957609663681608046838913063) + K(+0.2989611103952239633979300623982969443516314582155577043730256953) * I,
+  K(+0.9352901685006566693908410586177506588967342601446467801895342389) + K(+0.7778732565745188225251985991033026937128797632507563569923623951) * I,
+  K(+0.01582166386401906574651472962064535462956580151304149938138758158) + K(-0.3068809154124639472167106576782145915508219432613048139299589623) * I,
+  K(+0.7536288477157581037866281210429631551393667689421314023285404669) + K(-0.04106717323652871277400994434693569394710375031954091741457333216) * I,
+  K(+0.4989798492403513452746484085383445579079231648129387523648696519) + K(+0.9793302102332378179253695863721121339119913939603157803966226561) * I,
+  K(-0.4792741799376563234300656805703585023111489683932477821139729329) + K(-0.7854388639737844282290868079127730352399967124990821223802463410) * I,
+  K(-0.1929402008861067064095768760161507488782372207109471497117171716) + K(+0.2923179818189228847236631906580915532900673112468254085381542392) * I,
+  K(-0.4680809400801900828333929836612923353519237598313414573416754860) + K(+0.2755511969524253719068662041281434823269354083999666326323113864) * I,
+  K(+0.1907563864448273473258766658129159285761111417357433078614243113) + K(-0.5012026075513546013401077246760946929686512238047013728525207218) * I,
+  K(+0.8287842467802014519436223939195381128147158728946565676201108541) + K(+0.8733676498272390390377707882402549415195034726188723951164894571) * I,
+  K(+0.1174888420915726259915401485812553368656991784532927351322970104) + K(-0.6121851226213113930417327738957374310029504330292791328144105082) * I,
+  K(-0.5009961917093371792847251404544239181502334235864073547693084713) + K(+0.7301837750682651071556817683778808533148623194961119948417498666) * I,
+  K(-0.5121399326570400508578424903207261388327176631817939505978972571) + K(+0.4045949011727621782800364954665618409036719100809085938546930896) * I,
+  K(-0.6437340163758292626020246874118851364552161448604273058860421683) + K(+0.7921013104777253836710072186845396934843233968517973417977152655) * I,
+  K(-0.9177377462686133267057642860420109158115432852625006782429209021) + K(-0.5274141921852231457233231177139101462718699729256100588999266131) * I,
+  K(-0.6069543315842561763570369392772168744202778487586572261774702228) + K(-0.7666647535736805201745423005557477628002784597561157774452243667) * I,
+  K(-0.6461759930446084249525616314260830230497178307544934672773376501) + K(+0.09513996718932546123316550161697750388237688034899079159815219686) * I,
+  K(+0.2276878060391758356127983810819025559996049179420653681868271271) + K(-0.3574194026283994780014498877767281274554141992357751175624458205) * I,
+  K(-0.6911095202587664920027220871222137989330007156670602042539098861) + K(-0.4939209203507022174650127829671756826296692447472437208993072812) * I,
+  K(-0.3791385029050835644305941962878861413853976820836059306399678685) + K(-0.07618298482527548338314500068479928898895645437787759238249775626) * I,
+  K(-0.9297950486172379886326272922097727589255018987288020195329061792) + K(+0.01584852297272254687809998042228455515777947396762877328241174920) * I,
+  K(+0.5978120655302577897398179822615785183800970714451475546948192269) + K(+0.4396736175777181630721055479569884679454438653155446199204637311) * I,
+  K(-0.2711169101968288477289403278799709715797466425987475511419715567) + K(-0.5911314949762001008761591052670895308415762896185862068692224440) * I,
+  K(+0.3067884738128241023703748810226548349655210814883406744024888764) + K(+0.8896097564814875187837512680236413436619056022509304029420789135) * I,
+  K(-0.1020589995988566621696963704190836086597222648461835033743029049) + K(+0.6551217217578445768719813077362897618175360407256364824777068574) * I,
+  K(+0.2572868615782312303244645509127292235251321239052474556863317774) + K(-0.4017942813961258813231362944996574489980755499906050743104266630) * I,
+  K(-0.3109036371364027922076093118943144688680297003351773705356497902) + K(+0.5801139602788147318825317805745513321698472884814526703283426126) * I,
+  K(+0.5781816139922237659292895739603609400312924056221564121717109152) + K(-0.4797338850487356240644843228358421703418457910648023129657632606) * I,
+  K(+0.1637532411037421836301013040933372166028978199642151357996411870) + K(-0.3348404315470130224126278531676835448506273165674038965071666047) * I,
+  K(-0.05448346865052912314449269930630611497014180732878674418323384351) + K(-0.001221343337113800433409266435908640001189017507063563523457586689) * I,
+  K(-0.7182891181958485604783683402050659218097400169801898727389994680) + K(+0.1156359317028952353193121051002322985986004018667113952765039832) * I,
+  K(-0.6234802291417603063118021179695466593346766446573345951285145053) + K(-0.2054322857212639216653176795116408271500848234875000439708466729) * I,
+  K(-0.04077210393193515591571693561563561382580682422487648705750388580) + K(-0.6029163230908826523920393959138752304849344029672835884674953741) * I,
+  K(-0.1931959637343216600198072859033136267515159268341655254119195147) + K(+0.1704777831078669914939560146783668826179183867140297974581085959) * I,
+  K(-0.1640562752177173000518388401473302715304021943460936270643564456) + K(-0.4098047345918440952767064586759969480183029327032473024839238377) * I,
+  K(-0.7113952988171483521669109524935084591237692588100812878572445623) + K(+0.09802964954027621468624464416369499303955181797593605050999746028) * I,
+  K(+0.7225552442665041942306400216887319747127650729772784736192486726) + K(-0.008288576868394157524240928994008764634165384301896122048524109687) * I,
+  K(+0.6696559212496133843412202633582430830095341913580601757885840114) + K(-0.4694034906519090416234475776850826552069293984450469976131306363) * I,
+  K(-0.2477573413433717239092284627923378760510256864737970881010058195) + K(+0.9656663992029872463818179063225894246510306993061011773318581499) * I,
+  K(+0.7260888036640339539696167931497140025739595379178821590392729297) + K(-0.5305345842668020093947514773845955511665067768865307747352562913) * I,
+  K(-0.2593999329831458312922569852142126949730768494663138411621727182) + K(+0.4299091082677700596049604883016930071099042727671826368541683530) * I,
+  K(+0.7805731318555466806245478505839205910056169865196206435373175290) + K(+0.1735175920069565544162930111804844332352663985175385046650225985) * I,
+  K(+0.2225972271804784069458834723146726056998779728849256282174146251) + K(+0.5587214476815798280178530629336354888118177014496821597625842675) * I,
+  K(-0.9548941421504042602263566866670753004405806516772113490872266593) + K(-0.08340406497498829686284081970443719159644045126514658698714998018) * I,
+  K(+0.1374554001477812795128965629201263587641134916889142713346840749) + K(-0.1823427917940288867599437050041642843645381848226470573828810133) * I,
+  K(-0.7447813660569849007594756215088674043163676405884314159889590253) + K(+0.6625009798658174158696326987978538718391281574300854530864952129) * I,
+  K(-0.1870528845751381055406447101233890683003167309561597870823274481) + K(+0.001102463069426490139188459625757231481544376828769031923382621509) * I,
+  K(-0.2939813881255477328254936712754663933713604749486366402348107568) + K(+0.4088723066217878198131073304572117379570121370757559741669418714) * I,
+  K(+0.04110760478900766139439728713399648104543220286883006383278374315) + K(+0.05338167976938323186113130853788908337021939328251002314697878551) * I,
+  K(+0.4182510589252267745268345893766436817062183291983719521912907999) + K(-0.9047567657658759311690160502009445810146448514571007325387449230) * I,
+  K(-0.2673667773031461832097277685641087337154290911804289027091375323) + K(-0.6518833669193621994145875437681347763766872362083762418737378616) * I,
+  K(+0.6449452283775363122036755346257738777141700581176766723254851256) + K(+0.8062959490954535781650156248054874077324700516698196837392997867) * I,
+  K(+0.4829533585013432144398090787958213048813114081647695323038258989) + K(-0.3790633506531557850527537678968941902222987060600304390599414408) * I,
+  K(-0.08755497794836064768550464065217434290166596331366233981722270684) + K(-0.6691126254079243084008735144895281341476756029909966654650143480) * I,
+  K(-0.9954997756541157164998715698525197081923318420942550944045491659) + K(-0.6683817932674617203370743321364206379458813837219662916382352883) * I,
+  K(+0.8386261221527333989713766408159386657480295896174100980624903149) + K(-0.7147874364051116677352023678916013721814759480041934914674011485) * I,
+  K(+0.3706416523112995975937180228551869912273234844900508767137904500) + K(+0.02812729673857212539387797400510173701979820247691828023019032465) * I,
+  K(-0.5600959600099672344370766242433848454279358440226693818484528777) + K(+0.8578883406487974560083577217522867662231285915212865599494393160) * I,
+  K(+0.8297736412128671086100613995472148055783982479247135711009337678) + K(+0.9067805316062881652030045961298147535346164756511802301521412293) * I,
+  K(+0.8977055297316245102135797355537296142813523877680518590009014110) + K(-0.2815948643678193535474853824166422268419907636733657688598828517) * I,
+  K(-0.5748197983543169624203191591434285631771190309195548827795692102) + K(-0.1042659890874534267426590419380487960187506763364665157101038917) * I,
+  K(-0.5858409389326448395809133835855451350070387804813596723936703512) + K(+0.6553098806110065499549873014278104726229393160003347138387570865) * I,
+  K(-0.5671838749074228774546140542483697483251436775346581730637971376) + K(+0.4933862050436535820294608065577586385277550091654140504047389386) * I,
+  K(+0.2952568664180143864626295175022288018699455321585930507794665032) + K(+0.3363291776468052564679388108815347170771974621236444483492781348) * I,
+  K(+0.5855294159377460607976319944754073739723999486547787547993774030) + K(-0.7117700245324564148022438345454695812058382984762417755266869072) * I,
+  K(-0.7055600913032675386217255594879831116355925226714928690713485615) + K(+0.2258090140241147499932680835169857340298492238985038263347028561) * I,
+  K(+0.5760242151078541779151257112162570330279408239873997232647912224) + K(-0.4033813727320000302455192868936090230874238500285433813234602349) * I,
+  K(+0.9715114578623126201047702965434710253390063604361885324341892341) + K(+0.6879375330769172373119535275678240154773283854291540103838311325) * I,
+  K(+0.3039337296565886128150504743929633802959698656670343605396412219) + K(-0.9112975399598570646267792030364316232472089185074412056869186788) * I,
+  K(+0.6236819518961590929846135479960273156754367073817207644050176002) + K(-0.3607013878413097669346575028743143752168816068771476888837201271) * I,
+  K(-0.1021056993426821348307935897306285673021901661096630313619218232) + K(+0.2425871604000264971221208469329499047338616965543816754028958637) * I,
+  K(+0.8466162720288430485709519274383597069807088506835546500121602073) + K(-0.7087616502851563010492290961247569658643484234719292087244652051) * I,
+  K(-0.9164882089543033870340315899504738014407219501993627157810897301) + K(-0.6131167343529433069430656830158589390437546455542959935005446339) * I,
+  K(-0.7471369081337250169307950106724888822831609321138127864473358580) + K(-0.9075117425364026973558801801995100670441567351278968389136403765) * I,
+  K(-0.2600172562419878647149957405453275593591751645918607919664288729) + K(-0.9904816234002496586495092462467362502947498311254471303986136975) * I,
+  K(+0.8607156851539854223694233878388323728755628116120369654828929715) + K(-0.05330812308431931728504733011776707761236207290899697737458171277) * I,
+  K(-0.7176948244425555148350261859077056953802775389924452361155185999) + K(-0.8801102863168725379873608800160169932936567490013417328394953225) * I,
+  K(-0.2207841432558825941950723740995817288770028938321302067625149484) + K(+0.2137027323832541163066962905801071802915755403552583940938654725) * I,
+  K(+0.2036491702001318699990411429390014676634458418153582557928198147) + K(+0.3246754114729342711760184362813163331733363833449700108785970231) * I,
+  K(+0.7254894068823261178702877935658935391536551159020282383368875414) + K(-0.8659912861493832144978103366771227821495411376318371969710448016) * I,
+  K(+0.0001368832398907043532254685713193012214855165503506159973402165058) + K(+0.4137222876012845945746502232607524135790244079086517518245857222) * I,
+  K(+0.9403770858493412579735199702793868453979673282107468402972875089) + K(+0.7307895039196994918262572049899766008252535345400758283288540444) * I,
+  K(+0.04493477000012427502508167160228754371573129967318448627165527691) + K(+0.6253764770426165547733541204791477897809960997138602075454043508) * I,
+  K(+0.2102079086273819515000703150681247456068069917373940555095490500) + K(+0.4087514873231722614338811543024407547422641720961487394962518892) * I,
+  K(-0.9298803913883027000250793538865301736872235899370902397802297405) + K(-0.2704178973356339872712451836668950778711166471653441265799186931) * I,
+  K(+0.4195999016378148254846865060955021160332507084900216447329462822) + K(+0.8363430715994018422274207415377730140188115953297645291847740633) * I,
+  K(+0.5592313747190898094101761584287532857788163390332779183914631326) + K(-0.2559862609303912542976594197848915459368820167192438627779639730) * I,
+  K(+0.1310951125620758665159054012017163111810563122171212437642206389) + K(+0.6162230926057769086547780677049940219082763483085491444241175199) * I,
+  K(+0.5720383186059179015293836428948150248475974704662851604059015451) + K(-0.8922868955044164563598849573370708504120673595669227993217237021) * I,
+  K(-0.2664807881547990846148168222569395166570593995193586268032239580) + K(+0.3938680503936648418506789717427717053106663903484318321692351571) * I,
+  K(+0.9567548826599194805036438899026483771002191542535671059856333142) + K(+0.6654347186164449151004644801831627545437328008844997923525666613) * I,
+  K(+0.9639669575431064311765610481094274927853342650244440098324137926) + K(-0.09576122477954257199055166123505969585140980189998659824822674874) * I,
+  K(-0.5843149770166105247872089022198883206400342117067963907790706706) + K(-0.9530843659695100292333594665837827773582165041769282203822400257) * I,
+  K(+0.9884120198511198054043694914056082596373247994045952094544108377) + K(+0.1135860588033233284874678209451779361571050377102422757837015761) * I,
+  K(-0.6126849877719582415423067589960941787401359579792483225486216042) + K(-0.3838871523031121229038477644714066220351875327445192886095377643) * I,
+  K(-0.7574237137296950124583435249292134665057711622186176254730384605) + K(-0.01569622779753982869418345886106772242845745262096940801347486104) * I,
+  K(+0.7376765835670458584693084052366192109490100576526167872883439128) + K(-0.6879576679557708895637642186160446385792902520635997654975427700) * I,
+  K(+0.2848128248389625158436958687302029337407156719506329634098815253) + K(-0.9552979693894506687747072639881573174213290999022676783211061772) * I,
+  K(-0.5778691962993075572816992415073791457417189498449348815609400543) + K(+0.9610245466208243539364683598681316310154407513246079140063910914) * I,
+  K(-0.7244005741644250835326164733871163383449556747663495576951753607) + K(-0.3532650688563323866719318601753587572939170687588761942990622164) * I,
+  K(-0.06675920661058512941191250157735681803297350651636083048644287513) + K(+0.2601631387913555854768528504797918892204892799877699394044705664) * I,
+  K(+0.1177618192581597298410134357502041699293969049381355284559850824) + K(+0.1417321642096361400094481127274847082744916092401272061123426479) * I,
+  K(-0.5563302181473310402291403940486311408427313461354609285215107939) + K(+0.02166026240185131097185602710108747360406028859813142595473886158) * I,
+  K(-0.6617985790447350279645382353537002008421917879520491962285682083) + K(-0.9280405859401190525529632296217767721048293483348513048264198395) * I,
+  K(-0.4162821597971221064242723905706637843852009913745963415374553533) + K(+0.5776416467982883356583938493221196028768526059917886346444840639) * I,
+  K(+0.4820138301883054393141576127806079077747759726504906890512100561) + K(-0.9316417763528287411491181932964033717350145300560804495519946098) * I,
+  K(+0.004255247053220032733109968076183306696979530937286497834222491587) + K(-0.3529425582001484393911110897416806033252735549311939242369336654) * I,
+  K(+0.1702212073087114578891005139703021755706960385588359062587645359) + K(+0.9836744696029529772535675018848968948860805528914686830500823930) * I,
+  K(+0.3492201903166792897606582549529303726835002744364714225960777363) + K(+0.4690022830874778526117835063929424866920162457383092345237313784) * I,
+  K(+0.2950341085083625144858391440571195253962255308842413213260072360) + K(+0.3153167725551129057914307079782055213288763612802446610697150966) * I,
+  K(+0.8817411976487832022386250885458485461947874354362967271606625680) + K(+0.3992932493642645396749806048792182222287471166498445115277424127) * I,
+  K(-0.9913142038122318887175101420645499079035721368558987677182798986) + K(+0.2003648989407845649614662128142635437820350300906378237809205716) * I,
+  K(+0.4056621228297783510852298470933760655190738059189800128296757785) + K(+0.6930316698342635795819711095739339106466593582867089083438891473) * I,
+  K(+0.4951825335821132444426832318610140688740799897059683569028515011) + K(-0.7803797878244736004239822484473653547847709976862536174611242552) * I,
+  K(+0.7541876323403302890759385032296350660836737967940228768367360635) + K(-0.4230524911386144075947787138970500460560429224208632883635712692) * I,
+  K(+0.1154403845735876226285367678037051760585029706455607102866418308) + K(-0.4879808669019471117005411736030628669983733630465276368170121060) * I,
+  K(-0.6773108910743919148428908835465406631786520563506936147642808556) + K(-0.2392202345573686580205754991380368640085414040740202231782988674) * I,
+  K(-0.3440404316030513250214516061337961316399180197567395917780793606) + K(+0.4680243844056543233797514372563044210968103519317974008967064449) * I,
+  K(-0.4835214079291459680041348477034756503050352875682696402043572250) + K(-0.3058404728669544191347587300829264620447714509872482957018684679) * I,
+  K(+0.4583883887217367654468190824186113249319082216393782829925043607) + K(-0.1187521955303458372856205332315512366755539407892848329308175277) * I,
+  K(+0.5626153000776218531308880362853089025203052816257419215761673255) + K(-0.3450584107813966831892246587606121877095653380895811106045244914) * I,
+  K(-0.1984825026096906517970053518616383611014610057521533551432742001) + K(+0.3539323991083646039967531897317169810149461355207063695724839730) * I,
+  K(+0.2001293712829955496281027176493135655461770764069048742599881716) + K(+0.3796978492521124007236534513230833894844456164259800541788180606) * I,
+  K(-0.7933364966016296657172368430186170066778035863466470560903696300) + K(+0.7372984827894892001804118348103411083030461998335671164183190792) * I,
+  K(+0.7474272552628260193077520196350425390620011373675336238370743960) + K(-0.3259560227622352616979362991553157464259907295880839733239754090) * I,
+  K(+0.9105070415409436183147679714392474097629801242648314889768577416) + K(+0.6479597392421423158273985079728339050768519438135287361867844377) * I,
+  K(-0.4455750654061535325860263327910666214476307756435216946392086129) + K(-0.8801272093921563140409147664131014021154801757042599774070380524) * I,
+  K(-0.7393151719656929790853225464207293118367847750772866271760745836) + K(-0.6037326157807479627322010983103417517257158763200920218003518686) * I,
+  K(-0.8023381170392978845440097238567938656282910285182366907984090584) + K(+0.3591708440228918192330845769552627971321577222600898654140601818) * I,
+  K(-0.3498416194424712871074168055345207178514023575986328403056981536) + K(-0.6367066395016486091193409728466257845612710689444226883067927750) * I,
+  K(+0.7348333999732120078731979425961267271533387596527125693688872047) + K(+0.2691727021113280217394430902657775380814964017899361193705907930) * I,
+  K(-0.5291807182237820810013261247427895101370002221061189194972900456) + K(-0.5275826035040083565176801437000058836299383056186925822417718170) * I,
+  K(+0.7267777914769065605424944956146937645485567314048136071435914573) + K(+0.6442662194838787342531718828591809289868448911186186448296598736) * I,
+  K(+0.3140537704643467198080878308278790728967712941637956155281517007) + K(+0.09871207792452377148515934547171799351531064908968075802017648899) * I,
+  K(+0.9398506125416071924001967503728978741933077768226998998159065363) + K(-0.5851717691694023250195705233074471363853099570708331297134892607) * I,
+  K(+0.6310654306261877659425763417637926218486072576001186748720437079) + K(+0.2612239371958172077114157723531517910643533758318848104024883877) * I,
+  K(+0.8767457066491292262650632249863209751105652304747330153126773346) + K(+0.5914937976659843398364849432034903606083830576979592520055074707) * I,
+  K(-0.2806777633052923898059188891463204118578217014722535105523271493) + K(-0.3734114357045290282377637078065134906837841360920091866568663641) * I,
+  K(-0.4484726215915789629605079818543250591853760812042439687028581504) + K(+0.8475313380862912974970594789883268263152652679751739244678499264) * I,
+  K(-0.5957940449212178612885460078782669113691514470771051031534044261) + K(+0.6941235405550939957366363757459724334212139004996085065695961637) * I,
+  K(-0.1657932712480679324352797531041065159378847115603247290836885338) + K(-0.03034484988590904808707314229739238966269245798571865636543993924) * I,
+  K(+0.09232187768176115743944229184319486641603807890064141630737598904) + K(-0.9480930182023603056173694311234232184737178108893836343790971286) * I,
+  K(+0.1253875232342447383796938611477966089682261736730071956338231397) + K(-0.7425846385245774327179650495207589919400582691924010818959182149) * I,
+  K(-0.4635323255317475603508813562427079787299017046794849942111956036) + K(-0.03537968377738589823688866876629567820973904065244810234835023351) * I,
+  K(-0.7768181024842233833284398099826805433398054952774188494839550183) + K(-0.9016687115546059425318489734628132177826442954169814098208693399) * I,
+  K(-0.3438799569193803222211337395353172862382393282818176175935665882) + K(-0.2977870537957322952128400484933701687468364176141887213817439595) * I,
+  K(+0.4516992926409223877087158531743767221838601004278000612713815507) + K(+0.7179256024826104756809388502414610518803852773697543777370880556) * I,
+  K(+0.06666089616216685017821711060949166309479521338992049320098916741) + K(+0.2578890086557144458209523397057740208025579828901713342865254283) * I,
+  K(-0.1745406578537533130602117469492874239100070406535786469124490986) + K(-0.1538504426879694241293139546303624621549667183032804898176081863) * I,
+  K(+0.8211675763568450531722849319525263346104854682281883633768216488) + K(-0.2307910453579643547976952452546915717916751104424349676420690795) * I,
+  K(+0.4556672055423659308087590752089369004817449581650773270885780705) + K(+0.2546454647595675145082163953022507320748140975955459065537243829) * I,
+  K(-0.4995039033279936431425519391866789251685585749027530932505827939) + K(-0.5627386513209879192276006865283243984959107791591334740655090595) * I,
+  K(+0.8726918846172992953568985227648794462831408981733530385539429495) + K(+0.3172412529050211791125503220835042951184598863173507010397573601) * I,
+  K(-0.2346008186655847883513053142192702270585433371669589991501328480) + K(-0.1586956833080456155387417365683199407274623565735968982753106611) * I,
+  K(-0.6799217978893501325058702819070483551330905935340946485672338179) + K(+0.3006699102360441987388613578200592186540499923773618183941223753) * I,
+  K(-0.1566275246676648172927505477064560456764567953193360696104252779) + K(+0.07709024530773600332437714516318135498482923670266947953153545362) * I,
+  K(+0.2370707305562640599555056826175380046193960207814309203259978418) + K(+0.4134879834212641577317767802950010968383157632812161963613138240) * I,
+  K(+0.4190750763439876403782271893398677759708625309859749605273964293) + K(-0.1071245391943672166932573683035960154682817194098510730306118084) * I,
+  K(+0.8656690846729821844479009939936558250400483585749301520792094913) + K(-0.4370803797545718192074627478647572327001408897946238915127669255) * I,
+};
+static const R theta[] =
+{
+  K(+0.1102202703479323805145168301609305669152039120584516034361295799),
+  K(+0.1271285473847885856069543510575030313578684198153460258608787844),
+  K(+0.4403435134132386719289768135025999653645447451457012165902032453),
+  K(+0.27618565528554023737240665973166308716226576891795955849491721540),
+  K(+0.0855181560519997970863110717072652858765138690709592875104975971),
+  K(+0.3411871717397399216863014521446857987153814959592840937506670411),
+  K(+0.4549256927522331018879408582428408534820816831200589934687863547),
+  K(+0.4255777755350343208718220983105212368823939380616998562232777442),
+  K(+0.251642649449612118417468259885841267648638172288578036365213866125),
+  K(+0.29024084231327859346487450327043407701851850272568254773722799293),
+  K(+0.3802332400978416093507334444258482999269323492295636122655514487),
+  K(+0.258812459415050025130570004511585641466031160182387941642748595947),
+  K(+0.0745481644826720184248005966641893328239195618353379158547687876),
+  K(+0.20876218882248214361991064663458945129231635978905218098932017591),
+  K(+0.26845316865029389547446135886425370038855639885617327387671531487),
+  K(+0.17758380392930182441645863779476196081728620226880896730295616447),
+  K(+0.1537663544225876943458518352973437573074073634725192614558804195),
+  K(+0.1603838764889820806387513166912117314007089948937857189714875816),
+  K(+0.3822894581444735109551965171567823524738656404534712931650942186),
+  K(+0.19312208649287059132567463307343088054447415183928068143583596481),
+  K(+0.1524709043828011755497502457270449191545200736045230854839374469),
+  K(+0.3496343182975638907233474216741049580761422453041716318901223490),
+  K(+0.0614135853182193900541946795230410211772958709179620113064857399),
+  K(+0.1223939919092707397656894029196163706620894905935791478249732374),
+  K(+0.20083420080303917299057851063495000056566495912820755104951176854),
+  K(+0.26046880784174780226916203059104491893324777753166767231116686204),
+  K(+0.1509968475691602094114703579879747258465863334316306040163244453),
+  K(+0.22416712819088110584375417815093983273372492260521971160482754740),
+  K(+0.29475059857583979503438536357673705366397356343684767581742970834),
+  K(+0.1175139467936422265081530379474795940637614987095841856544070072),
+  K(+0.30918395989862257382754626007951974394262510879069816893613588903),
+  K(+0.30436558747157441207870240151244761013057831468440171202612038377),
+  K(+0.16335843920336889952505262837603920988032836783101319358165367068),
+  K(+0.018235306329421037023959187272450466102385081363804643945554125),
+  K(+0.23083293853160920151225462459274982998398636006268470422495277069),
+  K(+0.21308158827696647604310263462557844820251875464487400785684284700),
+  K(+0.19505980041418677053720414073948653815333906153498612030626186261),
+  K(+0.26157730741460507515552996845934769431196097612783677683011090739),
+  K(+0.3826945585825174852086152895026332219671986308483916139769748530),
+  K(+0.26367383273512137932043549841226575304445600231688061725694442569),
+  K(+0.19839166480700702875301598575425929969591618351574145920554514194),
+  K(+0.3678599469292105099613940315230452001254705096960309390392177420),
+  K(+0.26190800589569515323039968370662983170143246426423413026757539360),
+  K(+0.27340190820682386002804279256672240122431539662760022276608442077),
+  K(+0.3641362601824372048494078768267815443245556452051234127596001840),
+  K(+0.1455152251189896751618164671857073098309709180353786798801263620),
+  K(+0.20710876549999682702509976374096470257868552460571432735829327407),
+  K(+0.21994813681674842651147618282596827750443647883413351868116168083),
+  K(+0.0478342886245372635928816837940767619042997252592497132917364056),
+  K(+0.1341530848974077477036837339541019269295819831305522515449662494),
+  K(+0.1578637510402700100457612624904403505394313754690279612275098031),
+  K(+0.0630140106802822307115814597599578443574071722016592690358697735),
+  K(+0.28392967767893647074113056487137708331124936879080758947090095439),
+  K(+0.3670391539334339898368183945910795466718684106078089452416607083),
+  K(+0.29533285432866338925582688613887507558308481349244833981545359940),
+  K(+0.32129308503653073467602002849533397427646410421974554600197062065),
+  K(+0.21470712014421357101850001558833653112269735648100146236137352209),
+  K(+0.22889950797543803464572822729384509114472742079361142543262777573),
+  K(+0.21171323234124120919904301862958245012356490227391138010981126139),
+  K(+0.23117488282350765024619500323057739270919718180397211064733403783),
+  K(+0.23100602193970910154278273307572415128234584383319728770848457946),
+  K(+0.30197956768174386323729913916501698963957894813245985316149516592),
+  K(+0.1303803264358597823325134730650867537198356481166323657069063299),
+  K(+0.1293822186416369290514681824162118209703876019626047590860313980),
+  K(+0.0286827917148287898798337172416768171901820277851493989656956277),
+  K(+0.22287992955751474029253151589995817221197408588066223661744708057),
+  K(+0.0602440191588066196501795457328085974710657622113932015437046735),
+  K(+0.31545728014960312140479124662310769286042442256973379724645192843),
+  K(+0.3708603959310984245118708976994523252054054739811262912338430496),
+  K(+0.3939312316093710916392903069432718118849544195496914924034486946),
+  K(+0.0699307270264075567993461920604964759951912891285123657853916869),
+  K(+0.0622167200976900258471140551257675614441108555977612491912421638),
+  K(+0.242755362004092169155417947391628270700202691736664411939727974169),
+  K(+0.33809771519487760598709528249300898770214680055537340364961090949),
+  K(+0.0313770756515132689613502862831478434985705953458100110564624908),
+  K(+0.1065294438963848384173483883995637805593894805611513933925232023),
+  K(+0.1152105866324449071325867820893737261017327942919143044634826962),
+  K(+0.3657938150157387372698355168656284452921401223088906151449636847),
+  K(+0.19513128668985705996431008372949537340531589864910914597595250814),
+  K(+0.2498355970817017394222205688067152857948066730937989462845341558229),
+  K(+0.4371751299267552086487121714984244352325215652408675432649111110),
+  K(+0.257444434872726390857458014458364466051435417175373789485530692399),
+  K(+0.4092659322251565191856624522942797705906746659448781215726695188),
+  K(+0.28148232792991756824002318458067853730513454284520388601012638093),
+  K(+0.31843611645816966517166724913249854518201853599393691741104084563),
+  K(+0.1068474577793121512645421264269512374496022876410495187335924728),
+  K(+0.1225736039133152222710302527336614773241930028791542891528833150),
+  K(+0.19310328098249940976444930251490101294975454312024178818035810295),
+  K(+0.1531498011398567108792849017344060034980572421636914519289367222),
+  K(+0.4094231538849099511411437134273112041633672968226017195222238488),
+  K(+0.3966504493936002871139242577930524928620955495379064422093742284),
+  K(+0.21499249650873475139548253880080912031332486050429282251654854538),
+  K(+0.1291699082896100617321522957196403990445404538449021663142093393),
+  K(+0.29310619865969786363345229084996972349221590244000667381663888787),
+  K(+0.247379900032726370799138874511536868417015668918002893584286344072),
+  K(+0.21377646986438311660143320535004996666594582089373709163374420388),
+  K(+0.3707623727830831989450017918689311531904613111505713157958312934),
+  K(+0.4141026896113956651600914591832946110402660214169274712939113885),
+  K(+0.245690836286469708462123338288941219232575068082250233631647161504),
+  K(+0.255190522964832333712728706137671731381076771124906296681897119710),
+};
+static const R phi[] =
+{
+  K(-0.03092200440349678758089876113625405284234241102790752240170995867),
+  K(+0.3361169344205493933115607004985232698349397958212933677318884514),
+  K(-0.4203252596509423618663736198756620115799400359436276143569671743),
+  K(+0.03309313121039681014022293940848452005886337420844264240563947853),
+  K(+0.2008204635158070744539613201560587696308414375731567394324831547),
+  K(-0.4567185271123117297142967071238859542007983840325890028299668627),
+  K(-0.3359948017047255077758702593707913776715233262244309860565322317),
+  K(-0.06712070214833023229904372705484889754342521622669259471237141435),
+  K(+0.1067629440561841080056500621607769177947295587053597725572538283),
+  K(-0.09634227888600589661866277235867018999986634301535763323341162400),
+  K(-0.06090234980126294406090037604894808378422877470857494368997911408),
+  K(+0.04278682199879546391487551674957176511976368684449756669014707988),
+  K(-0.3843149551344242910106365819762762431995794507363771930199655127),
+  K(-0.3887385513878564682038394294849540115576976745598898924425459123),
+  K(-0.3312566477453613845845129421168601959212506456522974062399977625),
+  K(+0.2792498736810452234285554969491296238964185619217025516095756467),
+  K(-0.06996448155652493381885462447994985200392370758219401333690839407),
+  K(-0.1159858503851951629087221470680375504985606415056059244151756362),
+  K(-0.2924672299677401344450061872306006857968999939797358676956291436),
+  K(-0.03863142444450581466792115691769308282556785956344564264577341096),
+  K(+0.09092607301094126943579906992394685775098501553150940211338571267),
+  K(-0.08025051953402872605976506829713242667652019092254588349366142426),
+  K(-0.1441018421227669985074693165610147975288571258351910370413772842),
+  K(-0.03974745719356598761347999596226737452065820292505978127333341063),
+  K(+0.2992121844391718160955070141161786419228048027990712490449093596),
+  K(-0.2289007896256224701173276208276697627166525417269514540440552373),
+  K(+0.2623897238058930188004602502635484277359346377336119031710682230),
+  K(+0.4257484510398507555869275673586692706643529819039508217093162055),
+  K(+0.05005586004107106216150040201796842748022674118149945500996916562),
+  K(-0.1432575282014992401304328745816304824490268322888120265221733871),
+  K(+0.1028585594535703767497608485541703554884107304298063836375051336),
+  K(+0.2287804590257474159975386781883272496658577322676320673619575465),
+  K(-0.02617284683054200304171852899803055581679869986919501170908694192),
+  K(+0.2862226359352744312826334459917105038605915651235635157547413810),
+  K(+0.1371176472908139059439764423839564622648659783551733942372986428),
+  K(+0.06324773467803718368079574758381721026538020597803175343988943740),
+  K(+0.2740787428977923652494822812159717959255398461027228675450686341),
+  K(-0.4152543135059829198442518462096450234268373858227844620510646789),
+  K(-0.1996427182413306207439282141857147323881224786718767095017943232),
+  K(-0.2805322229932953544322331043487516545898901743479106737341692064),
+  K(+0.1942837376851896675215719784865509165748199425906736432804532437),
+  K(+0.1200514940710144070759515858486651429687638659353145623487119440),
+  K(+0.3582757725636044602247720804730017698945021759898143880332586441),
+  K(+0.4329374674596440322426659610408741870088634781767694816457168426),
+  K(+0.3775295618884241308975944628403518347328286682128834346472248391),
+  K(+0.08937167218766910498075460183128652893989283356980758869046867857),
+  K(+0.04724054365419404049543531578099956089625754697334441285476866921),
+  K(+0.1870024343380386850240167257227580141434364941218169689524668426),
+  K(+0.1865261306409289865609294140305715586230646553956657430113897909),
+  K(-0.08549843284688762899703035729776347265090849356466344447029243560),
+  K(+0.3488410479548235802567412332341857234042533539318246464509712988),
+  K(-0.2039068915423461829867194194736849030704470903802979709700282199),
+  K(+0.2947524429808661088875341239089729562628397578402702065708704245),
+  K(+0.3656233563145571194524297808970227017419714963208946288457884984),
+  K(-0.4295489400707232251438876516915128595053940400834460555331670508),
+  K(+0.03918316143534728034903300484209298808472324033585670520075696303),
+  K(+0.3354826394578492357295464213001389042103197200995900232310050194),
+  K(+0.4213560485094652367076294235243690909701513654139858337653863919),
+  K(-0.1881889356051118682790024945828209824088081402745986247305977383),
+  K(+0.1027459187170693262912753694079583161713226629780739931114746058),
+  K(+0.2809670835927340956971119165775638010150222053093250265251914446),
+  K(-0.4984160466474178528765504817820208570029585139494347929209439550),
+  K(+0.2523447125078985048361286910307850929959512734561601504209280199),
+  K(+0.1260765519639791987192669910383550061162770057133442085522223848),
+  K(+0.3431794087533919358203692071100763301850439937769526058576286505),
+  K(-0.09181961204807972880470581814566836406980941445595189408428564575),
+  K(-0.1924682171705802686152451166519551494771110624704539466204189152),
+  K(+0.1873817536717609977969820792046229494148034457901654992224361193),
+  K(+0.3031483755546383000646401101138754387124369722308800167823571557),
+  K(-0.1455638701407401813702071939995795029035378905060822938578819297),
+  K(+0.4803088838546701567561330219185480951462039882765790314841469770),
+  K(+0.3231116632874269911631088619199380077304389243203505327033234588),
+  K(-0.04024710269150724608972537801281734810485968737734618953890966120),
+  K(-0.1729618342802585050044242170510327559965406976464761213677187941),
+  K(+0.02784368053039960686921096849299934667930841498894184572297136979),
+  K(-0.3436566291204077352703754855743266130301644295031024962682572260),
+  K(-0.1876245081685698104204507006039062093241745149889023010330307321),
+  K(+0.1692368107702939339168536549955626038730244486513254883662336913),
+  K(-0.4684231791591372854999214424960986748590679746064362697981772796),
+  K(-0.4248267074359445814441394509403662565032639928964951472345269249),
+  K(-0.4113222374831253359536821117088764452615372265792487603121550550),
+  K(+0.06870964745056010524662262765808722733712594370131534091838153316),
+  K(+0.4478656769674399132178971453861077109479264117996318805804441006),
+  K(-0.4052987879647885069330200645899099280223608155981433216786033678),
+  K(-0.2809858060284832915975329324292633074809826863215260490104787159),
+  K(-0.1101486456067479870309722474665914891407321720948068241624086836),
+  K(+0.4732378396087974353937505734697108971310311804100573160962216871),
+  K(+0.06175037728592614457558880248098035044722515979284601825712760237),
+  K(+0.4924538372736380598379506831793054606469060630055502563048476786),
+  K(-0.4161652408524438943874803871506529384954729754984279344948786517),
+  K(+0.1977486207488651191220442180320561530318913863193357059077059736),
+  K(-0.4519326616839637188373904115343849763674785179702738568551014002),
+  K(-0.02548314058080589036975340705963794169671389762993080504722779661),
+  K(+0.1872597313300373761104312724512164817684752957138886513543626399),
+  K(-0.3982492158593685262061315520060468648440036597420602742672328154),
+  K(+0.4588750348319494406292365452843751435847481552147902278501774172),
+  K(+0.2282759387099164553919139978076351042420281113500330476062705263),
+  K(+0.2754921479859968259231930168750633592435183805820074654572925997),
+  K(+0.1734470466913161561184632422712661148498013155967556233221066797),
+  K(+0.1577914575818329786445162599616450111854240803307200045611338947),
+};
+static const C f[] =
+{
+  K(+0.895796673833059606352522239055186067363332818049971054436794) + K(-6.150198126229928049237797566819916871092090167724864924439612) * I,
+  K(-5.360868087863520590190910868826293610983704893202404695098367) + K(+0.970693778234946727078665613907827085731386457167491052601533) * I,
+  K(-0.185099720855509428000257327484765057726071927976856655061427) + K(+2.633132905006778032711579155462980150093549525157393848012059) * I,
+  K(+7.902794116791786375444116687667746730171533583827426309625171) + K(+3.757136195947480765981777519994999483739100060872600927883312) * I,
+  K(+2.60363261244987982490060942830441018715811710634975877730586) + K(+0.83923453987068340483540110347019879189647299748081182574080) * I,
+  K(-4.233087887371145427900824155614848337610439645193972108926477) + K(+1.080603870643411538154713460342912919075909548582510526662128) * I,
+  K(-0.538558203655836116565814299745649124723147566696096546982334) + K(-4.377043463804750800824873804294968666996811048663082777811401) * I,
+  K(-1.141401109916516274373168199175290203598902954287613383596174) + K(+3.014530096812745838467855202602099243409122867356130038672668) * I,
+  K(+0.179113868553772291560630148558531003431244022945409390015663) + K(+6.757308392966856302968980112424996680622628984099386528850400) * I,
+  K(-2.523370432670892198421173903841892084087667648866089685548835) + K(+4.598670640545996241569392135438458318136348688005716322094472) * I,
+  K(+2.279236484730495623819151292562831801646158196156953440129355) + K(+1.411874776444752447931275199400865673543499594412306416737131) * I,
+  K(+5.813416239615594162724594979670950492552122006927071054932802) + K(+0.496972490102587504751353430314593382131901171107389502180694) * I,
+  K(+0.14759570205619379778745465148026419038469341464411120061859) + K(-6.28528629176607143555294502635625404618955827561604230217091) * I,
+  K(+1.387368125508155211257054163441296219693360299253452897986431) + K(-1.574502267541238417222310197335570629095282019171448412005422) * I,
+  K(+3.004474895997496633739154107679728969959319659139796030787733) + K(+1.151715161454107724592543483058864427953346322957234113446614) * I,
+  K(+0.879418184609775121455800045159022073222374620064964670857455) + K(-3.298222444380474090295904886267633103125916423256191430955937) * I,
+  K(-1.808230824210460105231205757292469938036414006696498762719485) + K(-0.180683411756329330254046449179575264975506935942583450206471) * I,
+  K(+5.030709779233991109065082087705844891192203038448359865903025) + K(+5.483150957710974375554790803287646553072914444699988983996181) * I,
+  K(+2.157886928657449487704378023876457972228052608357652297494298) + K(+5.075952761844698483027647072641076844397150360047645143476782) * I,
+  K(+10.340422880851742531646962551631216976028914786124304304668100) + K(-1.894149572010005638626719337497686462515191657241162578806314) * I,
+  K(+5.174624136093711145991471791642494525358248957750342282894162) + K(+2.339514163777538022176948421793761139445289165107526867307689) * I,
+  K(-3.306637345037728609530784776361314516755462129048419236598644) + K(+3.729538553624396427715565804007097835949855557780760648089802) * I,
+  K(+5.29612593998497566123094715309836235410373734323113142523289) + K(+1.49374203905707193322012760392202168841762787878978526247440) * I,
+  K(+3.245721646279999270983633580289935314136233547217177839628631) + K(+0.307986133946363610130907872204683593885683094133486253114727) * I,
+  K(+2.039127760895505950655722147125894900486963576482770748603556) + K(-2.555382661279289348069258913559768103442719487148412482611856) * I,
+  K(-2.789532279857509260778505831789666751480988964433685805872141) + K(+0.784752435620605655919461253479524409823248992696580433804531) * I,
+  K(-0.152730888548702068648401872713584784722900862531387693605436) + K(-0.585522002955035312012629898012439881691619344320006800703271) * I,
+  K(-4.253299960174820247096357931045330893499224092498373274998721) + K(-3.409203011310227349155459796502387778728772111312808452707873) * I,
+  K(+0.295917684711162736266470513282327224757715380096694032885797) + K(+4.720659278108400410238100059565888076726200002640880461819993) * I,
+  K(+5.145347575947538139082611958818022207832228255415520293285049) + K(+0.704959110141710421214074224524609600957137183968141445850278) * I,
+  K(-2.431709033445799036041889618442176482629142036416506636393704) + K(-1.025977583724905754333934640063845074431920567349459695895109) * I,
+  K(+4.622623843541740858214514211756613553932426840290577889796867) + K(-2.461384370755209889439039554987200793473498840603642954833588) * I,
+  K(-4.750331227006692254253674693320714941323854196193639099749711) + K(-2.387784328228534640122954719437015239823483399132644231938030) * I,
+  K(-4.80494647248855283279348090896027144270012311365000995840030) + K(+8.38243280311861909034873134995386658956299968717485553377152) * I,
+  K(-1.840825214697975674815119445133485205411922338974379991028431) + K(+3.252888811443108189834798614538535959313340131831809392073804) * I,
+  K(+2.988018201282431451133483090082481982985139855544263782867480) + K(+0.597951394758384897117880152981938122384526096519992283272661) * I,
+  K(+0.303430079088880102493025488743916105957081301185777958723715) + K(-1.005521833803776535691552376914154965136637790654154493329741) * I,
+  K(-5.842899892374166281340307333149374378909577261191728520341785) + K(-1.769618803121240715620756315177927123386817789094968871600999) * I,
+  K(+0.255421596057248933508248656971383030376795517800234119180724) + K(-0.206085773295622353662596902556398796459330238737135295680573) * I,
+  K(+2.052769181961227137046975585267678743004892903114044056693979) + K(-7.195718903083524831053353695042941862268518307969715100893388) * I,
+  K(-0.651991337047973114942798220278580398455469268208515062100063) + K(+2.758053597917697510875533376673255403419338023756306024161849) * I,
+  K(+7.415919553341494711972101638293390253530031891429695077770572) + K(-1.304091926484196632304882686240210956248295952445642313279141) * I,
+  K(-0.724401090586730289977210951189009399620851996685969864962924) + K(+0.980606004714394389461679057346616796934707668886736076913852) * I,
+  K(+0.395952511404590092563081323832881891645822348451732778727260) + K(+1.819081058897862986354248449556939281184611494568153915251727) * I,
+  K(-0.144018923958415140090326073120647538442098199603944258893871) + K(+2.818135438253310801047866325843016982167614750304582458107140) * I,
+  K(+5.911773854496117263309452858801057972781170511575578872584015) + K(+3.422181778331020395482080992654345759666708429281308797473030) * I,
+  K(+2.414200670331900051171121186869002726642234603751280170927579) + K(+5.634315087093719116583942505542009793832586143216760047801103) * I,
+  K(+0.286404004070681115089526353314944256070842696939143906590958) + K(+4.036177995717441186666194878372708974052846520982325941618673) * I,
+  K(-3.11821457829697477858457483778514577973731036020485813309602) + K(+5.16030967279629822025408429873754219560427442734298885302455) * I,
+  K(-3.879645899160400866308859382556020706257173610046715100762711) + K(-0.830473682421343023953338757079678159321402406951934160003644) * I,
+  K(+2.679827065861696127240952894667477942763513903255307232976219) + K(+6.470098459222250454231509663027767559842827706296526979304915) * I,
+  K(+3.26633182018955609158618076466827494665617427055197124655422) + K(-4.09020631325346930402015092255626665630169830612147565105116) * I,
+  K(+4.383532238701832720344007342352191740448913300368247712984026) + K(-0.232480158795766936248174213675023364046457009139062508741023) * I,
+  K(+4.905119442134952287239586692161434455421780490126200895030394) + K(+0.679186710682476949866137385107344501836961308188901242607613) * I,
+  K(-3.619133940686218188620604586964949907594366518988435911014369) + K(+5.176781247238190833608986606092008128899631205624527000767056) * I,
+  K(+4.362067827760617914024650351428307710206397942762935183606124) + K(-2.094153325242015476763512754232171575112597538962258229126644) * I,
+  K(+1.422025469751911035068943662055714283619068167639688494787016) + K(-0.524756791460485184991964069916925098238620258381093280982475) * I,
+  K(-2.990724007790257097104722445793757184987710447048937311717160) + K(-3.242613467000074873143560682649417284813097278501295913095246) * I,
+  K(+4.356397747667862148512349272653984690437619421093291524749026) + K(-0.331319706397479709673413487757727502734665013584398121745233) * I,
+  K(-1.390279124904033180553119958501051577666722468359940282027944) + K(+1.248733110942313421472406923146719046651028992384695616375846) * I,
+  K(-2.445394224645236283201398296176224459361226611181316284615751) + K(+2.933952768386040280815303379876007371971383077163136428704343) * I,
+  K(+0.840020031132704443479406877805040644457221146395236333561227) + K(+1.814420026815609185594355789306082197913719925142661522442604) * I,
+  K(+4.923088308089578563037325953063094654389622448711844776552669) + K(+4.189929625121217570365967263608519326016214380822945398717342) * I,
+  K(-4.913097697957250929147205115373299546643073152232832006368944) + K(-0.684416075977564339262423142946212625716279622710808245469095) * I,
+  K(+0.41059204398071901745990987073111648411567738374784967405189) + K(+7.56492152758522914445959288610738932030398467390464820785882) * I,
+  K(+3.768224907507265469210586239922048789198648482577017052016181) + K(+2.397754212417839531622318511292028865308005162868996136566654) * I,
+  K(+3.65863296815232128449723220440640424806770745182780949792397) + K(-3.55562246714430747224617714235283774846635888205155492500723) * I,
+  K(+3.028878782150243492181511600859068658552200673742300635525511) + K(-1.282874077113681904739487202179917356822676831501437994873519) * I,
+  K(+1.296521826369051598278958528072694013008824079179748849281043) + K(-2.845079867177437514497834098859436537583629319217970973839571) * I,
+  K(-4.169190734605879776899200250345808738257689413487844599903648) + K(-2.233659853143078095745396306559841604196907307757792108245761) * I,
+  K(+0.17177789248991635657240046515375389089716722963413837743523) + K(+0.48068691952585901828028946857838725086922201251645082129971) * I,
+  K(+2.11669747989752203863397434956496136860594248296495691448281) + K(+3.73941967949906484504632786603116651851591938620225521967173) * I,
+  K(+3.633212040740266500400203711058288835667680868047134109248566) + K(-3.354743650987717038994995132968396397503486932090922491417229) * I,
+  K(+6.832413795377518814724382510613285368749238118701743439697761) + K(+5.871296229199738208963204941072699575375910751184508171774932) * I,
+  K(+1.44685490525051620782568107690837231912151242985865907274607) + K(-5.54347043979730633209375084182752605977744125410181447113852) * I,
+  K(+4.92654455706193836144399756456228244150822807311010315984994) + K(-2.56097626360979877349385266239578300324616582154721417161304) * I,
+  K(-0.606718582208307283174485750862217595053132202181095142693251) + K(-4.376272892129323838711197254526031660940650030637323325756523) * I,
+  K(+0.605086414836688611252207524353783570910017982141753614501017) + K(-3.221315184211993143796146798417121347476318044579427381874789) * I,
+  K(+0.373916251922220300716651866612337867765542418318913539851465) + K(+3.477271935867257372497132499284260089077226656607646759093096) * I,
+  K(-11.442537352758960159062465966002438986916237823644947411426843) + K(+9.924737481047026427709986693399680071512403038338007088464504) * I,
+  K(-2.162874829719805443128844986414897643134862232743350778201105) + K(+1.639220527907457638491870817035756173219831793869398160172236) * I,
+  K(+2.497612777958562990405394745059776596251792569871509780630738) + K(+3.747788743706163618218828280375948984109602934314047695535119) * I,
+  K(-1.065772146286093542112846135379225402506066573919648901417775) + K(-2.511458986264725849408094582409864350009184643190415819896610) * I,
+  K(+1.076984075853794637625081162474060623120087083692848658358487) + K(+4.553433055431738604908201351580028610849256181836705673272437) * I,
+  K(+0.503634366873601745531615939811520364987562548430662790011236) + K(-3.635863712542620490212173552569777384519528175719236276630315) * I,
+  K(-1.263822179135966153665641644999173275123419304172901978681626) + K(-5.35152117924617624516114280607065644897218084252721937730359) * I,
+  K(-2.251089669957254620044950812921230876908329658054107453731659) + K(+0.691329618222431971705968218601800952296038060886716648523623) * I,
+  K(+2.130243892816613972688526801509006888273926730085446156170745) + K(+2.244737441453728539673751173798017318744626765487809510169417) * I,
+  K(-0.354548240994191782895405237765120976537882633312588020108021) + K(+6.016430082759202307423839954544251178281501463015224880945950) * I,
+  K(-1.498302680583787275372576168199958372434996639398258037899997) + K(-2.409843316822186260696459153806003325022103678812502450796660) * I,
+  K(+3.878114959506747881835234792067228240712176138414774815225164) + K(-1.087656678001344542636562384322827462944505573227953575504754) * I,
+  K(+2.699054776753535622879316657503203022443398877516586244140186) + K(+8.493940063592534195835869912388438570387801930941859556007664) * I,
+  K(+4.323133805820220479395871268964984824659036180497796471390437) + K(-1.205253316587947112920921643270839259282583841684370067964027) * I,
+  K(-5.811136869514813895667820604908180671389054873748571802643494) + K(-0.101525627366856872978691406448632845422942989093443681292129) * I,
+  K(-1.557559264767896720013980749670744248462227217736009489427921) + K(+2.525797951625748474089699249665990235866163277290499693865536) * I,
+  K(+5.666308520835333729010965549240879739793682859009153748530017) + K(-3.260724139467643974399016852293584010110007359456370132344451) * I,
+  K(+2.765973358720142725219252186698626643866599949500807234141686) + K(+2.092495183498174150664106034347059201141446681797307031979263) * I,
+  K(+1.037133423211566704340076943094071507052199468416134635543217) + K(+1.379125823939207549374400750158211948917368668149626902988422) * I,
+  K(+0.696786772619035086791290100235767216939833011840739546114882) + K(-1.002617447507837363213787469627027133942287259764359265188183) * I,
+  K(-0.926123530865365101827346058585436562806460484870225278929546) + K(-0.316197385522818359866658207760541646253073654263053049007864) * I,
+};
+
+static void check_nfsft(void)
+{
+  const int M = sizeof(theta)/sizeof(theta[0]);
+  const int N = sqrt((R)(sizeof(f_hat)/sizeof(f_hat[0]))) - 1 ;
+  NFSFT(plan) p;
+  int j, k, n;
+  
+  NFSFT(precompute)(N, 1000.0, 0U, 0U);
+
+  NFSFT(init)(&p, N, M);
+
+  /* Nodes. */
+  for (j = 0; j < M; j++)
+  {
+    p.x[2*j] = phi[j];
+    p.x[2*j+1] = theta[j];
+  }
+
+  NFSFT(precompute_x)(&p);
+
+  /* Fourier coefficients. */
+  for (k = 0, j = 0; k <= p.N; k++)
+    for (n = -k; n <= k; n++, j++)
+      p.f_hat[NFSFT_INDEX(k,n,&p)] = f_hat[j];
+
+  NFSFT(trafo)(&p);
+
+  /* debug */
+  for (j = 0; j < M; j++)
+    fprintf(stderr, "f[%2d] = " __FE__ " f[%2d] = " __FE__ " err = " __FE__ "\n", j,
+      CREAL(f[j]), j, CREAL(p.f[j]), CABS(f[j] - p.f[j]) / CABS(f[j]));
+
+  /* Standard NFFT error measure. */
+  {
+    R numerator = K(0.0);
+    R denominator = K(0.0);
+    for (j = 0; j < M; j++)
+      numerator = MAX(numerator, CABS(f[j] - p.f[j]));
+    for (k = 0, j = 0; k <= p.N; k++)
+      for (n = -k; n <= k; n++, j++)
+        denominator += (K4PI/(SQRT((R)(2*k + 1)))) * CABS(f_hat[j]);
+    printf(__FE__ "\n", numerator/denominator);
+  }
+}
+
+int main(void)
+{
+  check_nfsft();
+  return EXIT_SUCCESS;
+}
diff --git a/tests/check_nfsft.m b/tests/check_nfsft.m
new file mode 100644
index 0000000..563bfeb
--- /dev/null
+++ b/tests/check_nfsft.m
@@ -0,0 +1,84 @@
+(* ::Package:: *)
+
+(************************************************************************)
+(* This file was generated automatically by the Mathematica front end.  *)
+(* It contains Initialization cells from a Notebook file, which         *)
+(* typically will have the same name as this file except ending in      *)
+(* ".nb" instead of ".m".                                               *)
+(*                                                                      *)
+(* This file is intended to be loaded into the Mathematica kernel using *)
+(* the package loading commands Get or Needs.  Doing so is equivalent   *)
+(* to using the Evaluate Initialization Cells menu command in the front *)
+(* end.                                                                 *)
+(*                                                                      *)
+(* DO NOT EDIT THIS FILE.  This entire file is regenerated              *)
+(* automatically each time the parent Notebook file is saved in the     *)
+(* Mathematica front end.  Any changes you make to this file will be    *)
+(* overwritten.                                                         *)
+(************************************************************************)
+
+
+
+AppendTo[$Path, NotebookDirectory[]];
+<<PrintVector`
+
+
+P=64;(* Working precision. *)
+
+
+GenerateFilename[prefix_][NN_,M_]:=Module[{d=Length[NN] (* Dimension. *)},Return[FileNameJoin[{prefix,"nfst_"<>ToString[d]<>"d_"<>StringJoin[Map[Function[x,ToString[x]<>"_"],NN]<>ToString[M]<>".txt"]}]]]
+GenerateFilenameAdjoint[prefix_][NN_,M_]:=Module[{d=Length[NN] (* Dimension. *)},Return[FileNameJoin[{prefix,"nfst_adjoint_"<>ToString[d]<>"d_"<>StringJoin[Map[Function[x,ToString[x]<>"_"],NN]<>ToString[M]<>".txt"]}]]]
+Generate[NN_,M_,FilenameGenerator_]:=Module[
+{
+d=Length[NN], (* Dimension. *)
+file
+},
+SeedRandom[1];
+II=Table[Table[k,{k,1,NN[[i]]-1}],{i,1,d}];
+II[[0]]=Sequence;
+II=Flatten[Outer[List,II],d-1];(* Index set. *)
+x =Transpose[ Table[RandomReal[{0,1/2},M,WorkingPrecision->P],{i,1,d}]] ;(* Random nodes. *)
+fhat = (*Table[If[i==1,1,0],{i,1,Length[II]}]*) RandomReal[{-1,1},Length[II],WorkingPrecision->P]; (* Random Fourier coefficients. *)
+f=Table[Sum[fhat[[k]]*Product[Sin[2*\[Pi]*II[[k]][[i]]*x[[j]][[i]]],{i,1,d}],{k,1,Length[II]}],{j,1,M}];(* Function values. *)
+filename=FilenameGenerator[NN,M];
+file = OpenWrite[filename];
+WriteString[file, FormatIntegerRaw[d] <>"\n"];
+WriteString[file, FormatIntegerVectorRaw[NN]<>"\n"];
+WriteString[file, FormatIntegerRaw[M]<>"\n"];
+WriteString[file, FormatVectorRaw[Flatten[x]]<>"\n"];
+WriteString[file, FormatVectorRaw[fhat]<>"\n"];
+WriteString[file, FormatVectorRaw[f]<>"\n"];
+Close[file];
+(*Print[filename];*)
+Return[{FileBaseName[FileNameTake[filename,-1]], FileNameTake[filename,-2]}]
+]
+GenerateAdjoint[NN_,M_,FilenameGenerator_]:=Module[
+{
+d=Length[NN], (* Dimension. *)
+file
+},
+SeedRandom[1];
+II=Table[Table[k,{k,1,NN[[i]]-1}],{i,1,d}];
+II[[0]]=Sequence;
+II=Flatten[Outer[List,II],d-1];(* Index set. *)
+x=Transpose[ Table[RandomReal[{0,1/2},M,WorkingPrecision->P],{i,1,d}]];(* Random nodes. *)
+f=RandomReal[{-1,1},M,WorkingPrecision->P];(* Random function values. *)
+fhat=Table[Sum[f[[j]]*Product[Sin[2*\[Pi]*II[[k]][[i]]*x[[j]][[i]]],{i,1,d}],{j,1,M}],{k,1,Length[II]}];(* Pseudo Fourier coefficients. *)
+filename=FilenameGenerator[NN,M];
+file = OpenWrite[filename];
+WriteString[file, FormatIntegerRaw[d] <>"\n"];
+WriteString[file, FormatIntegerVectorRaw[NN]<>"\n"];
+WriteString[file, FormatIntegerRaw[M]<>"\n"];
+WriteString[file, FormatVectorRaw[Flatten[x]]<>"\n"];
+WriteString[file, FormatVectorRaw[fhat]<>"\n"];
+WriteString[file, FormatVectorRaw[f]<>"\n"];
+Close[file];
+(*Print[filename];*)
+Return[{FileBaseName[FileNameTake[filename,-1]], FileNameTake[filename,-2]}]
+]
+MakeTestcase[NN_,M_]:=Generate[NN,M,GenerateFilename[FileNameJoin[{NotebookDirectory[],"data"}]]]
+MakeTestcaseAdjoint[NN_,M_]:=GenerateAdjoint[NN,M,GenerateFilenameAdjoint[FileNameJoin[{NotebookDirectory[],"data"}]]]
+Formatter[x_]:="&"<>x;
+
+
+
diff --git a/tests/check_nfsft.nb b/tests/check_nfsft.nb
new file mode 100644
index 0000000..93fa0dc
--- /dev/null
+++ b/tests/check_nfsft.nb
@@ -0,0 +1,1159 @@
+(* Content-type: application/mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 7.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       145,          7]
+NotebookDataLength[     46073,       1150]
+NotebookOptionsPosition[     45233,       1120]
+NotebookOutlinePosition[     45622,       1137]
+CellTagsIndexPosition[     45579,       1134]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{"AppendTo", "[", 
+   RowBox[{"$Path", ",", " ", 
+    RowBox[{"NotebookDirectory", "[", "]"}]}], "]"}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{"<<", "PrintVector`"}]}], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.4975401175502357`*^9, 3.497540122081654*^9}, {
+   3.4975401577475357`*^9, 3.4975404433537083`*^9}, {3.497540482896634*^9, 
+   3.4975405759100437`*^9}, {3.497541105993033*^9, 3.497541123798511*^9}, {
+   3.497542050468046*^9, 3.497542062974934*^9}, {3.497542456642642*^9, 
+   3.497542474403122*^9}, {3.497542524646307*^9, 3.497542533911161*^9}, {
+   3.4975426113736467`*^9, 3.497542615636695*^9}, 3.49754300944394*^9, 
+   3.497543161820746*^9, {3.4975433080968943`*^9, 3.497543333089579*^9}, {
+   3.497634816866467*^9, 3.497634822396894*^9}, 3.497634889182472*^9, {
+   3.4976349550362673`*^9, 3.497635002695628*^9}, {3.497635080038419*^9, 
+   3.4976350905563173`*^9}, {3.497720303149754*^9, 3.497720340683272*^9}, 
+   3.497720446950582*^9, {3.497720543770192*^9, 3.497720554263856*^9}, {
+   3.497720624718094*^9, 3.4977206409163923`*^9}, {3.497720745653871*^9, 
+   3.497720821394751*^9}, {3.497720852170191*^9, 3.497720892717999*^9}, {
+   3.497720926142789*^9, 3.497720963010685*^9}, {3.49772100166604*^9, 
+   3.4977210066482897`*^9}, {3.497721154131791*^9, 3.4977211732733927`*^9}, {
+   3.497721253141778*^9, 3.497721260212431*^9}, {3.4977213873833313`*^9, 
+   3.497721394326082*^9}, {3.4977214268766117`*^9, 3.497721450684969*^9}, 
+   3.517368305980814*^9, 3.517368338946211*^9, {3.548337349389185*^9, 
+   3.54833735124184*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{
+   RowBox[{"P", "=", "64"}], ";"}], 
+  RowBox[{"(*", " ", 
+   RowBox[{"Working", " ", 
+    RowBox[{"precision", "."}]}], " ", "*)"}]}]], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.5173364544175253`*^9, 3.517336455143111*^9}, {
+  3.548337583667452*^9, 3.548337584482711*^9}}],
+
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{
+   RowBox[{"GenerateFilename", "[", "prefix_", "]"}], "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{"d", "=", 
+      RowBox[{"Length", "[", "NN", "]"}]}], " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Dimension", "."}], " ", "*)"}], "}"}], ",", 
+    RowBox[{"Return", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{"prefix", ",", 
+        RowBox[{"\"\<nfst_\>\"", "<>", 
+         RowBox[{"ToString", "[", "d", "]"}], "<>", "\"\<d_\>\"", "<>", 
+         RowBox[{"StringJoin", "[", 
+          RowBox[{
+           RowBox[{"Map", "[", 
+            RowBox[{
+             RowBox[{"Function", "[", 
+              RowBox[{"x", ",", 
+               RowBox[{
+                RowBox[{"ToString", "[", "x", "]"}], "<>", "\"\<_\>\""}]}], 
+              "]"}], ",", "NN"}], "]"}], "<>", 
+           RowBox[{"ToString", "[", "M", "]"}], "<>", "\"\<.txt\>\""}], 
+          "]"}]}]}], "}"}], "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"GenerateFilenameAdjoint", "[", "prefix_", "]"}], "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{"d", "=", 
+      RowBox[{"Length", "[", "NN", "]"}]}], " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Dimension", "."}], " ", "*)"}], "}"}], ",", 
+    RowBox[{"Return", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{"prefix", ",", 
+        RowBox[{"\"\<nfst_adjoint_\>\"", "<>", 
+         RowBox[{"ToString", "[", "d", "]"}], "<>", "\"\<d_\>\"", "<>", 
+         RowBox[{"StringJoin", "[", 
+          RowBox[{
+           RowBox[{"Map", "[", 
+            RowBox[{
+             RowBox[{"Function", "[", 
+              RowBox[{"x", ",", 
+               RowBox[{
+                RowBox[{"ToString", "[", "x", "]"}], "<>", "\"\<_\>\""}]}], 
+              "]"}], ",", "NN"}], "]"}], "<>", 
+           RowBox[{"ToString", "[", "M", "]"}], "<>", "\"\<.txt\>\""}], 
+          "]"}]}]}], "}"}], "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"Generate", "[", 
+   RowBox[{"NN_", ",", "M_", ",", "FilenameGenerator_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"{", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"Length", "[", "NN", "]"}]}], ",", " ", 
+      RowBox[{"(*", " ", 
+       RowBox[{"Dimension", "."}], " ", "*)"}], "\[IndentingNewLine]", 
+      "file"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"SeedRandom", "[", "1", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Table", "[", 
+         RowBox[{"k", ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "1", ",", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], "-", "1"}]}], "}"}]}], "]"}], 
+        ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"II", "[", 
+       RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Flatten", "[", 
+       RowBox[{
+        RowBox[{"Outer", "[", 
+         RowBox[{"List", ",", "II"}], "]"}], ",", 
+        RowBox[{"d", "-", "1"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Index", " ", 
+       RowBox[{"set", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"x", " ", "=", 
+      RowBox[{"Transpose", "[", " ", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"RandomReal", "[", 
+          RowBox[{
+           RowBox[{"{", 
+            RowBox[{"0", ",", 
+             RowBox[{"1", "/", "2"}]}], "}"}], ",", "M", ",", 
+           RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}], "]"}]}], " ", 
+     ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", 
+       RowBox[{"nodes", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"fhat", " ", "=", " ", 
+      RowBox[{"(*", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"If", "[", 
+          RowBox[{
+           RowBox[{"i", "\[Equal]", "1"}], ",", "1", ",", "0"}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}], "*)"}], " ", 
+      
+      RowBox[{"RandomReal", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{
+          RowBox[{"-", "1"}], ",", "1"}], "}"}], ",", 
+        RowBox[{"Length", "[", "II", "]"}], ",", 
+        RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}]}], ";", " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", "Fourier", " ", 
+       RowBox[{"coefficients", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"f", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"fhat", "[", 
+            RowBox[{"[", "k", "]"}], "]"}], "*", 
+           RowBox[{"Product", "[", 
+            RowBox[{
+             RowBox[{"Sin", "[", 
+              RowBox[{"2", "*", "\[Pi]", "*", 
+               RowBox[{
+                RowBox[{"II", "[", 
+                 RowBox[{"[", "k", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}], "*", 
+               RowBox[{
+                RowBox[{"x", "[", 
+                 RowBox[{"[", "j", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}]}], "]"}], ",", 
+             RowBox[{"{", 
+              RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "1", ",", 
+            RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"j", ",", "1", ",", "M"}], "}"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Function", " ", 
+       RowBox[{"values", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"filename", "=", 
+      RowBox[{"FilenameGenerator", "[", 
+       RowBox[{"NN", ",", "M"}], "]"}]}], ";", "\[IndentingNewLine]", 
+     RowBox[{"file", " ", "=", " ", 
+      RowBox[{"OpenWrite", "[", "filename", "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "d", "]"}], " ", "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerVectorRaw", "[", "NN", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "M", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", 
+         RowBox[{"Flatten", "[", "x", "]"}], "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "fhat", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "f", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"Close", "[", "file", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"(*", 
+      RowBox[{
+       RowBox[{"Print", "[", "filename", "]"}], ";"}], "*)"}], 
+     "\[IndentingNewLine]", 
+     RowBox[{"Return", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"FileBaseName", "[", 
+         RowBox[{"FileNameTake", "[", 
+          RowBox[{"filename", ",", 
+           RowBox[{"-", "1"}]}], "]"}], "]"}], ",", " ", 
+        RowBox[{"FileNameTake", "[", 
+         RowBox[{"filename", ",", 
+          RowBox[{"-", "2"}]}], "]"}]}], "}"}], "]"}]}]}], 
+   "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"GenerateAdjoint", "[", 
+   RowBox[{"NN_", ",", "M_", ",", "FilenameGenerator_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"{", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"Length", "[", "NN", "]"}]}], ",", " ", 
+      RowBox[{"(*", " ", 
+       RowBox[{"Dimension", "."}], " ", "*)"}], "\[IndentingNewLine]", 
+      "file"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"SeedRandom", "[", "1", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Table", "[", 
+         RowBox[{"k", ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "1", ",", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], "-", "1"}]}], "}"}]}], "]"}], 
+        ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"II", "[", 
+       RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Flatten", "[", 
+       RowBox[{
+        RowBox[{"Outer", "[", 
+         RowBox[{"List", ",", "II"}], "]"}], ",", 
+        RowBox[{"d", "-", "1"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Index", " ", 
+       RowBox[{"set", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"x", "=", 
+      RowBox[{"Transpose", "[", " ", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"RandomReal", "[", 
+          RowBox[{
+           RowBox[{"{", 
+            RowBox[{"0", ",", 
+             RowBox[{"1", "/", "2"}]}], "}"}], ",", "M", ",", 
+           RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", 
+       RowBox[{"nodes", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"f", "=", 
+      RowBox[{"RandomReal", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{
+          RowBox[{"-", "1"}], ",", "1"}], "}"}], ",", "M", ",", 
+        RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", "function", " ", 
+       RowBox[{"values", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"fhat", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"f", "[", 
+            RowBox[{"[", "j", "]"}], "]"}], "*", 
+           RowBox[{"Product", "[", 
+            RowBox[{
+             RowBox[{"Sin", "[", 
+              RowBox[{"2", "*", "\[Pi]", "*", 
+               RowBox[{
+                RowBox[{"II", "[", 
+                 RowBox[{"[", "k", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}], "*", 
+               RowBox[{
+                RowBox[{"x", "[", 
+                 RowBox[{"[", "j", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}]}], "]"}], ",", 
+             RowBox[{"{", 
+              RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"j", ",", "1", ",", "M"}], "}"}]}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"k", ",", "1", ",", 
+          RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Pseudo", " ", "Fourier", " ", 
+       RowBox[{"coefficients", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"filename", "=", 
+      RowBox[{"FilenameGenerator", "[", 
+       RowBox[{"NN", ",", "M"}], "]"}]}], ";", "\[IndentingNewLine]", 
+     RowBox[{"file", " ", "=", " ", 
+      RowBox[{"OpenWrite", "[", "filename", "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "d", "]"}], " ", "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerVectorRaw", "[", "NN", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "M", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", 
+         RowBox[{"Flatten", "[", "x", "]"}], "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "fhat", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "f", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"Close", "[", "file", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"(*", 
+      RowBox[{
+       RowBox[{"Print", "[", "filename", "]"}], ";"}], "*)"}], 
+     "\[IndentingNewLine]", 
+     RowBox[{"Return", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"FileBaseName", "[", 
+         RowBox[{"FileNameTake", "[", 
+          RowBox[{"filename", ",", 
+           RowBox[{"-", "1"}]}], "]"}], "]"}], ",", " ", 
+        RowBox[{"FileNameTake", "[", 
+         RowBox[{"filename", ",", 
+          RowBox[{"-", "2"}]}], "]"}]}], "}"}], "]"}]}]}], 
+   "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"MakeTestcase", "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Generate", "[", 
+   RowBox[{"NN", ",", "M", ",", 
+    RowBox[{"GenerateFilename", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"NotebookDirectory", "[", "]"}], ",", "\"\<data\>\""}], "}"}],
+       "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"MakeTestcaseAdjoint", "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"GenerateAdjoint", "[", 
+   RowBox[{"NN", ",", "M", ",", 
+    RowBox[{"GenerateFilenameAdjoint", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"NotebookDirectory", "[", "]"}], ",", "\"\<data\>\""}], "}"}],
+       "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"Formatter", "[", "x_", "]"}], ":=", 
+   RowBox[{"\"\<&\>\"", "<>", "x"}]}], ";"}]}], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.4975401175502357`*^9, 3.497540122081654*^9}, {
+   3.4975401577475357`*^9, 3.4975404433537083`*^9}, {3.497540482896634*^9, 
+   3.4975405759100437`*^9}, {3.497541105993033*^9, 3.497541123798511*^9}, {
+   3.497542050468046*^9, 3.497542062974934*^9}, {3.497542456642642*^9, 
+   3.497542474403122*^9}, {3.497542524646307*^9, 3.497542533911161*^9}, {
+   3.4975426113736467`*^9, 3.497542615636695*^9}, 3.49754300944394*^9, 
+   3.497543161820746*^9, {3.4975433080968943`*^9, 3.497543333089579*^9}, {
+   3.497634816866467*^9, 3.497634822396894*^9}, 3.497634889182472*^9, {
+   3.497635656084387*^9, 3.4976356567772627`*^9}, {3.4976358827461843`*^9, 
+   3.497635902805756*^9}, {3.497639560178165*^9, 3.4976395887805*^9}, {
+   3.497717629788444*^9, 3.497717664775313*^9}, {3.4977177954171267`*^9, 
+   3.497717811441677*^9}, {3.497717946124824*^9, 3.4977179590024843`*^9}, {
+   3.497718091880231*^9, 3.497718097174159*^9}, {3.4977181869580393`*^9, 
+   3.4977182306418543`*^9}, {3.4977182817373667`*^9, 3.497718295439774*^9}, {
+   3.4977185155717163`*^9, 3.497718516178872*^9}, {3.4977186098337307`*^9, 
+   3.497718655031732*^9}, {3.497720354018293*^9, 3.497720361711935*^9}, {
+   3.51646665501819*^9, 3.516466703700296*^9}, {3.516466744180666*^9, 
+   3.516466850500287*^9}, {3.516466920776816*^9, 3.516466924558702*^9}, {
+   3.5164671087352133`*^9, 3.516467132940102*^9}, {3.5164672595898933`*^9, 
+   3.516467335735387*^9}, {3.516467446831277*^9, 3.5164675178909597`*^9}, {
+   3.516467566236536*^9, 3.516467602081119*^9}, {3.516467646594492*^9, 
+   3.516467693982851*^9}, {3.516467799630619*^9, 3.5164678145625057`*^9}, {
+   3.516467907906891*^9, 3.516467931231696*^9}, {3.516467974227989*^9, 
+   3.516468069686613*^9}, {3.5164681647268057`*^9, 3.516468322329309*^9}, {
+   3.516468353208788*^9, 3.516468402515073*^9}, {3.516468569358057*^9, 
+   3.5164688697654257`*^9}, {3.516469069967986*^9, 3.516469104912592*^9}, {
+   3.516469281838047*^9, 3.516469282536112*^9}, {3.516469343196455*^9, 
+   3.5164693448977213`*^9}, {3.516641118739716*^9, 3.51664112101792*^9}, {
+   3.5170662585360413`*^9, 3.517066346582275*^9}, {3.517066422311091*^9, 
+   3.517066427735291*^9}, {3.517068514164235*^9, 3.517068550246681*^9}, {
+   3.517068593075931*^9, 3.5170685931933107`*^9}, {3.517068669073209*^9, 
+   3.5170686693269997`*^9}, {3.517068780917268*^9, 3.5170688290906487`*^9}, {
+   3.517068882706683*^9, 3.5170688831366453`*^9}, {3.517068913481579*^9, 
+   3.517068922846977*^9}, {3.5170689796719627`*^9, 3.517068986237167*^9}, {
+   3.517069122334919*^9, 3.517069164248382*^9}, {3.5170692558435507`*^9, 
+   3.517069255983468*^9}, {3.517069318241144*^9, 3.517069318331732*^9}, {
+   3.517069353096478*^9, 3.517069353285783*^9}, {3.517069394183385*^9, 
+   3.51706939429727*^9}, {3.5170694669148607`*^9, 3.517069467074445*^9}, {
+   3.517069521880518*^9, 3.517069561354265*^9}, {3.5170708977239847`*^9, 
+   3.517070898060605*^9}, {3.517070929587063*^9, 3.517071052229973*^9}, {
+   3.5170711918685713`*^9, 3.51707122081702*^9}, {3.5170712579552593`*^9, 
+   3.517071258184224*^9}, {3.517073554532979*^9, 3.517073566800956*^9}, {
+   3.51707363019388*^9, 3.5170736389107037`*^9}, {3.517073698959797*^9, 
+   3.51707370067715*^9}, {3.5171618948918943`*^9, 3.5171619115024137`*^9}, {
+   3.517250721250164*^9, 3.5172507217341347`*^9}, {3.5173346932505627`*^9, 
+   3.517334838578896*^9}, {3.517334905472475*^9, 3.517334917950143*^9}, {
+   3.517334957247117*^9, 3.517334978535076*^9}, {3.517335011733391*^9, 
+   3.5173350406442137`*^9}, {3.5173351201064262`*^9, 3.517335137793874*^9}, {
+   3.517335375660467*^9, 3.517335412963312*^9}, {3.517335455731798*^9, 
+   3.517335551041175*^9}, {3.517335604376453*^9, 3.5173357376825*^9}, {
+   3.517335798572322*^9, 3.51733580322344*^9}, {3.5173358514269238`*^9, 
+   3.517335963393672*^9}, {3.517336003163329*^9, 3.517336058165167*^9}, {
+   3.517336256363311*^9, 3.517336305265251*^9}, {3.51733636389287*^9, 
+   3.517336367248146*^9}, {3.51733647413474*^9, 3.5173364746654367`*^9}, {
+   3.517336559248983*^9, 3.517336561848617*^9}, {3.517367626541649*^9, 
+   3.517367705336946*^9}, {3.517367791656136*^9, 3.517367810533764*^9}, {
+   3.5173680054015837`*^9, 3.5173681448802223`*^9}, {3.517368202592416*^9, 
+   3.517368212221806*^9}, {3.5173682793361473`*^9, 3.517368279723124*^9}, {
+   3.517368363455708*^9, 3.517368401466815*^9}, {3.517368451212386*^9, 
+   3.517368463409952*^9}, {3.517368495795951*^9, 3.517368510236106*^9}, {
+   3.517368551091064*^9, 3.517368595286662*^9}, {3.517368631352521*^9, 
+   3.5173686772721653`*^9}, {3.517383983727648*^9, 3.5173840466805964`*^9}, {
+   3.517384159065975*^9, 3.517384167298918*^9}, {3.51738422514648*^9, 
+   3.517384227338999*^9}, {3.518195295280732*^9, 3.518195305846961*^9}, {
+   3.518195456601633*^9, 3.518195460327448*^9}, {3.518196187080405*^9, 
+   3.518196205713777*^9}, 3.518196243875588*^9, {3.518197087019044*^9, 
+   3.5181970888272057`*^9}, {3.548336163833386*^9, 3.548336166412342*^9}, {
+   3.548336343704324*^9, 3.548336358860406*^9}, {3.5483364701780357`*^9, 
+   3.548336484144067*^9}, {3.548336529883884*^9, 3.548336540969346*^9}, {
+   3.548344607348515*^9, 3.548344608870598*^9}, {3.5912500481984653`*^9, 
+   3.591250076895479*^9}, {3.591250218861248*^9, 3.591250226338402*^9}, {
+   3.5912503577979517`*^9, 3.59125035946841*^9}, {3.591250425060781*^9, 
+   3.5912504274191008`*^9}, {3.59125045807473*^9, 3.591250517668788*^9}, {
+   3.592322544113718*^9, 3.592322547480382*^9}, {3.5935382492757807`*^9, 
+   3.593538323133445*^9}, {3.593538380547173*^9, 3.59353848221391*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"1", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "1"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"2", ",", "4", ",", "10", ",", "20", ",", "50"}], "}"}]}], 
+    ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "10", ",", "20", ",", "50"}], "}"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_1d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.5173840443832397`*^9, 3.517384081724496*^9}, {
+   3.517384180922477*^9, 3.517384425381447*^9}, {3.51767461454566*^9, 
+   3.5176746284180737`*^9}, {3.517674660990048*^9, 3.517674671275931*^9}, {
+   3.517674784712487*^9, 3.51767478525749*^9}, {3.517674879128593*^9, 
+   3.517674881205332*^9}, {3.518114950576809*^9, 3.518114954403322*^9}, {
+   3.518115098971106*^9, 3.5181151104874153`*^9}, {3.518194668914782*^9, 
+   3.5181946821969357`*^9}, {3.518194734269782*^9, 3.518194735094262*^9}, {
+   3.518194773462639*^9, 3.518194875034071*^9}, {3.518194949105473*^9, 
+   3.518194987735242*^9}, 3.51819521869759*^9, {3.5181952521605186`*^9, 
+   3.518195257942354*^9}, {3.518196034802575*^9, 3.5181960559626827`*^9}, {
+   3.518196971634709*^9, 3.518197069048802*^9}, {3.5181975442351294`*^9, 
+   3.518197547442575*^9}, {3.518197629827517*^9, 3.518197630432558*^9}, {
+   3.5483363721060057`*^9, 3.548336382723646*^9}, {3.548336568717052*^9, 
+   3.548336631597205*^9}, {3.548336745404522*^9, 3.5483368903217897`*^9}, {
+   3.5483372613781643`*^9, 3.548337281078226*^9}, {3.548337760289608*^9, 
+   3.548337791653308*^9}, {3.5483379559441223`*^9, 3.548337985056346*^9}, {
+   3.548338045405122*^9, 3.54833809056406*^9}, {3.5483442863008347`*^9, 
+   3.548344431490254*^9}, {3.548344516346612*^9, 3.54834452160181*^9}, {
+   3.5483445634454823`*^9, 3.548344603589292*^9}, {3.548344673892972*^9, 
+   3.548344674043014*^9}, {3.5912505876217327`*^9, 3.5912505881199083`*^9}, {
+   3.591544996230394*^9, 3.591545006562292*^9}, {3.591545042326754*^9, 
+   3.591545045425953*^9}, {3.5915450820129423`*^9, 3.591545082636587*^9}, {
+   3.591545161262951*^9, 3.591545163237905*^9}, {3.593538497342165*^9, 
+   3.593538500841062*^9}, {3.593538562687183*^9, 3.593538593798908*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"1", "D", " ", "Testcases", " ", "Adjoint"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "1"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"2", ",", "4", ",", "10", ",", "20", ",", "50"}], "}"}]}], 
+    ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "10", ",", "20", ",", "50"}], "}"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_1d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.593538598765287*^9, 3.593538620185602*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"2", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "2"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"10", ",", "20"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"20", ",", "50"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_2d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.518197155351283*^9, 3.5181971627478523`*^9}, {
+   3.518197246832231*^9, 3.518197473939831*^9}, {3.518197565862846*^9, 
+   3.5181975665474453`*^9}, {3.5181976205553493`*^9, 3.518197620890814*^9}, {
+   3.548344631084435*^9, 3.54834465895175*^9}, {3.548344709542242*^9, 
+   3.5483447374599237`*^9}, {3.548344793350206*^9, 3.548344809958082*^9}, {
+   3.5483466580895443`*^9, 3.5483466669263077`*^9}, {3.5915450076746683`*^9, 
+   3.591545047737488*^9}, 3.591545090251132*^9, {3.5915451664250937`*^9, 
+   3.591545167287318*^9}, {3.593538656386428*^9, 3.5935386567364397`*^9}, {
+   3.593538687490222*^9, 3.593538688326289*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"2", "D", " ", "Testcases", " ", "Adjoint"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "2"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"10", ",", "20"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"20", ",", "50"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_2d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.593538665067552*^9, 3.593538691601541*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"3", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "3"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_3d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.518197606681448*^9, 3.518197615153542*^9}, {
+   3.5483451910722103`*^9, 3.5483452622079287`*^9}, {3.5483453352624826`*^9, 
+   3.548345337453582*^9}, {3.548345370487627*^9, 3.5483453706498127`*^9}, {
+   3.5483467419758577`*^9, 3.548346746749652*^9}, {3.548346925708653*^9, 
+   3.5483469438417873`*^9}, {3.548347041873805*^9, 3.548347042368384*^9}, {
+   3.5483471141121607`*^9, 3.54834711944681*^9}, {3.54834715646264*^9, 
+   3.5483471569767027`*^9}, {3.548347414821805*^9, 3.548347416066527*^9}, {
+   3.5915450136367273`*^9, 3.591545049924941*^9}, 3.5915450918888407`*^9, {
+   3.591545168950128*^9, 3.591545169962603*^9}, {3.59353869812422*^9, 
+   3.5935387078767843`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"3", "D", " ", "Testcases", " ", "Adjoint"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "3"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_3d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.593538703953491*^9, 3.5935387170726357`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"4", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "4"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_4d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.548337660709242*^9, 3.5483376910598288`*^9}, {
+  3.548347420747239*^9, 3.548347430447401*^9}, {3.591545022249495*^9, 
+  3.5915450523366613`*^9}, {3.591545093100852*^9, 3.591545094948818*^9}, {
+  3.591545173675761*^9, 3.5915451743999863`*^9}, {3.593538740179062*^9, 
+  3.593538746648733*^9}}]
+},
+AutoGeneratedPackage->Automatic,
+WindowSize->{1920, 1068},
+WindowMargins->{{0, Automatic}, {Automatic, 0}},
+FrontEndVersion->"8.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 6, \
+2010)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[545, 20, 1621, 27, 43, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[2169, 49, 352, 10, 27, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[2524, 61, 20688, 469, 808, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[23215, 532, 4456, 101, 163, "Input"],
+Cell[27674, 635, 2768, 78, 163, "Input"],
+Cell[30445, 715, 3267, 84, 163, "Input"],
+Cell[33715, 801, 2707, 76, 163, "Input"],
+Cell[36425, 879, 3263, 83, 163, "Input"],
+Cell[39691, 964, 2653, 74, 163, "Input"],
+Cell[42347, 1040, 2882, 78, 163, "Input"]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/tests/check_nfst.m b/tests/check_nfst.m
new file mode 100644
index 0000000..5ff3cc3
--- /dev/null
+++ b/tests/check_nfst.m
@@ -0,0 +1,84 @@
+(* ::Package:: *)
+
+(************************************************************************)
+(* This file was generated automatically by the Mathematica front end.  *)
+(* It contains Initialization cells from a Notebook file, which         *)
+(* typically will have the same name as this file except ending in      *)
+(* ".nb" instead of ".m".                                               *)
+(*                                                                      *)
+(* This file is intended to be loaded into the Mathematica kernel using *)
+(* the package loading commands Get or Needs.  Doing so is equivalent   *)
+(* to using the Evaluate Initialization Cells menu command in the front *)
+(* end.                                                                 *)
+(*                                                                      *)
+(* DO NOT EDIT THIS FILE.  This entire file is regenerated              *)
+(* automatically each time the parent Notebook file is saved in the     *)
+(* Mathematica front end.  Any changes you make to this file will be    *)
+(* overwritten.                                                         *)
+(************************************************************************)
+
+
+
+AppendTo[$Path, NotebookDirectory[]];
+<<PrintVector`
+
+
+P=64;(* Working precision. *)
+
+
+GenerateFilename[prefix_][NN_,M_]:=Module[{d=Length[NN] (* Dimension. *)},Return[FileNameJoin[{prefix,"nfst_"<>ToString[d]<>"d_"<>StringJoin[Map[Function[x,ToString[x]<>"_"],NN]<>ToString[M]<>".txt"]}]]]
+GenerateFilenameAdjoint[prefix_][NN_,M_]:=Module[{d=Length[NN] (* Dimension. *)},Return[FileNameJoin[{prefix,"nfst_adjoint_"<>ToString[d]<>"d_"<>StringJoin[Map[Function[x,ToString[x]<>"_"],NN]<>ToString[M]<>".txt"]}]]]
+Generate[NN_,M_,FilenameGenerator_]:=Module[
+{
+d=Length[NN], (* Dimension. *)
+file
+},
+SeedRandom[1];
+II=Table[Table[k,{k,1,NN[[i]]-1}],{i,1,d}];
+II[[0]]=Sequence;
+II=Flatten[Outer[List,II],d-1];(* Index set. *)
+x =Transpose[ Table[RandomReal[{0,1/2},M,WorkingPrecision->P](*Table[1/4,{j,1,M}]*),{i,1,d}]];(* Random nodes. *)
+fhat = (*Table[If[i==3,1,0],{i,1,Length[II]}]*) RandomReal[{-1,1},Length[II],WorkingPrecision->P]; (* Random Fourier coefficients. *)
+f=Table[Sum[fhat[[k]]*Product[Sin[2*\[Pi]*II[[k]][[i]]*x[[j]][[i]]],{i,1,d}],{k,1,Length[II]}],{j,1,M}];(* Function values. *)
+filename=FilenameGenerator[NN,M];
+file = OpenWrite[filename];
+WriteString[file, FormatIntegerRaw[d] <>"\n"];
+WriteString[file, FormatIntegerVectorRaw[NN]<>"\n"];
+WriteString[file, FormatIntegerRaw[M]<>"\n"];
+WriteString[file, FormatVectorRaw[Flatten[x]]<>"\n"];
+WriteString[file, FormatVectorRaw[fhat]<>"\n"];
+WriteString[file, FormatVectorRaw[f]<>"\n"];
+Close[file];
+(*Print[filename];*)
+Return[{FileBaseName[FileNameTake[filename,-1]], FileNameTake[filename,-2]}]
+]
+GenerateAdjoint[NN_,M_,FilenameGenerator_]:=Module[
+{
+d=Length[NN], (* Dimension. *)
+file
+},
+SeedRandom[1];
+II=Table[Table[k,{k,1,NN[[i]]-1}],{i,1,d}];
+II[[0]]=Sequence;
+II=Flatten[Outer[List,II],d-1];(* Index set. *)
+x=Transpose[ Table[RandomReal[{0,1/2},M,WorkingPrecision->P],{i,1,d}]];(* Random nodes. *)
+f=RandomReal[{-1,1},M,WorkingPrecision->P];(* Random function values. *)
+fhat=Table[Sum[f[[j]]*Product[Sin[2*\[Pi]*II[[k]][[i]]*x[[j]][[i]]],{i,1,d}],{j,1,M}],{k,1,Length[II]}];(* Pseudo Fourier coefficients. *)
+filename=FilenameGenerator[NN,M];
+file = OpenWrite[filename];
+WriteString[file, FormatIntegerRaw[d] <>"\n"];
+WriteString[file, FormatIntegerVectorRaw[NN]<>"\n"];
+WriteString[file, FormatIntegerRaw[M]<>"\n"];
+WriteString[file, FormatVectorRaw[Flatten[x]]<>"\n"];
+WriteString[file, FormatVectorRaw[fhat]<>"\n"];
+WriteString[file, FormatVectorRaw[f]<>"\n"];
+Close[file];
+(*Print[filename];*)
+Return[{FileBaseName[FileNameTake[filename,-1]], FileNameTake[filename,-2]}]
+]
+MakeTestcase[NN_,M_]:=Generate[NN,M,GenerateFilename[FileNameJoin[{NotebookDirectory[],"data"}]]]
+MakeTestcaseAdjoint[NN_,M_]:=GenerateAdjoint[NN,M,GenerateFilenameAdjoint[FileNameJoin[{NotebookDirectory[],"data"}]]]
+Formatter[x_]:="&"<>x;
+
+
+
diff --git a/tests/check_nfst.nb b/tests/check_nfst.nb
new file mode 100644
index 0000000..7c7187a
--- /dev/null
+++ b/tests/check_nfst.nb
@@ -0,0 +1,1175 @@
+(* Content-type: application/mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 7.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       145,          7]
+NotebookDataLength[     46895,       1166]
+NotebookOptionsPosition[     46055,       1136]
+NotebookOutlinePosition[     46444,       1153]
+CellTagsIndexPosition[     46401,       1150]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{"AppendTo", "[", 
+   RowBox[{"$Path", ",", " ", 
+    RowBox[{"NotebookDirectory", "[", "]"}]}], "]"}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{"<<", "PrintVector`"}]}], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.4975401175502357`*^9, 3.497540122081654*^9}, {
+   3.4975401577475357`*^9, 3.4975404433537083`*^9}, {3.497540482896634*^9, 
+   3.4975405759100437`*^9}, {3.497541105993033*^9, 3.497541123798511*^9}, {
+   3.497542050468046*^9, 3.497542062974934*^9}, {3.497542456642642*^9, 
+   3.497542474403122*^9}, {3.497542524646307*^9, 3.497542533911161*^9}, {
+   3.4975426113736467`*^9, 3.497542615636695*^9}, 3.49754300944394*^9, 
+   3.497543161820746*^9, {3.4975433080968943`*^9, 3.497543333089579*^9}, {
+   3.497634816866467*^9, 3.497634822396894*^9}, 3.497634889182472*^9, {
+   3.4976349550362673`*^9, 3.497635002695628*^9}, {3.497635080038419*^9, 
+   3.4976350905563173`*^9}, {3.497720303149754*^9, 3.497720340683272*^9}, 
+   3.497720446950582*^9, {3.497720543770192*^9, 3.497720554263856*^9}, {
+   3.497720624718094*^9, 3.4977206409163923`*^9}, {3.497720745653871*^9, 
+   3.497720821394751*^9}, {3.497720852170191*^9, 3.497720892717999*^9}, {
+   3.497720926142789*^9, 3.497720963010685*^9}, {3.49772100166604*^9, 
+   3.4977210066482897`*^9}, {3.497721154131791*^9, 3.4977211732733927`*^9}, {
+   3.497721253141778*^9, 3.497721260212431*^9}, {3.4977213873833313`*^9, 
+   3.497721394326082*^9}, {3.4977214268766117`*^9, 3.497721450684969*^9}, 
+   3.517368305980814*^9, 3.517368338946211*^9, {3.548337349389185*^9, 
+   3.54833735124184*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{
+   RowBox[{"P", "=", "64"}], ";"}], 
+  RowBox[{"(*", " ", 
+   RowBox[{"Working", " ", 
+    RowBox[{"precision", "."}]}], " ", "*)"}]}]], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.5173364544175253`*^9, 3.517336455143111*^9}, {
+  3.548337583667452*^9, 3.548337584482711*^9}}],
+
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{
+   RowBox[{"GenerateFilename", "[", "prefix_", "]"}], "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{"d", "=", 
+      RowBox[{"Length", "[", "NN", "]"}]}], " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Dimension", "."}], " ", "*)"}], "}"}], ",", 
+    RowBox[{"Return", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{"prefix", ",", 
+        RowBox[{"\"\<nfst_\>\"", "<>", 
+         RowBox[{"ToString", "[", "d", "]"}], "<>", "\"\<d_\>\"", "<>", 
+         RowBox[{"StringJoin", "[", 
+          RowBox[{
+           RowBox[{"Map", "[", 
+            RowBox[{
+             RowBox[{"Function", "[", 
+              RowBox[{"x", ",", 
+               RowBox[{
+                RowBox[{"ToString", "[", "x", "]"}], "<>", "\"\<_\>\""}]}], 
+              "]"}], ",", "NN"}], "]"}], "<>", 
+           RowBox[{"ToString", "[", "M", "]"}], "<>", "\"\<.txt\>\""}], 
+          "]"}]}]}], "}"}], "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"GenerateFilenameAdjoint", "[", "prefix_", "]"}], "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{"d", "=", 
+      RowBox[{"Length", "[", "NN", "]"}]}], " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Dimension", "."}], " ", "*)"}], "}"}], ",", 
+    RowBox[{"Return", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{"prefix", ",", 
+        RowBox[{"\"\<nfst_adjoint_\>\"", "<>", 
+         RowBox[{"ToString", "[", "d", "]"}], "<>", "\"\<d_\>\"", "<>", 
+         RowBox[{"StringJoin", "[", 
+          RowBox[{
+           RowBox[{"Map", "[", 
+            RowBox[{
+             RowBox[{"Function", "[", 
+              RowBox[{"x", ",", 
+               RowBox[{
+                RowBox[{"ToString", "[", "x", "]"}], "<>", "\"\<_\>\""}]}], 
+              "]"}], ",", "NN"}], "]"}], "<>", 
+           RowBox[{"ToString", "[", "M", "]"}], "<>", "\"\<.txt\>\""}], 
+          "]"}]}]}], "}"}], "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"Generate", "[", 
+   RowBox[{"NN_", ",", "M_", ",", "FilenameGenerator_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"{", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"Length", "[", "NN", "]"}]}], ",", " ", 
+      RowBox[{"(*", " ", 
+       RowBox[{"Dimension", "."}], " ", "*)"}], "\[IndentingNewLine]", 
+      "file"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"SeedRandom", "[", "1", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Table", "[", 
+         RowBox[{"k", ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "1", ",", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], "-", "1"}]}], "}"}]}], "]"}], 
+        ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"II", "[", 
+       RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Flatten", "[", 
+       RowBox[{
+        RowBox[{"Outer", "[", 
+         RowBox[{"List", ",", "II"}], "]"}], ",", 
+        RowBox[{"d", "-", "1"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Index", " ", 
+       RowBox[{"set", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"x", " ", "=", 
+      RowBox[{"Transpose", "[", " ", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"RandomReal", "[", 
+          RowBox[{
+           RowBox[{"{", 
+            RowBox[{"0", ",", 
+             RowBox[{"1", "/", "2"}]}], "}"}], ",", "M", ",", 
+           RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}], 
+         RowBox[{"(*", 
+          RowBox[{"Table", "[", 
+           RowBox[{
+            RowBox[{"1", "/", "4"}], ",", 
+            RowBox[{"{", 
+             RowBox[{"j", ",", "1", ",", "M"}], "}"}]}], "]"}], "*)"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", 
+       RowBox[{"nodes", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"fhat", " ", "=", " ", 
+      RowBox[{"(*", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"If", "[", 
+          RowBox[{
+           RowBox[{"i", "\[Equal]", "3"}], ",", "1", ",", "0"}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}], "*)"}], " ", 
+      
+      RowBox[{"RandomReal", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{
+          RowBox[{"-", "1"}], ",", "1"}], "}"}], ",", 
+        RowBox[{"Length", "[", "II", "]"}], ",", 
+        RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}]}], ";", " ", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", "Fourier", " ", 
+       RowBox[{"coefficients", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"f", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"fhat", "[", 
+            RowBox[{"[", "k", "]"}], "]"}], "*", 
+           RowBox[{"Product", "[", 
+            RowBox[{
+             RowBox[{"Sin", "[", 
+              RowBox[{"2", "*", "\[Pi]", "*", 
+               RowBox[{
+                RowBox[{"II", "[", 
+                 RowBox[{"[", "k", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}], "*", 
+               RowBox[{
+                RowBox[{"x", "[", 
+                 RowBox[{"[", "j", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}]}], "]"}], ",", 
+             RowBox[{"{", 
+              RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "1", ",", 
+            RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"j", ",", "1", ",", "M"}], "}"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Function", " ", 
+       RowBox[{"values", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"filename", "=", 
+      RowBox[{"FilenameGenerator", "[", 
+       RowBox[{"NN", ",", "M"}], "]"}]}], ";", "\[IndentingNewLine]", 
+     RowBox[{"file", " ", "=", " ", 
+      RowBox[{"OpenWrite", "[", "filename", "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "d", "]"}], " ", "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerVectorRaw", "[", "NN", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "M", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", 
+         RowBox[{"Flatten", "[", "x", "]"}], "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "fhat", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "f", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"Close", "[", "file", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"(*", 
+      RowBox[{
+       RowBox[{"Print", "[", "filename", "]"}], ";"}], "*)"}], 
+     "\[IndentingNewLine]", 
+     RowBox[{"Return", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"FileBaseName", "[", 
+         RowBox[{"FileNameTake", "[", 
+          RowBox[{"filename", ",", 
+           RowBox[{"-", "1"}]}], "]"}], "]"}], ",", " ", 
+        RowBox[{"FileNameTake", "[", 
+         RowBox[{"filename", ",", 
+          RowBox[{"-", "2"}]}], "]"}]}], "}"}], "]"}]}]}], 
+   "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"GenerateAdjoint", "[", 
+   RowBox[{"NN_", ",", "M_", ",", "FilenameGenerator_"}], "]"}], ":=", 
+  RowBox[{"Module", "[", "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"{", "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"d", "=", 
+       RowBox[{"Length", "[", "NN", "]"}]}], ",", " ", 
+      RowBox[{"(*", " ", 
+       RowBox[{"Dimension", "."}], " ", "*)"}], "\[IndentingNewLine]", 
+      "file"}], "\[IndentingNewLine]", "}"}], ",", "\[IndentingNewLine]", 
+    RowBox[{
+     RowBox[{"SeedRandom", "[", "1", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Table", "[", 
+         RowBox[{"k", ",", 
+          RowBox[{"{", 
+           RowBox[{"k", ",", "1", ",", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], "-", "1"}]}], "}"}]}], "]"}], 
+        ",", 
+        RowBox[{"{", 
+         RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{
+      RowBox[{"II", "[", 
+       RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"II", "=", 
+      RowBox[{"Flatten", "[", 
+       RowBox[{
+        RowBox[{"Outer", "[", 
+         RowBox[{"List", ",", "II"}], "]"}], ",", 
+        RowBox[{"d", "-", "1"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Index", " ", 
+       RowBox[{"set", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"x", "=", 
+      RowBox[{"Transpose", "[", " ", 
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"RandomReal", "[", 
+          RowBox[{
+           RowBox[{"{", 
+            RowBox[{"0", ",", 
+             RowBox[{"1", "/", "2"}]}], "}"}], ",", "M", ",", 
+           RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", 
+       RowBox[{"nodes", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"f", "=", 
+      RowBox[{"RandomReal", "[", 
+       RowBox[{
+        RowBox[{"{", 
+         RowBox[{
+          RowBox[{"-", "1"}], ",", "1"}], "}"}], ",", "M", ",", 
+        RowBox[{"WorkingPrecision", "\[Rule]", "P"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Random", " ", "function", " ", 
+       RowBox[{"values", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"fhat", "=", 
+      RowBox[{"Table", "[", 
+       RowBox[{
+        RowBox[{"Sum", "[", 
+         RowBox[{
+          RowBox[{
+           RowBox[{"f", "[", 
+            RowBox[{"[", "j", "]"}], "]"}], "*", 
+           RowBox[{"Product", "[", 
+            RowBox[{
+             RowBox[{"Sin", "[", 
+              RowBox[{"2", "*", "\[Pi]", "*", 
+               RowBox[{
+                RowBox[{"II", "[", 
+                 RowBox[{"[", "k", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}], "*", 
+               RowBox[{
+                RowBox[{"x", "[", 
+                 RowBox[{"[", "j", "]"}], "]"}], "[", 
+                RowBox[{"[", "i", "]"}], "]"}]}], "]"}], ",", 
+             RowBox[{"{", 
+              RowBox[{"i", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ",", 
+          RowBox[{"{", 
+           RowBox[{"j", ",", "1", ",", "M"}], "}"}]}], "]"}], ",", 
+        RowBox[{"{", 
+         RowBox[{"k", ",", "1", ",", 
+          RowBox[{"Length", "[", "II", "]"}]}], "}"}]}], "]"}]}], ";", 
+     RowBox[{"(*", " ", 
+      RowBox[{"Pseudo", " ", "Fourier", " ", 
+       RowBox[{"coefficients", "."}]}], " ", "*)"}], "\[IndentingNewLine]", 
+     RowBox[{"filename", "=", 
+      RowBox[{"FilenameGenerator", "[", 
+       RowBox[{"NN", ",", "M"}], "]"}]}], ";", "\[IndentingNewLine]", 
+     RowBox[{"file", " ", "=", " ", 
+      RowBox[{"OpenWrite", "[", "filename", "]"}]}], ";", 
+     "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "d", "]"}], " ", "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerVectorRaw", "[", "NN", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatIntegerRaw", "[", "M", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", 
+         RowBox[{"Flatten", "[", "x", "]"}], "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "fhat", "]"}], "<>", 
+        "\"\<\\n\>\""}]}], "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"WriteString", "[", 
+      RowBox[{"file", ",", " ", 
+       RowBox[{
+        RowBox[{"FormatVectorRaw", "[", "f", "]"}], "<>", "\"\<\\n\>\""}]}], 
+      "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"Close", "[", "file", "]"}], ";", "\[IndentingNewLine]", 
+     RowBox[{"(*", 
+      RowBox[{
+       RowBox[{"Print", "[", "filename", "]"}], ";"}], "*)"}], 
+     "\[IndentingNewLine]", 
+     RowBox[{"Return", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"FileBaseName", "[", 
+         RowBox[{"FileNameTake", "[", 
+          RowBox[{"filename", ",", 
+           RowBox[{"-", "1"}]}], "]"}], "]"}], ",", " ", 
+        RowBox[{"FileNameTake", "[", 
+         RowBox[{"filename", ",", 
+          RowBox[{"-", "2"}]}], "]"}]}], "}"}], "]"}]}]}], 
+   "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"MakeTestcase", "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"Generate", "[", 
+   RowBox[{"NN", ",", "M", ",", 
+    RowBox[{"GenerateFilename", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"NotebookDirectory", "[", "]"}], ",", "\"\<data\>\""}], "}"}],
+       "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"MakeTestcaseAdjoint", "[", 
+   RowBox[{"NN_", ",", "M_"}], "]"}], ":=", 
+  RowBox[{"GenerateAdjoint", "[", 
+   RowBox[{"NN", ",", "M", ",", 
+    RowBox[{"GenerateFilenameAdjoint", "[", 
+     RowBox[{"FileNameJoin", "[", 
+      RowBox[{"{", 
+       RowBox[{
+        RowBox[{"NotebookDirectory", "[", "]"}], ",", "\"\<data\>\""}], "}"}],
+       "]"}], "]"}]}], "]"}]}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{
+   RowBox[{"Formatter", "[", "x_", "]"}], ":=", 
+   RowBox[{"\"\<&\>\"", "<>", "x"}]}], ";"}]}], "Input",
+ InitializationCell->True,
+ InitializationGroup->True,
+ CellChangeTimes->{{3.4975401175502357`*^9, 3.497540122081654*^9}, {
+   3.4975401577475357`*^9, 3.4975404433537083`*^9}, {3.497540482896634*^9, 
+   3.4975405759100437`*^9}, {3.497541105993033*^9, 3.497541123798511*^9}, {
+   3.497542050468046*^9, 3.497542062974934*^9}, {3.497542456642642*^9, 
+   3.497542474403122*^9}, {3.497542524646307*^9, 3.497542533911161*^9}, {
+   3.4975426113736467`*^9, 3.497542615636695*^9}, 3.49754300944394*^9, 
+   3.497543161820746*^9, {3.4975433080968943`*^9, 3.497543333089579*^9}, {
+   3.497634816866467*^9, 3.497634822396894*^9}, 3.497634889182472*^9, {
+   3.497635656084387*^9, 3.4976356567772627`*^9}, {3.4976358827461843`*^9, 
+   3.497635902805756*^9}, {3.497639560178165*^9, 3.4976395887805*^9}, {
+   3.497717629788444*^9, 3.497717664775313*^9}, {3.4977177954171267`*^9, 
+   3.497717811441677*^9}, {3.497717946124824*^9, 3.4977179590024843`*^9}, {
+   3.497718091880231*^9, 3.497718097174159*^9}, {3.4977181869580393`*^9, 
+   3.4977182306418543`*^9}, {3.4977182817373667`*^9, 3.497718295439774*^9}, {
+   3.4977185155717163`*^9, 3.497718516178872*^9}, {3.4977186098337307`*^9, 
+   3.497718655031732*^9}, {3.497720354018293*^9, 3.497720361711935*^9}, {
+   3.51646665501819*^9, 3.516466703700296*^9}, {3.516466744180666*^9, 
+   3.516466850500287*^9}, {3.516466920776816*^9, 3.516466924558702*^9}, {
+   3.5164671087352133`*^9, 3.516467132940102*^9}, {3.5164672595898933`*^9, 
+   3.516467335735387*^9}, {3.516467446831277*^9, 3.5164675178909597`*^9}, {
+   3.516467566236536*^9, 3.516467602081119*^9}, {3.516467646594492*^9, 
+   3.516467693982851*^9}, {3.516467799630619*^9, 3.5164678145625057`*^9}, {
+   3.516467907906891*^9, 3.516467931231696*^9}, {3.516467974227989*^9, 
+   3.516468069686613*^9}, {3.5164681647268057`*^9, 3.516468322329309*^9}, {
+   3.516468353208788*^9, 3.516468402515073*^9}, {3.516468569358057*^9, 
+   3.5164688697654257`*^9}, {3.516469069967986*^9, 3.516469104912592*^9}, {
+   3.516469281838047*^9, 3.516469282536112*^9}, {3.516469343196455*^9, 
+   3.5164693448977213`*^9}, {3.516641118739716*^9, 3.51664112101792*^9}, {
+   3.5170662585360413`*^9, 3.517066346582275*^9}, {3.517066422311091*^9, 
+   3.517066427735291*^9}, {3.517068514164235*^9, 3.517068550246681*^9}, {
+   3.517068593075931*^9, 3.5170685931933107`*^9}, {3.517068669073209*^9, 
+   3.5170686693269997`*^9}, {3.517068780917268*^9, 3.5170688290906487`*^9}, {
+   3.517068882706683*^9, 3.5170688831366453`*^9}, {3.517068913481579*^9, 
+   3.517068922846977*^9}, {3.5170689796719627`*^9, 3.517068986237167*^9}, {
+   3.517069122334919*^9, 3.517069164248382*^9}, {3.5170692558435507`*^9, 
+   3.517069255983468*^9}, {3.517069318241144*^9, 3.517069318331732*^9}, {
+   3.517069353096478*^9, 3.517069353285783*^9}, {3.517069394183385*^9, 
+   3.51706939429727*^9}, {3.5170694669148607`*^9, 3.517069467074445*^9}, {
+   3.517069521880518*^9, 3.517069561354265*^9}, {3.5170708977239847`*^9, 
+   3.517070898060605*^9}, {3.517070929587063*^9, 3.517071052229973*^9}, {
+   3.5170711918685713`*^9, 3.51707122081702*^9}, {3.5170712579552593`*^9, 
+   3.517071258184224*^9}, {3.517073554532979*^9, 3.517073566800956*^9}, {
+   3.51707363019388*^9, 3.5170736389107037`*^9}, {3.517073698959797*^9, 
+   3.51707370067715*^9}, {3.5171618948918943`*^9, 3.5171619115024137`*^9}, {
+   3.517250721250164*^9, 3.5172507217341347`*^9}, {3.5173346932505627`*^9, 
+   3.517334838578896*^9}, {3.517334905472475*^9, 3.517334917950143*^9}, {
+   3.517334957247117*^9, 3.517334978535076*^9}, {3.517335011733391*^9, 
+   3.5173350406442137`*^9}, {3.5173351201064262`*^9, 3.517335137793874*^9}, {
+   3.517335375660467*^9, 3.517335412963312*^9}, {3.517335455731798*^9, 
+   3.517335551041175*^9}, {3.517335604376453*^9, 3.5173357376825*^9}, {
+   3.517335798572322*^9, 3.51733580322344*^9}, {3.5173358514269238`*^9, 
+   3.517335963393672*^9}, {3.517336003163329*^9, 3.517336058165167*^9}, {
+   3.517336256363311*^9, 3.517336305265251*^9}, {3.51733636389287*^9, 
+   3.517336367248146*^9}, {3.51733647413474*^9, 3.5173364746654367`*^9}, {
+   3.517336559248983*^9, 3.517336561848617*^9}, {3.517367626541649*^9, 
+   3.517367705336946*^9}, {3.517367791656136*^9, 3.517367810533764*^9}, {
+   3.5173680054015837`*^9, 3.5173681448802223`*^9}, {3.517368202592416*^9, 
+   3.517368212221806*^9}, {3.5173682793361473`*^9, 3.517368279723124*^9}, {
+   3.517368363455708*^9, 3.517368401466815*^9}, {3.517368451212386*^9, 
+   3.517368463409952*^9}, {3.517368495795951*^9, 3.517368510236106*^9}, {
+   3.517368551091064*^9, 3.517368595286662*^9}, {3.517368631352521*^9, 
+   3.5173686772721653`*^9}, {3.517383983727648*^9, 3.5173840466805964`*^9}, {
+   3.517384159065975*^9, 3.517384167298918*^9}, {3.51738422514648*^9, 
+   3.517384227338999*^9}, {3.518195295280732*^9, 3.518195305846961*^9}, {
+   3.518195456601633*^9, 3.518195460327448*^9}, {3.518196187080405*^9, 
+   3.518196205713777*^9}, 3.518196243875588*^9, {3.518197087019044*^9, 
+   3.5181970888272057`*^9}, {3.548336163833386*^9, 3.548336166412342*^9}, {
+   3.548336343704324*^9, 3.548336358860406*^9}, {3.5483364701780357`*^9, 
+   3.548336484144067*^9}, {3.548336529883884*^9, 3.548336540969346*^9}, {
+   3.548344607348515*^9, 3.548344608870598*^9}, {3.5912500481984653`*^9, 
+   3.591250076895479*^9}, {3.591250218861248*^9, 3.591250226338402*^9}, {
+   3.5912503577979517`*^9, 3.59125035946841*^9}, {3.591250425060781*^9, 
+   3.5912504274191008`*^9}, {3.59125045807473*^9, 3.591250517668788*^9}, {
+   3.592322544113718*^9, 3.592322547480382*^9}, {3.5935382492757807`*^9, 
+   3.593538323133445*^9}, {3.593538380547173*^9, 3.59353848221391*^9}, {
+   3.5935392453978024`*^9, 3.5935392570926237`*^9}, {3.627039083769657*^9, 
+   3.627039093833117*^9}, {3.6270392885431633`*^9, 3.627039331740234*^9}, {
+   3.627040424610591*^9, 3.627040439399218*^9}, {3.627042128141202*^9, 
+   3.627042128248746*^9}, {3.627042242514501*^9, 3.62704228882651*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"1", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "1"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"2", ",", "4", ",", "10", ",", "20", ",", "50"}], "}"}]}], 
+    ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "10", ",", "20", ",", "50"}], "}"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_1d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.5173840443832397`*^9, 3.517384081724496*^9}, {
+   3.517384180922477*^9, 3.517384425381447*^9}, {3.51767461454566*^9, 
+   3.5176746284180737`*^9}, {3.517674660990048*^9, 3.517674671275931*^9}, {
+   3.517674784712487*^9, 3.51767478525749*^9}, {3.517674879128593*^9, 
+   3.517674881205332*^9}, {3.518114950576809*^9, 3.518114954403322*^9}, {
+   3.518115098971106*^9, 3.5181151104874153`*^9}, {3.518194668914782*^9, 
+   3.5181946821969357`*^9}, {3.518194734269782*^9, 3.518194735094262*^9}, {
+   3.518194773462639*^9, 3.518194875034071*^9}, {3.518194949105473*^9, 
+   3.518194987735242*^9}, 3.51819521869759*^9, {3.5181952521605186`*^9, 
+   3.518195257942354*^9}, {3.518196034802575*^9, 3.5181960559626827`*^9}, {
+   3.518196971634709*^9, 3.518197069048802*^9}, {3.5181975442351294`*^9, 
+   3.518197547442575*^9}, {3.518197629827517*^9, 3.518197630432558*^9}, {
+   3.5483363721060057`*^9, 3.548336382723646*^9}, {3.548336568717052*^9, 
+   3.548336631597205*^9}, {3.548336745404522*^9, 3.5483368903217897`*^9}, {
+   3.5483372613781643`*^9, 3.548337281078226*^9}, {3.548337760289608*^9, 
+   3.548337791653308*^9}, {3.5483379559441223`*^9, 3.548337985056346*^9}, {
+   3.548338045405122*^9, 3.54833809056406*^9}, {3.5483442863008347`*^9, 
+   3.548344431490254*^9}, {3.548344516346612*^9, 3.54834452160181*^9}, {
+   3.5483445634454823`*^9, 3.548344603589292*^9}, {3.548344673892972*^9, 
+   3.548344674043014*^9}, {3.5912505876217327`*^9, 3.5912505881199083`*^9}, {
+   3.591544996230394*^9, 3.591545006562292*^9}, {3.591545042326754*^9, 
+   3.591545045425953*^9}, {3.5915450820129423`*^9, 3.591545082636587*^9}, {
+   3.591545161262951*^9, 3.591545163237905*^9}, {3.593538497342165*^9, 
+   3.593538500841062*^9}, {3.593538562687183*^9, 3.593538593798908*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"1", "D", " ", "Testcases", " ", "Adjoint"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "1"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"2", ",", "4", ",", "10", ",", "20", ",", "50"}], "}"}]}], 
+    ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "10", ",", "20", ",", "50"}], "}"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_1d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.593538598765287*^9, 3.593538620185602*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"2", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "2"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"10", ",", "20"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"20", ",", "50"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_2d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.518197155351283*^9, 3.5181971627478523`*^9}, {
+   3.518197246832231*^9, 3.518197473939831*^9}, {3.518197565862846*^9, 
+   3.5181975665474453`*^9}, {3.5181976205553493`*^9, 3.518197620890814*^9}, {
+   3.548344631084435*^9, 3.54834465895175*^9}, {3.548344709542242*^9, 
+   3.5483447374599237`*^9}, {3.548344793350206*^9, 3.548344809958082*^9}, {
+   3.5483466580895443`*^9, 3.5483466669263077`*^9}, {3.5915450076746683`*^9, 
+   3.591545047737488*^9}, 3.591545090251132*^9, {3.5915451664250937`*^9, 
+   3.591545167287318*^9}, {3.593538656386428*^9, 3.5935386567364397`*^9}, {
+   3.593538687490222*^9, 3.593538688326289*^9}, {3.627039685063574*^9, 
+   3.6270396866865997`*^9}, {3.6270397190004463`*^9, 3.627039723448547*^9}, {
+   3.627040188861188*^9, 3.627040193839114*^9}, {3.627042297138122*^9, 
+   3.627042302574615*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"2", "D", " ", "Testcases", " ", "Adjoint"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "2"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", 
+      RowBox[{"10", ",", "20"}], "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", 
+      RowBox[{"1", ",", "2"}], 
+      RowBox[{"(*", 
+       RowBox[{"20", ",", "50"}], "*)"}], "}"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_2d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.593538665067552*^9, 3.593538691601541*^9}, {
+  3.6270394191645803`*^9, 3.627039421625848*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"3", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "3"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_3d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.518197606681448*^9, 3.518197615153542*^9}, {
+   3.5483451910722103`*^9, 3.5483452622079287`*^9}, {3.5483453352624826`*^9, 
+   3.548345337453582*^9}, {3.548345370487627*^9, 3.5483453706498127`*^9}, {
+   3.5483467419758577`*^9, 3.548346746749652*^9}, {3.548346925708653*^9, 
+   3.5483469438417873`*^9}, {3.548347041873805*^9, 3.548347042368384*^9}, {
+   3.5483471141121607`*^9, 3.54834711944681*^9}, {3.54834715646264*^9, 
+   3.5483471569767027`*^9}, {3.548347414821805*^9, 3.548347416066527*^9}, {
+   3.5915450136367273`*^9, 3.591545049924941*^9}, 3.5915450918888407`*^9, {
+   3.591545168950128*^9, 3.591545169962603*^9}, {3.59353869812422*^9, 
+   3.5935387078767843`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"3", "D", " ", "Testcases", " ", "Adjoint"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "3"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcaseAdjoint", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_adjoint_3d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.593538703953491*^9, 3.5935387170726357`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", " ", 
+   RowBox[{"4", "D", " ", "Testcases", " ", "Trafo"}], " ", "*)"}], 
+  "\[IndentingNewLine]", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"d", "=", "4"}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Table", "[", 
+      RowBox[{"NN", ",", 
+       RowBox[{"{", 
+        RowBox[{"j", ",", "1", ",", "d"}], "}"}]}], "]"}]}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"NN", "[", 
+      RowBox[{"[", "0", "]"}], "]"}], "=", "Sequence"}], ";"}], 
+   "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"NN", "=", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Outer", "[", 
+        RowBox[{"List", ",", "NN"}], "]"}], ",", 
+       RowBox[{"d", "-", "1"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"M", "=", 
+     RowBox[{"{", "10", "}"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{
+    RowBox[{"x", " ", "=", " ", 
+     RowBox[{"Flatten", "[", 
+      RowBox[{
+       RowBox[{"Table", "[", 
+        RowBox[{
+         RowBox[{"Table", "[", 
+          RowBox[{
+           RowBox[{"MakeTestcase", "[", 
+            RowBox[{
+             RowBox[{"NN", "[", 
+              RowBox[{"[", "i", "]"}], "]"}], ",", 
+             RowBox[{"M", "[", 
+              RowBox[{"[", "j", "]"}], "]"}]}], "]"}], ",", 
+           RowBox[{"{", 
+            RowBox[{"j", ",", "1", ",", 
+             RowBox[{"Length", "[", "M", "]"}]}], "}"}]}], "]"}], ",", 
+         RowBox[{"{", 
+          RowBox[{"i", ",", "1", ",", 
+           RowBox[{"Length", "[", "NN", "]"}]}], "}"}]}], "]"}], ",", "1"}], 
+      "]"}]}], ";"}], "\[IndentingNewLine]", 
+   RowBox[{"StringJoin", "[", 
+    RowBox[{"Map", "[", 
+     RowBox[{
+      RowBox[{"Function", "[", 
+       RowBox[{"y", ",", 
+        RowBox[{"\"\<static const testcase_delegate_file_t \>\"", " ", "<>", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "1", "]"}], "]"}], "<>", 
+         "\"\< = {setup_file,destroy_file,ABSPATH(\\\"\>\"", "<>", " ", 
+         RowBox[{"y", "[", 
+          RowBox[{"[", "2", "]"}], "]"}], "<>", "\"\<\\\")};\\n\>\""}]}], 
+       "]"}], ",", "x"}], "]"}], "]"}], "\[IndentingNewLine]", 
+   RowBox[{"FormatVector", "[", 
+    RowBox[{
+     RowBox[{"x", "[", 
+      RowBox[{"[", 
+       RowBox[{"All", ",", "1"}], "]"}], "]"}], ",", " ", 
+     "\"\<*testcases_4d_file\>\"", ",", " ", 
+     "\"\<testcase_delegate_file_t\>\"", ",", " ", "Formatter"}], 
+    "]"}]}]}]], "Input",
+ CellChangeTimes->{{3.548337660709242*^9, 3.5483376910598288`*^9}, {
+  3.548347420747239*^9, 3.548347430447401*^9}, {3.591545022249495*^9, 
+  3.5915450523366613`*^9}, {3.591545093100852*^9, 3.591545094948818*^9}, {
+  3.591545173675761*^9, 3.5915451743999863`*^9}, {3.593538740179062*^9, 
+  3.593538746648733*^9}}]
+},
+AutoGeneratedPackage->Automatic,
+WindowSize->{1920, 1068},
+WindowMargins->{{1, Automatic}, {Automatic, 0}},
+FrontEndVersion->"8.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (November 6, \
+2010)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[545, 20, 1621, 27, 43, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[2169, 49, 352, 10, 27, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[2524, 61, 21193, 478, 808, "Input",
+ InitializationCell->True,
+ InitializationGroup->True],
+Cell[23720, 541, 4456, 101, 163, "Input"],
+Cell[28179, 644, 2768, 78, 163, "Input"],
+Cell[30950, 724, 3467, 87, 163, "Input"],
+Cell[34420, 813, 2824, 80, 163, "Input"],
+Cell[37247, 895, 3263, 83, 163, "Input"],
+Cell[40513, 980, 2653, 74, 163, "Input"],
+Cell[43169, 1056, 2882, 78, 163, "Input"]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/tests/checkall b/tests/checkall
new file mode 100755
index 0000000..130a225
Binary files /dev/null and b/tests/checkall differ
diff --git a/tests/cunit2junit.xsl b/tests/cunit2junit.xsl
new file mode 100644
index 0000000..c10b828
--- /dev/null
+++ b/tests/cunit2junit.xsl
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+   <xsl:output method="xml" indent="yes" />
+
+   <xsl:param name="suitename" />
+   
+   <xsl:variable name="cunitCount" select="count(//CUNIT_RUN_TEST_RECORD)"/>
+   <xsl:variable name="cunitFailureCount" select="count(//CUNIT_RUN_TEST_FAILURE)"/>  
+
+   <xsl:template match="/">
+      <testsuites>
+         <xsl:attribute name="errors">0</xsl:attribute>
+         <xsl:attribute name="failures">
+          <xsl:value-of select="$cunitFailureCount"/>
+         </xsl:attribute>
+         <xsl:attribute name="tests">
+          <xsl:value-of select="$cunitCount"/>
+         </xsl:attribute>
+         <xsl:attribute name="name">
+            <xsl:value-of select="$suitename" />
+         </xsl:attribute>
+         <xsl:apply-templates />
+      </testsuites>
+   </xsl:template>
+   
+  <xsl:template match="/CUNIT_TEST_RUN_REPORT/CUNIT_RESULT_LISTING">
+     <xsl:for-each select="CUNIT_RUN_SUITE/CUNIT_RUN_SUITE_SUCCESS">
+      <xsl:variable name="localCunitFailureCount" select="count(CUNIT_RUN_TEST_RECORD/CUNIT_RUN_TEST_FAILURE)"/>  
+      <xsl:variable name="localCunitCount" select="count(CUNIT_RUN_TEST_RECORD)"/>
+      <xsl:variable name="sn" select="normalize-space(SUITE_NAME/text())"/>
+      <testsuite>
+         <xsl:attribute name="errors">0</xsl:attribute>
+         <xsl:attribute name="failures">
+          <xsl:value-of select="$localCunitFailureCount"/>
+         </xsl:attribute>
+         <xsl:attribute name="tests">
+          <xsl:value-of select="$localCunitCount"/>
+         </xsl:attribute>
+         <xsl:attribute name="name">
+          <xsl:value-of select="$sn"/>
+         </xsl:attribute>
+         <xsl:apply-templates select="CUNIT_RUN_TEST_RECORD" />
+      </testsuite>
+     </xsl:for-each>
+  </xsl:template>
+      
+  <xsl:template match="CUNIT_RUN_TEST_RECORD">
+    <xsl:apply-templates select="CUNIT_RUN_TEST_SUCCESS" />
+    <xsl:apply-templates select="CUNIT_RUN_TEST_FAILURE" />
+  </xsl:template>
+    
+  <xsl:template match="CUNIT_RUN_TEST_SUCCESS">
+    <testcase>
+       <!--xsl:attribute name="classname">
+          <xsl:value-of select="substring-before(substring-after(TEST_NAME,'test_'),'_')" />
+       </xsl:attribute-->
+       <xsl:attribute name="name">
+          <xsl:value-of select="normalize-space(TEST_NAME)" />
+       </xsl:attribute>
+       <xsl:attribute name="time">0</xsl:attribute>
+    </testcase>
+  </xsl:template>
+  <xsl:template match="CUNIT_RUN_TEST_FAILURE">
+    <testcase>
+       <!--xsl:attribute name="classname">
+          <xsl:value-of select="substring-before(substring-after(TEST_NAME,'test_'),'_')" />
+       </xsl:attribute-->
+       <xsl:attribute name="name">
+          <xsl:value-of select="normalize-space(TEST_NAME)" />
+       </xsl:attribute>
+       <xsl:attribute name="time">0</xsl:attribute>
+       <failure>
+         <xsl:attribute name="message">
+            <xsl:value-of select=" normalize-space(CONDITION)" />
+         </xsl:attribute>
+         <xsl:attribute name="type">Failure</xsl:attribute>
+         <xsl:value-of select="normalize-space(CONDITION)" />
+         File: <xsl:value-of select="normalize-space(FILE_NAME)" />
+         Line: <xsl:value-of select="normalize-space(LINE_NUMBER)" />
+       </failure>
+    </testcase>
+  </xsl:template>
+ 
+  <xsl:template match="text()|@*" />
+  
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
new file mode 100644
index 0000000..81a5c99
--- /dev/null
+++ b/tests/data/Makefile.am
@@ -0,0 +1,197 @@
+# $Id: Makefile.am 3456 2010-03-17 19:25:47Z keiner $
+
+EXTRA_DIST = nfct_1d_10_1.txt  \
+nfct_1d_10_10.txt  \
+nfct_1d_10_20.txt  \
+nfct_1d_10_50.txt  \
+nfct_1d_1_1.txt  \
+nfct_1d_1_10.txt  \
+nfct_1d_1_20.txt  \
+nfct_1d_1_50.txt  \
+nfct_1d_20_1.txt \
+nfct_1d_20_10.txt \
+nfct_1d_20_20.txt \
+nfct_1d_20_50.txt \
+nfct_1d_2_1.txt \
+nfct_1d_2_10.txt \
+nfct_1d_2_20.txt \
+nfct_1d_2_50.txt \
+nfct_1d_4_1.txt \
+nfct_1d_4_10.txt \
+nfct_1d_4_20.txt \
+nfct_1d_4_50.txt \
+nfct_1d_50_1.txt \
+nfct_1d_50_10.txt \
+nfct_1d_50_20.txt \
+nfct_1d_50_50.txt \
+nfct_2d_10_10_20.txt \
+nfct_2d_10_10_50.txt \
+nfct_2d_10_20_20.txt \
+nfct_2d_10_20_50.txt \
+nfct_2d_20_10_20.txt \
+nfct_2d_20_10_50.txt \
+nfct_2d_20_20_20.txt \
+nfct_2d_20_20_50.txt \
+nfct_3d_10_10_10_10.txt \
+nfct_adjoint_1d_10_1.txt \
+nfct_adjoint_1d_10_10.txt \
+nfct_adjoint_1d_10_20.txt \
+nfct_adjoint_1d_10_50.txt \
+nfct_adjoint_1d_1_1.txt \
+nfct_adjoint_1d_1_10.txt \
+nfct_adjoint_1d_1_20.txt \
+nfct_adjoint_1d_1_50.txt \
+nfct_adjoint_1d_20_1.txt \
+nfct_adjoint_1d_20_10.txt \
+nfct_adjoint_1d_20_20.txt \
+nfct_adjoint_1d_20_50.txt \
+nfct_adjoint_1d_2_1.txt \
+nfct_adjoint_1d_2_10.txt \
+nfct_adjoint_1d_2_20.txt \
+nfct_adjoint_1d_2_50.txt \
+nfct_adjoint_1d_4_1.txt \
+nfct_adjoint_1d_4_10.txt \
+nfct_adjoint_1d_4_20.txt \
+nfct_adjoint_1d_4_50.txt \
+nfct_adjoint_1d_50_1.txt \
+nfct_adjoint_1d_50_10.txt \
+nfct_adjoint_1d_50_20.txt \
+nfct_adjoint_1d_50_50.txt \
+nfct_adjoint_2d_10_10_20.txt \
+nfct_adjoint_2d_10_10_50.txt \
+nfct_adjoint_2d_10_20_20.txt \
+nfct_adjoint_2d_10_20_50.txt \
+nfct_adjoint_2d_20_10_20.txt \
+nfct_adjoint_2d_20_10_50.txt \
+nfct_adjoint_2d_20_20_20.txt \
+nfct_adjoint_2d_20_20_50.txt \
+nfct_adjoint_3d_10_10_10_10.txt \
+nfft_1d_10_1.txt \
+nfft_1d_10_10.txt \
+nfft_1d_10_20.txt \
+nfft_1d_10_50.txt \
+nfft_1d_1_1.txt \
+nfft_1d_1_10.txt \
+nfft_1d_1_20.txt \
+nfft_1d_1_50.txt \
+nfft_1d_20_1.txt \
+nfft_1d_20_10.txt \
+nfft_1d_20_20.txt \
+nfft_1d_20_50.txt \
+nfft_1d_2_1.txt \
+nfft_1d_2_10.txt \
+nfft_1d_2_20.txt \
+nfft_1d_2_50.txt \
+nfft_1d_4_1.txt \
+nfft_1d_4_10.txt \
+nfft_1d_4_20.txt \
+nfft_1d_4_50.txt \
+nfft_1d_50_1.txt \
+nfft_1d_50_10.txt \
+nfft_1d_50_20.txt \
+nfft_1d_50_50.txt \
+nfft_2d_10_10_20.txt \
+nfft_2d_10_10_50.txt \
+nfft_2d_10_20_20.txt \
+nfft_2d_10_20_50.txt \
+nfft_2d_20_10_20.txt \
+nfft_2d_20_10_50.txt \
+nfft_2d_20_20_20.txt \
+nfft_2d_20_20_50.txt \
+nfft_3d_10_10_10_10.txt \
+nfft_adjoint_1d_10_1.txt \
+nfft_adjoint_1d_10_10.txt \
+nfft_adjoint_1d_10_20.txt \
+nfft_adjoint_1d_10_50.txt \
+nfft_adjoint_1d_1_1.txt \
+nfft_adjoint_1d_1_10.txt \
+nfft_adjoint_1d_1_20.txt \
+nfft_adjoint_1d_1_50.txt \
+nfft_adjoint_1d_20_1.txt \
+nfft_adjoint_1d_20_10.txt \
+nfft_adjoint_1d_20_20.txt \
+nfft_adjoint_1d_20_50.txt \
+nfft_adjoint_1d_2_1.txt \
+nfft_adjoint_1d_2_10.txt \
+nfft_adjoint_1d_2_20.txt \
+nfft_adjoint_1d_2_50.txt \
+nfft_adjoint_1d_4_1.txt \
+nfft_adjoint_1d_4_10.txt \
+nfft_adjoint_1d_4_20.txt \
+nfft_adjoint_1d_4_50.txt \
+nfft_adjoint_1d_50_1.txt \
+nfft_adjoint_1d_50_10.txt \
+nfft_adjoint_1d_50_20.txt \
+nfft_adjoint_1d_50_50.txt \
+nfft_adjoint_2d_10_10_20.txt \
+nfft_adjoint_2d_10_10_50.txt \
+nfft_adjoint_2d_10_20_20.txt \
+nfft_adjoint_2d_10_20_50.txt \
+nfft_adjoint_2d_20_10_20.txt \
+nfft_adjoint_2d_20_10_50.txt \
+nfft_adjoint_2d_20_20_20.txt \
+nfft_adjoint_2d_20_20_50.txt \
+nfft_adjoint_3d_10_10_10_10.txt \
+nfst_1d_10_1.txt \
+nfst_1d_10_10.txt \
+nfst_1d_10_2.txt \
+nfst_1d_10_20.txt \
+nfst_1d_10_50.txt \
+nfst_1d_20_1.txt \
+nfst_1d_20_10.txt \
+nfst_1d_20_2.txt \
+nfst_1d_20_20.txt \
+nfst_1d_20_50.txt \
+nfst_1d_2_1.txt \
+nfst_1d_2_10.txt \
+nfst_1d_2_2.txt \
+nfst_1d_2_20.txt \
+nfst_1d_2_50.txt \
+nfst_1d_4_1.txt \
+nfst_1d_4_10.txt \
+nfst_1d_4_2.txt \
+nfst_1d_4_20.txt \
+nfst_1d_4_50.txt \
+nfst_1d_50_1.txt \
+nfst_1d_50_10.txt \
+nfst_1d_50_2.txt \
+nfst_1d_50_20.txt \
+nfst_1d_50_50.txt \
+nfst_2d_10_10_20.txt \
+nfst_2d_10_10_50.txt \
+nfst_2d_10_20_20.txt \
+nfst_2d_10_20_50.txt \
+nfst_2d_20_10_20.txt \
+nfst_2d_20_10_50.txt \
+nfst_2d_20_20_20.txt \
+nfst_2d_20_20_50.txt \
+nfst_3d_10_10_10_10.txt \
+nfst_adjoint_1d_10_1.txt \
+nfst_adjoint_1d_10_10.txt \
+nfst_adjoint_1d_10_20.txt \
+nfst_adjoint_1d_10_50.txt \
+nfst_adjoint_1d_20_1.txt \
+nfst_adjoint_1d_20_10.txt \
+nfst_adjoint_1d_20_20.txt \
+nfst_adjoint_1d_20_50.txt \
+nfst_adjoint_1d_2_1.txt \
+nfst_adjoint_1d_2_10.txt \
+nfst_adjoint_1d_2_20.txt \
+nfst_adjoint_1d_2_50.txt \
+nfst_adjoint_1d_4_1.txt \
+nfst_adjoint_1d_4_10.txt \
+nfst_adjoint_1d_4_20.txt \
+nfst_adjoint_1d_4_50.txt \
+nfst_adjoint_1d_50_1.txt \
+nfst_adjoint_1d_50_10.txt \
+nfst_adjoint_1d_50_20.txt \
+nfst_adjoint_1d_50_50.txt \
+nfst_adjoint_2d_10_10_20.txt \
+nfst_adjoint_2d_10_10_50.txt \
+nfst_adjoint_2d_10_20_20.txt \
+nfst_adjoint_2d_10_20_50.txt \
+nfst_adjoint_2d_20_10_20.txt \
+nfst_adjoint_2d_20_10_50.txt \
+nfst_adjoint_2d_20_20_20.txt \
+nfst_adjoint_2d_20_20_50.txt \
+nfst_adjoint_3d_10_10_10_10.txt
\ No newline at end of file
diff --git a/tests/data/nfct_1d_10_1.txt b/tests/data/nfct_1d_10_1.txt
new file mode 100644
index 0000000..1723bfb
--- /dev/null
+++ b/tests/data/nfct_1d_10_1.txt
@@ -0,0 +1,21 @@
+1
+
+10
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+0.02064024103910974619444094927932620346955741162547603478536509901
+0.9939488506160911489389650693513789013109506369408951165937746417
+0.1542994539339733543335730199449084161763486165489462822736549181
+0.7828695683967973168186338933650258807396624889375162083366143712
+0.8196703465056007618204539469140589759950911405168070546332911559
+0.6316345452201721830125859283102821997036574445025868003866206636
+
+1.69975682464551338665016119650649041251423569061314578003572214
+
diff --git a/tests/data/nfct_1d_10_10.txt b/tests/data/nfct_1d_10_10.txt
new file mode 100644
index 0000000..72ae366
--- /dev/null
+++ b/tests/data/nfct_1d_10_10.txt
@@ -0,0 +1,39 @@
+1
+
+10
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
+-1.0245626787094089578451901769564929470038322774915071995221781
+2.29014753916303817831539152748128119945768219259928667598733429
+0.13721216383747537994668588504817626124109709226879458168371665
+-1.2425324630720135339460375796120872043053902086263931643381075
+0.95235807112585798186517508840640911763183690531520269345127533
+0.13668599475016592306912053154992846340949028837596697895461562
+-1.171146562293082097901475798864607854721310055596483393209901877
+0.82752694584728184102173087705308292563365454276123609364858518
+-1.74454254645263936790155908703745720097831001345963217859679766
+-1.65260803997986333879384024131278569138526157099861879821434431
+
diff --git a/tests/data/nfct_1d_10_20.txt b/tests/data/nfct_1d_10_20.txt
new file mode 100644
index 0000000..f4d939b
--- /dev/null
+++ b/tests/data/nfct_1d_10_20.txt
@@ -0,0 +1,59 @@
+1
+
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+
+0.16056894549015343425055544384856047549129866134114649281981871
+-0.61092664263250442564378128671633679981416447848249482734229068
+0.92319830487778248368744006849690731739751613775027208021359258
+-0.3558166076480162502955400855887592615746085396236438374278862
+-1.26456425645217775727617693964448910743146718546245994417920591
+0.92360150245730436201786209412632560290284688770297784604422352
+-0.534000130441089182347217670063372454747015643879672842756170322
+0.88920800220996353487072252475715745376296405089261795787541144
+0.71688687748022809173281537755468804006011823588371465844890693
+0.5442470989409346612652530503212302653592903522005957369552839
+0.13428418491648772153303549341411119585989479347329789724359567
+0.6483451547843813588181141579078938933516733927545908485281856
+-1.132295085880124092561599858752265512078273132024249685488532205
+-0.08089039317623325671225825925932689504576871085704552941063149
+-0.986618493610978676735990350349808190102494834124714077608848991
+-1.633676719926195708732712373088119045866444948137080333314635469
+0.81841541066371774640443401020932199864912922195420751808472887
+-1.374025944932203084531763460475579955649708785469719294834037864
+-0.74928304500663225143951825446837599090359407826224103155099722
+0.92259735487922954389121839252499173765705106385076842777572286
+
diff --git a/tests/data/nfct_1d_10_50.txt b/tests/data/nfct_1d_10_50.txt
new file mode 100644
index 0000000..5b60be3
--- /dev/null
+++ b/tests/data/nfct_1d_10_50.txt
@@ -0,0 +1,119 @@
+1
+
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+
+1.17477313456702227026443679126733831861500153037264344286454833
+-1.24538487655249847165037610078192167984733495349881448326927345
+-0.28003973599188708307124834329349314454991856710603052793366084
+-0.00662419021391808418284118036955576421144592509162875216255417
+-0.43049395030017056153495706343441190465601296813540252690812453
+-0.28102505354972340188424187590180394489787828606111502410454315
+-0.136335494846354174681292238522206666335154629864405085119845599
+-1.29872007006619735674201572494543470424924137762183493212743429
+1.079325627146093460587646677469004800777038432606125328506884
+0.81332589262671188508130861395378930371836559233662408729915645
+1.15288185207009646972957989846548780511706266381464670575487228
+1.38669552254640808001225214723232190725584784211595686812770524
+-2.215593105423288741099472419163052388535055670473991667668642819
+0.93575365585970565622799315913575060728025205889083408992490958
+-2.430283196574742850569584126698840895535707503210506035143773698
+-1.047653766309028882906538097636238149730570608114721265769587668
+-1.54375405955969215321918121033167773399476571833499320384135405
+-1.84622662013402568653315031733212568503584464370128784635026239
+-0.11221669385167518485895285249530091355652964103506906770095275
+-1.14770611063996434679349012088229228715741950440344426448816739
+-1.69697372849883054243404271662246316371164290470475625175869311
+-2.290562320912057668057786132545878007847023083355247099488668944
+-1.7865514971431978419515573325815251292896880668064040036660684
+-1.84621469431685384113860844893821220044294186294044143740807468
+-0.04603784559657392181165640744567033829049344677245152885829461
+0.04857458840995831979004395482066218248654070271391664793485962
+-0.83701061548584889539090558180595206117275784526636359158605254
+-2.17106062717152365916465357537854299293726541988730681837168853
+-0.13301959309546683474422284623477614090785499562305387178363486
+-2.12098518118111746864424674568561410049494908838884314890305114
+-1.79265065315160477320489417496755278997934033234162008431901786
+-1.115539560838361731292021214125157010260724175790023777300766155
+-0.04388124279236592849546830518959247535968568657542208295643158
+-1.06400552601844251589493197887220610213869561768531050269462128
+-0.08070904848241115734567829669226953279003880479142369706885344
+-1.489703673561723124559863818375594467102892171781767403784920386
+-0.74383898042811581120229739088480493963991762055251532783542518
+-0.02101170392629228251376173568675424985833185915729094171408333
+0.06854849005140825678471086161898381241529118374906074110193068
+0.53033874594314108353306667455343420323818925115864139487746038
+0.05937068889500730561815446215911702229026891121419747907911177
+0.00023299553423679659386461581519159757681363736219140496761111
+-0.0519291116201625368255271405502979401709706104187445507054391
+-0.13699077041289276483688436168764443073244871091616814579927246
+1.3585927512819616139155922933053798128569854373541019936216807
+-1.778879751234478158647173547911814685188009852922528662028925095
+0.11454083135504683547750803898022420474612221655417193973620973
+-1.63650793706433592010703558511949766216069648815950554887434488
+-1.689882881063697514866177291260004530516263424073210234110319424
+-1.95574407131502493566214738150496694697946901929104193376639686
+
diff --git a/tests/data/nfct_1d_1_1.txt b/tests/data/nfct_1d_1_1.txt
new file mode 100644
index 0000000..73c5adc
--- /dev/null
+++ b/tests/data/nfct_1d_1_1.txt
@@ -0,0 +1,12 @@
+1
+
+1
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfct_1d_1_10.txt b/tests/data/nfct_1d_1_10.txt
new file mode 100644
index 0000000..afb841b
--- /dev/null
+++ b/tests/data/nfct_1d_1_10.txt
@@ -0,0 +1,30 @@
+1
+
+1
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.6316345452201721830125859283102821997036574445025868003866206636
+
diff --git a/tests/data/nfct_1d_1_20.txt b/tests/data/nfct_1d_1_20.txt
new file mode 100644
index 0000000..584f50a
--- /dev/null
+++ b/tests/data/nfct_1d_1_20.txt
@@ -0,0 +1,50 @@
+1
+
+1
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.4413098759704276115157486122940138778382450314554048934666388869
+
diff --git a/tests/data/nfct_1d_1_50.txt b/tests/data/nfct_1d_1_50.txt
new file mode 100644
index 0000000..56b36d2
--- /dev/null
+++ b/tests/data/nfct_1d_1_50.txt
@@ -0,0 +1,110 @@
+1
+
+1
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.7335087736711041883089151876515694737975402817556229765975958245
+
diff --git a/tests/data/nfct_1d_20_1.txt b/tests/data/nfct_1d_20_1.txt
new file mode 100644
index 0000000..c2d5bc6
--- /dev/null
+++ b/tests/data/nfct_1d_20_1.txt
@@ -0,0 +1,31 @@
+1
+
+20
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+0.02064024103910974619444094927932620346955741162547603478536509901
+0.9939488506160911489389650693513789013109506369408951165937746417
+0.1542994539339733543335730199449084161763486165489462822736549181
+0.7828695683967973168186338933650258807396624889375162083366143712
+0.8196703465056007618204539469140589759950911405168070546332911559
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+-0.4413098759704276115157486122940138778382450314554048934666388869
+
+4.8591328767153948066017370873646169670230164406972297299491461
+
diff --git a/tests/data/nfct_1d_20_10.txt b/tests/data/nfct_1d_20_10.txt
new file mode 100644
index 0000000..42047c7
--- /dev/null
+++ b/tests/data/nfct_1d_20_10.txt
@@ -0,0 +1,49 @@
+1
+
+20
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+
+-0.4318075377384143568545338802271190633479492080951356210420096
+2.76826214881705495734159923679826712440440017699678544291652419
+-1.10263592927676847811912948104406727821973073143106126917713594
+-1.1151571021427263025313986052297805017187557754098655331367301
+-1.29150816192129975032112112500140368640609551218145655875273208
+-1.10542288234164913467227051511699676502619257431393238958603312
+-1.69828350111249592538912674933516031857508507102421268134762712
+1.34061146799265684068995809084880391342759265997054452128645643
+-2.4681029040808987906202888459616113397668329730551154579387877
+-2.0527094890234481651959365700611706895219378356435796099948589
+
diff --git a/tests/data/nfct_1d_20_20.txt b/tests/data/nfct_1d_20_20.txt
new file mode 100644
index 0000000..f34b79f
--- /dev/null
+++ b/tests/data/nfct_1d_20_20.txt
@@ -0,0 +1,69 @@
+1
+
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
+0.4790185289334465592951109742376629012853913159184133772638562
+-0.2573928610197776111171018223647761716875249998878371452180352
+2.5167767887118458542117919917227830341210435917054814385276732
+0.3344611353970216717447355030076451650906913421500055150109923
+-2.85313296318710402916232328230338987306401018501363608977608431
+2.5136294524644936676221924721212076247793934618330167597777453
+0.40501567285315209963437887121664542698984878708708958878592049
+-1.58297048447156555880656144770783610554740760069036837158898007
+-0.2674896173708194399795151279901243268289012617569966053555094
+-1.2604509142619383038967416587587555573874994908820514239476027
+0.2992475933167000535149683975504755059373581115482563214384534
+2.7615032988146267416753099624234448357953409527457932396788514
+-1.54870508576709954126202082109471592950939092334961113126562617
+-1.0435750568351762815233809744364609760811498785230417772018034
+-1.49379664704895220981555848234069700200126911972683146878499743
+-1.85548591634712905371366766818917342005342437926736278301196155
+-0.64943014602091935799176782375038348959729730184804692182679049
+-1.17676196740181683379738363369482998100305138004725314044696684
+-2.74177456087954184894967937338040318619077141573659040849348996
+-1.70778645737946928979215157998813104159698862897721177384940458
+
diff --git a/tests/data/nfct_1d_20_50.txt b/tests/data/nfct_1d_20_50.txt
new file mode 100644
index 0000000..7ec9069
--- /dev/null
+++ b/tests/data/nfct_1d_20_50.txt
@@ -0,0 +1,129 @@
+1
+
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+
+0.0185137776595384085750711485679743736526843527583090284895784
+-2.1590466948292312727528923259233176614534244959430740335439691
+1.58132815082011538640720182237449804658572759414391101232352885
+-0.4008712280903681926996539487065809845913089201631010867740089
+0.22541954716294121633183538758986634518136442590399486537026134
+1.57614393854178856070239259163809631855099456430178636824191473
+-0.06563451267256464359616938111710946244362634135774011779096979
+-3.5156536158798769508877699598404301703562309180449483052044497
+2.3150994235827090730860903977583017348581155748810440084509494
+1.6028268617440695111391925170647611434194322950236036965089497
+0.0458034042911343541147626973802076393221206735818012276537091
+1.0102353978533224245697493723141734641461746678720482445740983
+-3.30314495473281143083680457212886715922578901248350180717982313
+0.4425936227486223918847987651567455044654714545999243602240438
+-1.94902457504112976766834585298862071418052039515626968799668763
+-1.98700876801440489878818043916669695144243316158183738581932325
+-3.4004041582041050750362475184068347437306561147739359514009195
+-3.66947184143567952282549369090755268840065224479728265570615452
+-2.54521534733995440856510328130691095370830411416673621446835494
+-3.24225271390593919838482540338425260712110501394000362188639013
+-3.64693415293453912768643005258701711019746295009215144462429559
+-2.9339040932995565254699162425350620121884765312702656415714347
+-3.33553653601393889665814697776549352008051733091822321673148177
+-2.3350148699195907681408380932362078896833834233009181812080609
+0.9725132681576997994605333275050203778572593088667782135270661
+0.8467473060672513909257556381628700948646366091066785142010521
+1.98017102021564172847356649335201469573380763431039644786295709
+-1.4311170544431416911693912646785281478450962265157085877713395
+2.12126809903934153906086063685054514051856284851715170530650774
+-0.7733514576140788260900248175244324988945623680865218976157437
+-3.11425209237024255700967572329889716865136509336505197659531587
+-1.95952161287808005399096415508514477837970684741419037035845456
+-0.3339584445901697942459940819282480356592448011256627647715576
+-2.98370319024411054061264774862689635970852108395810201299425469
+-2.71047979194881545070066259616951930017650831009075052516043332
+-2.21026358836500419692824433300986994934490616061614667612304512
+-1.4001149414866005377140036075632938131817352331407239724254067
+-2.80832442264650874436452623825940226087425460364486353122824282
+-0.12916042444153400950106805416213937461367796513383012153497767
+0.4999456108854195188909723229299260741014763276896523849992855
+1.0931948384450161440213069973613148449816270586293048526904247
+1.7096074869119833897399970811347152435946901214944570869144895
+-0.3165081757388464841203045547966055247800394096329437505832796
+-0.0631831778637149346108854811058016267394817258298118524505254
+0.2277415918156673856424096193188255502163378947488802003809335
+-3.50737069354065148409099452666317049620617376609325434455776508
+1.1392535144701072161477262863816315354423185614211106925653756
+-3.31779017815649427555526073831485418770424798036388357487266071
+-3.20307005322924913551013187086130909954237345461969635250154095
+-2.5514387501419313236568959392689334769905024402814000519091236
+
diff --git a/tests/data/nfct_1d_2_1.txt b/tests/data/nfct_1d_2_1.txt
new file mode 100644
index 0000000..c3419cc
--- /dev/null
+++ b/tests/data/nfct_1d_2_1.txt
@@ -0,0 +1,13 @@
+1
+
+2
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+0.02045501150664698515444899608259832622778238194598181287024763486
+
+0.4299216471657693751804107164390104490849516771740049464554602806
+
diff --git a/tests/data/nfct_1d_2_10.txt b/tests/data/nfct_1d_2_10.txt
new file mode 100644
index 0000000..dd47539
--- /dev/null
+++ b/tests/data/nfct_1d_2_10.txt
@@ -0,0 +1,31 @@
+1
+
+2
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+
+0.039382491127295665570833615131677793009957179780329511340652096
+0.17612738208170539934437534349429321589381582076251529194367515
+0.608981781642157791562341927618886371712903425660184566263065776
+-0.070393728526667115309294799615770661550304206760099951631274503
+0.91299824668235858159469944660276225054052584761649020543349437
+0.608776722012026517700546332549718650496180692558386742397920036
+-0.073475167285974612557600971274758401249028050642673428446984349
+0.462395665076707321756467044084264180361581119220738672979994637
+-0.032889505252564423531297133605298046369073784572071589631794434
+-0.045406487929222942617767005792577712898856950978374834794829428
+
diff --git a/tests/data/nfct_1d_2_20.txt b/tests/data/nfct_1d_2_20.txt
new file mode 100644
index 0000000..efb5435
--- /dev/null
+++ b/tests/data/nfct_1d_2_20.txt
@@ -0,0 +1,51 @@
+1
+
+2
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+
+0.338659199330042340615961744764564410072749195758570382081834953
+0.158572384243962923085902544613817242820829090077327328325952611
+-0.411477214456056069434784826776254545624589662958207381226772607
+0.483229498313007859984303218236451660299731189090556822129652243
+-0.811853100828815770694903009646353662287690795376426895023069973
+-0.411207160230005442071709327507424814300297047915033167877138673
+0.48728761330489810750720568765587515763863081205380095924503604
+-0.21842995189390420246639835068452711140166023209356357200968032
+0.433838138426939921357835738319723130936926845112462586965029451
+0.450322436516574477879603066809932247279198345422598103016076991
+0.336160287728380298356122403330969347501114507027282476699324048
+0.389491838421987662167085049493590298094183150117847921856331242
+-1.362373838133861343283404038185247425054523393162096367836946022
+0.315015624220621131298377527645323058476982758673329861927474145
+-1.367215868632381802974382117505205309833959097647574292466923246
+-1.240984661106023302797223770612730332238920840181394773031717988
+-0.179828533656446669521128876155063365897596439552573181463645956
+-1.35262556632730180035639198252090209416656498446804756113242664
+-0.732043312365727409462648535437044490974305190346826870198361764
+-0.242285714444514333363711563937656633545758973665938198263270809
+
diff --git a/tests/data/nfct_1d_2_50.txt b/tests/data/nfct_1d_2_50.txt
new file mode 100644
index 0000000..09aad6d
--- /dev/null
+++ b/tests/data/nfct_1d_2_50.txt
@@ -0,0 +1,111 @@
+1
+
+2
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+
+0.004489621401283796538635005463267871803851898245335140279863394
+-0.165906596494952121772237448438426523420368574139373778062132383
+-0.705281428490960315702161438750255612511397880000427187068485334
+0.141280491710420465825838265145738431689157525529704667182377524
+-1.084112809023520517620570048566479831814445264343117524030911573
+-0.705025906071265532220262621113392290201093745903629034204512937
+0.145120236702720925251826176382244193967255867764947818289666352
+-0.522622173841534182511937370706559126630411788318652344230562489
+0.094546915366616287267402963058449714642713030779862911656079647
+0.110144181872802605038318054425935014656992696252045869003729336
+0.002125177976723773447021535034611836380735302009618798293198213
+0.052586920711128592397423411242762079854044621067202181998652224
+-1.605009641284052768219849089421067110340060916111314592414512935
+-0.017881676432293015238062467654120994603088469041402643054303
+-1.609591118742531564503305147621789791681709578100039792699456556
+-1.49015250058114561444954588676657526480779583632872059305075991
+-0.486097924856678946131431649828930620863140631732927205748105052
+-1.595785930786045006755616182775777655357981675061777334901745547
+-1.008597640971330809764939046857748421498879110511688380645019705
+-0.5451942411620186843669598416422849549144157505650143964827224
+-1.294985110793306741804185741307841030821762179820978560779269999
+-1.606663097046522202912637580818330337852129917624747936233113215
+-1.331365881992653735093804162655935444150167460137984403679348834
+-0.437917288938481582777356870486031714871155042621719282416038243
+-0.085045307990852847975176327988648120828016840668816121160961877
+-0.841427948471726524656087692817370124445917346507984705791721236
+-1.151758666282417185359311224273826651267868161806615426071068375
+-0.27932171814024257367868594934588737937964385956373515131549327
+-0.748658403191068042094335088388714472612976672277685451685182222
+-0.38118658362513657293534015911263461722011424523767769667617724
+-1.33831119733476892526982168204540511412845300485856393000074909
+-1.480589827049896292993996438484624079271199860047103860795919669
+0.142403332738342202887691753742808677998730980113095484226139656
+-0.557925396017514705846683849181630750867903035738948966331158435
+-0.998058542183627423529158191267954441855180302899319852790006615
+-1.584272008257365376158987547575657571281388290968511604861344113
+-0.609689880590024283568303195717078120916545964524751016958867769
+-0.974247501225874973853423485756499164534151011914165488195700471
+-0.871303635197996669214847188648280328519834779312381958897846644
+0.122725233274878927769567323161921242004805539817590992787840621
+-0.07839489486102801262009517697833110852107562905427693045631988
+-0.805906694587369196942384299734225605222128046667618327993308178
+0.142643700686235652628668043156263442158998401432338758387031886
+0.145139155672848188501150889974333801039495444684777342994197289
+0.032522004924532398713085227318303526998655102305597664660036407
+-1.593858197376479663273789384772394110882016797994747337581414475
+-0.074900930724936224088385754496940553224789160507878208229024883
+-1.280176058803884100057901976635582930865073758124812082186103235
+-1.591157489400648069874901075704058715921453509304657855485286114
+-0.237108147386072969046570129465893166857517287447768951073173758
+
diff --git a/tests/data/nfct_1d_4_1.txt b/tests/data/nfct_1d_4_1.txt
new file mode 100644
index 0000000..4f304a7
--- /dev/null
+++ b/tests/data/nfct_1d_4_1.txt
@@ -0,0 +1,15 @@
+1
+
+4
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+
+0.777097114457724605627439567606361135086938551582473871953802149
+
diff --git a/tests/data/nfct_1d_4_10.txt b/tests/data/nfct_1d_4_10.txt
new file mode 100644
index 0000000..3dac813
--- /dev/null
+++ b/tests/data/nfct_1d_4_10.txt
@@ -0,0 +1,33 @@
+1
+
+4
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+
+-0.24735778590304963587519876996380457398207546489879995187383982
+0.848991415400418916181238367578435422325687541423895747760321057
+1.584029300723588663036900243793913819650151648394258469892827709
+-1.554815932083824514804453924329812928924757765590892149821625637
+0.967768780983144163511655932519097604824872763210559481135924561
+1.584316168888259504126690802693947945666315191365294995223962213
+-1.597607987421649394962618257570573685039591507624061754307607548
+1.677956971646676793565053244584988786175476545090093524306594432
+-1.06141564982072109956588913963615046505959068564302120792453499
+-1.220513326732795992429865920329466463217905574686359505292990422
+
diff --git a/tests/data/nfct_1d_4_20.txt b/tests/data/nfct_1d_4_20.txt
new file mode 100644
index 0000000..1f91d10
--- /dev/null
+++ b/tests/data/nfct_1d_4_20.txt
@@ -0,0 +1,53 @@
+1
+
+4
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+
+0.175614481925146662320098262071842564685008533175080935785330805
+0.425157089117904608971585360014767173061400600345254466569707191
+0.084959921081124243742809781080673562177811178686858659911255837
+-0.194570421134606274465577011107936054507581134697664445159740448
+-0.693113761439313039789068287461935709925799267780922102674257408
+0.085401856166059977140887946225522623683599027184696724892053798
+-0.207360640140739154367967828137818448056513876901356922692540983
+0.348275530656553607778107262101056646236008034011453739180795498
+-0.049675147782650267055301212255934300968325547974921793461777263
+-0.095841675712296595879369417944369205430966894834536333093167748
+0.180611959655319047644845756557277069730298588082795918002134758
+0.063897400214980120000451509603471113268733288333387364430796095
+-1.620728797666678803277425943479882335402658239038423439997151875
+0.221084024411392413830192005444654951856618776222383358628859832
+-1.625352918774277275836639541293417894712169698521521148246423747
+-1.477487629776430396125470347354739012628704630137595698561817395
+0.386031834703483923191724647357429083627557391219848301853143467
+-1.61114837133674839864513370092384761914008347922132525944436372
+-0.527372723543109376289098785791525370306297274666638569629345695
+0.322184987938899014793653717700929381730728843937657081296137779
+
diff --git a/tests/data/nfct_1d_4_50.txt b/tests/data/nfct_1d_4_50.txt
new file mode 100644
index 0000000..6980641
--- /dev/null
+++ b/tests/data/nfct_1d_4_50.txt
@@ -0,0 +1,113 @@
+1
+
+4
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+
+-0.016150875196587450823219857015829792733995691938480679614307462
+-0.775544403684495879244975167618802350784575657110480673630840078
+-0.964024849021281795538540890740485519795616044814270991773298438
+0.977523870975655596373430129731556724080734800883076935402443751
+-0.583301438362620406221194979903963619369600475952409184460683715
+-0.964345594403537076922869239543051818693908723664676240287131277
+1.011016925419086359208154881593726392760417138477517230384621851
+-1.141209743720279969572342397037219150350392070463379167370142631
+0.595235140743772687778968280413799855339854986435957229804707154
+0.717680738039057004119749081106082590540484959191295190599410015
+-0.030100526258873264871046823812472135663098716330596302975844518
+0.290556740970046212469075153103869873035708112302617480455958585
+-2.03975858210037449283712991736153954720964036063265950802184065
+-0.144029783519483812073155461833670252398851399335052243466985876
+-2.07136207041436539181092079468710617606203929527060832576102124
+-1.376613919810517563386395196181813618781717619503445552030671302
+-1.157179647963647673715733489455535774632532209494256359041340554
+-1.977384574103589499057874649994815157118728007721525605745343507
+-0.616533283793665291416061642390153726266820042145517051306579612
+-1.127252045749571341498281682347256554837206619885488374647656877
+-0.744031228012218158527654183782290107011499594937963255344731389
+-2.051116471925750642416043927931499941407876097759797387399031
+-0.821023348132063346159790857911281052628987756628064368940319065
+-1.16400419234293230624802372916590361607373888619129287644711583
+-0.474855057960346447879281662643671013089850805486538190573427555
+-0.787536280422646967773629128806310762441248532581237567430779422
+-0.58869449279811304757168136974466965865674022957421067766894997
+-1.040426508116079908775732181647205458976396924263772137111679095
+-0.908310618532670251808822515040608874350420018191723800931367163
+-1.147936089418568433685202720922075547907685914522260474261577921
+-0.837672518385467293657244845449435397117031309047290114540279963
+-1.33199573158386488675433767959612440204288360443100310883705997
+0.987284802869195027942646119837489102308084549842255644113596882
+-1.118129958172165734565997121075980064940919020669618512148739357
+-0.623912037651322372424480718720859442599371378965013615421462016
+-1.901847199280029207401529253712657628023189109781129036791641861
+-1.072908681357943271134497083239438434344175031071634429788403216
+-0.642698789148425566354592427827261503122203626817512045697234148
+-0.750581444037534251112105795072320309676433963700085797183969556
+0.820175771698131752721622431345059499392227251124920417463844806
+-0.445518569359646156839045115812592764952848191794404627733995618
+-0.83323078475522566240156660376034874112976371162771956355398457
+0.989377911652119584353023701914618320854586724556584892439581665
+1.011182748266446912472056880820262761045846941382899513466395211
+0.157221304547255051511161705528037895869279228593668882685567665
+-1.964558593160873305542686475511008880590308318812455813158900327
+-0.429812585261260331041844425049439815079686879575087783727868176
+-0.71743126382093870572109834094148059060953387373971489798890736
+-1.946711150062761599712766137107377549968502116654158870618981133
+-0.961423766471851878325260145273668839858816337521913652988326371
+
diff --git a/tests/data/nfct_1d_50_1.txt b/tests/data/nfct_1d_50_1.txt
new file mode 100644
index 0000000..3e83be4
--- /dev/null
+++ b/tests/data/nfct_1d_50_1.txt
@@ -0,0 +1,61 @@
+1
+
+50
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+0.02064024103910974619444094927932620346955741162547603478536509901
+0.9939488506160911489389650693513789013109506369408951165937746417
+0.1542994539339733543335730199449084161763486165489462822736549181
+0.7828695683967973168186338933650258807396624889375162083366143712
+0.8196703465056007618204539469140589759950911405168070546332911559
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+
+-0.095216496039431360968517220703323262542710967223629461732411
+
diff --git a/tests/data/nfct_1d_50_10.txt b/tests/data/nfct_1d_50_10.txt
new file mode 100644
index 0000000..c0fd5ec
--- /dev/null
+++ b/tests/data/nfct_1d_50_10.txt
@@ -0,0 +1,79 @@
+1
+
+50
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+
+2.9319118922221067969442626415003360247590987756024470415491015
+5.8211008992324219639584096479021138755829586066308844518519782
+-3.148786175063861062367527209905594409397584040438673424862884
+-3.434375117290023248282196259793411994912368258977001337908982
+1.1160596229545338493026636428334629262666982361322570146021716
+-3.1577003384044218208673190248600580161402373173059331706856838
+0.849368213858866426668782568151395455935912204744984652449341
+-2.4889109354455648692641268614030913191681068710849088363166612
+-1.171946490723935974263282838049612037202096600215064465814751
+-2.3471816567009013436212328035973464929957713446375066170387822
+
diff --git a/tests/data/nfct_1d_50_20.txt b/tests/data/nfct_1d_50_20.txt
new file mode 100644
index 0000000..245a017
--- /dev/null
+++ b/tests/data/nfct_1d_50_20.txt
@@ -0,0 +1,99 @@
+1
+
+50
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+
+2.301550461928645415151376039343047828025277436983808103520524
+-5.9298531629151376556307214648820419212522114302034422669331848
+2.8659247013510089505512239021457644797430633869246982982688589
+-0.034689503244046199408714992145022677706644994890594375645821
+-2.8839760233828965132754100004983200391314209720128564425926839
+2.9033336617184396278399151735003789015747921793908786211517497
+2.113185461167203959751972816284624748017248154437399492324593
+-1.6225189025794905364594560942121914665840886593369881934480332
+-1.514451364956205354279474279008531226160134596538772112631426
+0.86045078538023967546023187819859573345517098426040287797162
+1.856742716711109478387319863465062185224735455429869132214024
+0.549636378865919759666687046947539928628685478379757741710117
+-0.28063026941510593401595858875388219695625186957364992766079124
+-1.5477504200712025937411432759584888315715762066451790346151142
+-1.11615626685677564338692274208481640943047792599724778045299268
+1.9781740891341827404751312244428971145598175476739877832692813
+-3.3127367057872107354356388732851092751680491631794965793738069
+-6.53336062728282330195729956954117919809831683240639146907368732
+-5.6274469072186574094402886063928601179199976494251687779574752
+-0.9605469404209434310790222530096799601736481961598552701314406
+
diff --git a/tests/data/nfct_1d_50_50.txt b/tests/data/nfct_1d_50_50.txt
new file mode 100644
index 0000000..05db8f1
--- /dev/null
+++ b/tests/data/nfct_1d_50_50.txt
@@ -0,0 +1,159 @@
+1
+
+50
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
+0.317442095249196279478860663207182135995181906934706451054002
+-5.922030993957337440590096986796719657864460776311609210370333
+0.6224014398529286597501766725143841632139879959970550922950741
+-1.779603117995430836916613226081968991412226801000436321134245
+3.9013502911241169525447456110534213154351631149709879116525614
+0.5816249435052974701451218481938898747037329720415207325573536
+2.8956259567810406690734361685881462491936156491205116219409363
+-4.4157734141652244731122642928526566990953476500697608517313468
+1.151326369871321966404149052009158677691595177076501114549831
+5.905370312987898887545005946632301855088544112597981161134953
+0.0758360831590048285919588644654011469117634683964283343563207
+1.7975721612584776012659401634634148711076491981262851897411662
+-5.05489226117840658111994835870362292713988051546908714868347249
+-1.438619126465186507131286732238745835173470258545232487285604
+-3.10010400983239675844385135248506303929078973470219893224669834
+-2.7981578660991805918403476283202505388480719661992897864426198
+-4.0923942973094971651212199374172633097239136942725125195485083
+-1.83880402404883099237799130464810021722010320878756630370728411
+-3.418313482579325351356013410377915790574601520368118068259476
+-3.2152162159364431486856107705347541645093932323336380561883761
+-4.6597366739211151476832754675708163287924068356484261669085011
+-5.04543117351871642291847762124765869940611978171393495726489775
+-3.3853843627145180231328686388409992178125837937949539033205338
+0.2417635173758428468755651098887304486446659691743425301309328
+2.0621113609732933172841711946881846218937629143230523048264318
+-3.7734885836813749449457391738382786858649948839043234630768401
+-4.1475744836219346453108045740071669467729914286803806473651487
+-0.8515607419860310162545291864879089218830469975292075465351598
+7.2270207149226746907414501001363294044650860228593622969779181
+-2.1649213515819503133045163234665477316356332124999143035100605
+-3.9863302002405202395686408004552373059829740979131816747661557
+-3.7404182067002889253433820404458312565038872539375963586544895
+-2.886422146388298722067034969193263461698598507673844729481531
+-2.5041719294313035915281396616781105370937292342421398549430247
+-4.2184760546056017964677202272356210062183837794836079846305546
+-2.6312071396196267898278528270957322801030185070468835244571404
+-0.8272883707411873542677162494412437444455378492749221131541834
+-5.2247059392988539601008287146289057843495394884843216188788744
+0.3168346084453150449922299998943152862011949261332908698673461
+-2.615700830557533690858716057292227080190337794592640003508787
+2.1470789861147962921959072491792024809396836097033337156153423
+-1.0003535992486950386501757863725154865217613938142702226282457
+-2.995085418204854568217124055423968996880830300143334802297221
+3.0210263220503514139681690605530148826324704415234391481057284
+0.789162537492965297394300170989055322786110429740680096568904
+-1.62122048865839040929504633070382845470628099405150832088248199
+2.1885143883895788262227321495250026857574507168721722351747161
+-4.8608256375512039218496495105874472522210854955757744032379679
+-1.6830446754509679984757736152473319692305830919636102561627938
+1.2538380391214916359473353662881440230876779879991036694976763
+
diff --git a/tests/data/nfct_2d_10_10_20.txt b/tests/data/nfct_2d_10_10_20.txt
new file mode 100644
index 0000000..d170613
--- /dev/null
+++ b/tests/data/nfct_2d_10_10_20.txt
@@ -0,0 +1,170 @@
+2
+
+10
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+
+-1.3502589817473881055672290257888259128874929564747676099758968
+5.8265874237883015219174037623795287970195479244574090625720673
+-2.0846155938127425162055095484325744929107308657564327610389095
+1.3884669128367585726342475381673746763992429308038975493612961
+1.3846487768470710258849650063099789281282197591249421524230473
+-5.3533131702495326138669773824279032574257094090896538587415793
+-3.7608961947899123595131414769184575994600446447966237152965016
+-1.2916045330886434734007855973695520507166587453578358775000232
+0.9893403554708623883863007933786971045833143829473269684605414
+1.3784586367058617498844015477097487845360449245816631368093797
+-1.4071872303919210861311354781093100341628661459480869962764473
+1.7463564960888594132845597333919489605832163923320274266933245
+5.1487428397754444867354382875474040221336884813452096225388697
+2.5010692579671900381383118670839116733373690124075871436236191
+0.4106964476055043489874888908162806036458681783761092203421054
+0.9023017592280738906473020098216248248329436614340874916234448
+1.3262781131966960412467972891348241142439064366933225047930441
+-3.375128151829611876922693385736174960114561136025504962925876
+2.773787503452449619759808074467556058174042378590321683191982
+-2.8787216037577226934421982242865218636885848790864485512062989
+
diff --git a/tests/data/nfct_2d_10_10_50.txt b/tests/data/nfct_2d_10_10_50.txt
new file mode 100644
index 0000000..42919c9
--- /dev/null
+++ b/tests/data/nfct_2d_10_10_50.txt
@@ -0,0 +1,260 @@
+2
+
+10
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+
+3.835555660932473380118874572712418010230430990380332718987471
+2.5979956517508029271443924126219265842795612123926900812509782
+0.5478482024031328484943599088120575123372767891877589159709589
+-3.4399476202224425042412598765846152449364376458367813317076299
+-6.0333243463096312459883119455437581300287841906446908266733392
+0.6980902503535741234808365440454509308874003968234329964401504
+-1.3996183137080875397517598624475293069897407495635701679627888
+8.9563136297526141737893146286538315666211376471022701455224615
+0.5468707279224485282935635634977689442711924490997100416153385
+-0.8538484599383739158174444776021430335057403646904081507451485
+6.2717091990272562932511274227558443950547834428217642008964739
+-0.5613137398826780988003274365964721899496449355441214860423845
+-1.4778647848743693752673703263740216848680206006891741880914084
+-3.2132314114942673810207726089030107027257993158247759815540242
+-0.75273970677393273461641143645407090948023481999410255219695467
+3.487370570896609433000744010595281753526896810499076301819206
+-2.2981692263798629705908369976447648230372073113622080797746889
+-5.4690302735385588238609682950149090583611767383929748699772121
+-3.9559550668221334527205536750570674408463163084127321223005222
+-1.1864786451449557977072013392903375527305238502817275748790648
+5.2303367962837242992649510135753626822666072632321759836816603
+-2.4617339758710435387737719306887966397201702652718602888433695
+-2.1111142693402510380142491643258029004102381820353756648972829
+2.7756039204729736192362111271634455103883016174421766519560742
+3.8939938153899763916883040123913420111481119176866781595241861
+4.6159862733011106633193579963138819151029848162602726702519791
+-3.8939912101750592410247517306042860689455618792742304642255076
+4.520222770216150502635369279095724039127838221151339850787245
+0.1444317823837287450664403228622561735219974421448982566263597
+2.8939002238917519322020147518452592858023558846479463163005021
+3.3651221067595010583925176596703769719458443886548866540649639
+-1.1893028654498089882974629188307361194891974538264148796977293
+0.3209770814034334886882418923066096190210316958446790944692665
+0.7171661799806174799930620315936991208619109831316391058490721
+2.901317413504035443747498152274148255839536637098125087999856
+2.6161325868323011143843894665277003556774071127596467871044588
+4.7763152413716088122961103139197895567869901319561481329913626
+-4.5830421011718332845081533049051308449973238402744042011155248
+-5.8164507843572207791108004824324233462778405429649581070761409
+-0.3606693049896848359371004239351234637741086764635209941005853
+-3.9320106326408622573858473717194316931562894551837707971982165
+-0.8830756800598518779990322871131562648636205367987922349435836
+1.4084763958282163316615196406499589199741762455855225028722856
+-3.0535268594715224988543473319184508522660303740632941121218657
+0.2621196940605164999458683033305448731220014276871090457228459
+-0.4162241719665683238037693748050787604452595329442651717256413
+7.6804177733463274166467334803704489128376016025616206600293895
+3.1086127020196717314321670312839928966877113988596387113265537
+4.0509064703226970953103713913257353244185361261918537770006882
+-1.0820919328471417329028539738134761990848192573141313824272136
+
diff --git a/tests/data/nfct_2d_10_20_20.txt b/tests/data/nfct_2d_10_20_20.txt
new file mode 100644
index 0000000..c28a995
--- /dev/null
+++ b/tests/data/nfct_2d_10_20_20.txt
@@ -0,0 +1,270 @@
+2
+
+10
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+
+5.5319773784298443725253092622157214269236837852028251736349098
+0.2494881537496739346332178123451293324575827966223924420357772
+2.3471093501925545311005729085247522076372949877766852452057874
+1.41220293592469354572091576263561191686588459860512372575317
+-2.094040153737036568415727371850328333481934111040996941917872
+2.4706888788619771219159049465908881041933666708373948039889094
+-10.4530489838578489966033702550118885161352895790165768260703546
+6.497972932454737093153114197296618620658538902804164475835067
+-1.311112659305695721790098945319908203785147132799578881698342
+5.409514700298341321517346826944666718120792229781393447024353
+-0.7188197747989300014263248522177714750886702019856812933653815
+5.518502894692485732482505465514554436359509129326904891994083
+4.087474288973415752658280329844356075372719407416668586620978
+0.705372785404561836604037153959360018879786564080366420123279
+-1.795868401174790526151329699852086024255644348038510259964843
+4.2810165490865755122617117862813739261153684202971844338514486
+1.392571221914814033593333460085261625424318303719078543274639
+-0.4220771769650736912611063085630006175024237841939348508194456
+-0.9120560975337911137366679543103134737416668541880248792512467
+5.05122869246961215363425034178154477953603704093868665435386
+
diff --git a/tests/data/nfct_2d_10_20_50.txt b/tests/data/nfct_2d_10_20_50.txt
new file mode 100644
index 0000000..40d4068
--- /dev/null
+++ b/tests/data/nfct_2d_10_20_50.txt
@@ -0,0 +1,360 @@
+2
+
+10
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+0.377414941913701641980604281714521283600422741949240555908727434
+0.286257156034881826917947161474943151268083089341448769053424682
+0.9392006333865916821227548404291848184201007925131229813910957774
+0.5114205299580920868823613420213360686329180904621350249508347984
+-0.6408078680635244612899765081025913686282954450887306823350772997
+0.61034769186326371064247171222348075927083751612531179530760314
+-0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8353594742240205937097730115138661305557325449129426505768609534
+0.1821483418007667766250895141417107286953921543595289977783017637
+-0.4074526958925963909486488891837393063126910851657623153854908031
+0.519412312832116093970077697359996336676003120133546342882630559
+-0.1339026726689501933617889040862807661257038358606191032725698017
+0.1617840119849052908674425797539541379830915417411164257796009655
+-0.5833399591688895541493678958036554117556929951798174740043291689
+0.2558611196916433369649336532000849479904305619298222327625863899
+0.9637184128969163713272727389388526394331293708405231601274766637
+0.02398516466411951663039478357357263297576765858214578984119980389
+0.7220807768185265925885711430037484304092954076856054861183001563
+-0.8314034062393001851412680462190559603040746972786212429324375224
+-0.2313683087056718682580625867623460795004227069874977160354372877
+0.5241531162028989758906123049906275766571616823241720374203214447
+0.09003216360057281587724105549690566269005814841108581287665281058
+-0.1599268816032428776743959117270259866309677355351818460136443291
+0.7126643265921692501928118835762400720628273345745039396768073268
+0.1443381463559750344148688262608847179704805274810841956785523095
+-0.9541149480810226451568227541620900387924893378859274527595762471
+0.3516772517804962317135771244694045300550581304302552629989927399
+0.8312645047002901343481040986077492354211106507977246573848547872
+0.8922074343575836687927424867109565448477559678636672119414443701
+-0.03914580715076807517564668371313115131680481962361916796431130169
+0.9746573852711840936336177201962708050687509298510135226623575906
+-0.7287905575728605025843722055111257091486772902084438557782657679
+0.02849594996466824865218850207780069267985584074611847663329993142
+0.6459433245400880395491408374407025292588521318149535734854910274
+0.8136628661132407079541934173897141567434892632439804419184181281
+-0.567269077607843925028375791245291662428913186501477835474640964
+-0.9476387464140397458861421362921055215974651715794066883914951208
+-0.2605437240709855372272831411319884164143200014969561164796810212
+-0.3311597085631775241605389615954882776971235843100995205029515984
+-0.8695822150875121724691553338257829869250127182425918912387649806
+0.8891098289754707421060220890985710245132795198449297271458423909
+0.2895552325554255930167653346015931047558748269272406529926466973
+0.2650936900762128600362413578030729270793479332746334793752266553
+0.7046936151828971593710415948632896548808680079056988913118083777
+-0.2115570299364757676008017443811649086191736127455534555376144021
+0.1470216587412559156294994682432100810761459629584248289010138317
+-0.4329010361486256961244622956913108506550874170254014125575533479
+-0.1766818323431859044625743795499747752198631648846896440459670393
+0.3427075333057822059987675632859967887158938796610229803331114623
+-0.183376886573271100129574182681696169179735558213922855123562123
+0.5665067551831146950685364521560101025985707475803564862178192914
+0.5846720091653589171386464934439494744713232525388330403763032709
+0.3128821017947787434710701629862425068710081298914976621641025408
+0.1943703959062877206669871517590249058034169064564194870074554031
+0.8893705554674630659403991877841826994191514257022249874261157104
+-0.8883357910902242353575856676539666074648753053656660309143767467
+-0.460716573466163781751268186859141052046462069031383085126522242
+0.2571290378683215613044136510821588749887474163677002652639520119
+0.05683348973511969001808746192505133291481235528637618587938493271
+0.8458238445504835463314748515393830432307810942061667936052115581
+
+3.7195393807796141328805530262402393613430212391164019058806686
+0.4148214664516948608823051404928421652861449615886243722902804
+0.579470106413443298224643429597817353108715729411470352715412
+10.5868721000313247278709539276211002818425982383531882179477551
+-12.25767922579913526058111330988701102279424572328956180367721
+5.344345556305405257104487994940283491537514401076713350816701
+-1.9999114093764877840787327102140794816020945613399793442839232
+-0.262473656462384709277184249357883543653521123110962886587501
+3.398948235735874963151532758041486194723956500150106768457507
+-4.53508777380922559667820198730995810370968184127474413803526
+0.4782796148571131062425655702803527246260944414908786948174257
+-12.033859904286574250331139447824499080362863441885164953043004
+-4.244202392051193010707975434214661490804140112618317381654319
+3.449637685291462724816365871070773995065559660864085255901587
+6.1027727502825808998406244895218715813846027454672826943771197
+4.3647093398019990879358319401788693276359517263401693517786736
+5.697301813291163182276408543666460674725434512377001751015998
+-7.4775328618145152874239420589840125027859639071083304193732587
+7.500624740466133896441397796652021757315204642168547932866912
+-4.391538728588525751326438926333029922606147858468062019335376
+1.675360907240526131286963409888810700042758353550805587837281
+4.628651746942384448012946638970248511427397749385292340909039
+10.0898790820138550301299042823586633093352572046558584504751954
+-2.3480161739429085608546302586000454454407919901470512528188058
+0.128418754101749605382542875140154000463374799194712147848062
+4.8472842002804255652447399016506048030766319991767571964190865
+3.756005667085635424668878486066015254989390318679234679405168
+-0.062963059590121687174822101282516827194503537719250415145254
+2.852747911283321283389146877914957989743212774591987582594723
+-1.87179360931187326162458092734291732477157332965471006965152
+6.3816608505931906801610478113990890284204412123336682403996887
+-5.3569200568692465311632313296497713013449255724787942081035536
+2.680475004242332880382432959492055846774341815304686472729505
+-0.188981979624784114748648806783043471127418736214022379671018
+1.9049287444261366983974301769903289161533454501877879557790724
+-0.6942145448737286635814092274184955461455217314837909711537488
+1.071559878188052820201844468387242702188984701797805656604195
+8.643389118390159194887889231086584373601164247578535294475603
+1.453744514654264182659298802023336431324102781033003124528102
+4.065457123512286695992641208427704333587255942325336850471498
+-1.302875648871491601740854545691241669863868530037579394909618
+3.3877030771033558814134188439807350298342512337550909873873752
+3.450643009337554327189091516385108740731661023897017173636607
+2.4596232267260653093840640596431955525919536356811106125553731
+0.22949046872790537242156551184689189666810969141955284312634
+-2.9378136158881782567388291119585137345924558140894686696940113
+-3.421844127043971083201210970278152905971182730873748924136745
+2.0592954347092636214624618917791895861555031686887890785708243
+0.9055944633470975727038956493861076752764133230958351665399907
+4.101180153228548998885178334724601051998000748435109747208042
+
diff --git a/tests/data/nfct_2d_20_10_20.txt b/tests/data/nfct_2d_20_10_20.txt
new file mode 100644
index 0000000..0a76925
--- /dev/null
+++ b/tests/data/nfct_2d_20_10_20.txt
@@ -0,0 +1,270 @@
+2
+
+20
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+
+-6.391872826882582539679975490092650875020484355088297527632457
+9.215932470308105194596002743806915479083261320034817500606823
+0.6616421317839109842007445848595960141597394172146945524701737
+1.422225048248905884918821977896215980469769454401531480439582
+-4.837260927608905100239597725168022115729157549858661888031695
+-5.374560257972974441467418556600968522639522268155463713889046
+-9.3933239935139681016746180411203371821794415879460775390463735
+1.509875727378554221210300534829390380514566271515196448695685
+2.044056634431279305974370386072185215118560097811280350336472
+1.429029605427669342326052357978915128954642364792370173744737
+-7.309437012763280488967272166781016871647536652627433882584178
+-0.622688667365933620186484328382226162305609726017090855180508
+4.9523479951721949245877562016634802409407050173255581880716997
+1.136038070952661130162634890595571522464089278917410758801085
+-1.3382617268331905026753863154187092170617367323936889687002059
+2.1346947234431756304421458643817214901174158363097563183990835
+-0.84692595159097318655684120886980463841409592969232768298957
+-1.5338322706519470985159412762842203686861723972504027241822525
+-3.5861552610558470680521549116923883935341253215541386115977439
+0.051289197305744138378399799398983716555149223467496200089744
+
diff --git a/tests/data/nfct_2d_20_10_50.txt b/tests/data/nfct_2d_20_10_50.txt
new file mode 100644
index 0000000..8c25f48
--- /dev/null
+++ b/tests/data/nfct_2d_20_10_50.txt
@@ -0,0 +1,360 @@
+2
+
+20
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+0.377414941913701641980604281714521283600422741949240555908727434
+0.286257156034881826917947161474943151268083089341448769053424682
+0.9392006333865916821227548404291848184201007925131229813910957774
+0.5114205299580920868823613420213360686329180904621350249508347984
+-0.6408078680635244612899765081025913686282954450887306823350772997
+0.61034769186326371064247171222348075927083751612531179530760314
+-0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8353594742240205937097730115138661305557325449129426505768609534
+0.1821483418007667766250895141417107286953921543595289977783017637
+-0.4074526958925963909486488891837393063126910851657623153854908031
+0.519412312832116093970077697359996336676003120133546342882630559
+-0.1339026726689501933617889040862807661257038358606191032725698017
+0.1617840119849052908674425797539541379830915417411164257796009655
+-0.5833399591688895541493678958036554117556929951798174740043291689
+0.2558611196916433369649336532000849479904305619298222327625863899
+0.9637184128969163713272727389388526394331293708405231601274766637
+0.02398516466411951663039478357357263297576765858214578984119980389
+0.7220807768185265925885711430037484304092954076856054861183001563
+-0.8314034062393001851412680462190559603040746972786212429324375224
+-0.2313683087056718682580625867623460795004227069874977160354372877
+0.5241531162028989758906123049906275766571616823241720374203214447
+0.09003216360057281587724105549690566269005814841108581287665281058
+-0.1599268816032428776743959117270259866309677355351818460136443291
+0.7126643265921692501928118835762400720628273345745039396768073268
+0.1443381463559750344148688262608847179704805274810841956785523095
+-0.9541149480810226451568227541620900387924893378859274527595762471
+0.3516772517804962317135771244694045300550581304302552629989927399
+0.8312645047002901343481040986077492354211106507977246573848547872
+0.8922074343575836687927424867109565448477559678636672119414443701
+-0.03914580715076807517564668371313115131680481962361916796431130169
+0.9746573852711840936336177201962708050687509298510135226623575906
+-0.7287905575728605025843722055111257091486772902084438557782657679
+0.02849594996466824865218850207780069267985584074611847663329993142
+0.6459433245400880395491408374407025292588521318149535734854910274
+0.8136628661132407079541934173897141567434892632439804419184181281
+-0.567269077607843925028375791245291662428913186501477835474640964
+-0.9476387464140397458861421362921055215974651715794066883914951208
+-0.2605437240709855372272831411319884164143200014969561164796810212
+-0.3311597085631775241605389615954882776971235843100995205029515984
+-0.8695822150875121724691553338257829869250127182425918912387649806
+0.8891098289754707421060220890985710245132795198449297271458423909
+0.2895552325554255930167653346015931047558748269272406529926466973
+0.2650936900762128600362413578030729270793479332746334793752266553
+0.7046936151828971593710415948632896548808680079056988913118083777
+-0.2115570299364757676008017443811649086191736127455534555376144021
+0.1470216587412559156294994682432100810761459629584248289010138317
+-0.4329010361486256961244622956913108506550874170254014125575533479
+-0.1766818323431859044625743795499747752198631648846896440459670393
+0.3427075333057822059987675632859967887158938796610229803331114623
+-0.183376886573271100129574182681696169179735558213922855123562123
+0.5665067551831146950685364521560101025985707475803564862178192914
+0.5846720091653589171386464934439494744713232525388330403763032709
+0.3128821017947787434710701629862425068710081298914976621641025408
+0.1943703959062877206669871517590249058034169064564194870074554031
+0.8893705554674630659403991877841826994191514257022249874261157104
+-0.8883357910902242353575856676539666074648753053656660309143767467
+-0.460716573466163781751268186859141052046462069031383085126522242
+0.2571290378683215613044136510821588749887474163677002652639520119
+0.05683348973511969001808746192505133291481235528637618587938493271
+0.8458238445504835463314748515393830432307810942061667936052115581
+
+4.024293544857210307772047722675632344790547712675849194139763
+4.4500483900640083244050138414537842546063505867889118484329776
+3.7029357933834172888043919359696601584912997189210462055533
+-3.458368598636258285488918548772600085428443494743977469796943
+-5.3868882251198327968316357826291957557826035730380788061739458
+-6.924290266695395631469082760399552886086787439080473636156096
+-5.1026405287544984999879637102375817047467183548070171087325753
+8.451251199321999774659033490711367676094357430399415547522014
+1.519209099583369668988828687108974756386678658440553967067912
+0.771208675542460241312054226766638184247211474845871089256124
+2.763176890133910110245249753657188667308292227386172218694104
+-0.985272807978351398337846973316558866869614039594523780120886
+-3.4043322115444986435826165086489153219497973308535878719604644
+-5.366875022489843060257571052432493726187593186366949129058505
+1.2127221977211809398179630512794050153812741435125529665371731
+4.0748420346720510543340805383249072139372053651831166662535718
+-4.872528169336224343333301765176475205472482720792572964717533
+-8.9935473997216235400961888327327380852072417527412349611776003
+-3.074678000326227214287588825985405229648867680541729657534482
+-5.239166372380062008565886114572503076687525585172617189848569
+6.0900934478039372470990510517466828638086353146217690302381914
+-3.4407080100555174834891128586902224438336974015886593163821106
+-1.3382460141194125703415816937680933419425102580752702756664803
+7.076502665958671997816038625333099030058543651474076922826617
+2.855558111052952574018461537043736316891333730197384119956432
+9.3737600090846393705140546878365213780387455711190371423815629
+-0.420219204170415436966068024725743311775000183607817488468197
+5.419077519444436257220015566537306050194451828050103842291853
+2.826102801408043798911615696294928012958218058797855497947639
+1.208869856659930715923087929311566785110473870051558621786607
+3.1211425678797512802198829813397959964093014919226473714575528
+-7.4896973419974987244387946516993126225918620676909106993620512
+-1.189494715341579958555100118937464949397676488400714569890769
+3.824790666388708424981728169114873446941450935847426976135334
+0.0030752269833926212975542210871555534674253864139214305784558
+3.9109587545398332559191893556380395950392930279521244672831774
+6.199134874217678443574841885769617368857443078240343053324414
+-4.17398776640598711910432118906396606928024708126822441774399
+1.278393273347621667615658597996830439720471298338338201217167
+7.24329297342170317734606146337946106438290410310621471640236
+-4.311099075336348703687226717005642519810592886162254408477605
+-0.9246200117570906705425503378414082624689722473512935958197793
+-2.737251275707586992254121516492890671230960652421778088452918
+-6.3970531644509023763380603901758491217073956579087632006116673
+-3.294753271259449140422223072070028745601170417228309674460208
+-3.9562650297134646685549634693465530211412522040899697305236576
+9.314791806542535976460748658180196079916919086086825706627811
+4.6387762461202570220725478771816435130407397845994874903901691
+5.0320315014272884214423587955472357679184086013576889495081739
+-4.203181716622642954540745739624512849836927873934207578206411
+
diff --git a/tests/data/nfct_2d_20_20_20.txt b/tests/data/nfct_2d_20_20_20.txt
new file mode 100644
index 0000000..ead1ba9
--- /dev/null
+++ b/tests/data/nfct_2d_20_20_20.txt
@@ -0,0 +1,470 @@
+2
+
+20
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+0.377414941913701641980604281714521283600422741949240555908727434
+0.286257156034881826917947161474943151268083089341448769053424682
+0.9392006333865916821227548404291848184201007925131229813910957774
+0.5114205299580920868823613420213360686329180904621350249508347984
+-0.6408078680635244612899765081025913686282954450887306823350772997
+0.61034769186326371064247171222348075927083751612531179530760314
+-0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8353594742240205937097730115138661305557325449129426505768609534
+0.1821483418007667766250895141417107286953921543595289977783017637
+-0.4074526958925963909486488891837393063126910851657623153854908031
+0.519412312832116093970077697359996336676003120133546342882630559
+-0.1339026726689501933617889040862807661257038358606191032725698017
+0.1617840119849052908674425797539541379830915417411164257796009655
+-0.5833399591688895541493678958036554117556929951798174740043291689
+0.2558611196916433369649336532000849479904305619298222327625863899
+0.9637184128969163713272727389388526394331293708405231601274766637
+0.02398516466411951663039478357357263297576765858214578984119980389
+0.7220807768185265925885711430037484304092954076856054861183001563
+-0.8314034062393001851412680462190559603040746972786212429324375224
+-0.2313683087056718682580625867623460795004227069874977160354372877
+0.5241531162028989758906123049906275766571616823241720374203214447
+0.09003216360057281587724105549690566269005814841108581287665281058
+-0.1599268816032428776743959117270259866309677355351818460136443291
+0.7126643265921692501928118835762400720628273345745039396768073268
+0.1443381463559750344148688262608847179704805274810841956785523095
+-0.9541149480810226451568227541620900387924893378859274527595762471
+0.3516772517804962317135771244694045300550581304302552629989927399
+0.8312645047002901343481040986077492354211106507977246573848547872
+0.8922074343575836687927424867109565448477559678636672119414443701
+-0.03914580715076807517564668371313115131680481962361916796431130169
+0.9746573852711840936336177201962708050687509298510135226623575906
+-0.7287905575728605025843722055111257091486772902084438557782657679
+0.02849594996466824865218850207780069267985584074611847663329993142
+0.6459433245400880395491408374407025292588521318149535734854910274
+0.8136628661132407079541934173897141567434892632439804419184181281
+-0.567269077607843925028375791245291662428913186501477835474640964
+-0.9476387464140397458861421362921055215974651715794066883914951208
+-0.2605437240709855372272831411319884164143200014969561164796810212
+-0.3311597085631775241605389615954882776971235843100995205029515984
+-0.8695822150875121724691553338257829869250127182425918912387649806
+0.8891098289754707421060220890985710245132795198449297271458423909
+0.2895552325554255930167653346015931047558748269272406529926466973
+0.2650936900762128600362413578030729270793479332746334793752266553
+0.7046936151828971593710415948632896548808680079056988913118083777
+-0.2115570299364757676008017443811649086191736127455534555376144021
+0.1470216587412559156294994682432100810761459629584248289010138317
+-0.4329010361486256961244622956913108506550874170254014125575533479
+-0.1766818323431859044625743795499747752198631648846896440459670393
+0.3427075333057822059987675632859967887158938796610229803331114623
+-0.183376886573271100129574182681696169179735558213922855123562123
+0.5665067551831146950685364521560101025985707475803564862178192914
+0.5846720091653589171386464934439494744713232525388330403763032709
+0.3128821017947787434710701629862425068710081298914976621641025408
+0.1943703959062877206669871517590249058034169064564194870074554031
+0.8893705554674630659403991877841826994191514257022249874261157104
+-0.8883357910902242353575856676539666074648753053656660309143767467
+-0.460716573466163781751268186859141052046462069031383085126522242
+0.2571290378683215613044136510821588749887474163677002652639520119
+0.05683348973511969001808746192505133291481235528637618587938493271
+0.8458238445504835463314748515393830432307810942061667936052115581
+0.2568190130746644331048317748223591322462097932104379543095780599
+0.9282397683744983930469496205745698232573096227549226254155622007
+0.6733680895626635922558736333908780380926273791887898430485173634
+0.6834258455476852992466772196651133096274086383123765308288566681
+-0.3197260966794518948885909003357003020869183279810950125249989182
+-0.3602154836971247653552601690662060499632143516459194629015046587
+0.5644944652643029946030943876077187355907298250270171876933333996
+0.300245006064926546622443908848084786661329770571675039165636725
+0.9109171936013987677935840681404253773950900911474823029568083952
+0.9809865904559495207084689029816148884009367903151903920423149056
+0.6673430101175698152854688993768041548769019864465421762641808302
+0.1912403836532585581545915780169638266665110774534903895312903483
+-0.8390872225468263142545242699093560592768485203012323759548269441
+-0.1694425027392812196149909158729299355102867577367629176586906841
+-0.1109481979293641305323565532634133494943626968908239858539934786
+-0.7576390226829376962602306885924643215709630457357178698800775945
+-0.2384036559822549222513803512289385096334288445624862912807231185
+0.3322077770142086566449475410492734728431728270878221527000512398
+0.3008294101164568639831269327829387098511379992571638835271467486
+-0.8500127542413940364553721045188171752513697377512921485742321549
+0.8368368938909749223146178710811008588487209933709262501849117012
+-0.6301301812957352916599361333234055414853612961930455283065817178
+0.92912991593823651905014229592884312166630951576917436549436522
+-0.2057454411726747632614076986736370443370299660132771686206360685
+-0.1506655683923674574544013920490541109453108644791859114657837843
+0.8300887071220306139363536768734752416692057466278345728554448043
+0.8244806963149490337769127166910316223379101498545059699144474846
+-0.3267801787861358921558326193709571898654303757814961069177939802
+0.3173522145518535642355402682590855477810669842087119833799882044
+-0.9157683658115979207506514703487531113998263500938211160185082296
+-0.5134442544464950511308392504791416236936576938651094919168340614
+-0.7129018571172519683293420596961998697718416105831222546361506794
+0.9065123083843027156086152486704570882336886865580199421650643667
+-0.2793634385919329761753480106077153213406385720130702294691355484
+0.9164978685669781253679917402797926874507921723240255331025472326
+-0.7596059702886165943031875281927001506068162489624554198112485991
+0.7396561092486294627586234874177829200642603190414086001487983221
+0.2718148178589837914007749073085756104697032416499157400657364344
+0.4662517483044007390427270839972516857434523020114609710559500148
+0.08808257115588047484358934167308625153926780195956135649522315482
+0.07657390220669434590596313316601208477726655511807687988961336808
+0.4588569896068761120165974962862286433176923282523892852244105839
+-0.6615298742890711325192770516946564063654133133292967525875541474
+0.07011733953074958640104399325017215014827304325156759173135366906
+-0.9612259440538002535765483137294916063381851202661518339189071839
+0.9171138429339400553744807769217606095680344268845843714152250596
+-0.918764366993980620946375697358810909530550693434750302372938919
+-0.4415653525364425875595561926619571676937519758818885848285036367
+-0.2086520325624420487101916822135314045088175303036646863500495381
+-0.1511824375843169824185114172319147719223588913836399964007230083
+-0.7035924603583511535986984592864385797537640709172487432674768657
+-0.6564151567101526404248033266354854181628562195765596859557723591
+0.6965977875831549207460696210505433710177694513815592587963931164
+0.5816085290684877844083071838790011353935994102902484256340030157
+-0.527253715551282406607425535965902718962742079261395869051002919
+-0.8587217878456442924783287669774302171560923546889427532593498197
+0.802615497785384047600984758361791353972886095624237938117483346
+0.8316489546057848621322523310402149298559936201982941913906852864
+-0.6097628083165813974260954335449904988521230536577883358240508937
+-0.7453827739395389922953742392780783948094849228955462762695809318
+-0.1809554132180854707773280908184743372302489521523696413745651906
+-0.8150644675782343977339925655387466104832252738719676821788883516
+0.8917866574285656025686075793775106139378346795002297501283298878
+0.1101358891689796743272094664641471479081663952426245980291616029
+-0.0541967333689012077592263814659907729121237619035205051756287072
+0.8788147199714254107037333013127960617440138295766969973173354907
+-0.927037926394366126809727405514811573238161533791917190660326036
+0.4642977843367946473083173399076729199459994296180290689057358231
+0.1101424766711395834493541735390025259293259452693930682212953338
+0.9804018990020609521055380413227891839510323211141337706692935583
+0.8144388485796060257725468016904833551056739055694392606072812336
+-0.8395517493960846429066650820934625099120153763823264316622178314
+-0.535636302410552606673000089274072814148368252053769909998058602
+0.3785984554723058056848684987205281373405286509670642510688353225
+0.8125408356507693035783621684477489598336579370455636449932920399
+-0.730498839098918994556008955395986000999974868552030434899102998
+0.7456261383135196385610840292806346156606897621955571769519287646
+0.7757376987729343002700728678244609761294630501410110238207420656
+0.4078040359990933213948732923927214812372340416337539086249054226
+0.1767712938446947695198229699328249449877999447752262239584762909
+0.07365715096199305303280147905505827004287730234420360693427261478
+-0.3108355387530528344022186566449990520542204513871372429842394977
+-0.9157841385420411790181903606309676436954041107787988394005532203
+0.5517970855559362574840981197851271127548171428450299159534222246
+0.8076059738124808816284579607205742577625775175934575040140126923
+-0.3623547609761457713662054674281991237079618589827581000231798627
+0.8183208109839758987990961359356649031888827382055407382873878803
+-0.8535325136050236145755622731382685357658674118927526952194103789
+0.7385965807078199198295561757281636178085738161163241745076529168
+0.4178732695594172450325633659542989992529347731253116371174433175
+-0.5340515573220288676539037563933896861133701709641430080525373334
+-0.4642629009871243127720569534731497065151730863379424324926815934
+-0.8697898736666791719966463521302103516597198677810465705462889386
+0.9260211067928626234987335196506123804866588031248091568668186807
+-0.008817333363577657304077859427800946074653041725554105998740790418
+0.5582339538069273279851977709472563742471538090477435724053193958
+-0.7255700875545188795082017268145707633365451965771130961377344798
+-0.9882699898882978270887601698779901692432742326870804476209571454
+-0.9276804865150421462892365252888320798428705497677187785005965023
+-0.7832811923001301276864916736742146403933964466320677660322633051
+0.9875308623632782097656312821453924896496525870736205800843638587
+0.1783373466436970660022454632463179035762888722766888416391448363
+0.7336545898457146349237975784794059749253087905334857489144998895
+0.9127856868366581467510500732005220443872380003084957447131950721
+-0.3632881183963366167884860409201422151102177606787650299072097307
+-0.3268576018334922472384377473775779415605488146060240031080037115
+0.9427149588672463047630742061537997891278684495348468159028173334
+0.7916571579983658653317798731563225080239623370784297265192438825
+-0.6817701452011630996907953818868671270735516339211681814255907609
+-0.5168940707242169951406978648595076294647040487113324969763690473
+0.4155311954965517114024103086773167213755429855677272377839721067
+0.6506707691016388017357516362760131941221566979795718699904936102
+-0.7043718208306549962960929614939365734224121070283816720729220425
+-0.9030673117697692613858834879354138789682350761417043644810908266
+0.5465706740090774853953336301894435415008351646460109707839721596
+-0.6814239608934778019209189605706175697331566277120687413401512713
+0.9205925082347564380336697132499017123825554431098646503055203834
+-0.5020782788038677346392099888475830183897864323626792080264544951
+0.1045062318771655437961420896781653537832869869453123103733053855
+-0.1600201060994392446745228713066083331646179396065484107159119337
+-0.1176882561544923620215084381200312622694313533614808151971725197
+-0.189825171609586721044013508138189985950604720902663500662099781
+0.7858779951083861580332996484728804881745801231417586365625881696
+-0.2279832493810412940114966076664112325854082672090777285019621618
+0.07761160430503009576118799101543653660926181662195182427626478291
+-0.2055488181060608320954691371766551168555828485198254292077222517
+-0.8570653123756356936765798157651852007633450856266713907351356642
+0.8510470630599207981929699284163199387691742475697788917650312737
+-0.16560123613326167092245232006380763867174148167607503754889637
+0.4313169396402067420747675191335695107540210953445957632944683466
+-0.6136943581151102724274558633917286896829715873222934810854627144
+0.6107089044121956416324813364187592386184059323011742030772237424
+0.4569955077979069087363694857841772836360708458051620753700613184
+-0.205631651713017368814492512843157697507919536778183448181516378
+-0.3127653344142269367017311068934194736573539345353684494263561034
+0.5675769204970204695935245199626881958749158960158155816882247751
+-0.7973797882525385651192136516616674358654229933256541899442767797
+0.5012904467166158311205187729565579292182659743325041112386977484
+-0.2570017860782360774767408845442523659054818260225494146244853645
+0.815285634526596302121470271218431186471214471233707249972351082
+
+5.304046455701003658639816396306506328105451818195617285856039
+-0.144971908183684759941664367251225890032699430340523527270776
+-3.379249104589014847050838688374332220734620241581222139809445
+-2.257293131940796341212231719526918685471123899507162140710303
+0.597199891436948050577692272677648693739925223186993764481213
+9.964094889196455710746675841242832568210851828837093346118029
+-4.763992522109748441501570240180228688900537700746181580074543
+14.146834719810752210180682076026961559829416672618163479995544
+-8.804414522451910236672449153883680665246729490068714514004394
+10.101871302423012199349161701626274526434408743349775341029326
+-3.779589300926453837377842944256580728486893502809947316283949
+2.622059660623466573634161675725460252599135479261243402608506
+4.824441810653706795233778670924580562296637443416494580403165
+-3.731148143917688902918996938645015061062176457650969491397072
+-4.268090325717781238057920850624738762011788529014351732733971
+4.5702142837713192865537774155677212852809067453483608990634174
+-0.411933969854306956089686998801497593497090190155321387985087
+3.772911452939457357158319525711140134956850534970100714905655
+0.10639084708554845660989530112892020446787166975832126708745
+1.113903896509569717147290762265676363237815533448444148905835
+
diff --git a/tests/data/nfct_2d_20_20_50.txt b/tests/data/nfct_2d_20_20_50.txt
new file mode 100644
index 0000000..61ec00e
--- /dev/null
+++ b/tests/data/nfct_2d_20_20_50.txt
@@ -0,0 +1,560 @@
+2
+
+20
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+0.377414941913701641980604281714521283600422741949240555908727434
+0.286257156034881826917947161474943151268083089341448769053424682
+0.9392006333865916821227548404291848184201007925131229813910957774
+0.5114205299580920868823613420213360686329180904621350249508347984
+-0.6408078680635244612899765081025913686282954450887306823350772997
+0.61034769186326371064247171222348075927083751612531179530760314
+-0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8353594742240205937097730115138661305557325449129426505768609534
+0.1821483418007667766250895141417107286953921543595289977783017637
+-0.4074526958925963909486488891837393063126910851657623153854908031
+0.519412312832116093970077697359996336676003120133546342882630559
+-0.1339026726689501933617889040862807661257038358606191032725698017
+0.1617840119849052908674425797539541379830915417411164257796009655
+-0.5833399591688895541493678958036554117556929951798174740043291689
+0.2558611196916433369649336532000849479904305619298222327625863899
+0.9637184128969163713272727389388526394331293708405231601274766637
+0.02398516466411951663039478357357263297576765858214578984119980389
+0.7220807768185265925885711430037484304092954076856054861183001563
+-0.8314034062393001851412680462190559603040746972786212429324375224
+-0.2313683087056718682580625867623460795004227069874977160354372877
+0.5241531162028989758906123049906275766571616823241720374203214447
+0.09003216360057281587724105549690566269005814841108581287665281058
+-0.1599268816032428776743959117270259866309677355351818460136443291
+0.7126643265921692501928118835762400720628273345745039396768073268
+0.1443381463559750344148688262608847179704805274810841956785523095
+-0.9541149480810226451568227541620900387924893378859274527595762471
+0.3516772517804962317135771244694045300550581304302552629989927399
+0.8312645047002901343481040986077492354211106507977246573848547872
+0.8922074343575836687927424867109565448477559678636672119414443701
+-0.03914580715076807517564668371313115131680481962361916796431130169
+0.9746573852711840936336177201962708050687509298510135226623575906
+-0.7287905575728605025843722055111257091486772902084438557782657679
+0.02849594996466824865218850207780069267985584074611847663329993142
+0.6459433245400880395491408374407025292588521318149535734854910274
+0.8136628661132407079541934173897141567434892632439804419184181281
+-0.567269077607843925028375791245291662428913186501477835474640964
+-0.9476387464140397458861421362921055215974651715794066883914951208
+-0.2605437240709855372272831411319884164143200014969561164796810212
+-0.3311597085631775241605389615954882776971235843100995205029515984
+-0.8695822150875121724691553338257829869250127182425918912387649806
+0.8891098289754707421060220890985710245132795198449297271458423909
+0.2895552325554255930167653346015931047558748269272406529926466973
+0.2650936900762128600362413578030729270793479332746334793752266553
+0.7046936151828971593710415948632896548808680079056988913118083777
+-0.2115570299364757676008017443811649086191736127455534555376144021
+0.1470216587412559156294994682432100810761459629584248289010138317
+-0.4329010361486256961244622956913108506550874170254014125575533479
+-0.1766818323431859044625743795499747752198631648846896440459670393
+0.3427075333057822059987675632859967887158938796610229803331114623
+-0.183376886573271100129574182681696169179735558213922855123562123
+0.5665067551831146950685364521560101025985707475803564862178192914
+0.5846720091653589171386464934439494744713232525388330403763032709
+0.3128821017947787434710701629862425068710081298914976621641025408
+0.1943703959062877206669871517590249058034169064564194870074554031
+0.8893705554674630659403991877841826994191514257022249874261157104
+-0.8883357910902242353575856676539666074648753053656660309143767467
+-0.460716573466163781751268186859141052046462069031383085126522242
+0.2571290378683215613044136510821588749887474163677002652639520119
+0.05683348973511969001808746192505133291481235528637618587938493271
+0.8458238445504835463314748515393830432307810942061667936052115581
+0.2568190130746644331048317748223591322462097932104379543095780599
+0.9282397683744983930469496205745698232573096227549226254155622007
+0.6733680895626635922558736333908780380926273791887898430485173634
+0.6834258455476852992466772196651133096274086383123765308288566681
+-0.3197260966794518948885909003357003020869183279810950125249989182
+-0.3602154836971247653552601690662060499632143516459194629015046587
+0.5644944652643029946030943876077187355907298250270171876933333996
+0.300245006064926546622443908848084786661329770571675039165636725
+0.9109171936013987677935840681404253773950900911474823029568083952
+0.9809865904559495207084689029816148884009367903151903920423149056
+0.6673430101175698152854688993768041548769019864465421762641808302
+0.1912403836532585581545915780169638266665110774534903895312903483
+-0.8390872225468263142545242699093560592768485203012323759548269441
+-0.1694425027392812196149909158729299355102867577367629176586906841
+-0.1109481979293641305323565532634133494943626968908239858539934786
+-0.7576390226829376962602306885924643215709630457357178698800775945
+-0.2384036559822549222513803512289385096334288445624862912807231185
+0.3322077770142086566449475410492734728431728270878221527000512398
+0.3008294101164568639831269327829387098511379992571638835271467486
+-0.8500127542413940364553721045188171752513697377512921485742321549
+0.8368368938909749223146178710811008588487209933709262501849117012
+-0.6301301812957352916599361333234055414853612961930455283065817178
+0.92912991593823651905014229592884312166630951576917436549436522
+-0.2057454411726747632614076986736370443370299660132771686206360685
+-0.1506655683923674574544013920490541109453108644791859114657837843
+0.8300887071220306139363536768734752416692057466278345728554448043
+0.8244806963149490337769127166910316223379101498545059699144474846
+-0.3267801787861358921558326193709571898654303757814961069177939802
+0.3173522145518535642355402682590855477810669842087119833799882044
+-0.9157683658115979207506514703487531113998263500938211160185082296
+-0.5134442544464950511308392504791416236936576938651094919168340614
+-0.7129018571172519683293420596961998697718416105831222546361506794
+0.9065123083843027156086152486704570882336886865580199421650643667
+-0.2793634385919329761753480106077153213406385720130702294691355484
+0.9164978685669781253679917402797926874507921723240255331025472326
+-0.7596059702886165943031875281927001506068162489624554198112485991
+0.7396561092486294627586234874177829200642603190414086001487983221
+0.2718148178589837914007749073085756104697032416499157400657364344
+0.4662517483044007390427270839972516857434523020114609710559500148
+0.08808257115588047484358934167308625153926780195956135649522315482
+0.07657390220669434590596313316601208477726655511807687988961336808
+0.4588569896068761120165974962862286433176923282523892852244105839
+-0.6615298742890711325192770516946564063654133133292967525875541474
+0.07011733953074958640104399325017215014827304325156759173135366906
+-0.9612259440538002535765483137294916063381851202661518339189071839
+0.9171138429339400553744807769217606095680344268845843714152250596
+-0.918764366993980620946375697358810909530550693434750302372938919
+-0.4415653525364425875595561926619571676937519758818885848285036367
+-0.2086520325624420487101916822135314045088175303036646863500495381
+-0.1511824375843169824185114172319147719223588913836399964007230083
+-0.7035924603583511535986984592864385797537640709172487432674768657
+-0.6564151567101526404248033266354854181628562195765596859557723591
+0.6965977875831549207460696210505433710177694513815592587963931164
+0.5816085290684877844083071838790011353935994102902484256340030157
+-0.527253715551282406607425535965902718962742079261395869051002919
+-0.8587217878456442924783287669774302171560923546889427532593498197
+0.802615497785384047600984758361791353972886095624237938117483346
+0.8316489546057848621322523310402149298559936201982941913906852864
+-0.6097628083165813974260954335449904988521230536577883358240508937
+-0.7453827739395389922953742392780783948094849228955462762695809318
+-0.1809554132180854707773280908184743372302489521523696413745651906
+-0.8150644675782343977339925655387466104832252738719676821788883516
+0.8917866574285656025686075793775106139378346795002297501283298878
+0.1101358891689796743272094664641471479081663952426245980291616029
+-0.0541967333689012077592263814659907729121237619035205051756287072
+0.8788147199714254107037333013127960617440138295766969973173354907
+-0.927037926394366126809727405514811573238161533791917190660326036
+0.4642977843367946473083173399076729199459994296180290689057358231
+0.1101424766711395834493541735390025259293259452693930682212953338
+0.9804018990020609521055380413227891839510323211141337706692935583
+0.8144388485796060257725468016904833551056739055694392606072812336
+-0.8395517493960846429066650820934625099120153763823264316622178314
+-0.535636302410552606673000089274072814148368252053769909998058602
+0.3785984554723058056848684987205281373405286509670642510688353225
+0.8125408356507693035783621684477489598336579370455636449932920399
+-0.730498839098918994556008955395986000999974868552030434899102998
+0.7456261383135196385610840292806346156606897621955571769519287646
+0.7757376987729343002700728678244609761294630501410110238207420656
+0.4078040359990933213948732923927214812372340416337539086249054226
+0.1767712938446947695198229699328249449877999447752262239584762909
+0.07365715096199305303280147905505827004287730234420360693427261478
+-0.3108355387530528344022186566449990520542204513871372429842394977
+-0.9157841385420411790181903606309676436954041107787988394005532203
+0.5517970855559362574840981197851271127548171428450299159534222246
+0.8076059738124808816284579607205742577625775175934575040140126923
+-0.3623547609761457713662054674281991237079618589827581000231798627
+0.8183208109839758987990961359356649031888827382055407382873878803
+-0.8535325136050236145755622731382685357658674118927526952194103789
+0.7385965807078199198295561757281636178085738161163241745076529168
+0.4178732695594172450325633659542989992529347731253116371174433175
+-0.5340515573220288676539037563933896861133701709641430080525373334
+-0.4642629009871243127720569534731497065151730863379424324926815934
+-0.8697898736666791719966463521302103516597198677810465705462889386
+0.9260211067928626234987335196506123804866588031248091568668186807
+-0.008817333363577657304077859427800946074653041725554105998740790418
+0.5582339538069273279851977709472563742471538090477435724053193958
+-0.7255700875545188795082017268145707633365451965771130961377344798
+-0.9882699898882978270887601698779901692432742326870804476209571454
+-0.9276804865150421462892365252888320798428705497677187785005965023
+-0.7832811923001301276864916736742146403933964466320677660322633051
+0.9875308623632782097656312821453924896496525870736205800843638587
+0.1783373466436970660022454632463179035762888722766888416391448363
+0.7336545898457146349237975784794059749253087905334857489144998895
+0.9127856868366581467510500732005220443872380003084957447131950721
+-0.3632881183963366167884860409201422151102177606787650299072097307
+-0.3268576018334922472384377473775779415605488146060240031080037115
+0.9427149588672463047630742061537997891278684495348468159028173334
+0.7916571579983658653317798731563225080239623370784297265192438825
+-0.6817701452011630996907953818868671270735516339211681814255907609
+-0.5168940707242169951406978648595076294647040487113324969763690473
+0.4155311954965517114024103086773167213755429855677272377839721067
+0.6506707691016388017357516362760131941221566979795718699904936102
+-0.7043718208306549962960929614939365734224121070283816720729220425
+-0.9030673117697692613858834879354138789682350761417043644810908266
+0.5465706740090774853953336301894435415008351646460109707839721596
+-0.6814239608934778019209189605706175697331566277120687413401512713
+0.9205925082347564380336697132499017123825554431098646503055203834
+-0.5020782788038677346392099888475830183897864323626792080264544951
+0.1045062318771655437961420896781653537832869869453123103733053855
+-0.1600201060994392446745228713066083331646179396065484107159119337
+-0.1176882561544923620215084381200312622694313533614808151971725197
+-0.189825171609586721044013508138189985950604720902663500662099781
+0.7858779951083861580332996484728804881745801231417586365625881696
+-0.2279832493810412940114966076664112325854082672090777285019621618
+0.07761160430503009576118799101543653660926181662195182427626478291
+-0.2055488181060608320954691371766551168555828485198254292077222517
+-0.8570653123756356936765798157651852007633450856266713907351356642
+0.8510470630599207981929699284163199387691742475697788917650312737
+-0.16560123613326167092245232006380763867174148167607503754889637
+0.4313169396402067420747675191335695107540210953445957632944683466
+-0.6136943581151102724274558633917286896829715873222934810854627144
+0.6107089044121956416324813364187592386184059323011742030772237424
+0.4569955077979069087363694857841772836360708458051620753700613184
+-0.205631651713017368814492512843157697507919536778183448181516378
+-0.3127653344142269367017311068934194736573539345353684494263561034
+0.5675769204970204695935245199626881958749158960158155816882247751
+-0.7973797882525385651192136516616674358654229933256541899442767797
+0.5012904467166158311205187729565579292182659743325041112386977484
+-0.2570017860782360774767408845442523659054818260225494146244853645
+0.815285634526596302121470271218431186471214471233707249972351082
+0.3474550590975565404544821867969338696280672245517491821876495039
+0.7718119181978566336150728291679018907122826327418198982205731192
+0.04535880498283686865208322483522967139304884767842664817216330064
+-0.7174845876743344015633175484139120449777707133419695966520824564
+-0.853296184466734367261440721862287405945662264918150798455455718
+-0.3551691762386405619967249318449133353395153150287271325435124081
+-0.3797572987358468877601704908647997438784227376119508300980299747
+0.376493226974464138185316874204450738186203149130236541221263506
+0.2816632617692655097062060192076384166912647824219953750826131631
+0.6936970465516315197236088803729008972356138275937389314888615401
+-0.8093948466492362612217398058810377625062288216775489656468562411
+0.7179094192553983421088688870290454722724258927762520549683983736
+-0.8752125899339353908597128121427435294227530087554395150859455125
+0.04176278772058224232241432506737925045260833246510034386845030186
+0.9269329565460541008731323076781001715661419867914361439680533663
+0.7868192948478988386779315105006009612933033201432314519183555363
+-0.006266353716036539320572064746082526752743361256443337864258505608
+0.2266154233841305998807280483192876569901369827513556377738818721
+0.2746350702494963366663352365693945459844370045750631885709403566
+-0.5247772986387898164750425486144677116796659442569793354035835811
+-0.4928925951310793013273500011155592100819574396889780507999573189
+-0.3113637472666701974473222596908779747755145602641740095469526339
+-0.5748854355426279234162395955225246347221834110564955747956209638
+-0.2554460407289573319602333075606187389397146712378109702048311016
+-0.576542912883993928715652331022719536448966752471880286018776653
+0.9094805878752663366484875502653563100058416506406189283398268678
+0.8848752416174802394989820330821347631944308988732361074957483326
+-0.2800064663747466167971611334477592148285678388000719119052505901
+-0.3524957419793069043802183938505947717728662986795036125951037387
+-0.92661757991300447545015659444519280829067045255691447808600615
+-0.5330220313943443910835605702117655504592614398056913858309712345
+-0.7330266194736301185266620028746862947402855823289205835841036965
+-0.08901643770401430747538873378587416087951119772581637121305331682
+0.8550765251384289421250035837565358470833355010809526497352204912
+-0.6907357918123153055314910754893467338334399179189583430196498864
+0.8787770736433328745035234902871834306966611855454194152763085168
+-0.01738793803090707722596079625349684366463055472987575653160098446
+-0.843789436167682845942043151679017937854325407163610849246652901
+-0.8141497075382254027096074950311514491854968487203741238943799987
+0.03889316514893840261980283978604250703936072380623394289182754247
+-0.5493273108612277875600478109570404534520845332638624479667841502
+0.6715912488533200815290011024385797575217363717470920802742883653
+-0.8438919390970836161462370188424965610990320605153865447984219469
+0.7184582122882689810255427112660454958040291396946043511983687288
+-0.4086097264688666636790174928803728608266459573162410770584140364
+-0.5697919261032078557614020481060183849522111669616974872492012829
+-0.6278243966060881460501444931432866833291695231208083680886203722
+0.0336828617705931544383250099730864952662928062350424608691618717
+-0.7436883526680899648969850724114253803054818951808117927039564586
+-0.4515446035045963800470270932006012917142703741148728102920678819
+-0.4810931364819359747828351037417496237257328332185652823964021884
+0.4458845011005795413736316288478062406750213207171946521339936816
+-0.07022130270408117391201617422037495983519685200057324281521736371
+-0.9363332435815881306934514312012861106386014749526768950073553811
+0.5931834085557288286300206310139754784241341457686571795494994774
+0.7036190395840156286745266326175275923901923175942468576350074587
+-0.5793821363841516257942372216607612745507267978856920167262365904
+0.00904502267908283601336368137866081061069210352581761545503802156
+-0.2778968847485682179896478779214700059419569060048743113852325563
+-0.2784308881971247865302566270327586460636817633229294056506703495
+
+5.70287384299766372536490229499889348879981675046022691346884
+-3.401548562381834269935363301302592703255520371982948738286276
+-0.94413000838812518378639555503663857452123307899637840653151
+13.497045740798587179240499160558604321982023370092388545620221
+-15.30951280873467184569816668759420274722290715048932505481663
+0.094445789338771412503945987184379977895851115044400437708753
+-12.698911123744013497960467376951413788862153422630737670123128
+1.459137354168772964547385952569725908353456884336996021171447
+2.639129258853851080228775778180631482467438293437242867858482
+-3.070788580196354721165520194137025463433790027305885826970966
+11.151941177883198048375925123555690816250475186836657942243574
+-14.264274180323294772949781630608584825837637743788984825540203
+-5.829386873985065405377227030500689435223003414587036100358995
+6.447667825946814171801776316155619726886770564102929195670248
+9.3906003975460888148930529134090520319311658666632046859997544
+-1.731546914236432033048465902993931039151694841622172798052494
+8.566217819979837113846150587453132701499806783702487271305047
+-8.084790098606801220696561995463146845950054095584340163287213
+8.259531475295963975461576984685284157991155142522666558821492
+-1.594357772464967192772174601387033153338721812420860560779066
+1.06589990421795887520769947903162455347471335382887879147952
+3.669601457995595161655034079771673234631738112540540568502098
+13.642187102318265688977814107466308022710456217213820088527046
+3.667060763574348270350286854273955822357642626784611675829148
+-1.391241676091191637744016396294145045414102859397243925678087
+3.302050607675532629229395553690785462081753384634939350509759
+1.00290064410295913082506507480821147452684781075875472572712
+-2.15153190791412443978364001752718624337172846783805082142818
+-3.371655677611821368254202775140551089172604669115539639503561
+5.536364751987388545029174240762777656330878377409304680649764
+9.21748688435047957525206453744103286634092074251639783959301
+3.731747412463057104969766782163269532716012639284286930566915
+-6.045714057486955354697571759926218420098196232199237160712106
+-11.265319535722186909398803372571096447764801370474566033499373
+9.088475590649881209374129834766670970112017608211648194764862
+-1.138127468408792617219354421832964376271687726590127992143394
+6.147662413057248732278055664243750894414788785048093345911689
+6.706754026371221574766956245284012865762850165666125431509225
+5.050310945127172043426440720182848908642176161653614962173802
+5.789148647511209145313800625263297084198636689119384049292949
+-4.709857401536315868979672279787073717560063222236557544005892
+5.133037231426394949485990140129376529429270403398042436547028
+1.526591801540502500130294649319900683585989894188708808147517
+-6.959319696201942153213414349102515504875435459804117349461033
+-4.692843801284806605111482057302283954473596220753955615524033
+-0.520056755589451252728008087115063105826490168613808923309776
+4.062296628241439637490983754190167134888337646909985353321657
+-0.160424969207331312153420455286108135478317052823652930963619
+2.118327904695505058938003573939422751293231972535975304832119
+2.444358287079080831340303399306012946347898409667575805345279
+
diff --git a/tests/data/nfct_3d_10_10_10_10.txt b/tests/data/nfct_3d_10_10_10_10.txt
new file mode 100644
index 0000000..45bd264
--- /dev/null
+++ b/tests/data/nfct_3d_10_10_10_10.txt
@@ -0,0 +1,1051 @@
+3
+
+10
+10
+10
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3156638964725781243541272856934334091751310165287943458804827568
+
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+0.377414941913701641980604281714521283600422741949240555908727434
+0.286257156034881826917947161474943151268083089341448769053424682
+0.9392006333865916821227548404291848184201007925131229813910957774
+0.5114205299580920868823613420213360686329180904621350249508347984
+-0.6408078680635244612899765081025913686282954450887306823350772997
+0.61034769186326371064247171222348075927083751612531179530760314
+-0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8353594742240205937097730115138661305557325449129426505768609534
+0.1821483418007667766250895141417107286953921543595289977783017637
+-0.4074526958925963909486488891837393063126910851657623153854908031
+0.519412312832116093970077697359996336676003120133546342882630559
+-0.1339026726689501933617889040862807661257038358606191032725698017
+0.1617840119849052908674425797539541379830915417411164257796009655
+-0.5833399591688895541493678958036554117556929951798174740043291689
+0.2558611196916433369649336532000849479904305619298222327625863899
+0.9637184128969163713272727389388526394331293708405231601274766637
+0.02398516466411951663039478357357263297576765858214578984119980389
+0.7220807768185265925885711430037484304092954076856054861183001563
+-0.8314034062393001851412680462190559603040746972786212429324375224
+-0.2313683087056718682580625867623460795004227069874977160354372877
+0.5241531162028989758906123049906275766571616823241720374203214447
+0.09003216360057281587724105549690566269005814841108581287665281058
+-0.1599268816032428776743959117270259866309677355351818460136443291
+0.7126643265921692501928118835762400720628273345745039396768073268
+0.1443381463559750344148688262608847179704805274810841956785523095
+-0.9541149480810226451568227541620900387924893378859274527595762471
+0.3516772517804962317135771244694045300550581304302552629989927399
+0.8312645047002901343481040986077492354211106507977246573848547872
+0.8922074343575836687927424867109565448477559678636672119414443701
+-0.03914580715076807517564668371313115131680481962361916796431130169
+0.9746573852711840936336177201962708050687509298510135226623575906
+-0.7287905575728605025843722055111257091486772902084438557782657679
+0.02849594996466824865218850207780069267985584074611847663329993142
+0.6459433245400880395491408374407025292588521318149535734854910274
+0.8136628661132407079541934173897141567434892632439804419184181281
+-0.567269077607843925028375791245291662428913186501477835474640964
+-0.9476387464140397458861421362921055215974651715794066883914951208
+-0.2605437240709855372272831411319884164143200014969561164796810212
+-0.3311597085631775241605389615954882776971235843100995205029515984
+-0.8695822150875121724691553338257829869250127182425918912387649806
+0.8891098289754707421060220890985710245132795198449297271458423909
+0.2895552325554255930167653346015931047558748269272406529926466973
+0.2650936900762128600362413578030729270793479332746334793752266553
+0.7046936151828971593710415948632896548808680079056988913118083777
+-0.2115570299364757676008017443811649086191736127455534555376144021
+0.1470216587412559156294994682432100810761459629584248289010138317
+-0.4329010361486256961244622956913108506550874170254014125575533479
+-0.1766818323431859044625743795499747752198631648846896440459670393
+0.3427075333057822059987675632859967887158938796610229803331114623
+-0.183376886573271100129574182681696169179735558213922855123562123
+0.5665067551831146950685364521560101025985707475803564862178192914
+0.5846720091653589171386464934439494744713232525388330403763032709
+0.3128821017947787434710701629862425068710081298914976621641025408
+0.1943703959062877206669871517590249058034169064564194870074554031
+0.8893705554674630659403991877841826994191514257022249874261157104
+-0.8883357910902242353575856676539666074648753053656660309143767467
+-0.460716573466163781751268186859141052046462069031383085126522242
+0.2571290378683215613044136510821588749887474163677002652639520119
+0.05683348973511969001808746192505133291481235528637618587938493271
+0.8458238445504835463314748515393830432307810942061667936052115581
+0.2568190130746644331048317748223591322462097932104379543095780599
+0.9282397683744983930469496205745698232573096227549226254155622007
+0.6733680895626635922558736333908780380926273791887898430485173634
+0.6834258455476852992466772196651133096274086383123765308288566681
+-0.3197260966794518948885909003357003020869183279810950125249989182
+-0.3602154836971247653552601690662060499632143516459194629015046587
+0.5644944652643029946030943876077187355907298250270171876933333996
+0.300245006064926546622443908848084786661329770571675039165636725
+0.9109171936013987677935840681404253773950900911474823029568083952
+0.9809865904559495207084689029816148884009367903151903920423149056
+0.6673430101175698152854688993768041548769019864465421762641808302
+0.1912403836532585581545915780169638266665110774534903895312903483
+-0.8390872225468263142545242699093560592768485203012323759548269441
+-0.1694425027392812196149909158729299355102867577367629176586906841
+-0.1109481979293641305323565532634133494943626968908239858539934786
+-0.7576390226829376962602306885924643215709630457357178698800775945
+-0.2384036559822549222513803512289385096334288445624862912807231185
+0.3322077770142086566449475410492734728431728270878221527000512398
+0.3008294101164568639831269327829387098511379992571638835271467486
+-0.8500127542413940364553721045188171752513697377512921485742321549
+0.8368368938909749223146178710811008588487209933709262501849117012
+-0.6301301812957352916599361333234055414853612961930455283065817178
+0.92912991593823651905014229592884312166630951576917436549436522
+-0.2057454411726747632614076986736370443370299660132771686206360685
+-0.1506655683923674574544013920490541109453108644791859114657837843
+0.8300887071220306139363536768734752416692057466278345728554448043
+0.8244806963149490337769127166910316223379101498545059699144474846
+-0.3267801787861358921558326193709571898654303757814961069177939802
+0.3173522145518535642355402682590855477810669842087119833799882044
+-0.9157683658115979207506514703487531113998263500938211160185082296
+-0.5134442544464950511308392504791416236936576938651094919168340614
+-0.7129018571172519683293420596961998697718416105831222546361506794
+0.9065123083843027156086152486704570882336886865580199421650643667
+-0.2793634385919329761753480106077153213406385720130702294691355484
+0.9164978685669781253679917402797926874507921723240255331025472326
+-0.7596059702886165943031875281927001506068162489624554198112485991
+0.7396561092486294627586234874177829200642603190414086001487983221
+0.2718148178589837914007749073085756104697032416499157400657364344
+0.4662517483044007390427270839972516857434523020114609710559500148
+0.08808257115588047484358934167308625153926780195956135649522315482
+0.07657390220669434590596313316601208477726655511807687988961336808
+0.4588569896068761120165974962862286433176923282523892852244105839
+-0.6615298742890711325192770516946564063654133133292967525875541474
+0.07011733953074958640104399325017215014827304325156759173135366906
+-0.9612259440538002535765483137294916063381851202661518339189071839
+0.9171138429339400553744807769217606095680344268845843714152250596
+-0.918764366993980620946375697358810909530550693434750302372938919
+-0.4415653525364425875595561926619571676937519758818885848285036367
+-0.2086520325624420487101916822135314045088175303036646863500495381
+-0.1511824375843169824185114172319147719223588913836399964007230083
+-0.7035924603583511535986984592864385797537640709172487432674768657
+-0.6564151567101526404248033266354854181628562195765596859557723591
+0.6965977875831549207460696210505433710177694513815592587963931164
+0.5816085290684877844083071838790011353935994102902484256340030157
+-0.527253715551282406607425535965902718962742079261395869051002919
+-0.8587217878456442924783287669774302171560923546889427532593498197
+0.802615497785384047600984758361791353972886095624237938117483346
+0.8316489546057848621322523310402149298559936201982941913906852864
+-0.6097628083165813974260954335449904988521230536577883358240508937
+-0.7453827739395389922953742392780783948094849228955462762695809318
+-0.1809554132180854707773280908184743372302489521523696413745651906
+-0.8150644675782343977339925655387466104832252738719676821788883516
+0.8917866574285656025686075793775106139378346795002297501283298878
+0.1101358891689796743272094664641471479081663952426245980291616029
+-0.0541967333689012077592263814659907729121237619035205051756287072
+0.8788147199714254107037333013127960617440138295766969973173354907
+-0.927037926394366126809727405514811573238161533791917190660326036
+0.4642977843367946473083173399076729199459994296180290689057358231
+0.1101424766711395834493541735390025259293259452693930682212953338
+0.9804018990020609521055380413227891839510323211141337706692935583
+0.8144388485796060257725468016904833551056739055694392606072812336
+-0.8395517493960846429066650820934625099120153763823264316622178314
+-0.535636302410552606673000089274072814148368252053769909998058602
+0.3785984554723058056848684987205281373405286509670642510688353225
+0.8125408356507693035783621684477489598336579370455636449932920399
+-0.730498839098918994556008955395986000999974868552030434899102998
+0.7456261383135196385610840292806346156606897621955571769519287646
+0.7757376987729343002700728678244609761294630501410110238207420656
+0.4078040359990933213948732923927214812372340416337539086249054226
+0.1767712938446947695198229699328249449877999447752262239584762909
+0.07365715096199305303280147905505827004287730234420360693427261478
+-0.3108355387530528344022186566449990520542204513871372429842394977
+-0.9157841385420411790181903606309676436954041107787988394005532203
+0.5517970855559362574840981197851271127548171428450299159534222246
+0.8076059738124808816284579607205742577625775175934575040140126923
+-0.3623547609761457713662054674281991237079618589827581000231798627
+0.8183208109839758987990961359356649031888827382055407382873878803
+-0.8535325136050236145755622731382685357658674118927526952194103789
+0.7385965807078199198295561757281636178085738161163241745076529168
+0.4178732695594172450325633659542989992529347731253116371174433175
+-0.5340515573220288676539037563933896861133701709641430080525373334
+-0.4642629009871243127720569534731497065151730863379424324926815934
+-0.8697898736666791719966463521302103516597198677810465705462889386
+0.9260211067928626234987335196506123804866588031248091568668186807
+-0.008817333363577657304077859427800946074653041725554105998740790418
+0.5582339538069273279851977709472563742471538090477435724053193958
+-0.7255700875545188795082017268145707633365451965771130961377344798
+-0.9882699898882978270887601698779901692432742326870804476209571454
+-0.9276804865150421462892365252888320798428705497677187785005965023
+-0.7832811923001301276864916736742146403933964466320677660322633051
+0.9875308623632782097656312821453924896496525870736205800843638587
+0.1783373466436970660022454632463179035762888722766888416391448363
+0.7336545898457146349237975784794059749253087905334857489144998895
+0.9127856868366581467510500732005220443872380003084957447131950721
+-0.3632881183963366167884860409201422151102177606787650299072097307
+-0.3268576018334922472384377473775779415605488146060240031080037115
+0.9427149588672463047630742061537997891278684495348468159028173334
+0.7916571579983658653317798731563225080239623370784297265192438825
+-0.6817701452011630996907953818868671270735516339211681814255907609
+-0.5168940707242169951406978648595076294647040487113324969763690473
+0.4155311954965517114024103086773167213755429855677272377839721067
+0.6506707691016388017357516362760131941221566979795718699904936102
+-0.7043718208306549962960929614939365734224121070283816720729220425
+-0.9030673117697692613858834879354138789682350761417043644810908266
+0.5465706740090774853953336301894435415008351646460109707839721596
+-0.6814239608934778019209189605706175697331566277120687413401512713
+0.9205925082347564380336697132499017123825554431098646503055203834
+-0.5020782788038677346392099888475830183897864323626792080264544951
+0.1045062318771655437961420896781653537832869869453123103733053855
+-0.1600201060994392446745228713066083331646179396065484107159119337
+-0.1176882561544923620215084381200312622694313533614808151971725197
+-0.189825171609586721044013508138189985950604720902663500662099781
+0.7858779951083861580332996484728804881745801231417586365625881696
+-0.2279832493810412940114966076664112325854082672090777285019621618
+0.07761160430503009576118799101543653660926181662195182427626478291
+-0.2055488181060608320954691371766551168555828485198254292077222517
+-0.8570653123756356936765798157651852007633450856266713907351356642
+0.8510470630599207981929699284163199387691742475697788917650312737
+-0.16560123613326167092245232006380763867174148167607503754889637
+0.4313169396402067420747675191335695107540210953445957632944683466
+-0.6136943581151102724274558633917286896829715873222934810854627144
+0.6107089044121956416324813364187592386184059323011742030772237424
+0.4569955077979069087363694857841772836360708458051620753700613184
+-0.205631651713017368814492512843157697507919536778183448181516378
+-0.3127653344142269367017311068934194736573539345353684494263561034
+0.5675769204970204695935245199626881958749158960158155816882247751
+-0.7973797882525385651192136516616674358654229933256541899442767797
+0.5012904467166158311205187729565579292182659743325041112386977484
+-0.2570017860782360774767408845442523659054818260225494146244853645
+0.815285634526596302121470271218431186471214471233707249972351082
+0.3474550590975565404544821867969338696280672245517491821876495039
+0.7718119181978566336150728291679018907122826327418198982205731192
+0.04535880498283686865208322483522967139304884767842664817216330064
+-0.7174845876743344015633175484139120449777707133419695966520824564
+-0.853296184466734367261440721862287405945662264918150798455455718
+-0.3551691762386405619967249318449133353395153150287271325435124081
+-0.3797572987358468877601704908647997438784227376119508300980299747
+0.376493226974464138185316874204450738186203149130236541221263506
+0.2816632617692655097062060192076384166912647824219953750826131631
+0.6936970465516315197236088803729008972356138275937389314888615401
+-0.8093948466492362612217398058810377625062288216775489656468562411
+0.7179094192553983421088688870290454722724258927762520549683983736
+-0.8752125899339353908597128121427435294227530087554395150859455125
+0.04176278772058224232241432506737925045260833246510034386845030186
+0.9269329565460541008731323076781001715661419867914361439680533663
+0.7868192948478988386779315105006009612933033201432314519183555363
+-0.006266353716036539320572064746082526752743361256443337864258505608
+0.2266154233841305998807280483192876569901369827513556377738818721
+0.2746350702494963366663352365693945459844370045750631885709403566
+-0.5247772986387898164750425486144677116796659442569793354035835811
+-0.4928925951310793013273500011155592100819574396889780507999573189
+-0.3113637472666701974473222596908779747755145602641740095469526339
+-0.5748854355426279234162395955225246347221834110564955747956209638
+-0.2554460407289573319602333075606187389397146712378109702048311016
+-0.576542912883993928715652331022719536448966752471880286018776653
+0.9094805878752663366484875502653563100058416506406189283398268678
+0.8848752416174802394989820330821347631944308988732361074957483326
+-0.2800064663747466167971611334477592148285678388000719119052505901
+-0.3524957419793069043802183938505947717728662986795036125951037387
+-0.92661757991300447545015659444519280829067045255691447808600615
+-0.5330220313943443910835605702117655504592614398056913858309712345
+-0.7330266194736301185266620028746862947402855823289205835841036965
+-0.08901643770401430747538873378587416087951119772581637121305331682
+0.8550765251384289421250035837565358470833355010809526497352204912
+-0.6907357918123153055314910754893467338334399179189583430196498864
+0.8787770736433328745035234902871834306966611855454194152763085168
+-0.01738793803090707722596079625349684366463055472987575653160098446
+-0.843789436167682845942043151679017937854325407163610849246652901
+-0.8141497075382254027096074950311514491854968487203741238943799987
+0.03889316514893840261980283978604250703936072380623394289182754247
+-0.5493273108612277875600478109570404534520845332638624479667841502
+0.6715912488533200815290011024385797575217363717470920802742883653
+-0.8438919390970836161462370188424965610990320605153865447984219469
+0.7184582122882689810255427112660454958040291396946043511983687288
+-0.4086097264688666636790174928803728608266459573162410770584140364
+-0.5697919261032078557614020481060183849522111669616974872492012829
+-0.6278243966060881460501444931432866833291695231208083680886203722
+0.0336828617705931544383250099730864952662928062350424608691618717
+-0.7436883526680899648969850724114253803054818951808117927039564586
+-0.4515446035045963800470270932006012917142703741148728102920678819
+-0.4810931364819359747828351037417496237257328332185652823964021884
+0.4458845011005795413736316288478062406750213207171946521339936816
+-0.07022130270408117391201617422037495983519685200057324281521736371
+-0.9363332435815881306934514312012861106386014749526768950073553811
+0.5931834085557288286300206310139754784241341457686571795494994774
+0.7036190395840156286745266326175275923901923175942468576350074587
+-0.5793821363841516257942372216607612745507267978856920167262365904
+0.00904502267908283601336368137866081061069210352581761545503802156
+-0.2778968847485682179896478779214700059419569060048743113852325563
+-0.2784308881971247865302566270327586460636817633229294056506703495
+0.154652062686142233335996164065894879050336448396759084360086347
+-0.6225775243116540313116281463349420309042753281761340281921133715
+-0.471116359097837612645498505928182428889732655753776028642471372
+0.05019084624368743889926916934552108615492017653478974426758842368
+0.6461406780733109189385884425756901416390710262453176809391037054
+-0.3646945557234024586517840337629880176834748783187949036037901754
+-0.3370795553642254807046883165466968306962599317309657519831180634
+0.07406951035684034748316975863636120744360012351054481175945110032
+-0.0706071377017734071574459854474813417829167710025638691080824309
+0.09360709618916370956867688682300922265055482761303476467874635515
+-0.4903988627030185676892387805777880755902392098553657129246566032
+0.8668617192033373216803865611020212154378552305142050619982759533
+-0.1745567235833106956445457069963316833929324818668372064961096495
+-0.6495725409582065831276338775327045761031092852475255376332913976
+0.3132302317415336986457546693818300494005409790462961496623925972
+-0.08002014266656912107124326141465267585210492463107808149275462116
+0.8439760661050647193221008089223906976491469018983477783830651032
+0.2742491031513893827528343314344994279572977620848668278687664294
+-0.02731317148254747797517682815221303356852477238112794448774630271
+0.8474076414796548139557410486347838750741787558443005871442567576
+-0.05779005908514727153148268653835324462294291367795091759798861981
+0.6263509070486716842858384400904599373074897647536296406115669676
+0.9742953226314242461965632460638579799905807780876871234627553275
+-0.5412738282089598200095228242549815505925302427991012087392399282
+-0.2810841851319220937367807869615879057727320463374091858347990139
+-0.6332274216696186147542273193898355103863532218808631013492331016
+0.02172241435608649221235119486946747660849609106303200545112768013
+0.7184196840602424035733157087786269966875702807495568534158194777
+0.3749586907344833235687996618371211329945742347114437060445496025
+0.5197997067097932079572481275469253932045397138803211253153129772
+0.1001908957778599515703760968602291233036923939615286132670111686
+0.1982609831290281879535544386961448200899094658928947930993426901
+0.2265305308299656396847919737333043590525494945051651354564266382
+0.7906018990132069071786050772247164464130165003035494689544865899
+0.6124546368149888732224396347205514888588534382757197943350914313
+-0.2036417356829187550510823664309236059942206079488018356074124469
+-0.4438641124602506074890760872561035010575387638641217902217169658
+-0.544767226142520327341708643509310597533503231008421701753029047
+0.4877743695516254187304790685268488336758168947119202326402657771
+0.3326494238536684877812162306671513312155429822231139301441247885
+0.5288035512647287264400603641207174184836483925130588246958035505
+-0.05640118305249958065859491687650402005035008328934427052170270651
+-0.9339602027658081848487965258726967589939079607563390689984129939
+-0.321275957553128745693922641853921576922022691685968198941970056
+-0.1418273761530124142414318806991383724249955778125131615411614959
+-0.4264505073732180514731028302116498991019475563421457885360967122
+-0.3923419951379572363099277373060742200052172625687618481037698142
+0.8711561101780366371965222118006359089295680450882925107561352892
+-0.4467304300012012793076027789623627915431040635298455194234986428
+-0.2307052332975307401648420105809548829532849045676342380730437307
+0.6986593716253086507864036814802859528738405415349193484448192348
+-0.9881297466207630693750918682605017613031699244501296308233100941
+-0.6760661791650244249188462300591840173691864903003885411720888657
+0.4739376045463275401017721226048506342846991506758626675206797346
+-0.07231115199509153957529197477078330317517719228116128797380329585
+-0.2135268112097198247010681889001898755255288900766137207891430752
+-0.00391719982426902043959346995217451979511795015993884792888825644
+-0.4074397155278875973813395109079469465734104483931918973323186003
+0.6066576651382865740459746508693765522490832331025440239481867214
+0.5054494871102213639926772825334560876816388786177817611761657915
+0.8226583267458482637565255432456222691986173539474741807557700154
+0.9730166336949259260659399295334240422964809729308435599151328247
+-0.364185457502622256307866947693356486103622853614760666076420203
+-0.4001542376557859551557248563046997931549614286245539273687375468
+-0.599100169628289804012363486827377728153644244666681806548743669
+-0.8583780681190373783452031494167712583130326378561487627832196622
+-0.3045463752630304889449065225990597597721299636237444059518468086
+0.7886150417047268238377576739443317830511703278264640239600600345
+-0.5588043912338361844241544228067077162062321498757294327644573793
+0.907133074597731305198810561446025916829146667322489554834535833
+-0.524311683190174937888559570575683572384050389075376539064024188
+0.6581907342494117061956856142004712902056506998470355167826692893
+0.1974669756782317180727160357254418526609096592424426109684117699
+-0.01972112572276554306178203846081429764689884696412132525401824731
+-0.394337251493017165762973203726973092159618930132047937098203061
+-0.8596972563284409333221353720093891317237347467906295445875608281
+0.2054557247504006267846823161008744108436686866387260670209192195
+0.9164793193765776053806704726303778876533969118110393675531419928
+-0.6145730810103541808333969921377717371467821795648928293281783767
+0.007095154334222720138793901658750269696036135112599827909026723408
+0.8623200152218083367220882180263569709602229105502792928185580311
+0.2328862533541289876695060577850480885078345462436653283599123436
+-0.8594243434084773575696832444002804697287780740482575549078989199
+0.4665227761410612503864559792071327777686034364978804464477715773
+-0.9811624944532105651955157652071808929067746331174047524578239984
+-0.5372721741325555621080856058022867645684999577425925732434683467
+0.9142689324243093913109361832104779693761718654772557241029242509
+-0.8519800093917999049786710873262630254438596819890789333402870548
+-0.8663463923987564465482638692819190364387064757346171016284231869
+0.2709558465428488894177444835034893857451398992362135202765939096
+0.8083674519889074596117164158478163589581003465847262190755456111
+0.08192318101143036468909245818104351795349752285255508370548377145
+0.4432662295285746068645760939682334332432727709335441542485014646
+0.7098458531193496043308156335940587627787235570183896188894276827
+0.90322989019219600061196867059798813661922909644595685154839827
+0.4794254791268536633480562976950887435436025549286522438789030803
+-0.7746484154169456512809937246271660173202685744110036148882342333
+-0.2763771350523139054750111351929364757670962641805178507420343842
+-0.6737640502546376711965235263761153629368423334845050663282786384
+0.9860843557274707818224203215557433615103323795855487753603071846
+-0.09908250822208310979388125313393386625642518646689831540002743491
+0.4083364361722581165801901479594515422760935325739573558840448982
+-0.1987464128103913290537565707198845322065664181338633370605495606
+-0.5407738721582197458183352565621496660631978320791939263962860219
+0.3927066115442214638047153163113331662262162359392646773307752893
+-0.3547265721044417796948020637228927981006372674781249634536133803
+0.7443511718754498369053636558248957547288930096116725829118390452
+-0.6106514856175809946267252713465468241183844646996285763158471635
+0.976523926183381328411157151775497729758348938804345757697622217
+0.7738274296309371782471493836581620439388102593378042753716890516
+0.6303435590127475728343988381089812280592884794559438601115730286
+-0.484063371813939130083050651772175383209126084648446213771534038
+0.8525922176927925458770820230111251769664015980843161969462044384
+-0.08163044187898704046903120648457597371959955348165323805504010125
+0.421148022345636083380666926166508150293522832173233944655555408
+0.1636579949610354489441057651722542939624135888641020127310796368
+0.1158996829838767780820446554770404024129821417414276676244486116
+0.6122743525100609786427539952903164332986527922843188026822436303
+0.8287184948673512642625509766623864745682445181955817748687592982
+-0.9776838203117432640468561992811674532088503638852841073034452293
+0.4475824486005748840610281907314246250638614806065401547533877687
+-0.2012889019039510414651830187674193045950194169108930931856542009
+-0.01171834366241198933438406373716581804955151297150743304159782864
+0.4922455338395964925166766918239575749296275172064692575993556194
+-0.05364567611959903567502330013213963546585099551575719307976293259
+0.2859039723670674295294361938847146749682776282795557426834523284
+0.8750329779299614706148239867721002941643109143868880399745229725
+-0.7722586575162211931712103266374485003179050625215461656404618225
+0.140103474533723761562030202095101893875706398592221339805012909
+0.8390047845124423734044204882406751006849491027338704535253123886
+-0.3131244711658136124319194937374637201951191483185787516824163028
+0.5906431155148677342149308852685885638274033210013285902888289507
+-0.916204807843398213138374272217346839955126571982524680966302845
+0.4438198023728849844308452858166958526884620742389769268237679581
+0.6601586762490308568348505588115261580494881196839526850118211037
+-0.9618853586098018371722211571527418635003319023500739295420333417
+-0.1292609718107532753146691377641856162241453138036350409973849233
+0.2813027204528153923329019336432992610341145263276842828170084429
+0.02901692607382806767360968742809799650944015215104495220771449394
+0.3041938498059602562920829742497990465452656988389381717366180348
+-0.8416332863784354708625199574482551667809708135793159735459802674
+-0.314950008126667019050031257450545808172579515682962559472777899
+-0.003275852688626340591683182725592289209533360992124403573787800845
+-0.8378625925962227631792682994265765481907889744535199746129185636
+-0.4342779984921702749034944690110939090155169682108203705245647346
+-0.9068313407149762968086567340954913610684595084886817903492351126
+-0.5878274041052291477943021502436561002773261803924218942833270832
+0.7976934088261920073242997664284179394988305733935216816478972594
+0.3072993380346806450796644618533558809298372285335849801472800055
+-0.3158899277774763040436693675498339368716705701915489772738691617
+0.4666714471594296105907779829907728877151358508508298995416084212
+-0.839252315736576298292024833817840220786429992773043003201199367
+0.3724656798429113456573796032664972786754306954066217858782865155
+0.7833206787384097305592819931133370072071003949491040665893856821
+-0.7544051316606455187663010577509845083171139981413787259246099009
+0.3363836481324219723370186210692794125850649784394352985597901553
+-0.6491840008149435654312968884792746101712975654905192131468895032
+-0.5376568533061764969177810125554299187960447693632897302426453216
+0.3436505628709939568617544614844578999694824109632610235366179258
+-0.9878395889167084950186530859519776075387863865636110539086573895
+0.231430699527959400864415392219075285031748034145026692189254385
+0.8865073285770955099860020924501486556125845788147491503154690747
+0.9964078756487818306982678918396703581497863065837502553775568638
+-0.1327340387426539333160769890953460166634179046951612739896832303
+0.1516135436026911837076485354625099431713490636151252380398422077
+-0.6794254217136540815383429489211152521219412790709340904663043984
+-0.8608338971722177289009152884317389810381974752382902396992736197
+-0.8579601284570283198168880475663448240213020365272821075300399251
+0.8642621396528582742546522275938696917350964149850345375415910969
+0.9793589839033901948731783645080578582463688236077166539472268901
+0.9683660064401229939001661515228452132613132290247913394628566994
+0.9871325644646234051116914095144895949244082254772823408822757459
+0.7429408357918861651391940854314483777231519683391271617922207998
+-0.6679971490414301274552666497306612376613754110623070491783068932
+-0.2222054162805692664553590963524746378422134405027779312108432929
+0.2825286514059141882920658191340775973641769752737899181429072621
+-0.8641655578339237157426364564226402388621743753891534760458972311
+-0.999608410793501567947359407871488407498148846407377827921738579
+0.6918702869983347579958468231672430091995168889418395643526262834
+-0.9376354253015494471896434810153189325665084438405669131018104586
+0.4924687906770157503064991069141120219191665852506741133594520199
+-0.7528019931350588413939154566388023308331979635236679471693177896
+0.6977106568122303299097295004137729206078400517066513083779044291
+-0.9241816059668043365862855436852035390363373632288175077727370967
+0.5191919026143328960366321977745092648338330203592978236081348129
+0.6714084342259733896142403819832445282754246581821439681178412078
+-0.3305661727568643970967579496852928159892749092036565327744186388
+-0.9004094513551951169051621458619598995816695783221496309703950609
+-0.9884847412191905817622272610251608563747945077452623649671510335
+0.8297590431974834390160620549937730525352694881027721814298674934
+-0.2609452664773769489135290033372776145152097963873696107291657849
+-0.3951818418178703493034052559225176300190976118265294520872713497
+-0.4205393286734249298736520308575155093951794910953125656434538838
+0.05443728213987669453050764608083824248316758211754927414048785268
+-0.6146453888431441977579264187991304908673042553348506918953110581
+-0.7563078968082354624200473875899165193618716500707274646443978808
+0.09396735259632912882662399404023686834860630896601823063552973929
+-0.5785656457034163940108434599486778925179861427139603882087606858
+0.03957899544097907583965796242273333021337860785083816690457151443
+-0.8523897650942072388808518940380192479382746023303926709202228227
+-0.0783278486518552435911237017548891443409964014583108296334729426
+0.6033167859658457194486961001342941735744068154496164938059859501
+-0.3586026685282925549652109446290082081072664311191650680624687117
+-0.1022768096029592458455381062000780279188050363478560222801108958
+0.8294682959773017741218920869469493367635666889096531886515534716
+0.2439910403168467755961516475103100677957670811159700079381010653
+-0.6217436439651384803300734137423667977560295277969228092600510878
+-0.4555149377465992268639969728371691262215382223593256475914395574
+-0.3638121656089442802844698751087347999906808525959787225726673495
+0.08022634781470307543831149021588896288336888891859159188614295157
+-0.3442492480706474446280159530436383963980497643713948380702723602
+0.7731435513750314635297578456626328452295898224889367523690353904
+-0.8066018250843343819679233406902709051909675387567362077697223646
+0.6498496955876471932216884562708997543204996823603089491219376678
+0.1642905711773671334665778070841332282088323895041996317816766814
+-0.4518494760071388063906173756614064107276944654373102185018585977
+-0.9844987906209126811310473648289719482037695495421754529715646006
+-0.686263785230994236933017760416487786457347579482201632713307669
+-0.4753695156132390969461568813093716281405845709725218384460712431
+0.6556099024117094888056949870591826089394312227646540750168521309
+-0.6080521800564137609237437916037781526823806391293867985443226801
+-0.07321134672111011808388258675460374818656780673570195420048014019
+0.8884544237779923905868256068860494057150693464894071066550039493
+-0.8354897195734111780068198561837673077169847832110436146953999212
+0.1896995674958023935839174980322220379530103420320344001246792964
+0.7156441808215881403448442063593792131902759984326841936686872424
+-0.8421913219903778026902017651605922300271071155283113389911103057
+0.5143856875534824565378222075822768838973165471074914221146249537
+-0.9085106045944224577834248408304889618324419212648761341182940048
+0.1490964832693746980567218590257837834356289516139096586207694171
+-0.6533071204065437867348628824043457513023406779543663479731285027
+0.2589807129282846863190912997106752238855054803532441648210855276
+-0.5271138651419218022479534356690600389529298477310942773491339837
+-0.1196937413617940965411274610059650995185123109435955751314866664
+-0.5906276157747267452890097085607812150766085943725793971349352161
+0.9512474782975162982677561838668759755171776738883301392493992342
+-0.2585173836652346672012366614981640522011558252359692008464201827
+0.7524677433111812677624154358601882415953170885621945514823934717
+0.007453434967834908162912548875213581989444052811981129593774874339
+0.7024443905669303463325044999633524679292030510648808694652482144
+0.6106130060934301223265972559359941935828860808582178521600687689
+0.1231870173638568907727920838441539340012116028226779971441342773
+-0.1170516315450676456572605810356433736658383171876884602766708347
+0.2379797449298319474236531372730651577119969114593543972996184914
+0.04370148341573901145774807336854657018472602856035430580322484601
+-0.01566823635122952039094015583015458940797919213007079339305198311
+0.4492410143872176596850637170953881938575382076365915189809344711
+-0.6585592493830587345638673165535959781595035622455918843124435087
+-0.5444085272080392258191197590500321857185674913140620444083228958
+0.2626598519861605182484353725321079345286314106027470449537646385
+0.1376877378972272155729752353482066269049185939455101441339815693
+-0.4006520844525121330244486700355445948137705338803507925144414887
+0.08187311850883778757260063595415584588170542069096467766500950588
+0.9752391076391505122735918291390393444711089786801290853210824038
+-0.3212233362207097908208338883029696979756133137518721105877588565
+0.5092639397663682383837026485562440892473560288009820563671444933
+-0.9571379854001650517501024933554614772600734829289247917367756493
+0.9579502281429485110215155578987438072018283869571111430893435551
+0.3116411197945126357426362801452345353189409007169370813457229298
+0.2484690374248004683657335128660389207658914051458060123112784396
+-0.2403660132684514567917017973919081346210503357988971554421714242
+-0.02986334821072979924224111997913925489081104546097247260975607194
+0.5977941490131509497666546060166199756407694477860275134227129505
+0.5145115831024917350771487623634444529741726046272463842307467712
+-0.7541553021228906536629213394846582989904144710061232966318795443
+0.7215762228889012669141339870935883519063070343940349153354454459
+-0.3757236072892213223759673623545904150820876477587753267821153705
+0.886406401856136736735532449471248632085980305258039259895579587
+0.4057019665186648592183688760924469834594142722897462461494035496
+-0.3284277009657261944551439092589604980107747815322980776576085825
+-0.1777090344048752749868466524587491971848025402228041103900027514
+0.7025976419353913069965590229613118351129290432212715559282810098
+0.3990016476245110843441767494987687694349242069283992238432221596
+0.3522709802937692057034311857540090052484305021670363804665177075
+0.6096844813075936531458411576391258658725446389952314976494357776
+-0.4549769991327555564253844700669738447513018849545614196904514137
+0.9699905592272083477620210980908355812396449180212971060144950085
+0.7498232594481433855584036311186800022691030339499672238685843473
+-0.08124130795517090131865875331800862391840778776587451797446618149
+-0.0960870639058345691800475026689705100873699725968169110007970262
+-0.5451927647116297262326583980470264138959459348620324728883459141
+0.8138649538996382349722837036147514066724946600810522362707622419
+-0.9018403921117378936802781754521301934139934044453768436394590943
+0.3323218555553240311260400216534485073169253622482884577923238363
+-0.7200684774603297918875338542123878593140667304342330332159602576
+-0.02147961864887678528738957408023612168444237053929164356826981822
+0.5254410558460859605087208173100905614171277200826824289213165419
+-0.5249878506388901472711579370102540928769837177979577663672379389
+0.5805934135960616521845017309786436466437346159859903276506130233
+0.4108150684088852998686733919545657392411926766770777777434045282
+-0.3441749701647517477889510233603120937668261799325819146170898937
+0.4606212594814430218118465286853643990316522819951705528199959195
+-0.6677323105521650119681003048917889833758906781477621751672096581
+-0.7218154524979247604553644963494122676763226491036820436746768133
+-0.0867784795931122196767396892901436370465995418557343928042580599
+-0.1162626639637333266228071663736609088361388919438879190762081927
+0.03274719788121083841144977470346545977395349469623216732733634841
+-0.6698237693339085919901027803019699057313615574070964514240769928
+-0.3983027464023792902660409298411153556965778110241386434583873687
+0.1458638411143874921434364272961719617992984163054373216031041553
+0.3615685859214923600758423868663452073069284731781755564707775459
+-0.7426549681496496864935726783036103464805027722297231928075561102
+-0.7684547660681665066519515554733654436448393642017706465245375186
+0.4458807741099861526177247771025494665820255592246066435566207648
+0.3985566738857450435051359965750125351685476804564258720752876964
+-0.2174549546747868154169543892908084467015810892894924116151543348
+-0.1343548927096384947198371844463249261084445176993169652813594255
+0.1852175416481633972409369103417702230894995364414738802035725357
+0.005172797816632007280598823316568992300651834729652523723869275114
+0.3903666610258509892634735735047308300250403568162514376305044435
+-0.8338754075241486479086633477945877914531212580308062491411496161
+0.9847519439196839847214964401341029639624640911172288944197443621
+-0.6938477689490435789374980639756215337149150918466472657060994131
+-0.1913079077139120099096772633142294225126821843059502310007984547
+-0.646386205771360128573428227215441971278425450785841803261242811
+0.3827413613342640231652503472879078021424394585972829272328681104
+-0.7720727472864134929959291632086941618438820822136574072028080816
+-0.9990561012320254273797384718605153699422951092251275740070161952
+-0.05673453008754950631927284903780550602200891995748822809908372908
+-0.7953526631375207473973935672161373786589466594986701111277564482
+-0.2504551465835887632060924159923293764112237727458078357294223108
+-0.418408048286024237028466083239559053970182325009028478341640662
+0.4627023914663900838116145359154475820528077271388401807481594188
+-0.9778541501693169375385988125771891870771302850159179165932180271
+-0.6176977705983222379679597772002642591215510705962786127767690952
+-0.7541605226957988014908091549921751556524059465395174795048280547
+-0.1253235895127937928416118627091859968820485598057931356340900519
+-0.4187104369303610544925298251218699802587106413082815802235640076
+-0.642264583424816118098130637191329391471578043059036199693140327
+-0.7157336868929923060690058655020407030459354695577846075047088545
+0.674456702610117811262388070884748086491252340938776955015325508
+0.9684795236552485996383537120932404726037512006334180858124873702
+-0.9364479987247586564267417005885206163400558318164035469189463548
+-0.4725527711350699472125218431374656002115592959658867245652296612
+-0.5623226095453870369737212532437716556558003329623573147896780539
+0.6833494333970390945851345559669690436120905354950143433137210547
+-0.4970065305795287266242254709139657981059135202258178150278338814
+-0.8365192429273594561843462788788615100781580396259325379294717739
+-0.3252225194471257008753413701908571595368179590991062801693037256
+-0.6706101550145821024931531452723694481078020194592345583367982326
+0.9338381906303263731050021307994290132395866766867230545424335603
+-0.03551040283907854841082533333557868811617492251695756619678198462
+-0.5692613436333678550460523108523458631150385379297184173761581304
+-0.6363307073075527209394469163730940591751156936270557608676600723
+-0.4085908952208837261831869077267270379549759076959904334842310961
+0.7300916173166646121592320041656905807338704426451979820849115241
+-0.001383372764599846106738356863937115678648437689000099723461837086
+-0.4777567385457321995351536662662648285058677482460016331360745385
+-0.1948330061967239431823175756756826607091943555542911070423987994
+0.8459710208321990958775051952334276595720116143915933968673357192
+0.6035682379636567548550688236410906509336931607022509463445925614
+0.3345059467096545054215769577936193613915366469519794818172132859
+-0.07667425439564145607101535969424721636092278932236997554927225037
+-0.463617226836116072054579858441134676417585581179846587486154781
+0.1804278237744440381430309435895397955575873092635332985172711154
+-0.02252217472447147430417959341668363763071277651553525973484567039
+0.7501013915358726015119991716079777953558342589570629821437705197
+-0.7871400621970839566465938957310461940711201701430985082043945502
+-0.815100900493225763565914452509886069488898337417270980135148811
+-0.1686213462656900022656329498466718798824813012517022157941484313
+-0.06313967597639198900381462843243109023663888159588330858774026117
+0.5726166900593667226677583335398103942743907152723495487813430139
+0.6258604194737129856199495492933383664795032355582888427775124459
+0.2712449131844571979750590354811209555227623988669955594208125657
+0.6134058161573621731734197478725144201633628025773585632852272489
+0.5278989115962966203372785753827399861302284751273929887507126329
+0.4120506415803016771334319087538670308193728429535410489266885161
+0.3545576081530893721298388549248502297730179531579546710726862788
+0.9954080102248826632557698397884240124609718895723927601777380499
+0.877286529588521105293318949150599543982608490469785670258693305
+-0.1729582755759392122304422895087558193404264121887563063778951356
+0.1762668389658963968962456080988213348661449619145333641202307191
+0.1627471475602144975348073285777323748185127599370078689268949577
+-0.7643173297589358708829460838166575906722628803947798199199892918
+-0.9483965851770196106903073158919092222066419153939605413720684238
+-0.411062064846166197604081296235023250905593550473744563350755
+-0.3916247393905563070329929201293916235502844853649152216175431002
+-0.1692968550760303048659412472462158621894331623355288012456478502
+0.7939708466508500149635028098461967945381902597647140226048707733
+0.1755359202379921866069215868439830278095556184633912262229245804
+-0.2058860363049366819482401982172892014693921998279485163968466177
+0.2559787616604292818916512520106511162736504164763801635619180878
+0.1276708600748879334947561016681847262811830975924911095919544508
+0.8760436753090542847847135932217121401527053160560084831960143593
+0.07351698801837884840350528581184895847574439119624698642085424494
+-0.3039496890780872600154134361379205841668603387773376739391879981
+-0.3907346338213221479806245911718328382900706209181763616721575594
+-0.438894082398961033675972647178139153127868567354072100731910011
+0.5825626412257374534228754073010703282797138907243105547408114499
+-0.6822025478392511825665891340014210548424097859019063003298929114
+0.1545185080993607592672497799365112139383088433518173333061566559
+-0.4143669554567358180204045828576984362759995052100693730217120812
+0.4753177789592309918230775580385921417863787358258761083730464393
+0.3381112107962121322618268829368716348475620132240222907038939887
+-0.9358096238962393427505781408693047651496562497418868348861861035
+-0.08535245274454884668189804324981279737218996224284012980894287651
+-0.7102354155198365907516134110899809885611419503815361240641323568
+0.9406474081275973498975356771926002702836768966349619838574684753
+-0.2000685096329297319258072334148781412585948790410411642646256195
+-0.1948085218544742821796599695605371957131897781266723768851470405
+0.8712220301755093291187034874511681480503967332965384772732747763
+0.6950851294718433169140442698032957893608035244855573671523954496
+-0.756127015862911258248693621646841843922001233109399862976664201
+-0.6835396969376186207049708864069753092830556523340365862178601449
+0.9991878451915680045557057812923681076515646015963600921542788243
+0.6960715586734440378780565521179708081273104398001698196866525692
+-0.432742910148905408176462256684174149338740926855330784898507537
+0.1872243339861613523644413949146884094588238480876418909173774861
+0.402662443832395652497639977463665283487402978826354124075088799
+-0.3491360089641523322913350877949129728365038941158799742781646969
+0.6819675433960509672083191115738041818053676494660618551111563709
+-0.1823381334073534785245030674706286318834159248301753692560100612
+-0.6385995787092894271293723815100593363051897165493146410149913737
+0.6916342281018036398984236976791263254344928960212594937230288978
+0.6500621886249875850766751691108345859655690343722040658873192849
+-0.4348318526254175826972960081432612508244854062543938298206690434
+0.7456657873285777360172081160009154104941498607808325586093127197
+-0.5895812562236644842763425265025353569278839415810786451424337353
+0.7337844832681618069448688606606437307219983067331818101002026825
+-0.2844670779170792126800784688398491934944633405537328381090907841
+0.3427993283602618500252314660534064478569829258605557092349536627
+0.5106185172529091476614544522165302352166517844065644266201756413
+0.4856173606007132392408155440134806804977686799901896296217865378
+-0.2263671187335048284610994617354351929389049781424965316819369999
+0.4146212958335274623278671624097620523062195099641464230045078964
+0.2580172605548675827290234893704744905592907659497024523955378101
+-0.6087056175665957055918320432990819374336656475674530956207253005
+-0.8366054247097585161540775208898495411890462422998642722088007066
+-0.137834925959822818046103216602596677160200508852076641148931525
+-0.7528699368161971489890713573053204682662330485091242459663481999
+0.9340751534308924398705797216582841894605412566213542945138196716
+0.574264554568995450629332063691437570705093369055141520084192039
+-0.4990435237200477105373352757983399851892927275135825052152492483
+-0.5788635431909007734940310044141719475985224797147376719548923445
+0.6307600498067333167763910521978077360220889790285830844882853084
+-0.4014040813213097025365283078522427676254307924957866525396810814
+0.4610011535171245502984210415152447483516976002309699030847778858
+-0.9598712514044812421926074307158169071261326319486214135628310751
+0.03297507778679327566136523769691558089258387118395727900760854437
+-0.4478144324181501526487508470803436796663672506907329977023916744
+-0.03784958598688075901169266487429862409650536609863979187248762614
+0.7172172553976201342087941433376237277837330259391388339674897056
+0.1341935476168806197658068994509459570361343697473296061012848517
+0.8063824890450920329896533677634120385719152293076412441511895267
+-0.8679891914951790505885383634871248274035087573890845642505234422
+-0.3426337630231737829860061402455325002495616429829300496241394354
+-0.9481588649129939009976602290412980740818684483094249699678164212
+-0.2468702574678295161158155415586739476964258088410461931443734306
+-0.1146174810304291059699248102425343100105366662034712171707784062
+0.2283297622158289340060135259128868026073694002294612687340003795
+-0.2718944337460881196573673881752552829173470240069493659862352829
+0.6421696775864062219741378623856224373382184359901387171857038018
+-0.6389803245001939674891437338685009037868390389892571357557309793
+-0.7556179778156452619018039591263991011950908799795076441783613051
+-0.2580715301246062724484885517142629841524988678101550643060884983
+-0.3872364535425728912921990568047940609852084750726579602553629346
+-0.7927809974155702691556285149188004966121663582345561182236807536
+0.02862566723071006537340570190617812163536850346858065719330520575
+0.8058745718080974945514004702154373689648850822838208818716712414
+0.4099119627688388538769984420238129284792268230077586654685167992
+-0.8826419555488829504077066182866730673335050894428325807226465764
+0.8406180336262964510174047914967286521428419772200521811591938538
+-0.450936757295084356255188039953493938887507869154457795276369434
+0.6620955836916596824212397663417980730035844600002163574797281392
+0.09931563449449074074031181644069996206561013557911091480285233095
+-0.6390907754627097699275236205094854160516702573615680850365051915
+-0.6388666965766126015615967040725665212506297573909617791277211475
+0.6087849938136308182412384404226124150960376576525111594939953377
+0.870679798223814808036388158491793684010125978178505913587754027
+0.04278245471227159846832542204898964777693633220563225458193492098
+0.2569538948127883301494102848449453487250302047768055402790274973
+0.3437003552522383085689520582964325593149609775075667682579222428
+-0.3218959502583203105446746192775897778845750520500685752508368899
+-0.8759520196520207354253875993553174962243840546621836810552229329
+0.3695311789866940300113392000173568635794411080368248420486051257
+0.1949294588334673301930135554724819965935557947240381098751857774
+0.8327203309031350498038333519107538479272342828592238378770924929
+-0.3867736800309982460174767560960745555693216907304804515443525325
+0.3116959364329371631043166149865940101034639300958892851164822571
+-0.6344389850964027197090400018047413877547525732579247607188115939
+-0.9859792403369194374101181021751879155430818773451107383536702769
+-0.2988779477894864273115298013571570477714461831633655661691128096
+0.6969130489701374579144496827671972093540950499666693372619717336
+0.9538684673269454382682004061133669424312443860394343514530091686
+0.6571064274068579576145871735027597380172755435464815449044760207
+0.8948083174389717363132891262865381126942487858457690321386032713
+-0.3666554779067070541307883937658891733790267361996150668604800832
+0.3003809721642328231475581761782696031186793066000435245606638715
+0.5683164824516389166397449426867864421791228614931009665807349503
+-0.3617780451940083476334098905078810616412122142339454641158910899
+-0.876252035278197538230644134569503150601859977658516805657578013
+-0.9149951631626462781986877452029941763769145573200913307939646647
+0.7980936345728580788983395625952905333391865363688832991541279836
+-0.4345640967580088681688823809160115367270791113095117485047473101
+0.2806726917100181766590524566575735198041671844833126034015982943
+0.9886442669162063771587942444861953097162341285231229911790757677
+-0.5407668735995421230876882505889671613743270176303406373401158307
+-0.9661599367900293411988347594202761971391515155829902805880345948
+0.4527612743944490491078701770325283220182782523040192607074738515
+-0.4403723954717156300398669608484104669667863109459731879914962121
+-0.2689722396417616874292948984223352443158442995705723688305290778
+0.8553982026789018215607096745600369864604738003503035060351207821
+0.3262536679087418635318429806053466323919442159475721732267143898
+-0.9869949403144471510949130612151902059070782241470367330151451369
+0.9958236385275781126573144185857571677091658970162008833157311346
+-0.6665960500638005674036651414219506162171157852051050237602670409
+-0.9553350971491526486773428621871443527918661440128477714574153242
+-0.07935632250235258159855692970937683747449485800098387036910117561
+-0.9610690736702824303758380293926774684327690145291948041029808949
+-0.2927839622196178599656026082499690152245368043389294166040513801
+-0.491539029735290543797080128426214492997803129309469551153559041
+0.1629547757370244179126879520510440518091698527617023705879738745
+0.05653416666354357132984944706270086858040031933040278740096907499
+0.6308921779447044784475646457793683838809254371564012458215545506
+-0.4345571265338803304901574752486287910158971999780589556527554556
+0.2744614498129195644278595176215625707002796888714048071306120005
+0.9462745414165145062091900137500005105717154649991007069448208601
+-0.8842780848886000137538202841488505116007575831951417195166818495
+0.4895089734173998976892231119342452295703520064229356243351797868
+-0.8015666268827453757745295045038410309194334927690170360827758513
+0.08924086551220194261727996666379476791624346388324173884747638972
+0.5531344085474110087060548347131946108975524201603311588598152487
+-0.2726482022070987666824807493724186232426776075571902653183759167
+-0.2331190321888440555823894801021203470961345019996925149236496708
+0.6887376914026015928562802078420345845484724885753275194586894515
+-0.5670143177465921484512846331884370438355780676526109586127728543
+0.9801198492324806976103860712732338332717730296465385214787557692
+-0.406860576080735477960930289622424758775863233469664807774784089
+-0.03446921494516039315412398153288788724684106035814076442922915679
+-0.7870082391945100619360361264498403541957919699399015690283593653
+
+1.974819509670653910352795964175958452838328324670298164760176
+5.511834049594492397105056878688460309406850123534193651360587
+-0.694962937555254143185401302339371958935162604405771747001905
+1.792465462520432961951483501481339395693657492782016906061254
+-15.852122776014165128445189287519296323590114653100113547151615
+8.887647298970538537469252035033753494637125228036105901295324
+-0.188452231321642607609539646097769397074605383071578769691197
+1.979510772987898923139904821007323717941840910476897545986153
+-9.252283465629924096128073731541685993942541998095964391065555
+10.170368718078394850250749673948330528800877132073732142514464
+
diff --git a/tests/data/nfct_adjoint_1d_10_1.txt b/tests/data/nfct_adjoint_1d_10_1.txt
new file mode 100644
index 0000000..455f313
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_10_1.txt
@@ -0,0 +1,21 @@
+1
+
+10
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+-0.3755232163734427377149114453807678698727874531111381798101188174
+0.183705872085627972536969253367933147812340993611437697869365913
+0.06693218920683521712706873725479520040237453808013632194088799
+-0.296139256948903101668205165947748211977639406028701068327823591
+0.430525602690103275254967072001504141910811738789084464890743399
+-0.427062110799077587836134983970986137143386470535831475499592966
+0.286857755496720608126291164981027998827985799090455228036543115
+-0.054804518799889746603107406345788712544004714170931844774125842
+-0.194796557028624740123032506296867385723958969826882237046043893
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfct_adjoint_1d_10_10.txt b/tests/data/nfct_adjoint_1d_10_10.txt
new file mode 100644
index 0000000..206a5e5
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_10_10.txt
@@ -0,0 +1,39 @@
+1
+
+10
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-1.347896216355931774679958699258750407129349908487712609591584342
+-1.8301053629396972772823004381555483011425503144920499109043926
+3.87838661975936104264694306067491595615045962781960132943901479
+0.11337157081671300433612018769464878374309714416836414668725249
+-2.31760062964641901826990290125748091267003100976060894709371508
+0.32457476790256447989103014962458061091760208584303717727691509
+1.4138688852318594241683756341147322162997616085275207582915764
+-2.00979684225155747886674087582637380624141595367442003875459761
+0.92918622956550289043443339166309273147569113421514903078509845
+0.69695084153985503009520760506055182232806606231410181732593295
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfct_adjoint_1d_10_20.txt b/tests/data/nfct_adjoint_1d_10_20.txt
new file mode 100644
index 0000000..1b91372
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_10_20.txt
@@ -0,0 +1,59 @@
+1
+
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-1.313831422727774651555845755917101990528470330521651169614664193
+1.46355442483928096702736490785862133486191559046504281025787006
+-1.18451482947596109043000397033789725114267460887252124181270873
+0.05951524075769099922476787090855746084963627903213878001719051
+2.70872759016867475683647207682602374720601214499401821015042636
+-0.94416147610101625361944500413293193257818930563500271428239929
+2.71180569820343380176966868586535984049622697797417244266439908
+2.15233843730804231706836465791701168875063301744261884900928713
+-0.97311566878031548708171942382413749407439175591270498714337787
+-0.67925989347953101555873612315211951129912110007083598581225085
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfct_adjoint_1d_10_50.txt b/tests/data/nfct_adjoint_1d_10_50.txt
new file mode 100644
index 0000000..ec5fa77
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_10_50.txt
@@ -0,0 +1,119 @@
+1
+
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+1.35122275672905157987939776353521245082875968075595465317817761
+0.5366839880179031887120064139815043015467504468244920295854889
+-5.45737895073103416127963029233591086476552083358807272782576261
+3.58657582112954785504615992622502298303533508456479319347624892
+0.7303111076943690953512284581943909471702454190608432687001515
+2.0541944391787293671731867123929379031149071112594581693647526
+-0.6599703963802694991803819931207373693481528401806212696389689
+2.2085224548030903933533652989679471034421835822706467226923092
+-4.0078215611033132699489677135812674795007782457949942923143348
+-1.7048075770336891481320007283565165483226400651386589071865583
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfct_adjoint_1d_1_1.txt b/tests/data/nfct_adjoint_1d_1_1.txt
new file mode 100644
index 0000000..73c5adc
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_1_1.txt
@@ -0,0 +1,12 @@
+1
+
+1
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfct_adjoint_1d_1_10.txt b/tests/data/nfct_adjoint_1d_1_10.txt
new file mode 100644
index 0000000..b2e6f15
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_1_10.txt
@@ -0,0 +1,30 @@
+1
+
+1
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-1.347896216355931774679958699258750407129349908487712609591584342
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfct_adjoint_1d_1_20.txt b/tests/data/nfct_adjoint_1d_1_20.txt
new file mode 100644
index 0000000..2a0010b
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_1_20.txt
@@ -0,0 +1,50 @@
+1
+
+1
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-1.313831422727774651555845755917101990528470330521651169614664193
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfct_adjoint_1d_1_50.txt b/tests/data/nfct_adjoint_1d_1_50.txt
new file mode 100644
index 0000000..bde8640
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_1_50.txt
@@ -0,0 +1,110 @@
+1
+
+1
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+1.35122275672905157987939776353521245082875968075595465317817761
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfct_adjoint_1d_20_1.txt b/tests/data/nfct_adjoint_1d_20_1.txt
new file mode 100644
index 0000000..cf5fab0
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_20_1.txt
@@ -0,0 +1,31 @@
+1
+
+20
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+-0.3755232163734427377149114453807678698727874531111381798101188174
+0.183705872085627972536969253367933147812340993611437697869365913
+0.06693218920683521712706873725479520040237453808013632194088799
+-0.296139256948903101668205165947748211977639406028701068327823591
+0.430525602690103275254967072001504141910811738789084464890743399
+-0.427062110799077587836134983970986137143386470535831475499592966
+0.286857755496720608126291164981027998827985799090455228036543115
+-0.054804518799889746603107406345788712544004714170931844774125842
+-0.194796557028624740123032506296867385723958969826882237046043893
+0.382025793435915828663872807350609121347448507160060744015114342
+-0.4469343286644432519640732252672956318507789883812805760443980903
+0.368739122202122264605209239221649356904895224032027335300002311
+-0.17247746903697777667494799976850543482187955097972953286517137
+-0.07900968280560274521815635546021216636059311880975589331809819
+0.30519875277321101704042802235204631602436457552557068833057107
+-0.433666344035571305960503256551849374881702478818152751024595568
+0.42327846482572518352845941476063953312209790775268051758166212
+-0.27736120644572979464890931867632914022416156736782470212727844
+0.0426357632908477547531906893934378715710551610515587507219777
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfct_adjoint_1d_20_10.txt b/tests/data/nfct_adjoint_1d_20_10.txt
new file mode 100644
index 0000000..aa6e11f
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_20_10.txt
@@ -0,0 +1,49 @@
+1
+
+20
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-1.347896216355931774679958699258750407129349908487712609591584342
+-1.8301053629396972772823004381555483011425503144920499109043926
+3.87838661975936104264694306067491595615045962781960132943901479
+0.11337157081671300433612018769464878374309714416836414668725249
+-2.31760062964641901826990290125748091267003100976060894709371508
+0.32457476790256447989103014962458061091760208584303717727691509
+1.4138688852318594241683756341147322162997616085275207582915764
+-2.00979684225155747886674087582637380624141595367442003875459761
+0.92918622956550289043443339166309273147569113421514903078509845
+0.69695084153985503009520760506055182232806606231410181732593295
+0.91554651299993863598078312662151481343397326565582805449817609
+-2.33391211581763253435951286536658361620239811477745223739343289
+-0.24711189013287708432588657794500872016485973583233702624333694
+0.6332063157319663483114780241309835769577296247315820939503809
+2.1514063061758206044598879226745385881303232374738823591257165
+-0.7748705299728414692222098452778165989286713689609484281632992
+-2.0230289924999132810676467710869056614369880913753017307730685
+0.5009907517694399539709469634560452528733114789576513854170775
+0.3092891727313212684271577075059324424030929434820004560275816
+1.5322339486144313540329959323289970652403885592260279844930099
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfct_adjoint_1d_20_20.txt b/tests/data/nfct_adjoint_1d_20_20.txt
new file mode 100644
index 0000000..b8db749
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_20_20.txt
@@ -0,0 +1,69 @@
+1
+
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-1.313831422727774651555845755917101990528470330521651169614664193
+1.46355442483928096702736490785862133486191559046504281025787006
+-1.18451482947596109043000397033789725114267460887252124181270873
+0.05951524075769099922476787090855746084963627903213878001719051
+2.70872759016867475683647207682602374720601214499401821015042636
+-0.94416147610101625361944500413293193257818930563500271428239929
+2.71180569820343380176966868586535984049622697797417244266439908
+2.15233843730804231706836465791701168875063301744261884900928713
+-0.97311566878031548708171942382413749407439175591270498714337787
+-0.67925989347953101555873612315211951129912110007083598581225085
+0.89734483718988015387418290317302059146554324842099644785910861
+0.98319349765713609792873098924220198252857238352763326070107864
+-3.41337268533831779784415112586515899078353830062974298567748742
+0.6433180073954211557848966733296801732652803190183647832399513
+-1.0120075232249457019046791466273487079279956970555518128092816
+0.4822205467311505237701828525286126742167480807005569629326281
+-0.9524155620320098926462503974917677521765367630717893845646069
+0.8240097973854196045604285627887058761834231656377552130499927
+2.8794546924077633900793000684636121811662427410739472149682647
+-3.0370223714013945918322981409136440037653572639764203695831612
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfct_adjoint_1d_20_50.txt b/tests/data/nfct_adjoint_1d_20_50.txt
new file mode 100644
index 0000000..fe799ea
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_20_50.txt
@@ -0,0 +1,129 @@
+1
+
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+1.35122275672905157987939776353521245082875968075595465317817761
+0.5366839880179031887120064139815043015467504468244920295854889
+-5.45737895073103416127963029233591086476552083358807272782576261
+3.58657582112954785504615992622502298303533508456479319347624892
+0.7303111076943690953512284581943909471702454190608432687001515
+2.0541944391787293671731867123929379031149071112594581693647526
+-0.6599703963802694991803819931207373693481528401806212696389689
+2.2085224548030903933533652989679471034421835822706467226923092
+-4.0078215611033132699489677135812674795007782457949942923143348
+-1.7048075770336891481320007283565165483226400651386589071865583
+1.0070669328753970784622812303398946435427614155903950642925103
+3.6748241716817651325770504981870669553249666954357599379840771
+-0.2298325027677502503146052746696776849505071366981685216493522
+-0.0913571047114661117816207348031590917706448176587770480376223
+-3.2518326117863616568658359849441482099040904764837349471833177
+1.4886478370788885168541826108933177206566412733884118906147242
+-2.471639983382846737200681508046313356820449472785291296632382
+-2.4811502918403979019387138469101007054825884532439070841704805
+1.6990960343020787595305708747552898387318457153240031987488198
+1.6267105509948570192982539269810107931563023567209522190762833
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfct_adjoint_1d_2_1.txt b/tests/data/nfct_adjoint_1d_2_1.txt
new file mode 100644
index 0000000..98ce41e
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_2_1.txt
@@ -0,0 +1,13 @@
+1
+
+2
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+-0.3755232163734427377149114453807678698727874531111381798101188174
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfct_adjoint_1d_2_10.txt b/tests/data/nfct_adjoint_1d_2_10.txt
new file mode 100644
index 0000000..32fa60b
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_2_10.txt
@@ -0,0 +1,31 @@
+1
+
+2
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-1.347896216355931774679958699258750407129349908487712609591584342
+-1.8301053629396972772823004381555483011425503144920499109043926
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfct_adjoint_1d_2_20.txt b/tests/data/nfct_adjoint_1d_2_20.txt
new file mode 100644
index 0000000..8350090
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_2_20.txt
@@ -0,0 +1,51 @@
+1
+
+2
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-1.313831422727774651555845755917101990528470330521651169614664193
+1.46355442483928096702736490785862133486191559046504281025787006
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfct_adjoint_1d_2_50.txt b/tests/data/nfct_adjoint_1d_2_50.txt
new file mode 100644
index 0000000..3215b22
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_2_50.txt
@@ -0,0 +1,111 @@
+1
+
+2
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+1.35122275672905157987939776353521245082875968075595465317817761
+0.5366839880179031887120064139815043015467504468244920295854889
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfct_adjoint_1d_4_1.txt b/tests/data/nfct_adjoint_1d_4_1.txt
new file mode 100644
index 0000000..13aa66f
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_4_1.txt
@@ -0,0 +1,15 @@
+1
+
+4
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+-0.3755232163734427377149114453807678698727874531111381798101188174
+0.183705872085627972536969253367933147812340993611437697869365913
+0.06693218920683521712706873725479520040237453808013632194088799
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfct_adjoint_1d_4_10.txt b/tests/data/nfct_adjoint_1d_4_10.txt
new file mode 100644
index 0000000..40e1967
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_4_10.txt
@@ -0,0 +1,33 @@
+1
+
+4
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-1.347896216355931774679958699258750407129349908487712609591584342
+-1.8301053629396972772823004381555483011425503144920499109043926
+3.87838661975936104264694306067491595615045962781960132943901479
+0.11337157081671300433612018769464878374309714416836414668725249
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfct_adjoint_1d_4_20.txt b/tests/data/nfct_adjoint_1d_4_20.txt
new file mode 100644
index 0000000..e611133
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_4_20.txt
@@ -0,0 +1,53 @@
+1
+
+4
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-1.313831422727774651555845755917101990528470330521651169614664193
+1.46355442483928096702736490785862133486191559046504281025787006
+-1.18451482947596109043000397033789725114267460887252124181270873
+0.05951524075769099922476787090855746084963627903213878001719051
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfct_adjoint_1d_4_50.txt b/tests/data/nfct_adjoint_1d_4_50.txt
new file mode 100644
index 0000000..edcfe55
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_4_50.txt
@@ -0,0 +1,113 @@
+1
+
+4
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+1.35122275672905157987939776353521245082875968075595465317817761
+0.5366839880179031887120064139815043015467504468244920295854889
+-5.45737895073103416127963029233591086476552083358807272782576261
+3.58657582112954785504615992622502298303533508456479319347624892
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfct_adjoint_1d_50_1.txt b/tests/data/nfct_adjoint_1d_50_1.txt
new file mode 100644
index 0000000..dc2693b
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_50_1.txt
@@ -0,0 +1,61 @@
+1
+
+50
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+-0.3755232163734427377149114453807678698727874531111381798101188174
+0.183705872085627972536969253367933147812340993611437697869365913
+0.06693218920683521712706873725479520040237453808013632194088799
+-0.296139256948903101668205165947748211977639406028701068327823591
+0.430525602690103275254967072001504141910811738789084464890743399
+-0.427062110799077587836134983970986137143386470535831475499592966
+0.286857755496720608126291164981027998827985799090455228036543115
+-0.054804518799889746603107406345788712544004714170931844774125842
+-0.194796557028624740123032506296867385723958969826882237046043893
+0.382025793435915828663872807350609121347448507160060744015114342
+-0.4469343286644432519640732252672956318507789883812805760443980903
+0.368739122202122264605209239221649356904895224032027335300002311
+-0.17247746903697777667494799976850543482187955097972953286517137
+-0.07900968280560274521815635546021216636059311880975589331809819
+0.30519875277321101704042802235204631602436457552557068833057107
+-0.433666344035571305960503256551849374881702478818152751024595568
+0.42327846482572518352845941476063953312209790775268051758166212
+-0.27736120644572979464890931867632914022416156736782470212727844
+0.0426357632908477547531906893934378715710551610515587507219777
+0.2057412095529664973322171600463426239444010530571019849578993
+-0.38824197862650461170623175935538674252621851979386007904339875
+0.446431688424431296443140046044716741792356318921906317547011604
+-0.36167859672888720695664244757187841983251279405588507826630486
+0.16111976543830162047988643420870686174594597619841422902038295
+0.09102794550597420008773749497176932175485856645308949465939044
+-0.31402945137072084634914028739458786521072803477249518956698768
+0.436481980327465498276298814262920094346548988390072623921358207
+-0.4191775012420107169704168017411407753995154657891315124511878
+0.26765672903893960387091236191299314743641019611314773317084509
+-0.0304350451859080844793329588858020968537166421650875509712891
+-0.21653162482123800468316196237840317823895681648628470434734694
+0.3941671118805137147184711169812249090767325765178972949179404
+-0.445594373382054739982486517043021607930206921489173227354086802
+0.35434693299190805109541386253337127130582145654196000875025788
+-0.14964127577749488122685348375804975671162623437603964799612939
+-0.10297796762114126386656921473996178180443592250316674976578256
+0.32262473266408482481646911289163574204751272274194078882095275
+-0.438970400778079795811720523803325141013345314153887031888303892
+0.41476229440222504937103232953926260834844587064700962602350067
+-0.25775159839624493324762476609466232993734141157916270986126306
+0.01821151095255132117762848318073708646735670919283375072315784
+0.22715971362250066181184922417295753988195980453775445777358644
+-0.3997967513250828846632829953356935269674836336766806085220417
+0.444423011244202655077892750062675831345057158892559337496097499
+-0.34674962729258050889632027450928195100647247883323103094249912
+0.13805060509169601214246701299730718314761944698948599689917051
+0.11485079062196421323952928191769547230563409032129152134450475
+-0.33097815306037997454093059827569608269095865555459132872186122
+0.441129739902404725849814466997993710024275644352381351172688102
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfct_adjoint_1d_50_10.txt b/tests/data/nfct_adjoint_1d_50_10.txt
new file mode 100644
index 0000000..f9b200f
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_50_10.txt
@@ -0,0 +1,79 @@
+1
+
+50
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-1.347896216355931774679958699258750407129349908487712609591584342
+-1.8301053629396972772823004381555483011425503144920499109043926
+3.87838661975936104264694306067491595615045962781960132943901479
+0.11337157081671300433612018769464878374309714416836414668725249
+-2.31760062964641901826990290125748091267003100976060894709371508
+0.32457476790256447989103014962458061091760208584303717727691509
+1.4138688852318594241683756341147322162997616085275207582915764
+-2.00979684225155747886674087582637380624141595367442003875459761
+0.92918622956550289043443339166309273147569113421514903078509845
+0.69695084153985503009520760506055182232806606231410181732593295
+0.91554651299993863598078312662151481343397326565582805449817609
+-2.33391211581763253435951286536658361620239811477745223739343289
+-0.24711189013287708432588657794500872016485973583233702624333694
+0.6332063157319663483114780241309835769577296247315820939503809
+2.1514063061758206044598879226745385881303232374738823591257165
+-0.7748705299728414692222098452778165989286713689609484281632992
+-2.0230289924999132810676467710869056614369880913753017307730685
+0.5009907517694399539709469634560452528733114789576513854170775
+0.3092891727313212684271577075059324424030929434820004560275816
+1.5322339486144313540329959323289970652403885592260279844930099
+-0.7625648970627195235680470069406278620657318104181159699644211
+-1.5782595101223886639127585008479650246553267090562660527343248
+2.0984810249370009435426565500856173615840325188302436675501106
+-1.2970228931623500904144760468419856340803485721954613734218919
+-1.1291827930804934061141548196371626621428007300225548934672343
+2.4844123241065174751037328568552638579871787743055783437136502
+0.5483013477964642433549804742922541946971197434835612327101581
+-1.5885977249207707654069536864182942803955372040525067102679442
+-2.4710035519242089029727435282063266213704092748865699628600446
+2.3724181344288807036375257034197682895740241216828958701506249
+2.3394763963165939281305629963841642207739268769751486821663335
+-1.7149723376593198626298854659230360731271139753156120172758275
+-2.304911453740584455129044216949942543617717379697078765553031
+2.1050915459921560583386119056716885302376212281343873037729226
+0.1618454532312606436005454462262128998985112218329410879167456
+-1.0783171226759943142895193954926714106135691195071468679357617
+0.4510050809778211120694472412569072977974594055293310702415574
+1.9772778822782490233673265518740617061354918524456279202141465
+-2.498390072337881681208057310974715264458755341653770227469093
+-0.1288379413167655176352174423730903328226831755191374970616024
+-0.3045361141836864517816014768725243795411550551418196994962481
+2.5747702067642818895063860844025580448390933898490468666338777
+0.1173551618790256918798604404814957702626674669630859600647382
+-2.9487879119229463588408675471296307301607063616930242533950935
+0.7463423361385478183647437112821068797290881487758687455600622
+0.2159199125086491752540656298136574532053885149487490019807641
+1.2345529886999099048543689958350783102285494581873071865214254
+0.2244630326259625460769940835422556021207190675116316335501042
+-1.8462360453481841444483455515230451335318967308033044836835709
+0.3942882981716633276422790333621887288039252851307828031989714
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfct_adjoint_1d_50_20.txt b/tests/data/nfct_adjoint_1d_50_20.txt
new file mode 100644
index 0000000..f4b119b
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_50_20.txt
@@ -0,0 +1,99 @@
+1
+
+50
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-1.313831422727774651555845755917101990528470330521651169614664193
+1.46355442483928096702736490785862133486191559046504281025787006
+-1.18451482947596109043000397033789725114267460887252124181270873
+0.05951524075769099922476787090855746084963627903213878001719051
+2.70872759016867475683647207682602374720601214499401821015042636
+-0.94416147610101625361944500413293193257818930563500271428239929
+2.71180569820343380176966868586535984049622697797417244266439908
+2.15233843730804231706836465791701168875063301744261884900928713
+-0.97311566878031548708171942382413749407439175591270498714337787
+-0.67925989347953101555873612315211951129912110007083598581225085
+0.89734483718988015387418290317302059146554324842099644785910861
+0.98319349765713609792873098924220198252857238352763326070107864
+-3.41337268533831779784415112586515899078353830062974298567748742
+0.6433180073954211557848966733296801732652803190183647832399513
+-1.0120075232249457019046791466273487079279956970555518128092816
+0.4822205467311505237701828525286126742167480807005569629326281
+-0.9524155620320098926462503974917677521765367630717893845646069
+0.8240097973854196045604285627887058761834231656377552130499927
+2.8794546924077633900793000684636121811662427410739472149682647
+-3.0370223714013945918322981409136440037653572639764203695831612
+-1.2864812279672841321171514119648782236522299681740409204379155
+1.9771612587561825145795608455349464498255699222174356304362061
+-2.1419367331863936183475770333789890676677426216636010606691467
+-1.8730255674923001137504342181732330350348147120900539323862984
+-2.0981458016516746866998931468484564535852664928757557914957257
+-1.3170187689339270450358949868371576804744399104727086801834156
+-1.2477526257562927818997781877285041939647826574703159213467519
+-0.5793956018200137757020566735492680796476092180831890804521069
+-0.0419491738201773248078820349159115880642036957437455154746542
+1.1527604072858531094792326812257268686172738021991321771580114
+-2.4820992172828682704166543402713524732334619335484711099070959
+0.7848328605283545373402585276581840880858378308706438633150825
+0.1668015509907723255318413808435505759784645428197686902077343
+-0.4597024834794213715657595591962815865814196540531196934760866
+-1.6317065313959550541940673102036423261254381804035339671054773
+-0.0697811244667020193966722065272096862208634095357196970902548
+-2.7762119526710607232388990401231164538692831358770665626536578
+0.0935427815624543973018358987849829237820955500495682209997535
+1.7220636849566699053439130382195870852665351839945644873578008
+0.2723542691477729258555144637357007750282621858090811865721724
+0.1297158840533142164964211319067772694203590264934769772130912
+1.7325566304633880631499754448771448695024983734732046215109451
+1.2303966341348882506507261164768079753898311232000361653314361
+3.4863525264504854187565830319804526131911303145190968966443199
+-1.4081775215799270325447411712302529139063551330604450355589362
+2.3924065949382235774185862448533837612278119999936404696521514
+1.2632028980239442372905177684085630729529906136694002879103849
+-2.7834443648349972620102458983771814467427069861615691636208702
+2.491904543315073175549027949834691058873318835170179495057961
+1.6898897059068377526431942195582360871711617927937328050538006
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfct_adjoint_1d_50_50.txt b/tests/data/nfct_adjoint_1d_50_50.txt
new file mode 100644
index 0000000..63855fb
--- /dev/null
+++ b/tests/data/nfct_adjoint_1d_50_50.txt
@@ -0,0 +1,159 @@
+1
+
+50
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+1.35122275672905157987939776353521245082875968075595465317817761
+0.5366839880179031887120064139815043015467504468244920295854889
+-5.45737895073103416127963029233591086476552083358807272782576261
+3.58657582112954785504615992622502298303533508456479319347624892
+0.7303111076943690953512284581943909471702454190608432687001515
+2.0541944391787293671731867123929379031149071112594581693647526
+-0.6599703963802694991803819931207373693481528401806212696389689
+2.2085224548030903933533652989679471034421835822706467226923092
+-4.0078215611033132699489677135812674795007782457949942923143348
+-1.7048075770336891481320007283565165483226400651386589071865583
+1.0070669328753970784622812303398946435427614155903950642925103
+3.6748241716817651325770504981870669553249666954357599379840771
+-0.2298325027677502503146052746696776849505071366981685216493522
+-0.0913571047114661117816207348031590917706448176587770480376223
+-3.2518326117863616568658359849441482099040904764837349471833177
+1.4886478370788885168541826108933177206566412733884118906147242
+-2.471639983382846737200681508046313356820449472785291296632382
+-2.4811502918403979019387138469101007054825884532439070841704805
+1.6990960343020787595305708747552898387318457153240031987488198
+1.6267105509948570192982539269810107931563023567209522190762833
+-3.2646915853441030083484415655952394656487508535987501049147419
+2.3821815613600216922655617804888003103013755125903793043389044
+-8.1271916697660827935927173373130410113078810836912616301929796
+1.3881098040680525892403289323948188848922000729896458660402545
+-0.754166087999568085031906206062357845970439112128866893624469
+-2.6926914167056353689265282087170787044991648175681888324332181
+-2.2756544850910759156118865794566102501124247822253083163196301
+-0.9140214704930576967300437975229684987503453070701231746864077
+1.9863005952397316332996621304569555040063443371321919427080673
+2.0094046238303107209332352823325946771578710320845429661773086
+-5.4175351584625690636898635149251768829113065467283168222766596
+2.2285649323896506335829060660823181479502130553889345948002665
+-1.7556511344408095494362677467522221083834785294605847613243214
+0.3780523135829720232233618819842271439995673148761967596258833
+-1.8499904637970017845238077140681433699254013938619300004586381
+5.6072670550583358615783452087750491222463361402986183829412037
+1.7115413875053027250030978595238201854962798557187409783777785
+0.7116660182327804764598354608077114123592445962735632778373487
+-1.0346443112901847067902602138842349432531045595116276361482542
+-0.1776618459380582759049234440379370223465572673264350062004367
+1.4857895779838468990108053349292417204355110358467998287532588
+4.769613582452800615154979694252966856787389439825954068109618
+-0.358974606988154117512803843160254569037772678031407323299144
+3.9334553151448844503017098746684144210319177478893914404896268
+1.203739954167015932474171857812376434901761835788677006497876
+4.405688703637309060682540741753791440159096931641703777378694
+-4.635136293372626243122269370606673288853632221785274596593769
+2.148169845768928344990185582320520085329250023521656511296596
+1.059445499613826848018682642671111691149610747278900330866285
+0.451442880659831865692485456225050711045924073299437579189344
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfct_adjoint_2d_10_10_20.txt b/tests/data/nfct_adjoint_2d_10_10_20.txt
new file mode 100644
index 0000000..a9cdee5
--- /dev/null
+++ b/tests/data/nfct_adjoint_2d_10_10_20.txt
@@ -0,0 +1,170 @@
+2
+
+10
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+-0.69273620291038926726455982040262810773021395371128338842658488
+-0.23172991783966588861854324624888614532914776087643807558307305
+2.05618442897426120068337700338965166282847527966642731762768228
+-0.01022033089161611068332096381115849989961630069063173908045719
+-3.20475412646054458808241126586578239637505749283722606279431038
+0.79065482847140723740185002087936207002460845720404056035606603
+4.48966502699150622472759377803981334584871849234846745818689428
+1.52060621552185612628500836824586435699214366057843562658094556
+-1.93563529070494316650987496128801906743400792343542493131748492
+-1.91711181879629891697712137567943728799053287765997042103039235
+1.78167157407696022863678598744320023087120774907816049982870453
+0.91818541341122356548761866303738925895622890314943209640039772
+0.74508495464914282661722138989759882840266298279921408150813473
+-0.09306255688002215114436089034798327118730242637707466157042011
+0.95392249506070205958929845278188948569010729804066387798062486
+-0.24233080215483634035466256466498393995807182645702548417171481
+-3.02906412879434747743069502065438487822774817513061286160677301
+-1.34214792999239277175607189831524739966132007920179355748806557
+2.60879832363683809318843910485365931563540511345594811985298511
+-0.25576081777212720774571574119184968715669066410479094984091066
+1.73508323613837075617759534980666767647258657198120745833441016
+-1.15657292297682197920193782483779822645467983067299421950195748
+-2.01816309592698447300676140426398771499441769316713478476013729
+1.11517354883777216415772959796124892463655341432703245902571341
+2.6180378862302393749803763302900142021888279987573656853057054
+-0.00967863777003045633765242118873518692230065210543670634412596
+1.94453870940900999496993532988199176207062770280928904174603708
+-0.2777001892439004354158994992351672002196183932824538646316831
+-2.979464074016227344495021101679894778948928479989747601521437
+-0.09803748096637924111218697627587668876875419021782323207516424
+-2.52608017800368214360402926794371643938691593186115567127755983
+0.98028688243293783682497007760822294899886764648096710899720962
+1.47543980042739525536203188664850500103566720279902161835293566
+-1.95016119427822439023859024505340737857131951614318006821852904
+0.69145742549615826876874290650989308940299262158954568003475873
+0.88769548287530254181853868333122902368926703440105653121489352
+-1.28493496617011049415000585335031477841883147226940633938672647
+-1.59906370348656058554635862858713041528077719140898834528189991
+1.22778590334809240101245476032648935513050915377960551544581623
+1.5322977932901436252895595569972475540577617342724861187270267
+1.75274168736523422397242619774204722683659397870241292345202444
+0.56625626722285651756253311275720288673940656244573689944011309
+-0.2659067993421472465082576498441093967934993420406696922060148
+-0.53760628906124551876546056977774369781800402294276300214155997
+-1.95910988597432498631632368980972753594323330867762174465075306
+-2.43289079978063753770654544323993729548390836702116747051577724
+1.79870149400383343046026737254257359724107808347923412038798083
+2.51765858717118974204493182761122688225575998906863429172398217
+-0.90745710607117632307820891487482937004367350499329545736922132
+-0.90445880774757875846793457747739464474365350457735820870526694
+-1.58754491018976580534405259878555331512965186971132136571855749
+-2.05647197884308533276113723626008344061362800943279415329265226
+0.35709031982602405804855625897791750653523175116321281233365192
+0.01083206843374254042384029715645464651177525250941663736295202
+-0.00862811635902271955641096497834202490032630218018780479148863
+1.6200593315277499204031822354894483020591446460401315018236897
+-0.0107731472944121045760093832874201804777448056772025686391772
+-1.15939961411822465771151006397327697065085012590561882894790677
+1.7891281732285345533778128300940893106930470219255936025054854
+-0.15348880213677475180585926104723205140482188998675013260143003
+3.37322303160095232390359810920683662277809399869522480529566305
+-0.87511235444906838201524703086113424845374515774405202959636405
+-2.39611633365417238645778470107027833937588710287756144428232735
+0.3665165509714438242501831580523590623938511665737645659763043
+0.91036908447977686958100382961934735098865811926972289237240298
+-0.6444546923673214888788017940783748922427184242737660293953686
+-1.35980060900567925237512896392003941263870983095636213636066066
+-1.20740607994692716266469889894909390058494233021215831454722278
+-0.461376248347220485942903435956598292820804102089940070336573
+-0.22737611281624591999492552938586420879284190724605103699274584
+-4.4188358094088534407604747431108586460951234986522366412618209
+-0.56298659643026857347108307660060017507453494347031079790640871
+1.63678517606428845616750703256660858872950157497870125984282995
+-1.3723455129350018515306789120462873882192970201312693253127398
+-0.63336474686527516159105489324070368892834485573405592694787803
+1.8282943158708066084142949213872093462078631489372026101353699
+1.22331741292827337471225690954551758057322544466958034432352765
+-0.399171418630850920427002218543542562046694008903276377086125
+0.4519741565629437015676630180743173597058731856855881189369435
+1.0241649039473104185903095618746878796817186757797436230004765
+2.6438610063185876768063654582388222686148213712886396566125073
+1.33805453911548484553338769607549156103029373317431843298372058
+-1.27733872725772637516646155974744899938867283497227926371811925
+-1.3112126763314345696611412515028012072808056896348891608635233
+-0.33015977676778115389613849165704909304579510399789022945269894
+-2.5758460629878856764751155195970791051440710270998404560841924
+-0.0013118443343490685340393183369479908977589198537988816398802
+1.5023111738064273252300600992948350126043209795525165054038804
+-0.1561804840165386991277911332587250686303261719886367449582625
+0.0467493639834492714968011536031003207065716870004435457193129
+-0.8192569055066069248611046406740283945380357833764100043026141
+-0.83277665375516235413516313125552351275758777541973891076128983
+0.15130013795397367259366715912749400725911874076624791850653412
+0.7765679134355393999852883314607700529464635263031104208119501
+0.8860347453073088344869937628236209246311481009532570313443225
+-0.5994977450353401549309925768494505805566140162507019862627804
+0.5539019246964717815974574554299950256275648821365763477122719
+0.183259424032344095549832075505542588687401153829033901133527
+-0.4346348990869774489110713112280442172262699419398807637533423
+0.5161932035854036429022674465772466233521301745519286102506977
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfct_adjoint_2d_10_10_50.txt b/tests/data/nfct_adjoint_2d_10_10_50.txt
new file mode 100644
index 0000000..8b91f14
--- /dev/null
+++ b/tests/data/nfct_adjoint_2d_10_10_50.txt
@@ -0,0 +1,260 @@
+2
+
+10
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+-4.79530968124209425485052145966292630285889974485326287728490672
+1.26392445166761129969045421303618088557334789197485002506826353
+4.99531812458634705195824506809724969009025499199627075824029977
+0.0597247607658952731119951757921824388020339815445338351768489
+-0.5419650418793233465897625604377753770161456470460687056296453
+6.4091183518435844630569546614227622408412144993613484133384563
+-2.0606095178962768154817342358763768067269358370815015330270877
+1.8729685812590405926567882052994581710133970592856617732421398
+-2.4866758198425744098203755979366017212489996390747904873851967
+-4.1511596345334986962349503055763833657897252222096933592232143
+-1.43891142524257033249396129670083780849998739028783879146733072
+0.23847852450979237513482602692088441310632294670918834198570647
+1.37125115440045893224928843294490330762894139603411342197131311
+-3.59876280685471694487048504208219129435897252810753493935110247
+-1.77026550727361126660121862539115152153328070702231535660259047
+0.4672762917978309037411785273355746511229917506462059688868107
+2.9150375031417443300152215403172485027591335094837207843415452
+-2.1790920323336039622416411815612880781645239520581827997939553
+5.5910335061439504546526547763045627561363345287957855862014821
+1.0918747197179565735991808508086368768336618528069079656555159
+-2.09669861730980949586090717823585483817864920025459957869861663
+2.16893419567954363257656714612890455423873468516744928691608423
+-1.13780951871347950629746551995585582561147312710432762585612919
+-1.0161755276149793957401443695574214796674859827001063214871171
+0.967059005761336635497130151952227538767131364112610342806199
+0.2364052336296462884086223513875445457970616605039997539165648
+-1.3717821429042821235750274481550524361088131613112173695167014
+0.7109206878425579724724593401656156005183209621130019604652858
+-3.7647135582061413122008539021000693419232915251230098451561082
+3.2794182401895807292105813519902134536963221820321265671191311
+-3.3492593752811134208945537345538007305121831359327825615449473
+0.27469296101530391297726133100302203607945830905764474143947011
+3.208754543275873563941803848022126636943683851451460682495122
+-2.2870353534855066464888480249717337749095962305059357642798685
+0.1506302651865127800757404742894064135279069736764840484476634
+1.7593566009442584541651976048682028907747688263948096100657328
+-1.2026178228689257013329407078337915897063676726247873182022412
+-0.6598102682397411794440173680320191616864327981893066109087375
+-2.8877781560216710181012890000782329425707816992557083930438587
+-2.7581894245980298416279265084078834668887069229021399435778932
+-3.8327306126290769631061436100608011061883191552993772730173195
+0.6139420818851361614153380977910068115520508963925910171087496
+-3.2674948122252669236894827948950488657473483756852126322417824
+0.0743530654744612711810844451859208125613887915559979963295709
+-3.7883428656042588436288275676404632313614499599358663289284773
+0.70925727245733561781621428658250881780044898906338038446348
+-2.1262333354439743882078552084133830729691209190498182023958781
+-3.6075913744938593556599951616153897553225622359963529253389182
+3.9828557825872701017596069578112000583524210864552687739153558
+-2.7559075799076385106388216121681558655719464403896504064630507
+1.2850835460471294902612963839964580662905684450589351363168695
+-0.1476972974882451294145405158052198638063317116873266380171972
+0.5750300412165891547008609515090434651303081976679191561557287
+-3.9728617033662722496483197240622156877199260284136461589074123
+2.0283151783637054057293633538106923184576132252122465281524414
+-0.1290324289114205123465964154198113286300354148292858549408075
+-2.2908947807065410817768808266707314096704611362897695972355035
+0.020342466855121866667530282663082751494817207562095175685397
+0.3728391254793575872984493090770689248351017369696867341399362
+-1.0944889579181525090781503017965501042488621550153523418079556
+-2.9696667238999406390253682769592973860539195261688049753693445
+-0.2597024867639060406057588427511447161329790969752691010566913
+1.1809470005576424613381127451185402413861197462036947681115059
+-1.5852863289206111225903374501246359491114157741460937701035248
+-0.4833669569163468706259758608117388063801532101800628115643116
+3.7072180096467164885312146028272979443448728194907295752451365
+-0.317131465141655031133200483127846277255258955207169997281422
+-0.5243236968521718732562665669564036214120916605728139975723155
+0.5631288834502913699394617569179850041337750434871885346808312
+5.5401818167864184691665792956065362257760492584540730759742726
+-1.882968384959710233051318905436400378041075822045215520349633
+-0.3082897041367398707341562924049490170434380111058175739472871
+-0.6821704969461249925107483887854372107206363745494738095857624
+-0.625950442698705454858779805521519195378652685909654108943329
+3.2227012057648568934779012326452425702671007179237070601169129
+-1.4393777944376476765796250491634226510965848636013451733915141
+2.1925983920655362115064934584611702891724784782316586742552918
+0.2624003887292967196210258703569414993455393692675333616100135
+0.7517669120850723905357231031188712908932910798560397509101232
+-3.8470570173293641527809907305480834031629221582517205252624061
+0.8891782070041834864649413924073931051636218788974242912902486
+2.9988929075772324589111167027701303634531507963649241724050351
+0.4991667381638754019973569280726264761991024009421507045372595
+0.3158663368669162712396992315057739603459990851600566670545941
+0.1620198258760200749582854012254876759436786351751707880731549
+1.0303345483954242195617692240416679790388447412270010341445701
+-2.7112807992061258341038141370065568816336289728554524764529488
+3.9031686373417602649320617152601278705151718775312120354345522
+1.7555663076958247269688010744367470907079909304140199905031927
+0.0837933227407125975380676321248992466873441006473803761696321
+4.8100495647248071626402766046799168973657870951525488705642238
+-1.3525852523139365527327538290166382094920979811384688746255061
+-0.8008666463628030484857275774992386183995080193341380730908948
+0.990906071463007584722761125921135193417498098727321571041817
+-2.3711783278831401789077616056131727064566640873187990267128949
+0.7906191933867602754710717316688247793602529592864699573062603
+0.3410653026152192836292576777202357864196746498242407519717046
+-0.2587158116284639229796683100358176402801950599792002231090992
+2.5939640536778728251033187690205290751897521570755978427031146
+0.2091377297006162819874535817512539489936853855193235667208319
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfct_adjoint_2d_10_20_20.txt b/tests/data/nfct_adjoint_2d_10_20_20.txt
new file mode 100644
index 0000000..9eef2d0
--- /dev/null
+++ b/tests/data/nfct_adjoint_2d_10_20_20.txt
@@ -0,0 +1,270 @@
+2
+
+10
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+-0.69273620291038926726455982040262810773021395371128338842658488
+-0.23172991783966588861854324624888614532914776087643807558307305
+2.05618442897426120068337700338965166282847527966642731762768228
+-0.01022033089161611068332096381115849989961630069063173908045719
+-3.20475412646054458808241126586578239637505749283722606279431038
+0.79065482847140723740185002087936207002460845720404056035606603
+4.48966502699150622472759377803981334584871849234846745818689428
+1.52060621552185612628500836824586435699214366057843562658094556
+-1.93563529070494316650987496128801906743400792343542493131748492
+-1.91711181879629891697712137567943728799053287765997042103039235
+1.2554256298988411799984269796112080703660912577971473422927807
+-2.6704333394705105410711821038426310513818239945780255696049912
+-2.8365143591894490865096844225122146460309823213842546809800565
+0.9846208232562866625248550654679881027899039629871428350700387
+-1.089149533717771703962933209324345443985672341046150895771671
+-0.8643951502799969012073673581453525623343758450770721175340342
+3.5249843046558931979017366619370671637461664824523460188835386
+-0.7809881458859131421399907927473316928682452820543059965905968
+-1.8483228205590361142892484341702499053202286456310306787834038
+1.8100664141062937411942308120382146465266969461664538907024223
+1.78167157407696022863678598744320023087120774907816049982870453
+0.91818541341122356548761866303738925895622890314943209640039772
+0.74508495464914282661722138989759882840266298279921408150813473
+-0.09306255688002215114436089034798327118730242637707466157042011
+0.95392249506070205958929845278188948569010729804066387798062486
+-0.24233080215483634035466256466498393995807182645702548417171481
+-3.02906412879434747743069502065438487822774817513061286160677301
+-1.34214792999239277175607189831524739966132007920179355748806557
+2.60879832363683809318843910485365931563540511345594811985298511
+-0.25576081777212720774571574119184968715669066410479094984091066
+-0.89602670454864088594711525299859798956567241649720185434219529
+1.3688880989580372065699233660447013267719445066926469227832729
+0.1131976522383563953339272160181695052226020358481988191091788
+-2.08126615023015798579175192130750864737666424672331051779704351
+-0.04410874869830314671131771291243168217537037265285884871941497
+1.1087384174093582216464732062735566921941832840088715256148579
+-1.1235493384331642843279800693927393602371713177399480729157427
+-1.2934570956905040411219091436760619932141875012801756507218946
+0.12277670265015926272645709593265128530587633037204030097572761
+-1.8049494875436817320467935071390825374056999124679361000067152
+1.73508323613837075617759534980666767647258657198120745833441016
+-1.15657292297682197920193782483779822645467983067299421950195748
+-2.01816309592698447300676140426398771499441769316713478476013729
+1.11517354883777216415772959796124892463655341432703245902571341
+2.6180378862302393749803763302900142021888279987573656853057054
+-0.00967863777003045633765242118873518692230065210543670634412596
+1.94453870940900999496993532988199176207062770280928904174603708
+-0.2777001892439004354158994992351672002196183932824538646316831
+-2.979464074016227344495021101679894778948928479989747601521437
+-0.09803748096637924111218697627587668876875419021782323207516424
+0.5452927545180712321134029745410671052470358519507532442714337
+-0.96123617977810950651790500530609728222180656422691762360146378
+0.4278139244619769518371503958708058861156738486038270137697751
+0.77179410740908579146062740019095354818072807015206854158425924
+-0.3393923341502785512640755062797707447006074608700057683259297
+-2.0406247057000038152171863910272764425299675108542548253822471
+-1.7630058288058724232343631821949707871717199512653928188659189
+1.1482996779125292896276544457719578982343780285264609656751927
+1.8026445352635110181283414254241615877494353530311741458445366
+1.7186194709241044053160070681266758625795676952195589679386331
+-2.52608017800368214360402926794371643938691593186115567127755983
+0.98028688243293783682497007760822294899886764648096710899720962
+1.47543980042739525536203188664850500103566720279902161835293566
+-1.95016119427822439023859024505340737857131951614318006821852904
+0.69145742549615826876874290650989308940299262158954568003475873
+0.88769548287530254181853868333122902368926703440105653121489352
+-1.28493496617011049415000585335031477841883147226940633938672647
+-1.59906370348656058554635862858713041528077719140898834528189991
+1.22778590334809240101245476032648935513050915377960551544581623
+1.5322977932901436252895595569972475540577617342724861187270267
+-1.04660642130683786358409037270895820373975414828698450903191989
+-0.6401078425558002348454575334891015403292516552201047427659388
+1.0460864268015475310001677400931801137195487362246640709829858
+-0.93346925435099468768426733178212934255746804117638037053828101
+0.7366272451477409122727179347683658073336523660653029442541828
+0.4864415065354669390652250049033672957160745799062318970331155
+-0.2160578237231053191724792659399773178792360199000878604311528
+0.0267199268075289886706952506206913753361854202180119073350901
+-1.3422287020932418613030456500680472415714377189014536241023608
+-0.5319678681172251934597264488414763375111947859096563672063884
+1.75274168736523422397242619774204722683659397870241292345202444
+0.56625626722285651756253311275720288673940656244573689944011309
+-0.2659067993421472465082576498441093967934993420406696922060148
+-0.53760628906124551876546056977774369781800402294276300214155997
+-1.95910988597432498631632368980972753594323330867762174465075306
+-2.43289079978063753770654544323993729548390836702116747051577724
+1.79870149400383343046026737254257359724107808347923412038798083
+2.51765858717118974204493182761122688225575998906863429172398217
+-0.90745710607117632307820891487482937004367350499329545736922132
+-0.90445880774757875846793457747739464474365350457735820870526694
+2.2860351645450708786912239527244104317618298285125465172444565
+0.1974853968161606761760830469428312993487496351020711239268678
+-1.330094353124147014738949813289052018815888223865657506113775
+-0.1689467825200443333433756893735248365094900832245732379860508
+0.6163158364234839193622416875598208300991090156655827401828844
+0.3197929651728552372891860451081674058251484117704415874018126
+2.1321084042957098898695343159240977766598769426526002711007312
+0.5637227077072539592232759245120205236594251304118777894047668
+-1.6605065036877837559063857226319367410982776153932639603039266
+-0.5925908755457789706721357920530694053801955240019399542877243
+-1.58754491018976580534405259878555331512965186971132136571855749
+-2.05647197884308533276113723626008344061362800943279415329265226
+0.35709031982602405804855625897791750653523175116321281233365192
+0.01083206843374254042384029715645464651177525250941663736295202
+-0.00862811635902271955641096497834202490032630218018780479148863
+1.6200593315277499204031822354894483020591446460401315018236897
+-0.0107731472944121045760093832874201804777448056772025686391772
+-1.15939961411822465771151006397327697065085012590561882894790677
+1.7891281732285345533778128300940893106930470219255936025054854
+-0.15348880213677475180585926104723205140482188998675013260143003
+-1.1580169043985819592801606610923603523864297847384729803588829
+0.7236287834818075611540742956898438721521547192128455327173822
+0.5699582411428688930135077967403740213380387399207650753955918
+-0.5810886049089425721654858659789886308040548466999036607043018
+0.3244555663739011770068562403221148607841195775857698226555129
+2.7136151201761521571922004870091058054910396727426604190982313
+-0.2427868178109391802700678230564966079587007530148344763487687
+-2.0744329253323575246491843213734701710520358812199261364422604
+1.6006391587253668402061464664060116893584530011519847145212302
+0.9804833948996422932944851698486230130148236190648252243244369
+3.37322303160095232390359810920683662277809399869522480529566305
+-0.87511235444906838201524703086113424845374515774405202959636405
+-2.39611633365417238645778470107027833937588710287756144428232735
+0.3665165509714438242501831580523590623938511665737645659763043
+0.91036908447977686958100382961934735098865811926972289237240298
+-0.6444546923673214888788017940783748922427184242737660293953686
+-1.35980060900567925237512896392003941263870983095636213636066066
+-1.20740607994692716266469889894909390058494233021215831454722278
+-0.461376248347220485942903435956598292820804102089940070336573
+-0.22737611281624591999492552938586420879284190724605103699274584
+2.241258941883996650656534270660568977722883004946655061973948
+1.6195681564850126423179684291234349747047571369446522566025949
+1.3269495800458474900979107794735044491226313128902342727774428
+2.6890327553116628589274482931643779941513799444348122277270547
+-0.643988916861133774372310973884704925707937757817486501824278
+-2.6597891466640323369974467561004503566400004666205671314987416
+-0.0404998274586438824604821242377006717904540933146241835761843
+1.087374080200502073615920910189875003807346260826687648423752
+0.6180333528758981612133415658075428929764641351093016397863608
+-0.8373389842960251882906848211386422898996131296990885634549999
+-4.4188358094088534407604747431108586460951234986522366412618209
+-0.56298659643026857347108307660060017507453494347031079790640871
+1.63678517606428845616750703256660858872950157497870125984282995
+-1.3723455129350018515306789120462873882192970201312693253127398
+-0.63336474686527516159105489324070368892834485573405592694787803
+1.8282943158708066084142949213872093462078631489372026101353699
+1.22331741292827337471225690954551758057322544466958034432352765
+-0.399171418630850920427002218543542562046694008903276377086125
+0.4519741565629437015676630180743173597058731856855881189369435
+1.0241649039473104185903095618746878796817186757797436230004765
+0.1804978947982362871055807145244601715016740052833150130736509
+-1.4926544283547393576642850106652702228627478911428488666471208
+-0.9082670409215992385964621861945220814778610387317364814358138
+-0.1135298179858229336849461368777972710473497705571891078060426
+1.5885355405248116936159778275685861474457288821879226284560639
+1.1748574014531180188596530306232049782724854965998665242505789
+0.8490493796207991315179355934136627440299507026689983775537096
+-0.0905317527151166431603725611080839615950154058063889757335349
+0.0711850549276018828651511623253603345119219563415095103693355
+0.8205282578530923747530842218330141420768603115334234221128805
+2.6438610063185876768063654582388222686148213712886396566125073
+1.33805453911548484553338769607549156103029373317431843298372058
+-1.27733872725772637516646155974744899938867283497227926371811925
+-1.3112126763314345696611412515028012072808056896348891608635233
+-0.33015977676778115389613849165704909304579510399789022945269894
+-2.5758460629878856764751155195970791051440710270998404560841924
+-0.0013118443343490685340393183369479908977589198537988816398802
+1.5023111738064273252300600992948350126043209795525165054038804
+-0.1561804840165386991277911332587250686303261719886367449582625
+0.0467493639834492714968011536031003207065716870004435457193129
+0.022069289957253959478860279152962842265230853030046733476496
+0.9163811103380731337762924000573917589702363709249570131100607
+1.4201697090888755672955706453987658796060864624123132659640201
+-0.879975278667586691217132751995837489353910672116714835454023
+0.1209738093525263700181517241679632709852537312315034746188831
+0.8781940956538611527193230480794629920801818619248265963285945
+0.7593482331456288009705646424149910100102812552130512516610277
+0.1954713803065225044082273832980799794405878564137748564575729
+-2.5050049686538270638071574245951472578783366615827692744627723
+-0.7022221823134086931842737484170548233275910160646146700843181
+-0.8192569055066069248611046406740283945380357833764100043026141
+-0.83277665375516235413516313125552351275758777541973891076128983
+0.15130013795397367259366715912749400725911874076624791850653412
+0.7765679134355393999852883314607700529464635263031104208119501
+0.8860347453073088344869937628236209246311481009532570313443225
+-0.5994977450353401549309925768494505805566140162507019862627804
+0.5539019246964717815974574554299950256275648821365763477122719
+0.183259424032344095549832075505542588687401153829033901133527
+-0.4346348990869774489110713112280442172262699419398807637533423
+0.5161932035854036429022674465772466233521301745519286102506977
+0.1451916480036551216616082743243820204364881277270178938978915
+0.047966834116317483648993225337441903583400523804458822177733
+-1.3078790233711976170637511690936259555002420556530100852470013
+-2.225400662482430676583429831446595352981485998581504648779124
+1.4630498395195089028473210639459815285410473953574513489218487
+2.1571920356089934197149634725652719757928536382617261112402101
+-1.9386700119588516757740482752814952732870874419271848026307852
+-0.2393944625245605815335626750948460145434013616554842373522534
+2.28698974992654700394434841206786844625564088880644302267651
+0.2765164590695396820917942479648985685576820142380846744345135
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfct_adjoint_2d_10_20_50.txt b/tests/data/nfct_adjoint_2d_10_20_50.txt
new file mode 100644
index 0000000..ddc4828
--- /dev/null
+++ b/tests/data/nfct_adjoint_2d_10_20_50.txt
@@ -0,0 +1,360 @@
+2
+
+10
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+-4.79530968124209425485052145966292630285889974485326287728490672
+1.26392445166761129969045421303618088557334789197485002506826353
+4.99531812458634705195824506809724969009025499199627075824029977
+0.0597247607658952731119951757921824388020339815445338351768489
+-0.5419650418793233465897625604377753770161456470460687056296453
+6.4091183518435844630569546614227622408412144993613484133384563
+-2.0606095178962768154817342358763768067269358370815015330270877
+1.8729685812590405926567882052994581710133970592856617732421398
+-2.4866758198425744098203755979366017212489996390747904873851967
+-4.1511596345334986962349503055763833657897252222096933592232143
+5.0591380472631658465948470062923921439885183891978493290910699
+-1.6167556950865080347308999957404364630892566239932093096048168
+-4.4766899580378447472430956136686374665437612927362419615143375
+1.4660451177401604242246286883191575736117716063340479272208476
+0.0120242600319236976447749091182848308428585298345063951239367
+0.3224623303140262851143569656759869223606716410048005008474655
+-4.3593228770381036968902582444968671038321665135893074771588297
+-0.0958067706249842520987192932867922814116292834010301201881017
+-0.3684997698331157747320084365405711585897235048777937429255546
+2.9811856389267329325479166051634770927778283754138586373569783
+-1.43891142524257033249396129670083780849998739028783879146733072
+0.23847852450979237513482602692088441310632294670918834198570647
+1.37125115440045893224928843294490330762894139603411342197131311
+-3.59876280685471694487048504208219129435897252810753493935110247
+-1.77026550727361126660121862539115152153328070702231535660259047
+0.4672762917978309037411785273355746511229917506462059688868107
+2.9150375031417443300152215403172485027591335094837207843415452
+-2.1790920323336039622416411815612880781645239520581827997939553
+5.5910335061439504546526547763045627561363345287957855862014821
+1.0918747197179565735991808508086368768336618528069079656555159
+0.9946160479863040366086609759607071101122585698292407912413667
+1.7470895484772504121822561732123731653791395521935938482807841
+-2.8959077660112500885600261740405087035303860164216477359066299
+-2.8798249681828939708889330129070422757714679004263206829515698
+0.3967075764504778354989683913359972630742946146188994175927321
+-2.4365290893201736589588592728733047661518717268708323374484204
+-2.1243769141541597395997130121939055409197308739624212213683909
+-1.5025951930597454050836829274660211016079393295498681332098696
+3.5884478935356084614372907472074048075725859011460154000917161
+1.8631930796364074813662549007956852546551359142477586827995703
+-2.09669861730980949586090717823585483817864920025459957869861663
+2.16893419567954363257656714612890455423873468516744928691608423
+-1.13780951871347950629746551995585582561147312710432762585612919
+-1.0161755276149793957401443695574214796674859827001063214871171
+0.967059005761336635497130151952227538767131364112610342806199
+0.2364052336296462884086223513875445457970616605039997539165648
+-1.3717821429042821235750274481550524361088131613112173695167014
+0.7109206878425579724724593401656156005183209621130019604652858
+-3.7647135582061413122008539021000693419232915251230098451561082
+3.2794182401895807292105813519902134536963221820321265671191311
+-2.0309211478295930480277349575307764010883056019123471624302365
+-1.447161931179943928034406397183224260756934168663714120187266
+-0.4514183057737116407068820409834236539259113608503743549039305
+0.5707749795198785393773426591695528139113437935247711215928408
+3.7589191033806559196749632237581722154087653365131712993970935
+3.2395685844985228100356652642303046736358794189282221741817806
+0.1630878434698892436205289168472185192003485104110737653826282
+2.1209905589735978074399338158392651394624401787387255462676898
+1.2861479301260643219680095316570755876412228002467010111621926
+-1.6178303010828436565022498060358816162482471300910940657009021
+-3.3492593752811134208945537345538007305121831359327825615449473
+0.27469296101530391297726133100302203607945830905764474143947011
+3.208754543275873563941803848022126636943683851451460682495122
+-2.2870353534855066464888480249717337749095962305059357642798685
+0.1506302651865127800757404742894064135279069736764840484476634
+1.7593566009442584541651976048682028907747688263948096100657328
+-1.2026178228689257013329407078337915897063676726247873182022412
+-0.6598102682397411794440173680320191616864327981893066109087375
+-2.8877781560216710181012890000782329425707816992557083930438587
+-2.7581894245980298416279265084078834668887069229021399435778932
+3.6374885792402953896488730890065614818190635907061198016805037
+-1.4733516459268837336796022316853430619325176494783478083902935
+3.6441386020264118965841445170569710332596954593918968399571515
+0.1861849731037287110615073733243528132956875750410870969847943
+4.5915368329708138152638060584787896721389697308096941988242249
+-2.6040067517849430857094320663516628744268740443932771278826357
+-1.4600048766782574036696996517342782728178560581772742361604596
+-1.6386277914489392528812289956580623774057620258911792989799966
+0.0825982103880040712609241154624133507261382336138959849360147
+0.3402973430781222852418467487020582658998051662909073200347693
+-3.8327306126290769631061436100608011061883191552993772730173195
+0.6139420818851361614153380977910068115520508963925910171087496
+-3.2674948122252669236894827948950488657473483756852126322417824
+0.0743530654744612711810844451859208125613887915559979963295709
+-3.7883428656042588436288275676404632313614499599358663289284773
+0.70925727245733561781621428658250881780044898906338038446348
+-2.1262333354439743882078552084133830729691209190498182023958781
+-3.6075913744938593556599951616153897553225622359963529253389182
+3.9828557825872701017596069578112000583524210864552687739153558
+-2.7559075799076385106388216121681558655719464403896504064630507
+1.9349669617276544908379221246337435849319510058757557135437554
+5.8553024428066587902506859864764198024177435374411034530902285
+-4.7938091147675429913227857997262597291886203020346816398596864
+4.1940691444769290360395259707766117580576472130017868230966922
+3.2182314619004641268298182119816683163693225585777984844292432
+1.3075891409539836392810471712626532956268409310630181589382741
+1.8224952100487453442530328128273679229624065399970042606942725
+1.9495815695880203719592691397969898408563927743647598958608242
+2.228135781772752469928936843528053570260346268544549896228388
+2.2735114180637674739286251689956635052332697050653769965264563
+1.2850835460471294902612963839964580662905684450589351363168695
+-0.1476972974882451294145405158052198638063317116873266380171972
+0.5750300412165891547008609515090434651303081976679191561557287
+-3.9728617033662722496483197240622156877199260284136461589074123
+2.0283151783637054057293633538106923184576132252122465281524414
+-0.1290324289114205123465964154198113286300354148292858549408075
+-2.2908947807065410817768808266707314096704611362897695972355035
+0.020342466855121866667530282663082751494817207562095175685397
+0.3728391254793575872984493090770689248351017369696867341399362
+-1.0944889579181525090781503017965501042488621550153523418079556
+0.9601031144469076224930009665053114613060514706231295889133786
+-2.9070195633619302408956916431354575910653702978093766019761057
+2.8178012149652778405255090666074992786094716444890889820570659
+2.7368726514245680546982512603107424968928923355386135690237233
+0.4018775814927495697561045329271621257136312429349818820930641
+0.6362454343113559517260837839567835332742615330669786409243763
+1.4050876484585265382894382124368437091337193002075210077601672
+-0.5723372430529039898502072869548752033413451325324332133494802
+1.8183512249271271037540444668526980276841369901119590712516578
+-2.5465267595608932747428478492373358397407033915392577380015546
+-2.9696667238999406390253682769592973860539195261688049753693445
+-0.2597024867639060406057588427511447161329790969752691010566913
+1.1809470005576424613381127451185402413861197462036947681115059
+-1.5852863289206111225903374501246359491114157741460937701035248
+-0.4833669569163468706259758608117388063801532101800628115643116
+3.7072180096467164885312146028272979443448728194907295752451365
+-0.317131465141655031133200483127846277255258955207169997281422
+-0.5243236968521718732562665669564036214120916605728139975723155
+0.5631288834502913699394617569179850041337750434871885346808312
+5.5401818167864184691665792956065362257760492584540730759742726
+-3.1933193356590087753038511399599765194704751963942455268944856
+-1.0751030651616976724913656014255021815950529080347829804554422
+1.8034871271142315315190097369944021956193436372185094149926877
+-3.2277430424894677236735502400419932016440852255865737543439508
+-1.4784235568980376021136147399151522777109521989902192311888804
+1.0839568128356282937223535410976462366186852240043500136518136
+-1.4393409709001363160811831727271789215096143205549443440495368
+2.7712421150424027946466957102978748531633912941369296722738869
+-3.4394335016017435261522425580618123938034483827709110839419394
+4.639203188592559043120553103732545539210096564507701690758296
+-1.882968384959710233051318905436400378041075822045215520349633
+-0.3082897041367398707341562924049490170434380111058175739472871
+-0.6821704969461249925107483887854372107206363745494738095857624
+-0.625950442698705454858779805521519195378652685909654108943329
+3.2227012057648568934779012326452425702671007179237070601169129
+-1.4393777944376476765796250491634226510965848636013451733915141
+2.1925983920655362115064934584611702891724784782316586742552918
+0.2624003887292967196210258703569414993455393692675333616100135
+0.7517669120850723905357231031188712908932910798560397509101232
+-3.8470570173293641527809907305480834031629221582517205252624061
+0.9750322506051352921321684337384728332105164538761349229872701
+2.0238138322434803777802353928370125327860251590277556648605575
+-1.4346272225490930988715371040445479763805925324367730735426322
+0.0093668445819570938077832513530595020373684684752618316667659
+1.0257857754882893897591593354731451617482686800737139759882092
+-2.081675347298346714227906272419649651009323033590545050115179
+-1.2137963854210369852965186353884351225620129081618244460105754
+-0.892414878447332957170938723832587628492659465704156784675324
+1.1174646988977020167492691748319432348807911824707704885578645
+0.2279411139034688888158511203458561094544433411342385286139094
+0.8891782070041834864649413924073931051636218788974242912902486
+2.9988929075772324589111167027701303634531507963649241724050351
+0.4991667381638754019973569280726264761991024009421507045372595
+0.3158663368669162712396992315057739603459990851600566670545941
+0.1620198258760200749582854012254876759436786351751707880731549
+1.0303345483954242195617692240416679790388447412270010341445701
+-2.7112807992061258341038141370065568816336289728554524764529488
+3.9031686373417602649320617152601278705151718775312120354345522
+1.7555663076958247269688010744367470907079909304140199905031927
+0.0837933227407125975380676321248992466873441006473803761696321
+1.1978940062294304358410114137415489036875952647908181714721677
+-1.2620897048633611632464801965328997496379448349959398404984178
+-5.3680580772930101312613964735521258300844942760265294659463127
+0.3689632431786238771895756125139111800088919181353406905244013
+-3.1077975441432232710419198063339309433130652942274933720866725
+-1.7630066276813481674829600972079987511462856056983175264448058
+2.5165414409139816405463876489908090305701800737504949709708108
+-0.6843053227467830073856995481987933497135721391735526377795256
+-0.3064687486689322837777413565427439466296702019981727805180725
+-2.5296917887293825059869163734447293191338474195772771041979871
+4.8100495647248071626402766046799168973657870951525488705642238
+-1.3525852523139365527327538290166382094920979811384688746255061
+-0.8008666463628030484857275774992386183995080193341380730908948
+0.990906071463007584722761125921135193417498098727321571041817
+-2.3711783278831401789077616056131727064566640873187990267128949
+0.7906191933867602754710717316688247793602529592864699573062603
+0.3410653026152192836292576777202357864196746498242407519717046
+-0.2587158116284639229796683100358176402801950599792002231090992
+2.5939640536778728251033187690205290751897521570755978427031146
+0.2091377297006162819874535817512539489936853855193235667208319
+1.9968745497958197384789329702673362317741300261562571562494428
+-1.2816466868937214601277567986753958457502256211454971344942795
+0.9395395488851818457395231011091781286440116894902231457915309
+-1.5047316562088557395151940444302174041658139052659076937539274
+0.083242019186781856503808094682323017350718251182861132941957
+-6.2956429861198187274754509141654205007856087493155015230335986
+1.0924170889893267927823167309015389786333178107513410036588469
+1.6563981270785187318290023808123848615230634281887972342168863
+-1.8388244608312479513787515080453795839258872564915641340930199
+-0.1146342601527075752235357892985085257301267295926254076241909
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfct_adjoint_2d_20_10_20.txt b/tests/data/nfct_adjoint_2d_20_10_20.txt
new file mode 100644
index 0000000..fe63aac
--- /dev/null
+++ b/tests/data/nfct_adjoint_2d_20_10_20.txt
@@ -0,0 +1,270 @@
+2
+
+20
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+-0.69273620291038926726455982040262810773021395371128338842658488
+-0.23172991783966588861854324624888614532914776087643807558307305
+2.05618442897426120068337700338965166282847527966642731762768228
+-0.01022033089161611068332096381115849989961630069063173908045719
+-3.20475412646054458808241126586578239637505749283722606279431038
+0.79065482847140723740185002087936207002460845720404056035606603
+4.48966502699150622472759377803981334584871849234846745818689428
+1.52060621552185612628500836824586435699214366057843562658094556
+-1.93563529070494316650987496128801906743400792343542493131748492
+-1.91711181879629891697712137567943728799053287765997042103039235
+1.78167157407696022863678598744320023087120774907816049982870453
+0.91818541341122356548761866303738925895622890314943209640039772
+0.74508495464914282661722138989759882840266298279921408150813473
+-0.09306255688002215114436089034798327118730242637707466157042011
+0.95392249506070205958929845278188948569010729804066387798062486
+-0.24233080215483634035466256466498393995807182645702548417171481
+-3.02906412879434747743069502065438487822774817513061286160677301
+-1.34214792999239277175607189831524739966132007920179355748806557
+2.60879832363683809318843910485365931563540511345594811985298511
+-0.25576081777212720774571574119184968715669066410479094984091066
+1.73508323613837075617759534980666767647258657198120745833441016
+-1.15657292297682197920193782483779822645467983067299421950195748
+-2.01816309592698447300676140426398771499441769316713478476013729
+1.11517354883777216415772959796124892463655341432703245902571341
+2.6180378862302393749803763302900142021888279987573656853057054
+-0.00967863777003045633765242118873518692230065210543670634412596
+1.94453870940900999496993532988199176207062770280928904174603708
+-0.2777001892439004354158994992351672002196183932824538646316831
+-2.979464074016227344495021101679894778948928479989747601521437
+-0.09803748096637924111218697627587668876875419021782323207516424
+-2.52608017800368214360402926794371643938691593186115567127755983
+0.98028688243293783682497007760822294899886764648096710899720962
+1.47543980042739525536203188664850500103566720279902161835293566
+-1.95016119427822439023859024505340737857131951614318006821852904
+0.69145742549615826876874290650989308940299262158954568003475873
+0.88769548287530254181853868333122902368926703440105653121489352
+-1.28493496617011049415000585335031477841883147226940633938672647
+-1.59906370348656058554635862858713041528077719140898834528189991
+1.22778590334809240101245476032648935513050915377960551544581623
+1.5322977932901436252895595569972475540577617342724861187270267
+1.75274168736523422397242619774204722683659397870241292345202444
+0.56625626722285651756253311275720288673940656244573689944011309
+-0.2659067993421472465082576498441093967934993420406696922060148
+-0.53760628906124551876546056977774369781800402294276300214155997
+-1.95910988597432498631632368980972753594323330867762174465075306
+-2.43289079978063753770654544323993729548390836702116747051577724
+1.79870149400383343046026737254257359724107808347923412038798083
+2.51765858717118974204493182761122688225575998906863429172398217
+-0.90745710607117632307820891487482937004367350499329545736922132
+-0.90445880774757875846793457747739464474365350457735820870526694
+-1.58754491018976580534405259878555331512965186971132136571855749
+-2.05647197884308533276113723626008344061362800943279415329265226
+0.35709031982602405804855625897791750653523175116321281233365192
+0.01083206843374254042384029715645464651177525250941663736295202
+-0.00862811635902271955641096497834202490032630218018780479148863
+1.6200593315277499204031822354894483020591446460401315018236897
+-0.0107731472944121045760093832874201804777448056772025686391772
+-1.15939961411822465771151006397327697065085012590561882894790677
+1.7891281732285345533778128300940893106930470219255936025054854
+-0.15348880213677475180585926104723205140482188998675013260143003
+3.37322303160095232390359810920683662277809399869522480529566305
+-0.87511235444906838201524703086113424845374515774405202959636405
+-2.39611633365417238645778470107027833937588710287756144428232735
+0.3665165509714438242501831580523590623938511665737645659763043
+0.91036908447977686958100382961934735098865811926972289237240298
+-0.6444546923673214888788017940783748922427184242737660293953686
+-1.35980060900567925237512896392003941263870983095636213636066066
+-1.20740607994692716266469889894909390058494233021215831454722278
+-0.461376248347220485942903435956598292820804102089940070336573
+-0.22737611281624591999492552938586420879284190724605103699274584
+-4.4188358094088534407604747431108586460951234986522366412618209
+-0.56298659643026857347108307660060017507453494347031079790640871
+1.63678517606428845616750703256660858872950157497870125984282995
+-1.3723455129350018515306789120462873882192970201312693253127398
+-0.63336474686527516159105489324070368892834485573405592694787803
+1.8282943158708066084142949213872093462078631489372026101353699
+1.22331741292827337471225690954551758057322544466958034432352765
+-0.399171418630850920427002218543542562046694008903276377086125
+0.4519741565629437015676630180743173597058731856855881189369435
+1.0241649039473104185903095618746878796817186757797436230004765
+2.6438610063185876768063654582388222686148213712886396566125073
+1.33805453911548484553338769607549156103029373317431843298372058
+-1.27733872725772637516646155974744899938867283497227926371811925
+-1.3112126763314345696611412515028012072808056896348891608635233
+-0.33015977676778115389613849165704909304579510399789022945269894
+-2.5758460629878856764751155195970791051440710270998404560841924
+-0.0013118443343490685340393183369479908977589198537988816398802
+1.5023111738064273252300600992948350126043209795525165054038804
+-0.1561804840165386991277911332587250686303261719886367449582625
+0.0467493639834492714968011536031003207065716870004435457193129
+-0.8192569055066069248611046406740283945380357833764100043026141
+-0.83277665375516235413516313125552351275758777541973891076128983
+0.15130013795397367259366715912749400725911874076624791850653412
+0.7765679134355393999852883314607700529464635263031104208119501
+0.8860347453073088344869937628236209246311481009532570313443225
+-0.5994977450353401549309925768494505805566140162507019862627804
+0.5539019246964717815974574554299950256275648821365763477122719
+0.183259424032344095549832075505542588687401153829033901133527
+-0.4346348990869774489110713112280442172262699419398807637533423
+0.5161932035854036429022674465772466233521301745519286102506977
+0.3012263881722802801714352379473953630039906503104574794992783
+0.10571677166705436607907490957358424265546254666227433494332703
+-0.19048539848744749046436079429261407771174793817693058548497954
+-0.4543526329728118315550151377263766720450801753871651409765009
+1.33897265858979347073403530137989416000445182775168588070780576
+2.9223655725954307322360641204273780049054528853238250264199376
+-0.4924633963373781429209259569034560458201841200741033713248441
+-2.4390407142663775224993970129866580758344990062472950828009799
+-0.4840114921705225126187322570558307512318605532028776221005985
+-0.3341395330479692171987418261482187375975786370601342366796323
+0.6645482062980250804129728099771371282306162819786371863536254
+0.39031553754612943967710282524447413495525612701685117118990236
+1.4925315216536228299181717921703560978021752455618580650197976
+1.03190957005480030743823163568625044939130088026035156677662409
+-1.6029333626118710481748451107621322531216682890101767584380123
+-0.8041725109404865649732821163367524673265257059173531644749357
+-0.4608415269838004671128390389932631679813374573081993697173383
+0.1792685236242660303613018096504207655703910075232760022355845
+0.4712290977546030069250488500588198103268065600361455181192783
+-0.7802261301658090953410374025889161550466156345316015422223515
+2.4021910107441696164097045072244780528860489245867022745712851
+0.20646371000031784628675302745986196064632524928072323424203241
+-0.8174658799852905991733644327383076414277565886372743597360997
+-0.0562464818686902911430939705451849045252095661593082193020875
+0.0154869160517409876795676581282001070520919853882986287576744
+0.2237556687785903375321518575266806796551056462331281729107646
+1.5147325402235597749934824767469885255745369573771909682860936
+1.7971888850886163790859667183972082539597746028250175449107557
+0.4660063663825890877838472989315077485480487686769594313206052
+-1.7191568522430425148655890412622164345641145072559925027367562
+-0.2453787548602301415496266007534061460109572247656060414266099
+1.21631459641686564651800677660737940447608481107646412364080311
+1.2539792260776678757526143858147486076740354813479994966069886
+0.1866278228122056371216677782048731700948573562925236848821915
+0.5708356962524043665836318488964679826560329590140131467985965
+-0.4233510259048861771281560422119531967115506641614704030407801
+-1.0304119641274293765654977773859253271677322878927406497263143
+-2.0985940857898105386970658383155051994419970879740517445991604
+-1.1369314587988870483100666860440053262403734033973011781319921
+2.2340311511389789300669712084054150995600335812495731779469145
+-1.3499412302922897498774017492442916706020715623004963530270803
+0.09039683235923395608270538314875051588232050394181034671147004
+-1.2426985096133605626984753547678680227262922399832632144414401
+-0.6722618806913794966135752048835756991488004573545053885341272
+2.4189892477921981854811129441552344885240938783354723718375558
+1.7775167548798040118890234038326229924744687271139998454776843
+0.4241829293891081899922678301755910715540907395625124121761247
+0.1038380074317494048049907523405053755295489995842381075314565
+-1.2965537906072155524972791052589306882362244422073657293700333
+-0.5283911412462067899999056516336334079083576182803047274258519
+0.5257214095190079053218036462182650687176946979793755871827127
+0.3297678670086208860013783751417353494191693667863773938999074
+0.4655591392092285251663239043352597976741137337424156024266062
+0.5804040257306114150110534290282428984274520256453818600844901
+-0.7506583690020524446588088875273240310326407865758893936694943
+-1.0771271469779249272010566931228716019998211658755245932798969
+-0.9039104302752945324401651287148193069236913298931028478804229
+-0.2218122643321576663434729088756209831440786658626224825624125
+0.6134620163800192542079853438461485466545482321907007261480465
+0.457603520477109072060260540876341878914673706874063120828496
+1.253106299642683723546091739139736388367534376314609738205217
+-0.5708375485926199839599971575636516573931078970807573273683642
+-0.1859552958418944435583199860754283089771050609762025863242652
+-0.1754580268457383270258857118322484481887601315730488901544142
+-2.7889440891856226134293901390181335220948078909400240503188371
+-0.7487718402246906216288779368170817418750484892471859381201378
+1.8814029280267940890680344642734359922666358140785500116457881
+2.2228522489051213783198574143059075958380980023457525436865559
+0.3180743092424882295812603098029851336749365435803533197526187
+-1.3278513765927883800854003679124085400675696274245068124263602
+-1.4540818568665147839359807567909653441246940435908424042646196
+-0.9110196670604731150799250319312329668441515180246817003279859
+-0.5859458364758688532870109419271376413129859587185591954564647
+-0.1914207402138672034383740344205278594429585061956000140326472
+0.7211445950921926600649695636754854769498158712147149114862769
+1.9921325936578647038849555703694280381741849697701097762701257
+-1.6593877841547949749951248590133830682996227076030592743327899
+-2.0585981248610550988253873933714014226211848655768589730532937
+0.9537435908837924441313869150846867312153473525478497005723267
+1.2766368942764610810848426484234400292854798105713355667710521
+-0.5563367348575345553370474564628853255203370836869949368563128
+0.2819626033265114534236839677918271230386883422205773915465369
+-0.916528317311498517252850930059026522162722445970828939805472
+-0.6672566270267865796439306271273607736809168896528606400707053
+0.3400535718612533189508954597022441270667195662769633336339281
+0.5345330722768620148908174720547888397178812585142272914239041
+-0.2587639801634846020826235587407872051979775935258864743418198
+-0.8973556677921349915472394760897134511012538650120710636230748
+-1.4679700483289246769050588753442738977745398656543176488020667
+0.6396969163341587905837381625283381931956433501271408026991445
+0.0206554023516779051099383209201531709500930095444246542256908
+-0.763307055386274747048745667578547705768842382106712536132009
+-2.1253144414892529189843434110498535516132641816040520491429137
+0.4424031138249129039547822947876797222603525602694932586238564
+1.4304025824917250618480108436679575332633618788368096679037563
+-1.7655612648038264924137529835276212199520316392639166458407255
+-0.3044747373862375475234604725287945853417074140091427619475491
+2.4051575776831382597826630537845839107398260380960824250098292
+1.1088854412138527772107668817053800338982050918002622045989945
+0.5119965395592898607881492142393223556523861402348086154258796
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfct_adjoint_2d_20_10_50.txt b/tests/data/nfct_adjoint_2d_20_10_50.txt
new file mode 100644
index 0000000..581c2e6
--- /dev/null
+++ b/tests/data/nfct_adjoint_2d_20_10_50.txt
@@ -0,0 +1,360 @@
+2
+
+20
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+-4.79530968124209425485052145966292630285889974485326287728490672
+1.26392445166761129969045421303618088557334789197485002506826353
+4.99531812458634705195824506809724969009025499199627075824029977
+0.0597247607658952731119951757921824388020339815445338351768489
+-0.5419650418793233465897625604377753770161456470460687056296453
+6.4091183518435844630569546614227622408412144993613484133384563
+-2.0606095178962768154817342358763768067269358370815015330270877
+1.8729685812590405926567882052994581710133970592856617732421398
+-2.4866758198425744098203755979366017212489996390747904873851967
+-4.1511596345334986962349503055763833657897252222096933592232143
+-1.43891142524257033249396129670083780849998739028783879146733072
+0.23847852450979237513482602692088441310632294670918834198570647
+1.37125115440045893224928843294490330762894139603411342197131311
+-3.59876280685471694487048504208219129435897252810753493935110247
+-1.77026550727361126660121862539115152153328070702231535660259047
+0.4672762917978309037411785273355746511229917506462059688868107
+2.9150375031417443300152215403172485027591335094837207843415452
+-2.1790920323336039622416411815612880781645239520581827997939553
+5.5910335061439504546526547763045627561363345287957855862014821
+1.0918747197179565735991808508086368768336618528069079656555159
+-2.09669861730980949586090717823585483817864920025459957869861663
+2.16893419567954363257656714612890455423873468516744928691608423
+-1.13780951871347950629746551995585582561147312710432762585612919
+-1.0161755276149793957401443695574214796674859827001063214871171
+0.967059005761336635497130151952227538767131364112610342806199
+0.2364052336296462884086223513875445457970616605039997539165648
+-1.3717821429042821235750274481550524361088131613112173695167014
+0.7109206878425579724724593401656156005183209621130019604652858
+-3.7647135582061413122008539021000693419232915251230098451561082
+3.2794182401895807292105813519902134536963221820321265671191311
+-3.3492593752811134208945537345538007305121831359327825615449473
+0.27469296101530391297726133100302203607945830905764474143947011
+3.208754543275873563941803848022126636943683851451460682495122
+-2.2870353534855066464888480249717337749095962305059357642798685
+0.1506302651865127800757404742894064135279069736764840484476634
+1.7593566009442584541651976048682028907747688263948096100657328
+-1.2026178228689257013329407078337915897063676726247873182022412
+-0.6598102682397411794440173680320191616864327981893066109087375
+-2.8877781560216710181012890000782329425707816992557083930438587
+-2.7581894245980298416279265084078834668887069229021399435778932
+-3.8327306126290769631061436100608011061883191552993772730173195
+0.6139420818851361614153380977910068115520508963925910171087496
+-3.2674948122252669236894827948950488657473483756852126322417824
+0.0743530654744612711810844451859208125613887915559979963295709
+-3.7883428656042588436288275676404632313614499599358663289284773
+0.70925727245733561781621428658250881780044898906338038446348
+-2.1262333354439743882078552084133830729691209190498182023958781
+-3.6075913744938593556599951616153897553225622359963529253389182
+3.9828557825872701017596069578112000583524210864552687739153558
+-2.7559075799076385106388216121681558655719464403896504064630507
+1.2850835460471294902612963839964580662905684450589351363168695
+-0.1476972974882451294145405158052198638063317116873266380171972
+0.5750300412165891547008609515090434651303081976679191561557287
+-3.9728617033662722496483197240622156877199260284136461589074123
+2.0283151783637054057293633538106923184576132252122465281524414
+-0.1290324289114205123465964154198113286300354148292858549408075
+-2.2908947807065410817768808266707314096704611362897695972355035
+0.020342466855121866667530282663082751494817207562095175685397
+0.3728391254793575872984493090770689248351017369696867341399362
+-1.0944889579181525090781503017965501042488621550153523418079556
+-2.9696667238999406390253682769592973860539195261688049753693445
+-0.2597024867639060406057588427511447161329790969752691010566913
+1.1809470005576424613381127451185402413861197462036947681115059
+-1.5852863289206111225903374501246359491114157741460937701035248
+-0.4833669569163468706259758608117388063801532101800628115643116
+3.7072180096467164885312146028272979443448728194907295752451365
+-0.317131465141655031133200483127846277255258955207169997281422
+-0.5243236968521718732562665669564036214120916605728139975723155
+0.5631288834502913699394617569179850041337750434871885346808312
+5.5401818167864184691665792956065362257760492584540730759742726
+-1.882968384959710233051318905436400378041075822045215520349633
+-0.3082897041367398707341562924049490170434380111058175739472871
+-0.6821704969461249925107483887854372107206363745494738095857624
+-0.625950442698705454858779805521519195378652685909654108943329
+3.2227012057648568934779012326452425702671007179237070601169129
+-1.4393777944376476765796250491634226510965848636013451733915141
+2.1925983920655362115064934584611702891724784782316586742552918
+0.2624003887292967196210258703569414993455393692675333616100135
+0.7517669120850723905357231031188712908932910798560397509101232
+-3.8470570173293641527809907305480834031629221582517205252624061
+0.8891782070041834864649413924073931051636218788974242912902486
+2.9988929075772324589111167027701303634531507963649241724050351
+0.4991667381638754019973569280726264761991024009421507045372595
+0.3158663368669162712396992315057739603459990851600566670545941
+0.1620198258760200749582854012254876759436786351751707880731549
+1.0303345483954242195617692240416679790388447412270010341445701
+-2.7112807992061258341038141370065568816336289728554524764529488
+3.9031686373417602649320617152601278705151718775312120354345522
+1.7555663076958247269688010744367470907079909304140199905031927
+0.0837933227407125975380676321248992466873441006473803761696321
+4.8100495647248071626402766046799168973657870951525488705642238
+-1.3525852523139365527327538290166382094920979811384688746255061
+-0.8008666463628030484857275774992386183995080193341380730908948
+0.990906071463007584722761125921135193417498098727321571041817
+-2.3711783278831401789077616056131727064566640873187990267128949
+0.7906191933867602754710717316688247793602529592864699573062603
+0.3410653026152192836292576777202357864196746498242407519717046
+-0.2587158116284639229796683100358176402801950599792002231090992
+2.5939640536778728251033187690205290751897521570755978427031146
+0.2091377297006162819874535817512539489936853855193235667208319
+-6.7740012602480134190454317705219903323873399771856651304039015
+1.4253315437335164360227390532003685620871753063747926108870193
+0.0366536660633618995748210861963775054334882327330451774883544
+1.1638037587544745507762493765095032531511296388973658581321413
+1.3407655070842434563895878811028436259819690424540157089306626
+-1.2620426382049628638875532071504798239499389213305487518439625
+-2.1017045548295482685361268145844935492822965366145157803552774
+-0.5049015672258860070003286451409162299823580131327914720497568
+-4.640292429617720798196711028854769848348167619857421854979736
+-2.7696299679416679023417084816070290335216575486320323178017944
+-1.6845592841068553343617506716945323169609663166194164295757633
+0.9574173028275138607677741687428121500774898102236710398217303
+0.8210345146149058597342244544623191972248915549203840081264042
+-2.7657216866651614276084390554950592360570374800657055555503202
+-0.4386381987726693498953201171935105581192135292663927066901035
+-2.7056772182111424631028076829854582325748500807899359263410776
+3.0049003438207349214615505637930140688989262409369774258069551
+-0.713908116230507818144676665121257806682656982020576669480977
+2.0831296066710723953450826680165397583988129957305581400876407
+-0.3899913442061903893709102221401300632762244868391367375185756
+3.3781526536460115505092228812986008698822311549726745164229385
+-3.8419629898844546575066600956186095706362804078562974101006568
+-0.3735376492156487065141492698671786780791257691511280077174701
+1.4627260548729653320336834206282777435501582444609607605890084
+-1.2941257794653601284933780433447523751017994896437624379572208
+-1.4719651984441228976797056641771499008290728896719518286911886
+-3.6101377227305549184711212403202633706631609761980150731685463
+1.0486810504729564129792386935101104752159811162412625447683674
+-2.2262901169801971548909325470942861682941753591470972615617386
+-0.8310737518252737642185375740676518477065854798170754984980738
+-0.0310797048224847729883233814696322300704332272178451831124957
+-3.2068294391109399287224464627935325977418582266063971166674879
+-1.1836779372045746859444872001453932623103664072862475042652222
+-1.3972528214941048643492174634568711938585904668139362141569507
+1.5430561082887379340789014471070948280993658935664416769371968
+0.0054381484317560430182718497124791631662579159546758747109921
+-0.6522765924294430228675818181921703956905093686043749903920285
+3.7966238238417101110277153257861166588563318868828405836178213
+-0.8362892599974828094657918551214453613436685100718734115150817
+-0.9345995175078222855693251813963041652076792730134270695164057
+-2.9485008344940923268565857618493278410369773910992203024813339
+2.4916203330680898524531499212575765407554668949496862077211229
+-2.0980580409974852765554272113997967445370516987584223608547474
+4.8895444036428134331132847550982304481824924098615508409651959
+-0.5670056004234943318449580505811187802138470220493217565769068
+-3.0600047475690698826891632530808691734231802506984241631369892
+3.9734078020803247726906801051221753384448401100102350988677876
+-0.2478298753160393590121444361716145041631462316133566279509069
+2.7744708227607893878032626508771244648743109003900792681752744
+-1.0910508852602337701374337844030720689752759462659135226660697
+1.9228864728988767281402780692375516403829039665040503029677643
+-0.1769097851275039971481820501046172325593609645657004943425805
+-1.7037161402433195612109826079225400500336399027112419784363728
+-0.9346884507072207640226407879666330606690696786206533589660651
+1.4059358510825747711469329674913412506279269374137968984027825
+0.3132633997644812087689210791027668485744258766691431788764791
+-0.0048007502875553652235117172061680346726127333414362098779961
+2.7059110182541719129845543578621416589234334163513940985404539
+0.0246666768739412144265627974348702259641896024117127466281849
+0.0472037841646412472907671592792117280234749071299573427009517
+6.6167519796174632209037381740109590445016809115247767403358188
+-1.3790494300808091798939502332567262636182073061907387476595215
+-0.6657820457366500395019174883196161614931832461139677546214065
+2.8560664241005517929823394400424126544300583191077821190375076
+1.5249899490572757946276030639855313852572656521621609404272975
+-1.3931308810150975196698164050603064083911271043868173551543427
+-4.6039983381471294755884853955310445435770934332795378661898861
+4.0126917707693931411394199333565711208281145132294379899052036
+0.5357266440456735057883978572091005941621664273263297338625075
+1.036816302111193115962992309706531429250262513592864129422451
+1.223737863397634606542190456222201607360769712086725371345614
+1.5327444763885425214588000299880421696741889260575206028415297
+0.4728444142702825879575218539410277837804595844476242764386916
+1.389989669400279842811832399513877356861246017363367448703475
+1.5971653619557504359764324826934705954824336742371159834762182
+-0.9630459966636123374684267838286859549940693711828949053972991
+2.7755143856001614903115932837882921092370911195235189394881529
+-4.099383951237230116228639362242371616226007215176579309272176
+0.2118629441126615974153278355401215546581641226280843432623703
+-1.7609991903310020158637839067647827783049428668501503074594118
+0.8933646406553911886149231035918500369255903117781677605007339
+-0.2054582495104016491794191033434957594881752680231271979053211
+-0.0282329722301437775515754244152976344246998928263564436899032
+-1.8585905922103038648076457068557807418899424432206253710542104
+-0.5334970814611379381411659431460802466038162154582434104266749
+-3.8965545927880051043702637421147062471484511941058784697188575
+-2.632381713604587655631615904301501717622873505898541844795077
+1.3860763178689139276705696472885058076081018689341371487567241
+-0.2444415857034289567547332611369454782734389487077101260743545
+2.024589152234315638373004471806366047081084211997458537197933
+6.1354353910615298652036015359674496818240702875993786226123768
+-4.3610283509290941064813833925233087567813742189061551018894119
+-5.1992489641709797149234179741073564885284158140119665138433432
+3.4977465955109878343213879011360690617862195447365439749839208
+1.8968653905495357466378073965165759695376210675073349740008067
+-0.8397600989561851317094472277495759384671235430751745123798747
+-0.1646425986742880353193938944932133693903972954323509945743055
+2.1098290292077114744163133965104685821935823208549565167415186
+-0.8847509184380256830994668535541604085298574024735849287486972
+-1.6852037868027264533288869390668907004675205352468047937693691
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfct_adjoint_2d_20_20_20.txt b/tests/data/nfct_adjoint_2d_20_20_20.txt
new file mode 100644
index 0000000..db9ee15
--- /dev/null
+++ b/tests/data/nfct_adjoint_2d_20_20_20.txt
@@ -0,0 +1,470 @@
+2
+
+20
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+-0.69273620291038926726455982040262810773021395371128338842658488
+-0.23172991783966588861854324624888614532914776087643807558307305
+2.05618442897426120068337700338965166282847527966642731762768228
+-0.01022033089161611068332096381115849989961630069063173908045719
+-3.20475412646054458808241126586578239637505749283722606279431038
+0.79065482847140723740185002087936207002460845720404056035606603
+4.48966502699150622472759377803981334584871849234846745818689428
+1.52060621552185612628500836824586435699214366057843562658094556
+-1.93563529070494316650987496128801906743400792343542493131748492
+-1.91711181879629891697712137567943728799053287765997042103039235
+1.2554256298988411799984269796112080703660912577971473422927807
+-2.6704333394705105410711821038426310513818239945780255696049912
+-2.8365143591894490865096844225122146460309823213842546809800565
+0.9846208232562866625248550654679881027899039629871428350700387
+-1.089149533717771703962933209324345443985672341046150895771671
+-0.8643951502799969012073673581453525623343758450770721175340342
+3.5249843046558931979017366619370671637461664824523460188835386
+-0.7809881458859131421399907927473316928682452820543059965905968
+-1.8483228205590361142892484341702499053202286456310306787834038
+1.8100664141062937411942308120382146465266969461664538907024223
+1.78167157407696022863678598744320023087120774907816049982870453
+0.91818541341122356548761866303738925895622890314943209640039772
+0.74508495464914282661722138989759882840266298279921408150813473
+-0.09306255688002215114436089034798327118730242637707466157042011
+0.95392249506070205958929845278188948569010729804066387798062486
+-0.24233080215483634035466256466498393995807182645702548417171481
+-3.02906412879434747743069502065438487822774817513061286160677301
+-1.34214792999239277175607189831524739966132007920179355748806557
+2.60879832363683809318843910485365931563540511345594811985298511
+-0.25576081777212720774571574119184968715669066410479094984091066
+-0.89602670454864088594711525299859798956567241649720185434219529
+1.3688880989580372065699233660447013267719445066926469227832729
+0.1131976522383563953339272160181695052226020358481988191091788
+-2.08126615023015798579175192130750864737666424672331051779704351
+-0.04410874869830314671131771291243168217537037265285884871941497
+1.1087384174093582216464732062735566921941832840088715256148579
+-1.1235493384331642843279800693927393602371713177399480729157427
+-1.2934570956905040411219091436760619932141875012801756507218946
+0.12277670265015926272645709593265128530587633037204030097572761
+-1.8049494875436817320467935071390825374056999124679361000067152
+1.73508323613837075617759534980666767647258657198120745833441016
+-1.15657292297682197920193782483779822645467983067299421950195748
+-2.01816309592698447300676140426398771499441769316713478476013729
+1.11517354883777216415772959796124892463655341432703245902571341
+2.6180378862302393749803763302900142021888279987573656853057054
+-0.00967863777003045633765242118873518692230065210543670634412596
+1.94453870940900999496993532988199176207062770280928904174603708
+-0.2777001892439004354158994992351672002196183932824538646316831
+-2.979464074016227344495021101679894778948928479989747601521437
+-0.09803748096637924111218697627587668876875419021782323207516424
+0.5452927545180712321134029745410671052470358519507532442714337
+-0.96123617977810950651790500530609728222180656422691762360146378
+0.4278139244619769518371503958708058861156738486038270137697751
+0.77179410740908579146062740019095354818072807015206854158425924
+-0.3393923341502785512640755062797707447006074608700057683259297
+-2.0406247057000038152171863910272764425299675108542548253822471
+-1.7630058288058724232343631821949707871717199512653928188659189
+1.1482996779125292896276544457719578982343780285264609656751927
+1.8026445352635110181283414254241615877494353530311741458445366
+1.7186194709241044053160070681266758625795676952195589679386331
+-2.52608017800368214360402926794371643938691593186115567127755983
+0.98028688243293783682497007760822294899886764648096710899720962
+1.47543980042739525536203188664850500103566720279902161835293566
+-1.95016119427822439023859024505340737857131951614318006821852904
+0.69145742549615826876874290650989308940299262158954568003475873
+0.88769548287530254181853868333122902368926703440105653121489352
+-1.28493496617011049415000585335031477841883147226940633938672647
+-1.59906370348656058554635862858713041528077719140898834528189991
+1.22778590334809240101245476032648935513050915377960551544581623
+1.5322977932901436252895595569972475540577617342724861187270267
+-1.04660642130683786358409037270895820373975414828698450903191989
+-0.6401078425558002348454575334891015403292516552201047427659388
+1.0460864268015475310001677400931801137195487362246640709829858
+-0.93346925435099468768426733178212934255746804117638037053828101
+0.7366272451477409122727179347683658073336523660653029442541828
+0.4864415065354669390652250049033672957160745799062318970331155
+-0.2160578237231053191724792659399773178792360199000878604311528
+0.0267199268075289886706952506206913753361854202180119073350901
+-1.3422287020932418613030456500680472415714377189014536241023608
+-0.5319678681172251934597264488414763375111947859096563672063884
+1.75274168736523422397242619774204722683659397870241292345202444
+0.56625626722285651756253311275720288673940656244573689944011309
+-0.2659067993421472465082576498441093967934993420406696922060148
+-0.53760628906124551876546056977774369781800402294276300214155997
+-1.95910988597432498631632368980972753594323330867762174465075306
+-2.43289079978063753770654544323993729548390836702116747051577724
+1.79870149400383343046026737254257359724107808347923412038798083
+2.51765858717118974204493182761122688225575998906863429172398217
+-0.90745710607117632307820891487482937004367350499329545736922132
+-0.90445880774757875846793457747739464474365350457735820870526694
+2.2860351645450708786912239527244104317618298285125465172444565
+0.1974853968161606761760830469428312993487496351020711239268678
+-1.330094353124147014738949813289052018815888223865657506113775
+-0.1689467825200443333433756893735248365094900832245732379860508
+0.6163158364234839193622416875598208300991090156655827401828844
+0.3197929651728552372891860451081674058251484117704415874018126
+2.1321084042957098898695343159240977766598769426526002711007312
+0.5637227077072539592232759245120205236594251304118777894047668
+-1.6605065036877837559063857226319367410982776153932639603039266
+-0.5925908755457789706721357920530694053801955240019399542877243
+-1.58754491018976580534405259878555331512965186971132136571855749
+-2.05647197884308533276113723626008344061362800943279415329265226
+0.35709031982602405804855625897791750653523175116321281233365192
+0.01083206843374254042384029715645464651177525250941663736295202
+-0.00862811635902271955641096497834202490032630218018780479148863
+1.6200593315277499204031822354894483020591446460401315018236897
+-0.0107731472944121045760093832874201804777448056772025686391772
+-1.15939961411822465771151006397327697065085012590561882894790677
+1.7891281732285345533778128300940893106930470219255936025054854
+-0.15348880213677475180585926104723205140482188998675013260143003
+-1.1580169043985819592801606610923603523864297847384729803588829
+0.7236287834818075611540742956898438721521547192128455327173822
+0.5699582411428688930135077967403740213380387399207650753955918
+-0.5810886049089425721654858659789886308040548466999036607043018
+0.3244555663739011770068562403221148607841195775857698226555129
+2.7136151201761521571922004870091058054910396727426604190982313
+-0.2427868178109391802700678230564966079587007530148344763487687
+-2.0744329253323575246491843213734701710520358812199261364422604
+1.6006391587253668402061464664060116893584530011519847145212302
+0.9804833948996422932944851698486230130148236190648252243244369
+3.37322303160095232390359810920683662277809399869522480529566305
+-0.87511235444906838201524703086113424845374515774405202959636405
+-2.39611633365417238645778470107027833937588710287756144428232735
+0.3665165509714438242501831580523590623938511665737645659763043
+0.91036908447977686958100382961934735098865811926972289237240298
+-0.6444546923673214888788017940783748922427184242737660293953686
+-1.35980060900567925237512896392003941263870983095636213636066066
+-1.20740607994692716266469889894909390058494233021215831454722278
+-0.461376248347220485942903435956598292820804102089940070336573
+-0.22737611281624591999492552938586420879284190724605103699274584
+2.241258941883996650656534270660568977722883004946655061973948
+1.6195681564850126423179684291234349747047571369446522566025949
+1.3269495800458474900979107794735044491226313128902342727774428
+2.6890327553116628589274482931643779941513799444348122277270547
+-0.643988916861133774372310973884704925707937757817486501824278
+-2.6597891466640323369974467561004503566400004666205671314987416
+-0.0404998274586438824604821242377006717904540933146241835761843
+1.087374080200502073615920910189875003807346260826687648423752
+0.6180333528758981612133415658075428929764641351093016397863608
+-0.8373389842960251882906848211386422898996131296990885634549999
+-4.4188358094088534407604747431108586460951234986522366412618209
+-0.56298659643026857347108307660060017507453494347031079790640871
+1.63678517606428845616750703256660858872950157497870125984282995
+-1.3723455129350018515306789120462873882192970201312693253127398
+-0.63336474686527516159105489324070368892834485573405592694787803
+1.8282943158708066084142949213872093462078631489372026101353699
+1.22331741292827337471225690954551758057322544466958034432352765
+-0.399171418630850920427002218543542562046694008903276377086125
+0.4519741565629437015676630180743173597058731856855881189369435
+1.0241649039473104185903095618746878796817186757797436230004765
+0.1804978947982362871055807145244601715016740052833150130736509
+-1.4926544283547393576642850106652702228627478911428488666471208
+-0.9082670409215992385964621861945220814778610387317364814358138
+-0.1135298179858229336849461368777972710473497705571891078060426
+1.5885355405248116936159778275685861474457288821879226284560639
+1.1748574014531180188596530306232049782724854965998665242505789
+0.8490493796207991315179355934136627440299507026689983775537096
+-0.0905317527151166431603725611080839615950154058063889757335349
+0.0711850549276018828651511623253603345119219563415095103693355
+0.8205282578530923747530842218330141420768603115334234221128805
+2.6438610063185876768063654582388222686148213712886396566125073
+1.33805453911548484553338769607549156103029373317431843298372058
+-1.27733872725772637516646155974744899938867283497227926371811925
+-1.3112126763314345696611412515028012072808056896348891608635233
+-0.33015977676778115389613849165704909304579510399789022945269894
+-2.5758460629878856764751155195970791051440710270998404560841924
+-0.0013118443343490685340393183369479908977589198537988816398802
+1.5023111738064273252300600992948350126043209795525165054038804
+-0.1561804840165386991277911332587250686303261719886367449582625
+0.0467493639834492714968011536031003207065716870004435457193129
+0.022069289957253959478860279152962842265230853030046733476496
+0.9163811103380731337762924000573917589702363709249570131100607
+1.4201697090888755672955706453987658796060864624123132659640201
+-0.879975278667586691217132751995837489353910672116714835454023
+0.1209738093525263700181517241679632709852537312315034746188831
+0.8781940956538611527193230480794629920801818619248265963285945
+0.7593482331456288009705646424149910100102812552130512516610277
+0.1954713803065225044082273832980799794405878564137748564575729
+-2.5050049686538270638071574245951472578783366615827692744627723
+-0.7022221823134086931842737484170548233275910160646146700843181
+-0.8192569055066069248611046406740283945380357833764100043026141
+-0.83277665375516235413516313125552351275758777541973891076128983
+0.15130013795397367259366715912749400725911874076624791850653412
+0.7765679134355393999852883314607700529464635263031104208119501
+0.8860347453073088344869937628236209246311481009532570313443225
+-0.5994977450353401549309925768494505805566140162507019862627804
+0.5539019246964717815974574554299950256275648821365763477122719
+0.183259424032344095549832075505542588687401153829033901133527
+-0.4346348990869774489110713112280442172262699419398807637533423
+0.5161932035854036429022674465772466233521301745519286102506977
+0.1451916480036551216616082743243820204364881277270178938978915
+0.047966834116317483648993225337441903583400523804458822177733
+-1.3078790233711976170637511690936259555002420556530100852470013
+-2.225400662482430676583429831446595352981485998581504648779124
+1.4630498395195089028473210639459815285410473953574513489218487
+2.1571920356089934197149634725652719757928536382617261112402101
+-1.9386700119588516757740482752814952732870874419271848026307852
+-0.2393944625245605815335626750948460145434013616554842373522534
+2.28698974992654700394434841206786844625564088880644302267651
+0.2765164590695396820917942479648985685576820142380846744345135
+0.3012263881722802801714352379473953630039906503104574794992783
+0.10571677166705436607907490957358424265546254666227433494332703
+-0.19048539848744749046436079429261407771174793817693058548497954
+-0.4543526329728118315550151377263766720450801753871651409765009
+1.33897265858979347073403530137989416000445182775168588070780576
+2.9223655725954307322360641204273780049054528853238250264199376
+-0.4924633963373781429209259569034560458201841200741033713248441
+-2.4390407142663775224993970129866580758344990062472950828009799
+-0.4840114921705225126187322570558307512318605532028776221005985
+-0.3341395330479692171987418261482187375975786370601342366796323
+-0.4682217067047821820074517754175029107270581429526979075239534
+-0.7346936696481372186296773705276853617606634870713245235119517
+1.9621050472614605517292702810908088126596427820180559270413548
+3.1042631477311332644104873126936213194330840831391859348955745
+-2.3881459199578578315705698114976096795490141733597023479849004
+-4.2468567931754454118970550704077617852955665703719160537326172
+0.8984890505969127483118344596827999253793790538984102337674041
+0.7074497711558141639959850309666617450552850120948443926392646
+-1.4704708765292141724293916858040627186585496514660910114444059
+0.5390972210781171767688554734444428311487284205069579118702892
+0.6645482062980250804129728099771371282306162819786371863536254
+0.39031553754612943967710282524447413495525612701685117118990236
+1.4925315216536228299181717921703560978021752455618580650197976
+1.03190957005480030743823163568625044939130088026035156677662409
+-1.6029333626118710481748451107621322531216682890101767584380123
+-0.8041725109404865649732821163367524673265257059173531644749357
+-0.4608415269838004671128390389932631679813374573081993697173383
+0.1792685236242660303613018096504207655703910075232760022355845
+0.4712290977546030069250488500588198103268065600361455181192783
+-0.7802261301658090953410374025889161550466156345316015422223515
+1.4866894579306633146240563559711098834434779021108971043314142
+0.0974384831371237587232370593726465912507175726711710298630093
+-2.9827153516753469045191166120635803982630073524636487798123355
+-1.4442383892556121406060895750871832896080626939242671521159106
+0.6167627632453927897887297336929118147541907252766838371134627
+1.3134003107794075073319085808747185952315198435145460089888474
+0.0514610125326244279999972535591854808833312730719520923305445
+-1.9422733495281726002885673595405966825858103711223417211468939
+0.729175485453578071677821393451699509759158288407886361837818
+-0.3011660646692481943133166883684674340809308859696370339097919
+2.4021910107441696164097045072244780528860489245867022745712851
+0.20646371000031784628675302745986196064632524928072323424203241
+-0.8174658799852905991733644327383076414277565886372743597360997
+-0.0562464818686902911430939705451849045252095661593082193020875
+0.0154869160517409876795676581282001070520919853882986287576744
+0.2237556687785903375321518575266806796551056462331281729107646
+1.5147325402235597749934824767469885255745369573771909682860936
+1.7971888850886163790859667183972082539597746028250175449107557
+0.4660063663825890877838472989315077485480487686769594313206052
+-1.7191568522430425148655890412622164345641145072559925027367562
+-1.9552676566482691385553414984430720733100640961221703622424556
+-0.2835353828409140018758473040879324732022248328946816516478022
+-0.8738746409715810722016539493271203281035481323541670789889646
+-1.8065773984758494777836573860363280468885731538108419312506565
+-0.7395935022992333864662329740168473708914217071508660952920147
+1.4835154617235773145121142350414048881293464497532611918288016
+0.5332874516625778510287436379105098241513266440849073623798264
+-0.3725240228041476262816980210108682966551744143185543950105624
+-0.155400218627949601498142990096676555094230722195330986980007
+0.171404687632885856703947920145163571838882867641768594862493
+-0.2453787548602301415496266007534061460109572247656060414266099
+1.21631459641686564651800677660737940447608481107646412364080311
+1.2539792260776678757526143858147486076740354813479994966069886
+0.1866278228122056371216677782048731700948573562925236848821915
+0.5708356962524043665836318488964679826560329590140131467985965
+-0.4233510259048861771281560422119531967115506641614704030407801
+-1.0304119641274293765654977773859253271677322878927406497263143
+-2.0985940857898105386970658383155051994419970879740517445991604
+-1.1369314587988870483100666860440053262403734033973011781319921
+2.2340311511389789300669712084054150995600335812495731779469145
+0.5041071733917166346169192691924724739276934922856970056809511
+-0.8164055122863793339423970884363167596330018109420950635596641
+0.5316963056941594373086249500498877558414453767539985942799444
+0.2306457706780808961846386263246453679319499753059534764573335
+-0.0087728277322136596602528881970913137483317949885278768142476
+-0.8130468412815598290566605205372124799601060488866388998794965
+-1.5577361318395282966323266887666868195071867044268337865825467
+-0.6470988748359878441998595382717375330324108343000955874121118
+-1.0911460147276454335014136328430433183085164590732482632371223
+-0.0012824072961965221681493011788029778190760318828507513169219
+-1.3499412302922897498774017492442916706020715623004963530270803
+0.09039683235923395608270538314875051588232050394181034671147004
+-1.2426985096133605626984753547678680227262922399832632144414401
+-0.6722618806913794966135752048835756991488004573545053885341272
+2.4189892477921981854811129441552344885240938783354723718375558
+1.7775167548798040118890234038326229924744687271139998454776843
+0.4241829293891081899922678301755910715540907395625124121761247
+0.1038380074317494048049907523405053755295489995842381075314565
+-1.2965537906072155524972791052589306882362244422073657293700333
+-0.5283911412462067899999056516336334079083576182803047274258519
+-0.2224533490543981356219931532755048524199969858581489118386891
+-0.751950037811322977458542749804850370911332157714672905732093
+-0.2466868657903929292967002412423077742002264725402224645064684
+0.0331856060438874615740722013953724097475003970959583003168772
+0.0978247196989879703824453355738123856545981592602134896107468
+-2.6140992826669572604577639143554875522639365951636839185690531
+-0.5378964072759764849117246449513042911880275752546990238490153
+3.0711639566201696731673751241515943647374333401069544653213052
+1.268933081369882067777955325548277168778826467395104713411203
+0.2802935854637928679051704317867838790351177370669912025617276
+0.5257214095190079053218036462182650687176946979793755871827127
+0.3297678670086208860013783751417353494191693667863773938999074
+0.4655591392092285251663239043352597976741137337424156024266062
+0.5804040257306114150110534290282428984274520256453818600844901
+-0.7506583690020524446588088875273240310326407865758893936694943
+-1.0771271469779249272010566931228716019998211658755245932798969
+-0.9039104302752945324401651287148193069236913298931028478804229
+-0.2218122643321576663434729088756209831440786658626224825624125
+0.6134620163800192542079853438461485466545482321907007261480465
+0.457603520477109072060260540876341878914673706874063120828496
+-0.2688394165303559118093202766456732337405113924829784755848585
+0.7586234716117726279810191646264998175105664181177945707530102
+1.0362436177023308038443934072478551789638639257214733854198522
+-0.3207403097000605203624868814261728813207917158854291835457632
+-0.1441052998495796895528288223000780177410219328346047680520723
+1.9152087398450571254892343913896821956814195540176929212438854
+0.2047323993444084705239582040216902471613152900217836302735975
+-2.8979955813215103614998529648101129597640297520698974348077041
+-1.9795332306044605181324414686245928892577802195409760868001251
+0.5284404328310819080021140255039256690363039696510002808076599
+1.253106299642683723546091739139736388367534376314609738205217
+-0.5708375485926199839599971575636516573931078970807573273683642
+-0.1859552958418944435583199860754283089771050609762025863242652
+-0.1754580268457383270258857118322484481887601315730488901544142
+-2.7889440891856226134293901390181335220948078909400240503188371
+-0.7487718402246906216288779368170817418750484892471859381201378
+1.8814029280267940890680344642734359922666358140785500116457881
+2.2228522489051213783198574143059075958380980023457525436865559
+0.3180743092424882295812603098029851336749365435803533197526187
+-1.3278513765927883800854003679124085400675696274245068124263602
+0.9016394525595105053696561571354867782554701530841401694389326
+1.2406539154715983579514213600185638836618911354522674339093423
+-2.3759375641412971378036532967432209726901782233807992183926012
+-1.4097873502771349992299842275530751675903238134032469810036191
+0.5206900900420010464909257004173932602927471308803170504574492
+2.5387470782583585515405844876372515142739635604089698840008029
+1.0006539992733959151724490011233648587260499354109104811866999
+0.3124334840383176113279986386917531451422720215423676690439798
+1.7460887579402664586708594348692589096466918360711993212556001
+-0.8729751865202843897173950898459366702386802460599321832425034
+-1.4540818568665147839359807567909653441246940435908424042646196
+-0.9110196670604731150799250319312329668441515180246817003279859
+-0.5859458364758688532870109419271376413129859587185591954564647
+-0.1914207402138672034383740344205278594429585061956000140326472
+0.7211445950921926600649695636754854769498158712147149114862769
+1.9921325936578647038849555703694280381741849697701097762701257
+-1.6593877841547949749951248590133830682996227076030592743327899
+-2.0585981248610550988253873933714014226211848655768589730532937
+0.9537435908837924441313869150846867312153473525478497005723267
+1.2766368942764610810848426484234400292854798105713355667710521
+0.0378479620203924478475720271870752204016786164391099959954855
+-0.8892517042741312680976326319519580880792425723318132914904752
+1.0584751780888937705039838597672122922649095987329264346104609
+3.2935897292293191652449765524905395354901807985785961867173295
+-0.3441011889858614812689287545518038140685583384358272147591028
+-1.5807790442137829672029591520071881089053659175618423607052338
+1.2153938588141611219238636009847580793697733222645065501915036
+-0.1992642204759655355930799414861547402320512647463144829945923
+-1.5098512659040911375962603330473272250742623559127197127417964
+0.3432699354523655459732337225206641064685595319525317213764241
+-0.5563367348575345553370474564628853255203370836869949368563128
+0.2819626033265114534236839677918271230386883422205773915465369
+-0.916528317311498517252850930059026522162722445970828939805472
+-0.6672566270267865796439306271273607736809168896528606400707053
+0.3400535718612533189508954597022441270667195662769633336339281
+0.5345330722768620148908174720547888397178812585142272914239041
+-0.2587639801634846020826235587407872051979775935258864743418198
+-0.8973556677921349915472394760897134511012538650120710636230748
+-1.4679700483289246769050588753442738977745398656543176488020667
+0.6396969163341587905837381625283381931956433501271408026991445
+1.5602053131911399584603394343041132685403184164463149324800887
+1.4126856905471561641816009129950989453734842122681999800387897
+1.2747632983142395371131454209506893011674050467360154676956039
+0.9492717763911007208638220110679759749844341276253944582061909
+0.8068850797504753562929209977602083251566309864751768293112621
+-1.2726064763053314378603712255261819334045044039267854447265262
+-1.7806770215965857611411605343320917055364098206412613712726831
+0.7509863983430280539259461717596448439461173398699992739736604
+2.1362402590531146713679240554789116052543975480919897581972237
+0.5419324021670431976803773683568306273627188674950284341075776
+0.0206554023516779051099383209201531709500930095444246542256908
+-0.763307055386274747048745667578547705768842382106712536132009
+-2.1253144414892529189843434110498535516132641816040520491429137
+0.4424031138249129039547822947876797222603525602694932586238564
+1.4304025824917250618480108436679575332633618788368096679037563
+-1.7655612648038264924137529835276212199520316392639166458407255
+-0.3044747373862375475234604725287945853417074140091427619475491
+2.4051575776831382597826630537845839107398260380960824250098292
+1.1088854412138527772107668817053800338982050918002622045989945
+0.5119965395592898607881492142393223556523861402348086154258796
+-1.4942990187878095252235333930804920522996706301657718110477874
+0.0361342803014835674837490527054118058130116632896966925240316
+-0.3513522455915443087036136096303468482082278966887260296551299
+-2.210971918099210232945082587317854335633100873195417192648934
+1.1294784930943829067763479799901300195424860429803843350906446
+3.1039070732614253725599484198379054406661210007760397583503791
+0.5159274460235603196756859255560939708320798603860647306064919
+0.91293581743145843854077719777201333073077004515868660966554
+-0.7356846773104901049590836395522410162770235069917380835037734
+-0.5810044248162291838255324427145774121689449702791688339247125
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfct_adjoint_2d_20_20_50.txt b/tests/data/nfct_adjoint_2d_20_20_50.txt
new file mode 100644
index 0000000..24b56b0
--- /dev/null
+++ b/tests/data/nfct_adjoint_2d_20_20_50.txt
@@ -0,0 +1,560 @@
+2
+
+20
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+-4.79530968124209425485052145966292630285889974485326287728490672
+1.26392445166761129969045421303618088557334789197485002506826353
+4.99531812458634705195824506809724969009025499199627075824029977
+0.0597247607658952731119951757921824388020339815445338351768489
+-0.5419650418793233465897625604377753770161456470460687056296453
+6.4091183518435844630569546614227622408412144993613484133384563
+-2.0606095178962768154817342358763768067269358370815015330270877
+1.8729685812590405926567882052994581710133970592856617732421398
+-2.4866758198425744098203755979366017212489996390747904873851967
+-4.1511596345334986962349503055763833657897252222096933592232143
+5.0591380472631658465948470062923921439885183891978493290910699
+-1.6167556950865080347308999957404364630892566239932093096048168
+-4.4766899580378447472430956136686374665437612927362419615143375
+1.4660451177401604242246286883191575736117716063340479272208476
+0.0120242600319236976447749091182848308428585298345063951239367
+0.3224623303140262851143569656759869223606716410048005008474655
+-4.3593228770381036968902582444968671038321665135893074771588297
+-0.0958067706249842520987192932867922814116292834010301201881017
+-0.3684997698331157747320084365405711585897235048777937429255546
+2.9811856389267329325479166051634770927778283754138586373569783
+-1.43891142524257033249396129670083780849998739028783879146733072
+0.23847852450979237513482602692088441310632294670918834198570647
+1.37125115440045893224928843294490330762894139603411342197131311
+-3.59876280685471694487048504208219129435897252810753493935110247
+-1.77026550727361126660121862539115152153328070702231535660259047
+0.4672762917978309037411785273355746511229917506462059688868107
+2.9150375031417443300152215403172485027591335094837207843415452
+-2.1790920323336039622416411815612880781645239520581827997939553
+5.5910335061439504546526547763045627561363345287957855862014821
+1.0918747197179565735991808508086368768336618528069079656555159
+0.9946160479863040366086609759607071101122585698292407912413667
+1.7470895484772504121822561732123731653791395521935938482807841
+-2.8959077660112500885600261740405087035303860164216477359066299
+-2.8798249681828939708889330129070422757714679004263206829515698
+0.3967075764504778354989683913359972630742946146188994175927321
+-2.4365290893201736589588592728733047661518717268708323374484204
+-2.1243769141541597395997130121939055409197308739624212213683909
+-1.5025951930597454050836829274660211016079393295498681332098696
+3.5884478935356084614372907472074048075725859011460154000917161
+1.8631930796364074813662549007956852546551359142477586827995703
+-2.09669861730980949586090717823585483817864920025459957869861663
+2.16893419567954363257656714612890455423873468516744928691608423
+-1.13780951871347950629746551995585582561147312710432762585612919
+-1.0161755276149793957401443695574214796674859827001063214871171
+0.967059005761336635497130151952227538767131364112610342806199
+0.2364052336296462884086223513875445457970616605039997539165648
+-1.3717821429042821235750274481550524361088131613112173695167014
+0.7109206878425579724724593401656156005183209621130019604652858
+-3.7647135582061413122008539021000693419232915251230098451561082
+3.2794182401895807292105813519902134536963221820321265671191311
+-2.0309211478295930480277349575307764010883056019123471624302365
+-1.447161931179943928034406397183224260756934168663714120187266
+-0.4514183057737116407068820409834236539259113608503743549039305
+0.5707749795198785393773426591695528139113437935247711215928408
+3.7589191033806559196749632237581722154087653365131712993970935
+3.2395685844985228100356652642303046736358794189282221741817806
+0.1630878434698892436205289168472185192003485104110737653826282
+2.1209905589735978074399338158392651394624401787387255462676898
+1.2861479301260643219680095316570755876412228002467010111621926
+-1.6178303010828436565022498060358816162482471300910940657009021
+-3.3492593752811134208945537345538007305121831359327825615449473
+0.27469296101530391297726133100302203607945830905764474143947011
+3.208754543275873563941803848022126636943683851451460682495122
+-2.2870353534855066464888480249717337749095962305059357642798685
+0.1506302651865127800757404742894064135279069736764840484476634
+1.7593566009442584541651976048682028907747688263948096100657328
+-1.2026178228689257013329407078337915897063676726247873182022412
+-0.6598102682397411794440173680320191616864327981893066109087375
+-2.8877781560216710181012890000782329425707816992557083930438587
+-2.7581894245980298416279265084078834668887069229021399435778932
+3.6374885792402953896488730890065614818190635907061198016805037
+-1.4733516459268837336796022316853430619325176494783478083902935
+3.6441386020264118965841445170569710332596954593918968399571515
+0.1861849731037287110615073733243528132956875750410870969847943
+4.5915368329708138152638060584787896721389697308096941988242249
+-2.6040067517849430857094320663516628744268740443932771278826357
+-1.4600048766782574036696996517342782728178560581772742361604596
+-1.6386277914489392528812289956580623774057620258911792989799966
+0.0825982103880040712609241154624133507261382336138959849360147
+0.3402973430781222852418467487020582658998051662909073200347693
+-3.8327306126290769631061436100608011061883191552993772730173195
+0.6139420818851361614153380977910068115520508963925910171087496
+-3.2674948122252669236894827948950488657473483756852126322417824
+0.0743530654744612711810844451859208125613887915559979963295709
+-3.7883428656042588436288275676404632313614499599358663289284773
+0.70925727245733561781621428658250881780044898906338038446348
+-2.1262333354439743882078552084133830729691209190498182023958781
+-3.6075913744938593556599951616153897553225622359963529253389182
+3.9828557825872701017596069578112000583524210864552687739153558
+-2.7559075799076385106388216121681558655719464403896504064630507
+1.9349669617276544908379221246337435849319510058757557135437554
+5.8553024428066587902506859864764198024177435374411034530902285
+-4.7938091147675429913227857997262597291886203020346816398596864
+4.1940691444769290360395259707766117580576472130017868230966922
+3.2182314619004641268298182119816683163693225585777984844292432
+1.3075891409539836392810471712626532956268409310630181589382741
+1.8224952100487453442530328128273679229624065399970042606942725
+1.9495815695880203719592691397969898408563927743647598958608242
+2.228135781772752469928936843528053570260346268544549896228388
+2.2735114180637674739286251689956635052332697050653769965264563
+1.2850835460471294902612963839964580662905684450589351363168695
+-0.1476972974882451294145405158052198638063317116873266380171972
+0.5750300412165891547008609515090434651303081976679191561557287
+-3.9728617033662722496483197240622156877199260284136461589074123
+2.0283151783637054057293633538106923184576132252122465281524414
+-0.1290324289114205123465964154198113286300354148292858549408075
+-2.2908947807065410817768808266707314096704611362897695972355035
+0.020342466855121866667530282663082751494817207562095175685397
+0.3728391254793575872984493090770689248351017369696867341399362
+-1.0944889579181525090781503017965501042488621550153523418079556
+0.9601031144469076224930009665053114613060514706231295889133786
+-2.9070195633619302408956916431354575910653702978093766019761057
+2.8178012149652778405255090666074992786094716444890889820570659
+2.7368726514245680546982512603107424968928923355386135690237233
+0.4018775814927495697561045329271621257136312429349818820930641
+0.6362454343113559517260837839567835332742615330669786409243763
+1.4050876484585265382894382124368437091337193002075210077601672
+-0.5723372430529039898502072869548752033413451325324332133494802
+1.8183512249271271037540444668526980276841369901119590712516578
+-2.5465267595608932747428478492373358397407033915392577380015546
+-2.9696667238999406390253682769592973860539195261688049753693445
+-0.2597024867639060406057588427511447161329790969752691010566913
+1.1809470005576424613381127451185402413861197462036947681115059
+-1.5852863289206111225903374501246359491114157741460937701035248
+-0.4833669569163468706259758608117388063801532101800628115643116
+3.7072180096467164885312146028272979443448728194907295752451365
+-0.317131465141655031133200483127846277255258955207169997281422
+-0.5243236968521718732562665669564036214120916605728139975723155
+0.5631288834502913699394617569179850041337750434871885346808312
+5.5401818167864184691665792956065362257760492584540730759742726
+-3.1933193356590087753038511399599765194704751963942455268944856
+-1.0751030651616976724913656014255021815950529080347829804554422
+1.8034871271142315315190097369944021956193436372185094149926877
+-3.2277430424894677236735502400419932016440852255865737543439508
+-1.4784235568980376021136147399151522777109521989902192311888804
+1.0839568128356282937223535410976462366186852240043500136518136
+-1.4393409709001363160811831727271789215096143205549443440495368
+2.7712421150424027946466957102978748531633912941369296722738869
+-3.4394335016017435261522425580618123938034483827709110839419394
+4.639203188592559043120553103732545539210096564507701690758296
+-1.882968384959710233051318905436400378041075822045215520349633
+-0.3082897041367398707341562924049490170434380111058175739472871
+-0.6821704969461249925107483887854372107206363745494738095857624
+-0.625950442698705454858779805521519195378652685909654108943329
+3.2227012057648568934779012326452425702671007179237070601169129
+-1.4393777944376476765796250491634226510965848636013451733915141
+2.1925983920655362115064934584611702891724784782316586742552918
+0.2624003887292967196210258703569414993455393692675333616100135
+0.7517669120850723905357231031188712908932910798560397509101232
+-3.8470570173293641527809907305480834031629221582517205252624061
+0.9750322506051352921321684337384728332105164538761349229872701
+2.0238138322434803777802353928370125327860251590277556648605575
+-1.4346272225490930988715371040445479763805925324367730735426322
+0.0093668445819570938077832513530595020373684684752618316667659
+1.0257857754882893897591593354731451617482686800737139759882092
+-2.081675347298346714227906272419649651009323033590545050115179
+-1.2137963854210369852965186353884351225620129081618244460105754
+-0.892414878447332957170938723832587628492659465704156784675324
+1.1174646988977020167492691748319432348807911824707704885578645
+0.2279411139034688888158511203458561094544433411342385286139094
+0.8891782070041834864649413924073931051636218788974242912902486
+2.9988929075772324589111167027701303634531507963649241724050351
+0.4991667381638754019973569280726264761991024009421507045372595
+0.3158663368669162712396992315057739603459990851600566670545941
+0.1620198258760200749582854012254876759436786351751707880731549
+1.0303345483954242195617692240416679790388447412270010341445701
+-2.7112807992061258341038141370065568816336289728554524764529488
+3.9031686373417602649320617152601278705151718775312120354345522
+1.7555663076958247269688010744367470907079909304140199905031927
+0.0837933227407125975380676321248992466873441006473803761696321
+1.1978940062294304358410114137415489036875952647908181714721677
+-1.2620897048633611632464801965328997496379448349959398404984178
+-5.3680580772930101312613964735521258300844942760265294659463127
+0.3689632431786238771895756125139111800088919181353406905244013
+-3.1077975441432232710419198063339309433130652942274933720866725
+-1.7630066276813481674829600972079987511462856056983175264448058
+2.5165414409139816405463876489908090305701800737504949709708108
+-0.6843053227467830073856995481987933497135721391735526377795256
+-0.3064687486689322837777413565427439466296702019981727805180725
+-2.5296917887293825059869163734447293191338474195772771041979871
+4.8100495647248071626402766046799168973657870951525488705642238
+-1.3525852523139365527327538290166382094920979811384688746255061
+-0.8008666463628030484857275774992386183995080193341380730908948
+0.990906071463007584722761125921135193417498098727321571041817
+-2.3711783278831401789077616056131727064566640873187990267128949
+0.7906191933867602754710717316688247793602529592864699573062603
+0.3410653026152192836292576777202357864196746498242407519717046
+-0.2587158116284639229796683100358176402801950599792002231090992
+2.5939640536778728251033187690205290751897521570755978427031146
+0.2091377297006162819874535817512539489936853855193235667208319
+1.9968745497958197384789329702673362317741300261562571562494428
+-1.2816466868937214601277567986753958457502256211454971344942795
+0.9395395488851818457395231011091781286440116894902231457915309
+-1.5047316562088557395151940444302174041658139052659076937539274
+0.083242019186781856503808094682323017350718251182861132941957
+-6.2956429861198187274754509141654205007856087493155015230335986
+1.0924170889893267927823167309015389786333178107513410036588469
+1.6563981270785187318290023808123848615230634281887972342168863
+-1.8388244608312479513787515080453795839258872564915641340930199
+-0.1146342601527075752235357892985085257301267295926254076241909
+-6.7740012602480134190454317705219903323873399771856651304039015
+1.4253315437335164360227390532003685620871753063747926108870193
+0.0366536660633618995748210861963775054334882327330451774883544
+1.1638037587544745507762493765095032531511296388973658581321413
+1.3407655070842434563895878811028436259819690424540157089306626
+-1.2620426382049628638875532071504798239499389213305487518439625
+-2.1017045548295482685361268145844935492822965366145157803552774
+-0.5049015672258860070003286451409162299823580131327914720497568
+-4.640292429617720798196711028854769848348167619857421854979736
+-2.7696299679416679023417084816070290335216575486320323178017944
+-0.6870701622588390144358232479470456101126634015700663230715903
+0.8770100284785481838697358916348090161724154440997995472799555
+5.5437474180486069908579932598736177567349621602055961313700061
+1.1019534148003447564036074216826899643435189389420226965446002
+3.0297771903194284258446987384075678420603101324260938554276449
+7.4881834121024244603668663648460293331927194317034136294136245
+0.0129855813561751026752268393739463373442322793855419543773036
+-1.3051566304035851356165591067679669072770336636089251408090045
+-0.7006769679311195528166406901418030951847044483942994546965769
+2.9782790983698321365938573332176612722457009540648188852417045
+-1.6845592841068553343617506716945323169609663166194164295757633
+0.9574173028275138607677741687428121500774898102236710398217303
+0.8210345146149058597342244544623191972248915549203840081264042
+-2.7657216866651614276084390554950592360570374800657055555503202
+-0.4386381987726693498953201171935105581192135292663927066901035
+-2.7056772182111424631028076829854582325748500807899359263410776
+3.0049003438207349214615505637930140688989262409369774258069551
+-0.713908116230507818144676665121257806682656982020576669480977
+2.0831296066710723953450826680165397583988129957305581400876407
+-0.3899913442061903893709102221401300632762244868391367375185756
+0.2778941121847370077931871483370064146623648604375936996158622
+2.7713114402963378556059683295184837506401500868461436951448073
+-1.3544887098435418765893203307547719095340882112274520228609699
+0.3113527732725758501521181467068273407780390739316694726236364
+-1.6962979458522455274029815683317766405482050575110812509643888
+-0.1181188537611812073307462090832937755424285000889657287635245
+1.71414048769276162967421859312969834544493715701969414525699
+-1.4544145478566689394905872407036116513977406499025462736926455
+-0.3699502807550975209671714093912161075906322626715976876995772
+-0.2711001528447312123279961384779294494297029583561430585506687
+3.3781526536460115505092228812986008698822311549726745164229385
+-3.8419629898844546575066600956186095706362804078562974101006568
+-0.3735376492156487065141492698671786780791257691511280077174701
+1.4627260548729653320336834206282777435501582444609607605890084
+-1.2941257794653601284933780433447523751017994896437624379572208
+-1.4719651984441228976797056641771499008290728896719518286911886
+-3.6101377227305549184711212403202633706631609761980150731685463
+1.0486810504729564129792386935101104752159811162412625447683674
+-2.2262901169801971548909325470942861682941753591470972615617386
+-0.8310737518252737642185375740676518477065854798170754984980738
+-0.823403148091930593931636841936677467092276350060494839869297
+1.1183081146003160962827949800747313574692228301312443711074621
+-1.1376842443426813794465846393710528193264623756052931647799673
+6.2919718413480893285142900527664300825470330251116461695972402
+2.43903639197622027329827119392291242950707144386907584606125
+0.9097136329215377127240655435628935593913164601908679586707843
+4.3228816384986078721922707309272522103135483297181840486183928
+4.1105152817630847996071355318248963248699222206286406021325471
+-3.1337687907450781501632634353750853126010393861749823803794127
+-0.4589794333769855797047772856251852112133814938692206928898217
+-0.0310797048224847729883233814696322300704332272178451831124957
+-3.2068294391109399287224464627935325977418582266063971166674879
+-1.1836779372045746859444872001453932623103664072862475042652222
+-1.3972528214941048643492174634568711938585904668139362141569507
+1.5430561082887379340789014471070948280993658935664416769371968
+0.0054381484317560430182718497124791631662579159546758747109921
+-0.6522765924294430228675818181921703956905093686043749903920285
+3.7966238238417101110277153257861166588563318868828405836178213
+-0.8362892599974828094657918551214453613436685100718734115150817
+-0.9345995175078222855693251813963041652076792730134270695164057
+2.225809627551381933026231217106644316250454683464594578650303
+0.084690970219641975078982527438816576610861030433969620599873
+3.8411091060620366538224837033435850156269104860392975952221771
+-3.3535479123010853023180875284804157265747207446208787080192178
+-2.4955857161957307896087835275722075127689204464679875778522828
+-1.3665010802422381590679816870162999132680333525273369400728321
+-0.0680189915548172418715700290610372262005582239129374592497143
+-1.0660581504554184643286315531428692222797994905781901252130539
+0.7710394901769956627186472615264924796555114303492269467606735
+4.3130761626083712762410445756862782739399755041975728823587237
+-2.9485008344940923268565857618493278410369773910992203024813339
+2.4916203330680898524531499212575765407554668949496862077211229
+-2.0980580409974852765554272113997967445370516987584223608547474
+4.8895444036428134331132847550982304481824924098615508409651959
+-0.5670056004234943318449580505811187802138470220493217565769068
+-3.0600047475690698826891632530808691734231802506984241631369892
+3.9734078020803247726906801051221753384448401100102350988677876
+-0.2478298753160393590121444361716145041631462316133566279509069
+2.7744708227607893878032626508771244648743109003900792681752744
+-1.0910508852602337701374337844030720689752759462659135226660697
+-0.6924929680891799250469391808524155491162517674655085321552289
+0.7017712745684387506916474211683489650965316658316480075099033
+-3.0409311105287163285471404062339015683604551948885944982526348
+-0.1544623492205068198125579705245191886516863292451737910286494
+-2.1874523387261018009529049473773950342507835616158232894036775
+-0.1493253297320511302003705382986188835718349416696253559073099
+0.7801099540597082769469467236220698781708522186209554976154293
+0.0272212189424035568879747764060798919685319570444417066019122
+-2.0434549297398711821303137428508032242241817658187199054322437
+-0.3783063331283076031681778048943566263755948900428200812388984
+1.9228864728988767281402780692375516403829039665040503029677643
+-0.1769097851275039971481820501046172325593609645657004943425805
+-1.7037161402433195612109826079225400500336399027112419784363728
+-0.9346884507072207640226407879666330606690696786206533589660651
+1.4059358510825747711469329674913412506279269374137968984027825
+0.3132633997644812087689210791027668485744258766691431788764791
+-0.0048007502875553652235117172061680346726127333414362098779961
+2.7059110182541719129845543578621416589234334163513940985404539
+0.0246666768739412144265627974348702259641896024117127466281849
+0.0472037841646412472907671592792117280234749071299573427009517
+-0.411851972946368551224200557046771495511801856951820535414503
+-2.9342128586759914655319874162336928494378648850256238217070122
+2.0637826064035078050078595953235985118112908532830291446959475
+-1.0001157109306774783468812328637577183181498986679138745865569
+-2.3028070799483120636749410309284004628311520789753826085737993
+-0.858154433440493786931235410851635017189991037997009186871973
+4.6392725745054676540877435609312859524155928059347854050852766
+0.0872035727231726146512015825450582220898135857162762043831339
+-2.0442952631473127666059691338919632632783711555653293844863256
+-2.1222590889788914466389751107865364673821291330252162067822533
+6.6167519796174632209037381740109590445016809115247767403358188
+-1.3790494300808091798939502332567262636182073061907387476595215
+-0.6657820457366500395019174883196161614931832461139677546214065
+2.8560664241005517929823394400424126544300583191077821190375076
+1.5249899490572757946276030639855313852572656521621609404272975
+-1.3931308810150975196698164050603064083911271043868173551543427
+-4.6039983381471294755884853955310445435770934332795378661898861
+4.0126917707693931411394199333565711208281145132294379899052036
+0.5357266440456735057883978572091005941621664273263297338625075
+1.036816302111193115962992309706531429250262513592864129422451
+-0.5888889680600041329485440791032470037201483989495070528424888
+-0.0933895148641160737327998693229129798041600650242406110267736
+1.1836768324750547181902121654195225539987385630829232714715403
+-0.4240394335193176143380993637078100812805459089919815253214028
+-1.9604587122859703307697244447821783268541004840951212172247635
+-4.0671850025376149223377441818106575165819308098255222976501369
+1.6577531270693585653174442031445804459375519844769976690097887
+0.5750633039147513543732016218869371075275336934343821496603051
+-3.9868552305137048322274063012235864548108317492263936034327195
+1.0821030492565883465672522768576519611751775381925222042746351
+1.223737863397634606542190456222201607360769712086725371345614
+1.5327444763885425214588000299880421696741889260575206028415297
+0.4728444142702825879575218539410277837804595844476242764386916
+1.389989669400279842811832399513877356861246017363367448703475
+1.5971653619557504359764324826934705954824336742371159834762182
+-0.9630459966636123374684267838286859549940693711828949053972991
+2.7755143856001614903115932837882921092370911195235189394881529
+-4.099383951237230116228639362242371616226007215176579309272176
+0.2118629441126615974153278355401215546581641226280843432623703
+-1.7609991903310020158637839067647827783049428668501503074594118
+-2.7236492756003313694673721279032637043454993993275377962416064
+2.6885311675778289013016445268040141528656308230652379900586976
+0.6448394175883949635759582729549802600873552714215853132969186
+1.3393179241220999441497024304830550367764440322009698270759959
+-3.6239718856227279885291935080853772880864834409929366273792406
+1.0403662180804053004746174185444717413598161291086685415871585
+-0.1339558346314317812074286152411500416967782442109221550864348
+-0.992332752032129039608060913285662943294199912845644060139516
+-3.0226640946510919649299107595669863608504412213481882681087624
+-2.1280166647889370208038903969415772058592230422424294863529509
+0.8933646406553911886149231035918500369255903117781677605007339
+-0.2054582495104016491794191033434957594881752680231271979053211
+-0.0282329722301437775515754244152976344246998928263564436899032
+-1.8585905922103038648076457068557807418899424432206253710542104
+-0.5334970814611379381411659431460802466038162154582434104266749
+-3.8965545927880051043702637421147062471484511941058784697188575
+-2.632381713604587655631615904301501717622873505898541844795077
+1.3860763178689139276705696472885058076081018689341371487567241
+-0.2444415857034289567547332611369454782734389487077101260743545
+2.024589152234315638373004471806366047081084211997458537197933
+-1.1169100777224431297070612141830532845122428530708339030401087
+-0.6960820077666185747436047299998819679637722630930780850945857
+2.8179609745144633607077109830676571669202546682293311383384694
+1.9644380709540668559946062919270290570557074827524117507868544
+-1.375380456468061499764930741643830988990049406563652911020625
+4.5828347575002816108189439200031686401806160229863870129903707
+3.2780693141733537509833805240292369967122681240742213195026647
+0.7846399538546283756242431998206419885376519696262632609949479
+0.0170880190184064531774473624478924176448444215678976579084072
+-0.0373541578723710682363402235723216045584561029615321452047633
+6.1354353910615298652036015359674496818240702875993786226123768
+-4.3610283509290941064813833925233087567813742189061551018894119
+-5.1992489641709797149234179741073564885284158140119665138433432
+3.4977465955109878343213879011360690617862195447365439749839208
+1.8968653905495357466378073965165759695376210675073349740008067
+-0.8397600989561851317094472277495759384671235430751745123798747
+-0.1646425986742880353193938944932133693903972954323509945743055
+2.1098290292077114744163133965104685821935823208549565167415186
+-0.8847509184380256830994668535541604085298574024735849287486972
+-1.6852037868027264533288869390668907004675205352468047937693691
+0.2631272069384447777076849438223406906654148318257813179234126
+-0.0410424333934764326808252406902812835646795525945203218839453
+0.2832071504633730251212485756173304216726411340099327867284049
+1.8662255828183740879281298115499386638400757671241616706157607
+0.1235967082405691449580679778789872717449254834282799321230419
+-3.0038471204041904214922882069443853943933815351395210774637799
+3.155619047587213971988776623410510611844976135891354017207476
+1.3905944746377766603460311545347610039645505643720937516370608
+-3.1223291940889288161989161028741746504991336047282309349724906
+-0.320525380789017247777204717189441464069357524445488272615773
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfct_adjoint_3d_10_10_10_10.txt b/tests/data/nfct_adjoint_3d_10_10_10_10.txt
new file mode 100644
index 0000000..8201fb3
--- /dev/null
+++ b/tests/data/nfct_adjoint_3d_10_10_10_10.txt
@@ -0,0 +1,1051 @@
+3
+
+10
+10
+10
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3156638964725781243541272856934334091751310165287943458804827568
+
+-0.417664216811886478044705875101818619060052496554257511451213371
+-0.518953098926583846810671845470797750935624949754398579440765194
+-0.36269122573667013970103984149879642502572871996332207069414455
+-0.08797825025533522258514152837934422125030228974904378634603927
+-1.69811059122027059291715094104276639664828571118443570612369998
+-2.34103930221884104568347266659881132830557771378060334783899059
+0.86730722007532315483852186709875959872382872815240194500950444
+1.06118025985564959445449966325140832785869895482093241514836432
+-1.55980627722350418419509072845367049062978434542812323784024446
+-0.29978329557705474112138588510661096029867173515953078518276807
+0.490791010353483111638365440715683007950789149952967491593112046
+1.714830544981027235006510944332039134642572774091347605199216984
+1.435032488007549709450492384616250425461086014411419130903460443
+-0.80835253750830824602045041075436450022153221304444654208567467
+-1.16180120126608439178073353634872556158310732897359332120443629
+-0.43385945744923597245455458643607265897488504466284123595440464
+1.09978247230310980578561931400767468440621312576468641510677794
+2.24737356638546753288972727032623986149413059455483776037335911
+1.30573363280348086565376853463281899580387417093148830000568622
+-0.00949910325326444146203004736216073040349359226054246925977696
+-1.15617136839584284311218013573796049454566391102192891188937816
+0.55436464924077431030248721708760840479904180670424311756410643
+0.49644873707870640581559224686657449912416829260310240161891642
+-1.67602670735584693840652719634599067755176439698266472473119045
+-0.97212553655337340099992991132285147703092435110269837825752083
+-0.51148927105878096558314588165125882171612139699130558563256388
+-0.76159795852790486932775958332341188559154930642024540285557658
+0.62178454322976818846834398784695053975849294494798357867425447
+1.00644158747409704697498463403846044518989869164626062274374715
+-0.4796788797044214462747789001565139682408209017067268074319647
+1.30758792922898285048780802960966754574138415805995205315647635
+0.69812330966785623392341313643544803438273978086913467803833795
+-0.40619134437447220492749203941850160044998561924658243061182272
+-0.33249815916497566245337501682678560425809266376389193440315918
+-0.37950652608796280685263859714484741727335579953589898581699151
+-0.90067332272158694914510718361967694323441114890628092962856836
+0.53798916552050238008738353861210876010279942183142180038909443
+1.09013293308164901605342085862873266619020746604824934464645881
+0.23676422949513716560708497648149674897443067719951615203368538
+0.72660792266015444924268169358810579958465915935422775616260502
+1.93399320973523597757979613881571659216142244876858485593134222
+1.03701042306167364667224201375779835052480558256997045264430436
+-0.62786252499997686647175805796530094870165540776388220822125024
+-0.75991296369918512693463668563177919430990316005096774542856047
+-0.42188866820848707539766580864750933395811296944507144031665577
+-0.63565854237522401979228067707144224743783139579506059366833232
+0.54414708625473642209977843649451203520222290176055736760426789
+1.07713281083573358622880249631583656792780297816866668680053113
+0.7550389871346146614919828352001978571010615657771653366264487
+1.15636033241822164975395598039016578882262375470854560964043776
+-0.49576666253513418383407576440208541694352207122076567986424478
+0.27546617311049392769329028246597048288682183836849327352197329
+-0.52947387190811031540484917862408536756401304847941541507017408
+-1.58911846703919250439169683286893543358740490149179959923230898
+0.20079657129346516577633881843871849074828192181737657401783807
+0.1422308484851940739347727264368188565012726406804555608068676
+-1.54620162949399362543653050989691280205435664734700300387517365
+-0.65787254567717422114865306470286355343832763411204619410732421
+0.97597659840661461921539000086335748882565514678599018010376737
+0.51190689844890393495220054993296596787402397805624646585779382
+1.97819375101640478546221734856466617411328921613560129970983756
+1.76142888120777593303899403345398296140157113951805648647173143
+-0.07251386133351268963372857801468508856390555941778308862650797
+-1.16349807281898779030494158370970820630379587076340780674371805
+0.35095612311585366243219186427347173909775863158420295488532974
+0.66201267699405217263853329369089379318642256959947340247616789
+0.03399602618554648111530300469259008546442280675488137082853224
+0.83622396189578338027390812607869590684414295995040604834522983
+1.98177242725167093702304560932887468317723443580253641116506466
+1.30532092446299307947645439675161462586678073085251684146635791
+1.20752238780180004059913046659153441671040089341943615976978244
+-0.51488165559273478860800874757258855746285946099308199530674476
+-2.03037177528112782125299564362635936574356623381951601580877879
+-0.44097233302416260915604401137007753903593053852544722712478502
+-0.10322530190851250447165130228072722271052058548341351284210074
+-1.25255511918022249244461054619179913257643890954885766153424813
+-0.34103501855209879244250075034123007283615933658601000635359421
+-0.4018176260937333757299496199286513286120035908057451185135485
+-0.67573035418432070603581217857866041966472184906761486871313813
+1.06303204970403957693153210301926730291807201370570724308644533
+1.20144613246935522838094941649575449951828434704516377598315762
+1.08688738188043938798791684141007335145852133807292709143967035
+0.14250054423184587195054989014685670012741992580789619961684563
+-0.18279068407425185739046313897276895634899070368504142478237708
+0.56680475101902121455847653355774299309166745026013703164585196
+0.3059446781240531536767438719322166274996609358481284151941842
+0.09706791552256675451082787002338679701146649129654732032139552
+0.61295801275414391512213691143187088291879765555100353766735651
+1.12323460821096375412600823188662899889779360278571574923047756
+0.96892403112132567498667331705678799083598249453053480686857378
+-0.88100210678547376562592164800316451856413151163364952700129045
+0.49246437553301106126256972029582843160994421058333962646824202
+0.31607819560316888656031647066592126342903065884543492224824956
+-1.64030141318476020682306383144106226663709557326950282298237267
+-0.79664540367982430416289076874278671487056444286459701404906459
+0.00862979410099972107955416879665580746761632229143318374303853
+-0.62504031041775934097423401835620382017792491701307299942118584
+0.15337455548871128204216413731321781007917936776477754210802332
+1.02210609058629237923011882342019974215915443427634098368293612
+-0.29919955853550064898624004221852194048923428867970510242920556
+-0.159420406423531532988261107860242410160375289911323942138552469
+1.023943606204053070607811157897536315487056297219336470905584109
+0.89326419417359024787352208853383553582194774871984095727035939
+-0.751683430414521598227991105675027349824349840670228871571796824
+0.27518517535805460257106444556033160504283957189089351141673374
+0.97761690130003932927357940219941328688146013286930198239719313
+-0.31247696880781988564128122057690727799379890523432853202968795
+0.32730621483104512095015422906704906951892489195040081124562464
+1.54270462315009921279088784327024435817278430417423087699915796
+-0.00625615121225449205206590602688930747373866354971615840924233
+-0.421607501675060009327621233437028907222612039523965478888478759
+-0.663818996417496654911509221497159091210992143109430322671249337
+-0.59231637636523495463874805241151530093008746700393089092505156
+0.182180865269205425568446189844290368336617564163311631290625488
+0.109015647938669848153524215920904556350963113147777345554444529
+-0.500402759412590882492448361468212814566058426816667632155673346
+-0.25048952927817453994299012838913615397695702682497934767713141
+-0.5165310830984656300385195205402184873545874714821656765187918
+-0.84593192525701219191388891128338423068711805993456076572658233
+0.00605551198413197359481207194588697583608970240182754751029792
+1.06474155791493283263637121775908699101201524430597880834719593
+0.121212579942935217278801061103639825758870084007493039161040728
+-0.2603217744072454299011458735085797719966569640555818843053107
+0.70356743458437485018520648759228262724472891170259364215624489
+-0.00547857209698322648953510034581269084881156322934164997019885
+-0.4727400924147961460828967752327340462214590581581866590472221
+1.04270663511384855371730627539334475882423209060508847764947716
+0.50742900221224804368037674357537712685153325768090307730376944
+-0.65437577120219806678492506097573043694327702210559074191516824
+0.55610735461629413206152826801333169216000135008122493752241867
+-0.7550352415135277102414833758349853750148435338157445297436683
+0.16316185973883651773817452208722544900615939971230457873664409
+0.37250070733718095162672712412127811259977598837566951180050448
+-0.54529854568542243928517431670940016107560342223192618365621723
+-0.06584716241865712887581564540509174005905243483113860042157574
+0.27613245230689831789624713610911680941959921080538687873179648
+-0.37147199603472543471510891756535123280278086241362707448316811
+-0.16000383234293560532116962023606028367071601881393000930626648
+0.3838235936202634163417313276438910052359201360636869039653301
+-0.16349591951600351897555487882172397794587824548018060066463778
+-0.91905085049610425780673601613332079751254919840027228592904478
+-0.10916631271410904955205663562839393583793125187713168650580604
+0.20961878850556464826276775199449307880814052620910637037091314
+-0.24081790463010865304537453983330863638160013188768539636970364
+0.32559985633978266909372028204202637518513657951563288416269965
+0.27105407535513376309006214259829352792006404764681643357675147
+-0.61771928865266841651997218750686326899692071490967214530897732
+-0.43305981402820161463856690396574336047184370363503018867667351
+0.09746972611828132015760859100009508850718658907531107064259944
+-0.22932494878261483577460121511270259932868038744621467578596497
+1.36109192025840431707468660429005532163314803432434928280751918
+0.35043084244502330734050222144679513019894752153104887568400428
+-0.32443455976946298530451048003329281060890425092139231559902908
+0.41420650046954010403269763354358792037693242049372037912308299
+-0.07571055319062162833292838187085263702269272752794276716734448
+-0.40628277003604043822063629425207025111726892750648786765472918
+0.98788153788438293248305705436415463115598084356708248606207615
+0.71884107352124925648175639882100151881667404630537000425217447
+-0.20961944361397544353626901663752876006689985520146289687982468
+0.51888461303303749619644389004163495031555870040114307721435096
+-0.52768778285420936110289257330695268779226986330752157629692323
+-0.74039515462325211194506772066818505307573508902564746055757938
+-0.55549157533454324252721294711018935490452741912403657922833785
+0.28171722167956194261163975493359190340698118106966089292353976
+0.10263506798976867420547779588293959881258490714785718217042894
+-0.58547058702293880813000889876205397194006253404014559125686403
+-0.27529121885917410599514063747720479825814190804871973845138574
+-0.51362611952165511430171705856658075256699059782535830932341579
+-0.91465849623797082268847144824153772334340077936155494511743858
+-0.01183979186821959122121401145870044405178282125536986116617349
+-0.45804138363042045478128306991550317435945032565314853584241566
+0.9060356151795734864872582453855117880527692557788334242245954
+1.0853846205400446898298269975787237838550719053194770948801843
+-0.56378321643400115803804279106898772728212753915993109048193204
+0.21575954488169712003632463867160861341550395979808256315469171
+0.92317120234485945714570985092679480259380204009664540190753538
+-0.17789336849751446980893702298124252104357286512446706772180252
+0.31156460585109759623390648107057571032319116947094219050876875
+1.18265177609943867883382801325458075518232925353113414079174143
+-0.1204779485470707977625216324045403548771491259942985011111128
+-0.3983964035581958316370905760771357715743525721111968505131183
+-0.35333331767113760322411073767068516608549001268271068619029653
+-0.34963153968985810904561563375192075443875200134539503373979414
+-0.28389786005290271359610220246577668096462576995664157882820993
+-0.33749330440198704036963179829816986390195655747435892286470136
+-0.3944217829699421242274941768991029359573306527762480503264583
+-0.04834139554486351412685802701733803700826145257148318897124517
+-0.21965852360293761840424349981709456691875829756591478947917289
+-0.54350048402889702975178065960727385476483691951601299222179677
+-0.14230723548318759708956765677002945848826990999828322484790433
+0.8824657757121053332556426708362759734291691655613528241556853
+-0.18422038146692609480898550954990257363580531873414796200689142
+-0.40330157895433870460517965473159946328285422012577050818580794
+1.09399372435126841985747441867426901742629286884499132246830252
+0.41659294598245027938191138023428858620069306083538161525342596
+-0.532337822807241624494114254460633822474233500800339495752729
+0.7414635780601175718896000660835718691838955996987202155499406
+0.25091312452078971774987334865542270262177608861191364112490428
+-0.92397357229361920097318057976627953801817460112296152400478629
+0.53442889738650920380004187682947909526928763578895144275962994
+0.94737510563070732091471432948876057183751652142691512833057233
+-1.03155821186486106496508163073754952003846827289358099585629479
+-1.22077640377580770621684161959471617613509064500767569215624308
+1.65351358116315929954866400075748196031465662288660848975353657
+1.59123524033131427612313483375031387806948896850632722985034327
+0.50801000766375057481074609210177241280360458175556857713673434
+0.06427510834169930357969287890099259857588580697690635237424377
+-1.42784623364571094950285868551041329983861354236247701526682162
+-1.42226704156168968931832760427918373292289949523619316741880863
+0.71696374321486429749961106570499397433039908862006200577215556
+-0.16952875608591400044923554903336838331931438926492145923995501
+-0.63275576273116651358469375402695837752304140367381135931102419
+-0.5906759615860727850443179470866211016454273104630864987515025
+0.2640929173698365069096141002151982936786983260883050166958102
+1.08443601009603765761382172739312797755840468920993396510084554
+1.08182495336622783598012453448898677362113715161130378747342753
+-0.78118212703495906492059744439843508771127488289878403519867284
+-1.53097870669104595169451365139635265096799407876852799432550494
+-0.12763915414959098700526826633229052149186601004065668478903233
+0.14748210115146100945070660049260751411030195966271315013640151
+-0.87973325291168866098944488379070382312525003355003511271238621
+-0.51866253179020851041573534488978344717439848427697383122534002
+0.08924633316921083160926042584835835072345892279212581367382025
+0.41228580805420112858203842389629135621390812148419072942297974
+1.33755597865283610261812005605127181908795860883983680020682225
+1.37863642611936339981530655440036964899608739522186210540416267
+-1.01717205053548995207493227360895521527031263686994682730008692
+-1.45098516184100500070614400013281734839051429989372701692482894
+0.12170173327285946349998419402274767994946674867719391219660799
+-0.25343920239529613103236843394612402585994581436248956063287983
+-0.09229514567057579851627902347539884922863753168812758304168
+-0.957152664114879775021699678162393578597618753801441939804331481
+-0.39726162162132636644577819467344940264860498370603468314694689
+1.28575086236290930355106391400198369229656224002685480470860897
+0.66793610090098816857451981702017131294410291518011712544728474
+0.15947021908961942569461902261160841948659856967730465307486536
+0.25071428965566586955607110251259845732378532332230907968554569
+-0.77879032286565515358620036799366707419920104211072993702587665
+-1.26215959278552220336450998318336287483156716308581474435944202
+-0.22764973772923977563905319260997891078445853145067147720761892
+-0.54534647312725916009002685787906293291376266653589548883056228
+-0.84929676473465301452655388014401698664064369260988124642720691
+0.16055587064491860597000226334555725386751119901733222334671694
+1.17187128053888707759913508808756622824672871739770441244354438
+-0.01069076614079271741054021692793698846012217564353285583938517
+-0.09275501640742164083696587213563888117649220831469867124837654
+0.65457011190750668045370918006256355862989005863997148193402033
+-0.32410247805918972406361424179742637631351526385134756577822889
+-1.29753162913513691599475945143883761833327872704899893829419364
+-0.57025955216422906317088987111531919297130501613116954277193206
+-2.09143725098703340809808473905416516433855122304311699372653135
+-0.62716692846313985851106843896879400792103815589724163433870075
+1.31556370573893760178957960024037727190850869717718360790843467
+0.86141611887539426352603018086389964059926318700465109245436081
+0.20323489437318715596445950452695069088820296673277877813716711
+0.56533597785683793314725041407900324529176291825743666114983378
+-0.05843618419616599288921517999075856698290225202055375248747274
+-0.43684266802449167841540747462113787267329783225829373641253168
+-0.65658914362308916739802125338378435691025281760204674847846507
+-1.25496456212060307452999967443869795603759417876375599191698966
+-1.56424642489412166743926760320007569778599518682605715338970937
+-0.54652780538252946040935277345265556053103618935028238660955576
+0.94458782263502391042474977364021842048629105254135536095197045
+0.423440417442809676483760936243614781042688819937347690955333
+-0.51569309393995783832434491788050488072965331351020851072412765
+0.11571290348905085656097718852522608108723673647902919022335868
+0.35294467643143138004927799022606920615692958295789129459489895
+-0.04592929574626653178551862550092225455159239079700511520501362
+-0.69232730415497827280607287234845331030434996766808242567893191
+-1.27318727149663630293119285690037842990406806185395038338271773
+-0.24502893015718857120830841390790256430783731127126560908905817
+-0.82715426919732527532901522608884332061895615600220043931250197
+0.20732783023278340983857029247048673865047148987113868510410127
+1.66031368414646234864964586078298614658378315278108162091456658
+0.03304178051529442593910123034085186431655948207650049274045894
+-0.48067574213565221456178571637601391281316725418342872375830865
+1.01350428420696094272189796164106342211072266500930333885383733
+0.12821430449819102601928145064467803169171720158898595510593174
+-1.62961107360673620987785560305810773758239316344389985699408657
+-0.57375187691191320600986467998628540579781502228073032833196548
+-0.89433773236070675228685726766714776788392609825936507133207135
+-0.53328985979518079500440053238850176401604349871855428624792138
+0.32482970103509568130293821350072626634939332360809308835875383
+0.45982047895528234140966158388201932495994893421337123356284366
+0.06739732177119685814472116564912645199313479623665786023552816
+0.11820264909505984865983395277081398126996473946434056750397736
+-0.12628838102636674799196306162261178882924646228198133256052979
+-0.2873684646209317243276332414656003990813694376082075240174374
+-0.42814306581120115265708356339406447933695168294185591155306339
+-0.68045458493187868393470672448786791148866550770650460151301983
+-0.92570800411892483163207001500464287861753205852891194909491393
+0.07748218315721362984310257164359272009136761544978128570164003
+0.59362991570389744328568086092750334560358547142237830274888198
+-0.38625356525760884237679619785582395137383262345878799374416801
+0.35632965900719995935641561235200063360250551963690430452301057
+1.03011385572376405490608819053122098296005672576987629439102781
+-0.70027990438484001139088303748338742400304060702020731294866835
+-0.53385608822430408802197969811164930348541705469880721417108684
+0.64411610561133686002841836027779415181314247326852943469118736
+-0.51366197757795301071976610604603174343907667067953664375664574
+-1.27838224610103337721780041820038823874404498272198179766633791
+-0.39565222494945567628003858636736199803383384261568393296643121
+0.08974015181874415365214769985690833870773133007987772172801124
+-1.06225771546635742125324696551775838392245201049912766186735675
+-0.60128506838814853656343969588206908005245350706475959611456468
+0.22596825926584058098643357504572741055019367501587419661695985
+-1.20057364644515829631553592520313250246352184644829118438732962
+-0.59602922504159037740478992648925991013937060441496154552236251
+0.639540785131239452975126376646378675601421909502691589425274
+-0.81588980065693040984579242555262702476514171537076116433726087
+0.90947510140917375378832528967047468251321573518846601170994627
+0.44090103777796650940399508898267922229227201804729064665873568
+0.41563546795128193656801465181077027323955605839013875433104264
+0.541539116044076199128044150519241443584157108149820791053081
+0.14191783730837771821054194170097569439986555356586549404924088
+0.3241047283249349997307302984402244022309369364189151653008282
+0.48092571656075300794761577444136521773644651817144566061290466
+0.63548309085081326660675897370129294959994028654743228498741462
+0.40319981125531791075352807715922783150712852916768057912822135
+-0.00586927154186093673792724992660157128081902318336623497014569
+0.2650651661042427602300696560506952964351050527392727360730709
+-0.52993829247907933129617454355176050095939355934409121748605922
+-0.53850974444084963362004840020840525072942462152487319633170115
+0.03360663241753752417709428109691608724165607569061193091935316
+-0.63408567737655965227002315598287675873521129065116669543411687
+-0.51760969578945063870151986506277212860741584612509105478553398
+0.11677574627405087169999768265820424313089861223611683200542706
+-0.04344739514199663431580736595022019093235451767439737773021025
+-0.5207483663002424691610156981566127840152483002540247801205468
+-0.24893921809094731905904665813987499166371407470448085741781957
+-0.23025238229361951258813862108733969737665665526292243413061095
+0.18422840558681171734807264337234846149305275932371097260948011
+0.49107575206677421437090494699935492434946407299304258968819853
+-0.23377839330532306093536463417370399834825696283485596533652052
+-0.09545821785868361298978742694205900521739349389435440962443219
+0.52358752424912439313104117720177078287138342488751416232553386
+-0.36479812267049698052626452492481061083814068449011587511350408
+-0.01625497120510911786760301467300205404034425986010753738626604
+0.71133749657645198296841315884310330525450325961542276206355814
+-0.29268033666492002750981471652205239230344383629729125302463268
+0.12558158301768554857927286330123857663439443723734202582970328
+0.25590443768334785629318263034921698099091677232590305027166607
+0.32782414081463877417426783255500992688888291285183418403410721
+-0.17974791008762642600115219738915752926098023723544988220559612
+0.00707778105131824845117767256820721619815736479551801737088135
+0.48424931102787603837339667714569315158465017787177446439943793
+-0.29281802226321516639643038095334130841890581959470255018335136
+0.12507672232683775853753755334880008107377631183073846387509041
+0.74059961115190429790677279732342259767722837965321078584527757
+-0.25609166376308218241968771910597077682174156953848861524169148
+0.31872537787554453593769077916910122894931556395443525750355879
+-0.56714726210913407396655772679140141274928941622328821537125346
+-0.72816731163520700901036049226492989185229252052497321184718055
+-0.06745924242026422694937755993656533906410724721792772613359568
+-0.46045812132365001228274948850849993643256616313683016927435386
+-0.38348548398740272297389783298498793063399760246201042139413881
+-0.1104827722411611296626734776549171416769487584200222623439738
+-0.29964323529780351173302737458349477666953933492159440714496159
+-0.38099706774738407623549149339959809600830236766739804201036389
+-0.12662120942094098786474407914666994117717107575571812949352271
+1.11477120442462045236254259036771114315659847759076301819379619
+0.4161710751334111757553804489431523772008333530392244406864204
+0.2528276669768844268088449660023914580174805114446136457993243
+0.6486786527076894443689100225436298066889698744774035351029065
+0.30681234509413569527455810820610294631196242732509624665361987
+0.34329540429524701677384362226492491435847290967494498467241202
+0.44626789022044523515107978208641397347852453479802579701246319
+0.48684306036909121462101656062196646382990984579311638829394795
+0.43311244984839440675869043986741918219910069611950304170482278
+0.26941987864220682177810157155972413805741172983115671319971082
+-1.07336663489067662320358394723438684790773074018025474123605323
+-0.43279765552910716090557401289709324634640909110671302122041633
+-0.07156803336126350625155535131756005834225069739313752924536124
+-0.97061278533348340123855172010788171853074152454935429367602344
+-0.56762200924254801638235403165738211081664690213275894486324709
+0.18434121136254900118874947002951866283794920886491842629081161
+-1.06505779981635935365480038837642885984265312914041492176379036
+-0.68769428938408857584694088931349077175845296175584002051692362
+0.48389350073059808120717828667183657748035498804366097401806999
+-0.60826711318686011720465736986561853575747326474210975683524102
+0.78115101886777354760096173166199990733020572195007309648343903
+0.40014640638632705645643691637698497127052625623205069233779398
+0.40808274653999823919954515553506551642347932183697006805524088
+0.47911278934171529915415044350397419907823846320432936568224961
+0.17628496550181237260996168447371785165250952684025304178954469
+0.5012536347209979108810899276467169523776895571113015429075033
+0.46992386773260729935898725043833401842602802869867776006619496
+0.31343903287190510374395361104678680555068717922490978776195821
+0.36144758510358326386849113183750647495804565682666894713724878
+0.14635355429327816959998237837608050463567511602922005154297813
+0.62029087471526734517091865906469165275814612195272151230336565
+-0.5731510785128702099079374704457671455607015049797894563180333
+-0.74931808331606596530340861051322247803015770731964495566773695
+0.30496372506042563101237633377925434568130025661652473726150849
+-0.5140438530061006604251629219880318856651406202180007671300881
+-0.6931140909109347276573260009845549870415077864099547637067905
+0.27986383671798475287333103678877726258004444455900138109387991
+0.00028042513890278834474078156257339510797580818697592840825291
+-0.62136768903346284897416427848260964609013628222402614313890347
+-0.02212479398384002789350319578194572038747585155329294060106971
+1.50660121629174077691694645367048413947966614123382790801800737
+1.24934779577555365688733730571736755059683648619965467376662951
+0.95572945940586032387562200510993144534184491948566832867689003
+0.12753783867364723432571672752432657259515517164345770882734608
+-1.43092709940223324217827343552168629066406086501845046060176159
+-0.92748111595748340955194427798663934587025764420412657627844222
+1.81686270945255484329950866565523230338939418728031657598707296
+2.45404925269335185668355501256970166341426916711835974152939335
+0.55876150969663970370424379056254953695671123580446021730626677
+-0.03349229776747823919924858889417293977732368168360100188260854
+-0.8885749038404429417125944058040553534955462865229240972386726
+-0.07533217965071231521955970672127645245088677166247084238155086
+0.33631041001387886027252842071322131591700616405007623613086172
+-0.97414022736178292883693850621257837633821733435193743222617287
+-1.76548518329570233884497698253291540079125728190932922671654994
+-1.11872546440328992305902075607452674555215900110501617896682375
+-0.05933255241352232935630959722324180348490462667459340443314762
+0.66070341523778953918145883099474428777562898673170433393377181
+0.18231597835493997102486642710389448440706897692266432051389014
+-0.63581556363183209633810630028193511958822708270699993965768597
+0.57666552923574647993570727747370539788880589929855836540534916
+1.13899702109202917416084167164790365440266161787745337456397899
+0.91963662288935489173477831182007701117836830485603009849541444
+-0.6196791587553094667375851601314157778064340548396482183574578
+-0.92439386894262947266719099829962313553895920701431092896779729
+-0.21978989528511476551728007187786973719400177339890822227206636
+0.42576920441373600664317011128217932899365707676440029974717079
+1.44817110801185512416160127642117475494834078989535841829812672
+1.37668680783175613275798579574225436431063024311801832940157539
+0.01996862154908032753419472446586629093448105457840321170351626
+1.10710788799876768816758550543049061063608313862964411075308703
+0.4880188331538994353974220831763380602700071592066019612050715
+-0.39379702195572360754661057526697479229541699956425831250852379
+-0.74919373758699453334461812534037012262435641516737712893166871
+-0.9780576518775966082174654723253023496962018294431879865826127
+-0.7265721811500513373636225019372632728178083392806275267298077
+0.26778043596449369497244895385948976175504623268762332365496741
+0.85383349961079821955630476467997265353513623783225680922511532
+0.58465826207715090152517831224860819161368424511562967106728857
+0.30046703423393691284585053208875678198518070618513403098708078
+0.99314879308698430316024901906929362544133720121741157120876822
+0.28777232188509054132863752703489038786991858012678729524256614
+-0.68465354680530774502235920295459505334411960308677457904266175
+-0.73116974232412585631903488380701207160150201946624326354075006
+-0.40314355976718368376390964151828014621298543956942270844669089
+-0.33434142935988462891634960949902949693710291167978185585000065
+-0.28406800225229416171832472095343664373788626294577785037320279
+0.08520560515809940022812806350612328675528153504776413574675209
+0.62461163758740802165978594485036016844783030170215413009921626
+0.68726044748605881706809479119064689887304976758378667838212642
+1.86636729525513177227168820318083156337645556018107803574626257
+1.28096940303891117400474874708723571726176412757061200709235406
+-0.20440429440555240297295096252728784548043992452854106379987399
+-0.89665015309203490883412883439154550274279191096391408585038634
+0.07240036928406921818097206043031957469386569901950740099305934
+0.39491866265536876302773016026298287753157458747186940966439015
+-0.21576208695274722667447471326538062871669123417741091768089187
+0.69524230325914325756913507786529584643098911889512733354918338
+1.89881538337384559613328902009835405721238180197978526792441135
+1.03530630355496686419799433945548860875599897305986958109081503
+0.41384086994731809038023358759242002227885331169037498309817959
+-0.10784303063521659318942213366435364472869689814024983192904092
+-1.19408805191993806262234913987394052783483087210642523199164105
+-1.3285080464726324213841916272030212649018494950380290615105541
+-0.18508993665990973794419672655432207697684978469316523246477839
+-0.07107477581690866823205319395789302234281640303875301302250775
+-1.21878540632389943610350886650081584091006869908272635051277224
+-0.81705124673558004105387998656732537238747950826478182926901786
+0.72665399773023370706707334305957827167574753793466150910368497
+0.6360765403898742956606000800655407509530551957465040718926068
+2.58005243915836722956708595078095336769239655779235279148657793
+1.09781941078495636299411276510410953296595249759070658089228527
+-0.48596971873795568349533039584639257143464436321804095433830828
+-0.02367817485297092179268136573237216442536812409400081414112124
+0.3543826914406191462463316454505750417057120315384377478878512
+0.22659059617811382136998321782054116542443885582887465245286778
+0.54434999171282935952286642418415718438331720080745599234633215
+0.76389754831179097378261597607260802201218624832285187176904095
+1.05208016335695108578304712099244714317776939075325312903881962
+1.27542043458985231425264648906977244088445601093481133323324513
+0.24465724258575211457525788403503238977222084435119286380543894
+-0.17438125369550422229562708381688002689240068431597170770250839
+-0.84970593331718565271785997689268037059174159630103010406490274
+-0.94493376731104907471410217862826982929420925748924239387420027
+-0.56941698503685212790972307360238616056860772657364781378452419
+-0.50147056491940480733899372336423510919341031787964207094500098
+-0.68705330032840331107333797507198374404220004152851620622013467
+-0.26019434518094673297837482653220380884076428186718157621668646
+0.42335807844081256755763062702488312816059947901986074986267395
+0.2757141840724585107542250870904273715629188470983550653390675
+0.02132311527423015666935132462887722694980478226008289509129849
+0.59583205084921093244900117809524283227641000447948867721995278
+0.70281401264316163037305581861848334904391279929062142963264044
+-0.16667793328239050101803491174666755050113592155560935043021263
+-0.0140463191431985634790322014106775526073402539331821031854767
+0.41618713415218224993028048538196938948965184369096901591245151
+-0.03016925707030389672907189140816941278591865643479820903238287
+0.28499934694412150128765501202820787278717564314415550879596055
+0.86046816832453167072129503323149240559827795706403180698098258
+0.15342781647789567857858181497465540503518954896837692313117169
+-1.07218050765677421369901047775470784636876934999412383446124554
+-0.52655369479161122766179380264638345557980539576413818603617346
+-0.1150212823742459753294493519469299093586693530945656920537023
+0.18385268467649065962675419707887280239182730800893442927275593
+0.57962072570617652709427040248661168255310609915457517075019434
+0.07256618441161234543307468959180484668638713855332205925936225
+-0.5834908087289006715116891383782066325711683041014536442470325
+-1.02122678211408729847489818673930641939543883723908826035947941
+-0.49890781793320807592742563050187431241172216364452709877520279
+0.29372845457311105942231142784242990558644234176472090372609871
+0.69751502145903915386162521367584593271834746088227152732870448
+0.38122797290253884955293132868992126728636312262277029722981197
+-0.16099513975856963993201240603129668966296894181714595056383038
+0.07202101882853786908756112437504651201783245070736413592519945
+0.15603364876969229704436588594752291974387792567201310774914267
+-0.10882768019339402665038932738922032698898759778576202692026199
+0.55072540680481334503181434373833294361477458910428212495387351
+0.3722431547013100820995385137832210819034061953246656660384826
+-0.01488192800464399051343144441561532744121486496769138272019976
+0.43735511852981138055371015465054235194545286352696329776567049
+-0.25769072987723182305379247382291647623671485224655626902005908
+-0.30367625529885960955017790815405204350781490038742979330862721
+-0.34633312974545352265642566990042543251059881955447493367637857
+0.17648229252152136465029879398760417955891256377338354554346889
+0.29534878278219635139095215752770890423432029407555347956190374
+-0.16733498697337696386705462219391780990121785829960917566861318
+0.04876748752093406133544749505865369706067048672569262486046311
+-0.44971640690168096715087703292482788864108386238519630129065162
+-0.66935183595589844022286612804676859749376166359556200695896078
+0.23179947342297562181942067477073560998365289337105738328044733
+-0.37745107232217935193218622380819584842031574855335142735886102
+-0.04021248255257812031367576497531049823932811884999069994137335
+0.0950419392466761413390390278466651475930865288385695055172304
+0.21870426746739019369511393317781521183485178417554227745518367
+0.37038254043858446936321366037720384376542916889791098935983939
+-0.00069521855842817309614620622696343651802514165879440443094926
+-0.00894899796300079923102107004174153951540505170566622204850378
+-0.23826896831474383131303925535095646078617241655925966292794367
+-0.2090517317152221150091173136051392009832073127218716057883887
+0.27913933991776488847489146785457334631971711828196841009929968
+0.09222972766872133556497080522154465700350200249619974124229072
+0.21344069587826396156107648908373750107581018001117902579740534
+0.02867580784638468586529237501202026073067479888979488062067855
+-0.03214487793259259982480990612118137619444307944113810281951258
+-0.03741312043321994725437205992731502243704095481427973037869568
+-0.23708356222099894521700370902135883301528085434167764192081862
+0.34357810985071069875048419593668392484934799363771838332625005
+0.32792544473682337357399548106708553057141632804536435361352463
+-0.06626743481604972817767521198851739583209182246482134774275072
+0.15187657260051078527216747241309717921617677774388622243504462
+-0.84058386992769151989175104986463068757097308407530808952998353
+-0.44013250716663724508435231077539188285689985979006765451421253
+-0.02988857924955195801386806988132870715414403110619276402569818
+0.30368842981646025270537667202731099501357227713210042878327297
+0.3156818334969913248501024567615263809975370094973311755397477
+-0.10144540992525216590789092730485650280011547783138991020406145
+-0.02427235346459618183124014720750301032832034799146834760599162
+-0.57498170748750459453950811087563175116808211584162919440826687
+-0.88260699948727539375260151103928184036534831466704871592533227
+-0.00409227348713364328441654752420862539716948784280796481285493
+0.44029644225892738912542941577708783150129768935388690131949789
+0.4349257371712996350678086811220487523798937144008779770225266
+0.14020040563491918360839265623305612399055660746616778295565017
+0.05731854000360989734285564492433299563103420637284279672290977
+-0.09299896114357970754972290626151970503799275841836089579111974
+-0.26408965448441018194745696305268336788236380889780033393830347
+0.64969516835141630779879049851523745375394275959263150033822062
+0.6987043254130996318821232731550292643336112814017315669843095
+-0.00505335256062535267156052680511238179887327161696120849766366
+0.16243864482502555841524221792412100127811120152115169300639369
+-1.08393906585719369944666669857188598407156059847004220908826646
+-0.37338650646365478407213770843929897229075625069318924475924025
+0.06777500580275501430435577062453259953313474947941328925053155
+0.01107557749782670542982565608861019021646051763714401759724022
+0.22338641786728778176209490795102381044698797832880750567377285
+-0.14898529852210651054087891157536967556948633021955168488077579
+-0.4101061942531128457166686048642048156371744727360861472947541
+-0.48858067524133722930496580339620515578442415552158525462914146
+-0.42695362785445304167816741230911977294964776616608691041435969
+-0.06881574717332861539531591148670933808907127328319026583161998
+0.02514193910442663168052399240778118843253824777764783239453072
+0.2913991426548501074048467696195928585684708422080269371005439
+0.19755091671156613015237077441754784173107999401637635984978504
+0.09116030252612686146972075066514865473872328311975671532862539
+0.28603869179663011188356769592803988557229876113746072648204399
+0.09090718439207337360634794786004592550150472837831239199098819
+0.29235274383125683192025972453092217714542700781031016588859865
+0.22067118963273687540416742449990668565399641503250177051754252
+-0.11346231923043692613505870682312044295802362013617502260575656
+0.10876304381437578427503945037419213787383912130842709018810749
+0.14302181523525196107669777075314793533701108053387624379021997
+0.03782073004369940005530390094849876000950967791383176142850276
+-0.33736121634969775247560423530048834900865996931594876456094179
+-0.2303018893508082056635032892366234321685311788536269302824666
+-0.11283603452779782717438613139041349367068737906050248101337413
+-0.39623848463904211723761980717061618223755649398092092575853135
+0.19510952740009897828690724180065466970906062625688143989502548
+0.25379775812252091650630999090763168188304198014602569314712853
+-0.3165814743255395886068928608908941046469257118041407919777645
+0.0188834168956575956107046701359984727139290850779246777359721
+0.04669095282407314962539863528516791749532793339295861327437711
+-0.39305643256872818059511969057603061891804596331226461895819229
+-1.2430180452958219956478496413853508019980960564457617042492114
+-0.43879465408923669002925755431438238418314306191566944805110854
+1.1149570729919835690669240405956828158246202768591207421945665
+0.50464242236181118932958317018772117086326428357873208748333006
+-0.74587290473938812259359337123622743797288442168852151895787109
+-1.06740499286347677597573772532592580657007504559943275956426584
+-0.44356178221684468477361784758843053621427670281417537294254184
+0.16008699049131946528212615637025818804891920949552400135499249
+-0.53152499775968279903241621513004377786322535344767850641999125
+-0.40428416555275215859923463794380490498111272662033558439942425
+-0.24954243268721335427821089365246195640898240345479513948600972
+0.96473252760856112636920196001293268135747571088957673526058782
+2.29137962732234388090850764744090426132754631540914737240721611
+1.20505822714714413759789916560366930607406152191854634346816363
+-0.71654630935986412941456668844553953039144878261951828323897341
+-1.53157984876465885498487264874372914904001458934032026047300841
+-0.66469103564611481278749283681569133721487375515115531235772339
+0.59975572290990952369846208771075361027562587163854106708113486
+-0.61240978325947469037036982572112851077013141561818377452412066
+-0.61871197146467370585553531490030015705242122816851868086143178
+-0.57323223878099488628770790819618276733824024235870393717372583
+0.35343979927455713996539927621582323606542836466620075790793111
+1.03086458130182805991644765507243038097442961288283833924109735
+0.21512186195094254286152733871441410207350797282239514396142343
+-0.4251368525336655809124041155532532662573981554274704636992034
+-0.94440803495666311868991011158291305886205512363267945137451333
+-0.88477580576761810771241594907737495547604657480311670569685781
+0.13235762631302614887429638943040623636309431509044968055823533
+-0.8923347311444973681177880583563657754966798859861011053004669
+-0.33912601951143731407262966257556448390131830055615736647682908
+0.12830357450177889491503317637232740413242979905578471350633725
+0.4957903355214460191223922411980583415504433435481919900460238
+0.89522179528975347804029095784348019827858955189600926374268031
+0.43198022292490145670647259948361307030760136616484204260433906
+0.0331551956044720296669372050982916626905764402154506174832762
+-0.52755277796653106645212057620873429697100821055340749005040959
+-0.93895846889961732888152137688666647959576939566585644860827911
+-0.3277870388324378822156281969241595602106867600212991995389785
+-1.71375743763382640267461531940621589310868068362282674632977835
+-0.54686834742122770499502356666181871271104666170223524697395259
+0.68789699710901866624418214136323051096498156762918304274140889
+0.89642271397595837924460498361581276605002604350671153089863791
+0.907163525800996949998513886517786154991209183886855207243343
+0.42089890108330948510609429747575831940083733105924599523477331
+0.02876678056226705054463510950332278133108723480353526552606133
+-0.62633420575199509214115678454968075931714642438340600880368264
+-1.20118591634308922226978075237536607715570742642528909194636267
+-0.60778265076538446878162887675254132214869052493980342244516389
+-1.2093356332533730992781646283834996578222306012600773398760238
+-0.54053967501846776895271186013182337760906748461407848047796867
+0.31429864575182992380925879556667650055395231087675305455959886
+0.45691212008539936360113325241328125397695234498221484770329647
+-0.28492866270701212144034845873266870815697925109239500132989968
+-0.68753689510069080342326824273957067423277551511672142238137404
+0.4895619156876710188175474578582080330320950322544895055997672
+0.32299448976110028466819773373775810578716156148808870039940449
+-1.14542371393883115728825846528697721136464923324637792290060244
+-0.83158013856138546792570861626815832194972842422063670897589877
+-1.80108811795718325420535023806317197366318484326370958386342542
+-0.42823944653280447069281390931968252002015186140935397090979907
+1.22090769918315428801891595734137849864828470000549623212337684
+1.3381395741239578705361909631652305751428488997725637909951347
+0.72632812517708801122031094108143630971783137266520415455479314
+0.24313378971315339083447621611806933245354855355909167721942249
+0.47867239427585062771450908872662462847320575016264057992635831
+-0.17904251764579870484028527466659093598585052023673143834985706
+-1.30785986021904975407496153505723356643633977907491614171651978
+-0.70992936552557144268943014835176886593414301322224921752288461
+-1.44053882236628564514801796205252791009913667987674839287659259
+-0.4427031334247489916040288699928274962816943927717671386821122
+0.37509922315191510216671611278350704333817387012708819689790735
+-0.05959144368380052883531586061955712682939213939982975279006434
+-0.49437255846330539291695806087668503107182388082173691193098009
+-0.42441561378962575638048118896058538993194556141238001902139951
+0.37303143275877255378028152758481915030893193182048676188461677
+0.1645023471028260495543774182292110156541336121411706763583804
+-1.06107334845207419741108470202845992552245163798699003155219893
+-1.06403092355984070089339547997065167814273000564338910259921725
+-0.79492945947348213709676332097764359352771781916576931080891087
+-0.09179210697387112426451988949147390278826747387370173331277222
+0.669641040676517845838307360864540381215754149075109081075039
+0.81232253399717956356305639768271400101991619623089875884622845
+0.55010020527186749391695087067069282345266966327920482323469818
+0.11807767454024715849618368342152685861505806707666537744075523
+0.37843733197874707055859016719458345983420315209996185265895151
+0.05958660577622236509597690656880880737990585665865385125508831
+-0.68078266059385650725737487229948615241016522845246880682295769
+-0.21432923132742917846327140305719375274927230291068197453828775
+-0.82406251604181949586663567369387045038287836832418778850760751
+-0.49773632765541937158777252637423750190251672822733038272435005
+-0.15816412531327339662355356079624522192084493203554983966290119
+0.31175339098581215600650539123108888205563366455544695328331119
+0.62460349282383356492034678999090617640969909667449747356019656
+0.05531937365827739390404181311860687354085205148487387884256552
+-0.36851129148773654961029093977686944280876439319846565506289716
+-0.70577320579937954028737180649792902612004846232615258782832528
+-0.67462232633813448036230144724353170438169569717005699158260358
+0.03651770761492971389046333201576880572673759171048855769321686
+0.30146639392175585913551544597769586766036237542848358889154964
+0.45762699506937654477826480984467553281194651167633325379533247
+0.89635975256119761674136696036120736995713507759531336850932238
+0.95841111480229135456888914676822445850831520044071011857342588
+0.44894629814354547582069777003723678320224570590348835194490856
+0.25980742505090026027990908949153528398906079587932363998319296
+0.53740013404147478679246713145439765817226571168455106842560894
+0.54922785432273717883937805956243711131164019826533506130531299
+0.11884327290925306001049265948162057760707411724970858046754672
+0.32106036965927174773451194900594394334851948137418075115704403
+-0.36890897788477224383417377162065048942699001376472849379496867
+-0.21029789224252749405229862693167885377332983079611497303605172
+-0.37851266333614679538554497756113304229924747299389066886675161
+-1.03050542568093944141464461595019733524108486674977467073382262
+-1.06818603221145118670902816048793999842281733214639730247427115
+-0.6642630143264073242626288138729499092720305104416886777590246
+-0.29639666378408816330212275473268235244258863985115541558520358
+0.29132929372250263652793980536502101455176350064547104736563128
+0.01579311367319125897618740437911124683376368804497502591138058
+-0.65672024208822774195161558564735482853654123031282177395776545
+0.04846323688336870342806249233597383383056212807332067587282989
+0.64607027981908038805221920204508663599807111062708496180967461
+0.6841908029258978469493894419001839509846423634157384837236896
+-0.1908900683748204162927257004873828009873247713425043700446109
+0.2644512015777634698380921563574923688719309701604402627102472
+0.66253889037950368277960112641796046454904015459589048871394899
+-0.07387455246041544068758541800414065057300205744564303012584682
+0.38600051055638399626988773160112486256404984694740612028250643
+0.74179372022709021618693420571976128734940542142619372209367143
+-0.22173488429127168968108589656817694803819971749530840374962164
+0.11044058216085820247413934345479798769441024058292950256275398
+-0.07773550002794248569819759319049142650107622249632506231387304
+-0.1899427925515243273858939564409327876929916602293197152528678
+-0.09911891901829071746552174736868076159058614816750344006613938
+-0.14657127213264977819895869828409727468235493940965689165408781
+-0.27573156876840033123392921342554947873547087606868777843235582
+-0.2128260805235105440021166977283542410771287682238133502474623
+0.10482625238786715704015629829709717847485317802864005622766803
+0.10861297448489367790644282159280211966362646345308363027425797
+0.02953688640209177754670628708206888048126165794517775442519442
+0.48645901503271076699722623419072227492375113686142848793826537
+-0.00871342102662303472925880092023567802547393686364214080855316
+-0.4297638070574825074720065818582822262361311817910645865739906
+-0.30867334874660371409632695916064529727231475649496662167827497
+-0.43432768367804039073659573519915645198622685251955020237059245
+-0.46877874578265241994953546131209361496711486310754382938995129
+-0.00204810151094104804167692816034864894068670351327222170746929
+0.32102234286436298215835311584113592932918132864304352320891207
+0.07952101454180310837814136019131738880372681399097797991860182
+0.04748476188277488596660423486298629294086388037464644068118709
+0.02770951867646500022818130738745356493712398767327669040862874
+0.58354630976009977144718392095893586767482359393735028932456658
+0.65694859442957191943461397834605828519990991187127835106200977
+-0.05284217521951205636019723382280165567024541490097202093562808
+0.55203795521477213507117004619654258382584584815090601436906439
+0.95715008276920386016659178909104392856427088660444095916122887
+-0.14469774735664505184038997680697390586926063396716897575462264
+-0.04112800210869506033994949289943142243708463367757647646585705
+0.64089058079402699196733471436867629598759220714470341277654437
+0.06879161428397256404112074168382206848607608881494235287699467
+-0.02667869036617663723328605648917737287284457771213023900851921
+-0.27027133670195402947484708885823930349469287361428087868343334
+-0.76038869198280187738463208591877972081749068221082143540611411
+-1.04537834020287821115888652555679794722124789772979339733145942
+-0.79324107973854205006735263733458807119553565533916151256117704
+-0.51681406840633301123037814840556766603597445466806426044328322
+-0.51823313200293967767384807485004310870207864863599136796442313
+-0.08526100783002952274162592933876433475345493165934782337260569
+0.16346617796561196468504115950499451796831456299127470613327772
+-0.25150913362857960573699856432686005473940933938064091797838878
+1.01652958052351648527381616162656493896838363882776527911783778
+0.43840284332647260872211123439348754256330624286290100086454975
+0.2931895876591749689946591479250079798891711754129266564725184
+0.96050159600198522010577557725140418467204324999436980863753015
+0.7866252357952737286595419745026359735758790257726234499713023
+0.35394665722286193207746804543489954916167285365319878325376398
+0.37056338096894235552831418269600789924093944348491833426182308
+0.28300010186120328562856417185368841668187406691565373979276461
+0.33024219349496743650380826613532689038833178819353565812713171
+0.73955194425492854832597229121346985696814383460142849451425996
+-0.23831628740779601131750557968613550612492776911040154598094224
+-0.401150332205729882331309710495839209778547995399383157104384
+-0.64607931844367336222116534701939225427043450112778221964614239
+-0.75525832906637248769648034325633860838841354699730325105346076
+-0.54714594226832605901984754210333039707614720242415346643967289
+-0.32748622649612796942219040528669996588907015094917383555801979
+-0.51224763296779999887104785315632693651924387243275572561994919
+-0.35442383073045928540967549682776112770199796133193266696841303
+-0.02827825513703881725981235640577935469605804487080782362218911
+-0.2839714659269551503971934796861123747209458555432476410042734
+0.40111499774414671850812632516265842263332228320910511003465575
+0.55708671463905313048533191629550075741606989130068925198595399
+0.44246961085033558141387502352333591448459103335755922088950399
+-0.11024667037680177771570697190925196078131163383515941022179507
+0.00310465543439688842967385499146965233791283576406251649705931
+0.42741363625314155569780806768706441864700875892384594502039066
+0.23699208473438132439164735317540634174341209226772101338046564
+0.41879835170974365514528910561967480817715046922250217095504378
+0.60566189061340809072591453199029438909568225869378378934045438
+-0.04352134162918866170964173843310509351990507415377241887646216
+-0.35958877006096905887534732639555734933917447280083590570904408
+0.11455370406074434642531541512792310887484596043992195060259943
+0.35748721607328807068184553631726665717065626897073732913271324
+-1.30897509629889129428845157665928194109437036217153925129291173
+-2.24533185092521199674953268565961847697731853426830161006871616
+-0.84671685595823832430021349843253306206578014607568082110566852
+0.05697730745565380699015021175427892304789533085855388074526487
+0.92512361254812832633215584450659471114835358786399584728471726
+0.79886529616127977720973389942840543218684951587832824474395578
+-1.08953785461991428446798525643895234968078403798595363142198553
+0.91787089110694527404225948206478307109175775124630919037430481
+0.7479841047709466115881951584878136813185768348286949065464506
+1.01563263591214240769739032736549072412366732934381958531488103
+0.26227206762280493885280600771619248978492094705684669524068737
+-1.26936828607582838168650353419538253775294931224850218660950386
+-0.42027178175231175351331228428957195190246372650349476460809086
+1.061835476557193684036472786179579132630147627233848251637271
+1.43196725127395796175941282307398846588711222399032251685011853
+0.89015212524059159815798678371548511636533131754784976673068192
+-0.00261246541169789377533444257845167436200138782299777058192825
+0.84300665072935217973289320073147121459538045183485332286394896
+-0.15055838994542630679377166544048197882589649996182918284038997
+-0.24529252522292257107378311518945382223441359578126779030066379
+-0.11226259627361946869627250993323359747012785708489586046094848
+-1.81954491452428273001998263419933024824316690706805299234228802
+-1.37962248355430222113615587024535240228461213781138625547528209
+0.67152211257757548033855594855072729012469369523499141147742249
+0.87992366525108191223861990564447440676771269762805174322040561
+0.07529346998961735857966349480098428126875444056370091862125157
+0.08397758150483402556065046733233459038931905186616613163622861
+0.90604414884402874755423409586728639153436151197035493744557553
+0.66867858320442130955638322227564569856588542455739069554550159
+0.23565057729423290339125593626777432811187879209769724612932702
+-0.78263517218904870517193507695299538523457710262538908825424628
+-1.03313484351567866373969952878660826121513318737888718256889567
+0.04496575547827358665171939485172284633556137132367785067010378
+0.14407985038887586901161882068607696789483852456278489515050918
+0.64110758503521239773976007922736527566271646340241706521968941
+1.23102315956515879328885551501368604049273433406330425741945055
+0.06198042708104554119479480248075401347188578445930245114930035
+1.19879662732254977789436737674827991734913724052718744701771936
+0.73987323104898983027949868980538060937033752043967683420310444
+-0.08690674788493679492921801566465984827084605735246047722107231
+-0.89446531835306048969035036648597931409044467449479526800509286
+-0.42692185422190888815789230076807104319901701520526019772853684
+0.47885037643393733619293808609386945827228891305576320797796373
+-0.36118252614182545914224706547000402133737093217023551610908676
+0.18336782444335820994296103962932327444237386709193660307696482
+1.64035084779362293398742394178084358202073692544794690007147917
+0.46759385240273857861945918068410485823799414567829779781385492
+1.96524304689328150004722545267995610735090714791060370853697569
+-0.13287960516854488327919760458467520047091318546217493066511476
+-1.54564656350057896590684941650825158202070796684661778309966073
+-0.4472069181151393723532628693458639306685830678872534415551325
+-0.54724071461842303997589925626543633113380390455441308130263075
+-0.7393688624724961609207911495330874127863712384910742296496871
+-0.37705447094547067213496683603166846408907666790697744013401225
+-0.05661877956011197474061100411202895670823206212369746990412939
+0.67255712325892015150229168990661289332478902087519878872312907
+1.00732798007256353332308827596262263837319296109522925384453244
+2.20257350325838548633539284128120141182741623395890647194032027
+0.81960080445648629162179997199315967490693728285801981575412476
+-0.43371444414986087486146495679341129578903109661484782317352898
+-0.12148763852347268939916700270933087130766127773372073407874936
+0.35467024984616866068998836945212605052733783186637095789883068
+0.60813004644499143122431417152884778453939749980412893389379092
+-0.06803409470014751906284140626458053506323086014720519199182897
+0.129400961684901470210964552316332669487696327387800939347463
+1.43571526614193771479920631757918704636058111991053873604295266
+1.21141126894475935960787252646215494599450761703484818614167567
+0.4531480309052611218480297752010751446318465104688497424273768
+0.1095615772151637880812799251147251378223337558954392033933837
+-0.8153180233958006088422045830297322545898017063930546889126481
+-1.65333422171606080712754657282792308287908391722137061410522049
+-0.69145105113827235069260648536251952095518582690270926098574043
+0.24995573016428670218777173823385434374784375895664839196185504
+-1.03974717617170505081696390318194044438337673104767913567403501
+-0.4989252187187941623139116035792412835585300665323651517803257
+1.16381840312084347028830251745430580525585897701605114908549685
+0.05316945388873989135800046546526399423015221566223823947858544
+1.38623137731023126910546547452881884737657804126787463121837187
+0.60514104948763121405613299720041702309184604760267524099306684
+0.09209975071687640836073544002839095448971335344691716369622166
+0.17000986316080677058982325400492963450214173106438226135681894
+0.01673199470144363748317999482823857357658029817833387922689856
+0.29044342368488403291279596985578485470611300337337087021340457
+0.23656128332906668699612789778839615197130728525782579081174021
+0.40223401148146852324835565592183245796280999296870872993044764
+0.92233826006249791932566210834317418555030583378734997585681807
+0.69723375009500647409778715641308230001072657184153743574786735
+0.56611672856377506247861586371306918461902888345200242765593032
+-0.34123392387122698409150713236309776532761950484604949909975826
+-0.48254036811675875286685859405602918681544422555842575474814734
+0.05679366500618225312158997791116166542334024069269542650731236
+-0.79451356166758820827791879144356531929029609794784574455505054
+-0.74425517060233030749189005308079534546208004315236837112138836
+0.15938481538079390561697287087877456315266681303005324429651578
+0.16409469221361349129854415862181325974993890708174718507421194
+-0.10411572854323075719687354977361122641021124133678956207035424
+0.14362590039232732156286020344923512345925849805106851485118128
+0.88790564722290177572290138138817368618081885475703031258311224
+-0.44667993854585023892584788192829001334046644986060924715442193
+-0.55432064582016537087721125470871386663379580480364366604597339
+0.86271015930446737612686648807014382391136516830256387614937764
+-0.01337400127853920673640540008087354950755886025477320558111346
+-0.33299002555485212047900410924119662836688594532139547627885477
+0.53759355375100113238018846007539616881544361221770198745646646
+-0.22333743766753464012884382959936754488093826162985983981681952
+-0.57181367689750575495580895167139338894870764976467786644473059
+0.60937693451300528352412295946952294021371126234158680607498761
+-0.10389260030966475530228719727600083462087199140433883198654313
+-0.39083583201908429189017317640371437971279007288298481872219914
+-0.16040878715019368510826714561523247166417148274382037255295288
+0.36364661195799527778821887074802619682323065668151130905708536
+0.39726722230304132443507258627599384093138092729686065559794914
+0.41555410008078647316734806262842925208038117970001366152765051
+-0.23966582637831387681356182460020861500729411112791966358260657
+-0.69315693626791218667411462179626206762861279629732477013086878
+-0.20309906986833450011114678225369834147395901590406594298269345
+-0.00499335711734791519293112405787992989685317253474655480968883
+-0.32785811211418046936109586774855455157929702692078406925329217
+0.06604404701167475786007498868296179642871202583375726844143396
+0.18897482774739022483662371561627274020538631772280081632608422
+-0.41506022408789900334122501370886828177547775862888818194463121
+0.21642467210970619231364766595094564286472962679825241333025024
+0.87980793628205875043077442012057287976288405538755219066745881
+-0.50727381072845059072162356602648858253640511747806668650965912
+-0.51481337006331606891885909353425890175898431346230062091939766
+0.6230254951313356039224002707195268185057077593804976047403832
+-0.37575737616572034202439810759213498108786304887560592800751967
+0.41109606003784824929964140703322474178236877381284300820481928
+-0.48457643862906831155815137422192584940430479515120921731026469
+-0.34943822958174006160682846798283575974300110373891189825220653
+0.7932833815384939945506229979386986795850885532829155898686147
+0.10938906600198640991632009018909408696630730223723982799355419
+-0.23136459241408385962164029602976878699244805179172506355171567
+0.23610248989105027357883852303959864814712112853075524777092532
+-0.24077406317854614568279760531849897469145669302482013316432129
+-0.44571886995948586101737893843999663142870515436169733340282166
+0.2185725541397683023861771576047158850331033818706885716857396
+0.14807297357575704113499444204112960277127505785349641367503317
+-0.62533388277649914209852509936784728422745373053692544779385571
+-0.19249965002559446299063270849162040392855017460533510469411751
+1.04320283988381273132987169632797588368860844855455211414485305
+0.05486700205930159856483513610152395690098294897927093052869035
+-0.35952788398371267212183056009555651342868327824238647763380565
+0.42606542140225119799502911486585848927577453202928924614994093
+-0.20825392020651071176206017854195673804142280585465647576285944
+-0.87328072989334106422680113235865944543045131694266387568052614
+0.07355192756873745985296658301902286319044426428392120369561985
+-0.75681038105092064193281944459370058026011988044953301553687708
+0.18033799877663407255188433452772148045110848449540404783121022
+0.71500908671757809001226265316293092898706627308918761502778876
+-0.52375771646726645283747527822287246065990117843370623593490959
+-0.39186409119112892849631598441577732557565024512611895317453326
+0.67566614553938052959935215798617814358026150054840511173139276
+-0.05779163751263261939553185659236406285694368693149262525518363
+-0.07817202267595130828004592841724076177074815511909825163379798
+0.43159467679746711047696445476809367012198306600703345609605531
+-0.72998252368021263941658412288412630936691096243950876696321001
+-0.67598458079097788558780328613050824651023532097091996208193928
+-0.36285186640593790969660742688031228075877840749491496200982498
+0.35958450068194725224341181403075708521362048974290693266119093
+0.39832012319018627064865502104532855016301068542043350119186058
+0.0242975274500969784439436751401390597789014399706042514692804
+0.15738666782015721029793734390336444421842416749371925720958119
+-0.05165443445649622519750509297424367537275394437454518450613583
+-0.27642909342059757044280711248711032340434766118479926753682924
+-0.31622720635528155751949800980578954942715951717227937179691407
+-0.43307818749551917131538889107998048077264723690180483720746984
+0.57759491138833205865493136757755031820039053120843967218204854
+-0.42515211087783113506154210587553355054573093010870477349571025
+-0.29094340370681452454986952701132222521833278672767318021780909
+0.91896684656610539490990713331091807391929925236821546183556046
+-0.16268956073839002486293223355829554160783474615995072426266576
+-0.61630614631163787068364773306272163606945472281196317489526853
+0.58867876012195489920615544493370846018594113812533813882324691
+0.21234895704344873302511925232775914711741632655459650978042242
+-0.62815287322998979023713847118085445923839175613383360257638704
+0.17961705054060589970479363929347963458323011170405479677103025
+-0.18625563006735503254460542018908032266987983165856024327099668
+-0.12310324578946734953145780682591310308134927857630869823604099
+0.07662026094619663439025508638877799923076316540994996383425745
+0.01268727446030048241826514578817469953917719788683416553921077
+0.02557204840082140246852659727168740283841879010427612758121226
+0.23809172710058371021069758252142874313384235128303502857429493
+-0.11966774448661476751202121786511752023814407092363266304791559
+-0.14737878180374192335307638801116472702245603909592472345042261
+0.02941053945282888095668182265219744406680139556662049973567897
+-0.34217846606556294646531458266375699951517852034520509426386901
+-0.69827433179759168990663703175855485560457321361182502566637041
+0.09667515231156645384648017346180218965979766445571649027034074
+0.43629688801761986071980954865944914081057168143233696619693259
+-0.41557754872643084920345013819971940408472321587393937399679712
+0.18747808131432473405013833027197439983753205208579015769710044
+0.74054761545215773209743100863142103172389330125869546821199659
+-0.54266795404546598735020068189971434603614856142687783864929328
+-0.32599193459364858417921005406636745755241777508786459381593275
+0.45602207434136850809473775184352921444796526645264622327476475
+-0.52792176322089504734725157001435120987309570120873582741380892
+
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfft_1d_10_1.txt b/tests/data/nfft_1d_10_1.txt
new file mode 100644
index 0000000..64dfddc
--- /dev/null
+++ b/tests/data/nfft_1d_10_1.txt
@@ -0,0 +1,21 @@
+1
+
+10
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.7051415661084367709201814372310498119360160763950294411494790334
+0.02045501150664698515444899608259832622778238194598181287024763486 -0.9186285185242277638228379667640336837252479527413557249796864599
+0.9401551428927267957022414807370223973718851691957439576252972471 0.6059166146272276531659924142280879090009660941492851068272418515
+-0.2612973453579209037151284175096642861921169860192733934510953033 -0.95114225448595864485771668441096849436578004346293095519883533
+0.02064024103910974619444094927932620346955741162547603478536509901 -0.6604794604223456380230982552803888415401900194413775997907443762
+0.9939488506160911489389650693513789013109506369408951165937746417 0.1817134261437800570794256414315250650163873891461146114574620382
+0.1542994539339733543335730199449084161763486165489462822736549181 -0.8768399197753272524248224977827836246291177209791567885209025379
+0.7828695683967973168186338933650258807396624889375162083366143712 -0.2027179913470305147020813461378369947382030993314951020253012762
+0.8196703465056007618204539469140589759950911405168070546332911559 0.1375057760993413749724126299163162462121619232755876011030820512
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.4413098759704276115157486122940138778382450314554048934666388869
+
+2.01635691225346337200817696213786906202964054967706569103693128 1.63782596229641519532372233786748441016523502139815014515104114
+
diff --git a/tests/data/nfft_1d_10_10.txt b/tests/data/nfft_1d_10_10.txt
new file mode 100644
index 0000000..d41febc
--- /dev/null
+++ b/tests/data/nfft_1d_10_10.txt
@@ -0,0 +1,39 @@
+1
+
+10
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.4413098759704276115157486122940138778382450314554048934666388869
+0.7051415661084367709201814372310498119360160763950294411494790334 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.9186285185242277638228379667640336837252479527413557249796864599 -0.4763986698707299918532811013155870587476071700798709986377725737
+0.6059166146272276531659924142280879090009660941492851068272418515 0.2184244610344805776516307003112049282480936070481769173095132673
+-0.95114225448595864485771668441096849436578004346293095519883533 0.5284655557490481515292532588784919125603831832265742904204270183
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.07838835742104840389052756169146943544000206230123216084325830017
+0.1817134261437800570794256414315250650163873891461146114574620382 -0.3158305122954834491361879876118745635891842225287967281157858672
+-0.8768399197753272524248224977827836246291177209791567885209025379 0.3458309153991207858067077092337332970573207566667458110876416196
+-0.2027179913470305147020813461378369947382030993314951020253012762 -0.01097686940732606761440422015891875954490441842087149586770120005
+0.1375057760993413749724126299163162462121619232755876011030820512 0.2626555858903124974165091427737336367005240661151773835219310271
+
+-1.92889439339892214686477000984392957713748331730388477851076583 -2.24286253314474870375725516117278993662857496297123730310498856
+-0.50294549309423119972065961111877422766063748432547536456112054 -1.12264658400194294901323776655830257295602851774818728588425225
+-0.889803163675522041454516700297593198784393023519161199015902965 -0.523852695920089852577184172267079009649142013160642415303129567
+0.62074918047844895710437153516460710461144839780140076808072887 -0.59327865520817969349833023558167101569980621607899927320614575
+-0.75868127117728607530569132808880339702388451869209395628162663 1.71545279491339219144924700574959592230890490230310768011835544
+-0.886087905932856330234549217126977238219712413201992894270431001 -0.520130986481489668888746336950923153044056495000567630906386891
+1.12605590151836641375735789108139450219774719875099232618198687 0.43282662424545295027951403946636094640316665845910603739014084
+-0.82834967916549824534590677322621363744948125906659474451494841 1.87318650509942035337359453847360202764431214525026212755221146
+-1.63383667510714712361853493509326411823029779160220959552062994 -3.36403315804725128191662469169894409185439935406094355514207515
+-1.0957026737553522277401510424514222301561165586879578766338028 -2.97970160336721375284301902927706456346607267503143750828300283
+
diff --git a/tests/data/nfft_1d_10_20.txt b/tests/data/nfft_1d_10_20.txt
new file mode 100644
index 0000000..80ae457
--- /dev/null
+++ b/tests/data/nfft_1d_10_20.txt
@@ -0,0 +1,59 @@
+1
+
+10
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.4833001744929688887627302318231007732586579925667420767092911497
+-0.9286394390238346619050912089405834508747965422378917835718069263 -0.6470889183313806476439784979725465604750285292906649332158905915
+-0.4763986698707299918532811013155870587476071700798709986377725737 0.9495591103622864735737804468916775971319894153057637661282509133
+0.2184244610344805776516307003112049282480936070481769173095132673 0.1280772471342585841455757702545741213596517009855068302808317718
+0.5284655557490481515292532588784919125603831832265742904204270183 -0.1946943926350927100029394214607870756382213566654573743676056718
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.8391269337210497321784330437702418478537689733296865638890089907
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.09000979948494377602070534800332955914923353808674104151336312387
+0.3458309153991207858067077092337332970573207566667458110876416196 -0.1766812336766545879148652249537685082960598655086779135604123172
+-0.01097686940732606761440422015891875954490441842087149586770120005 -0.1002499995910402071291914694552929590775602478191912580994509247
+0.2626555858903124974165091427737336367005240661151773835219310271 0.8558312786548114618473704491843378278983698142481509704680004653
+
+1.4928433850451221171077866725030074724680485811544530761464838 0.48461993569160260546670121852702758064701668008257393175129553
+-0.69153516483909649300656216687630154897871301585285582802142142 0.22793883724971398535719781164500690659507981840707603790492859
+-0.534970821765929056635272003925776853465097362890159634362184041 -0.908412358382047714342616373944240193272550288137578343916791591
+-0.60913276537958274717107753460186652271336990277144723932587573 -0.64859632420992536749476432893591689110494370579898758007112743
+2.68141350817054663812177075246751571545789522251423368698831571 -2.22785755393854077053991048758139176347020505166652867278932701
+-0.531365437733388180697022026422597110852978388913739787221830763 -0.912717336915161538147039826544168145786030779131787943422355249
+0.4235572577440110863770982325180425000847514841529309257025767 -0.89872138804259484559247888101435156697047324965018528873454513
+1.50316298823900749954015185395214630354733788142601091732206191 -2.14721453628697616009227514967141205823024987834223412286652352
+-1.35363513066163064667901860499228192363147642365216868879765736 -0.19731294819740220628051088097106004821071927568790164724467296
+-1.69434498359214570577654099525789234716860357392721015783750793 -0.36895481647608644933478419912648444993266570648855136511782226
+1.52914455912365868540953827262352139803801321390807628452197117 0.48775268013827801455317622047879679202595017672018787522695701
+0.17784389672504606993949219986030506303926001781901587504662208 0.25148976258289477173367611325852723148799571134802443283272171
+1.66637871575065645294941488181489440801011031262415260083651539 -1.69058849682299117085699335985187500234854028382209612498406908
+1.72096803172377657291978852433748093171484270523907754825436772 0.49051504550862061072801281649232011037905097755840062537235094
+1.32038817180524868274033082526510685068657755944610460760685611 -1.36508965449873715272413852319748068155250892665898158771265611
+-1.95582072616287153904287802996387576289691878672753884219937003 0.11805598838667812064182898920674598812540871030992016661241336
+1.37433294550179975795314664338930207940000001483721429221673182 -1.88721742293901263752154004178917889820078201306036775374193736
+1.84334761972291665220737782988012394128338042361887854392644904 -2.04199799173557019725651514245995358744927064805415098768934355
+1.70408584570145934117186520518555040231147446272510832953247732 -0.20405009877608257245082939606885414485396169729091279822107489
+1.46159313549163961086484799453898650845449011129742941350331255 -2.23427228129525140069846482012173267074109672376536273872611592
+
diff --git a/tests/data/nfft_1d_10_50.txt b/tests/data/nfft_1d_10_50.txt
new file mode 100644
index 0000000..9f62c81
--- /dev/null
+++ b/tests/data/nfft_1d_10_50.txt
@@ -0,0 +1,119 @@
+1
+
+10
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.5458569288127476004682590208265714990676611459841400026017844665
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.1856688150172391527088040246433169286752829500750590071977203062
+0.1944979336074391420204691208780533563017707991268605634570366201 0.8193143821859564924477154245099351963436429074028089074430038904
+-0.6717069716036456017860348911350501039034020263227184271420653514 0.4604487491339531156973853721884505256237012331451385915640611729
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.8606535828683120015533980099014960687963233985081987928030018579
+0.531416327611542071221970089939764430329756625444579259583169101 -0.2028782443808202039078700152556584967073846417006795171717789768
+-0.7793598342770851820561551396646691186537674923197586552161425487 0.7727562160593342436881229708062656539223995010850938445718232095
+-0.04982739811897050028189209963034074300557183166488389610036293982 0.2216455512897554102911455213296037106714896153079531893725412128
+-0.2152831478765442996690076717147867376683641103330644151579049018 0.8060520707732849845829519568044036159880831172244051400087891596
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.2494984458565048492106180084187393465587010901621886528310783225
+
+3.43778091275030561063627832930771911682174889237322489673428281 2.2210221723118365336773989103114483023724138910695553068183999
+1.6523206432875088890126145433967933221755232361538655944105897 -1.3533420520972752018952199452257014064548505609309472955818389
+-2.222321649797744321287392003814161423324008557480670841852094594 1.52609242197244171870537866733165243779039250941881336778656815
+0.93215695044550479364540365420315349068464205702202025605792614 0.32169206121732448441951984816455163391406388511959358658179497
+1.13182087454707746882776009346457556888546916419217664317292203 -2.74332283546770309508249881439254999408859216164753728674428988
+-2.218599958386106081655767107610060089592065119562596753014737006 1.522556775021770396193716438142919156467940566089021136265819
+0.22406018128259364497884375290412011376221245589217550240908115 -0.02723710699812807131258612406904230490894453449165350080782057
+1.48403467230666065856194223262057204456643603683906164604069198 -0.27688746635922337154314359334851203265903068955783666846125792
+2.14563065060991704832770556785060926596916098043369783468690208 1.89534708899187375032406034524160564278838092430259902814108254
+1.87763094265019429002072087264858259784427882595167816816405355 1.3989217308834491902515030034756327721566719839346388341698469
+3.44848579948612621788520544740801250837051970218859563688442125 2.17551143200131104081713964366896717797056771832325433340928886
+2.89519883237845588685752170869809636343553111882367185741458801 2.61898424824331617633066369957004797984335581147533134914337032
+-0.81675702632893809360949983786677122226334457338921230084449575 -1.06681043213489943748678826002741218009999988923678894160591126
+3.47340752889966953799939121392761835696613534315301297299364305 1.72839087006148983793341613301500215499743336836594502890051162
+-0.5149637340401051200930627115101401914421041200615144958989677 -0.60519752919497892064255449057338313678740317975695613512418719
+0.80368944258032269695544961204850157281790505142875949954549213 -0.05042795777243128867814534202922033361426649990115034353264631
+1.96013670561826291060711889966752725508313424687647914414249324 -0.3874646891689177464759897528342595795378701984810847267987913
+-0.92715006057985724004564759250167893099337906742458161109613645 -1.68966652640331313721090181570130161671828926026188332624051817
+0.68508560458918058269511744760401084817378396419446469222528983 -0.41495621498959777970035399878145013494120520146800858591903201
+1.09050623796760446004063731546203865669851690026487905623018841 -0.17496320762618844242338323612883754889854291737397865605848387
+-2.05225917065513645739932673486504577843305717713264841096795154 -2.24770551505040448966167198551933715498948941324369280095490892
+-0.74100074764414839050044263893573786351454461303557129137818219 -0.91823417768559162253182972056510847030715442302875542217088989
+-2.13401108185704831787005887661491182260700575553963938160789086 -1.0247443911249747954403695114896666799098539750343979215012402
+2.24174725934841088163554550236970558500339733731016446628520924 -0.48862418383024960442105730132195427027805723501294222077448012
+2.84591567494898620281821253091012483612990690526701069774312617 -0.03557518666918131957394534687564911452322844824413122636579484
+-2.35030591601499695276248718068460239724591133360364419187798705 2.66119118479495476429237300229802720154309447040736303020117501
+0.45683778020127607193439620711275854626688075426774167907245264 -4.11425662292804269918884304144490730031839913465540872426888435
+1.34642876435492763442971318171172343227833741480809275126178698 -1.22983189279573315626163015083126203139764030554763260146446065
+-2.679507354570843875949561894109803288796752498248858520614025788 2.094016838840204961948569165301662630172550507108844594566220287
+2.10510715179928795666662997132336236372879548256301543707462096 -0.65360128972817949076900164293175127534264826398936061636163404
+-2.10161123804232791664449731359537306574009193142158278697200613 -0.79366849106821145535920117947984874795017500065504952664863035
+0.68429232594400786523717458909061093831425911783469613895089971 0.23657185643804077153788474235575973475852786447567266143478822
+0.8208540774403416057175570855358647907805008605122695762519072 0.26767967765623744086642113705650243195683714602990915864660355
+0.84125541568103911274504995026682579827855186442647566768491414 -0.10275936577967765314766814056473098290500042019397010915537608
+0.53258088323151251135984259934147039151576307676405009400013506 -0.0891658300530096126851465045934105486563416222447314250239302
+-0.72125686733767681569929931274966237654659037993125101331936368 -2.12963280252929606496855265709481901207285612963592032170610042
+-0.29790726993198891087924086463719037773023917062023042865983982 0.31612282810754237523874465309545765939752483754119585719473016
+0.12943821550797552898947181781234444000986604738238044139729143 0.60887219700511965922586717212910580198789717549034989454979414
+-1.90074977155953785319405789437186335183280370643303485735450767 2.52195335219423178055025465179805530741970472272066593171702364
+1.64789545432517656137586515650789931778946672617289129462059024 0.96415534678299987745123122586820129962319746499123317300150247
+2.94222296191477408795250029227511749325815879339930703778646993 0.1285697232554525637658464509812128366670478606681914716835647
+-2.686253046851900406115572315702663465064718616997939321394868771 2.597744692299122149219451262135173914839877489011849581697400631
+0.79325099488430032049096433071756347398063611589760940889595413 0.25462964045150348896554006411576378980259154182754035668664317
+0.20020090217931611129199864207855608103824318947393281491085955 -0.0407567150833547709237538066718581951548094192132576751222628
+3.18992528600459189348614898336449541681585331788506407566078926 2.59310225241195459413938752558060242620654085448889704926159212
+-0.91030847412445223129454848796729447862071694920267852179105866 -1.78614637641838451704228329671181498964882395268601383147164965
+2.99093017613699040105134638005134770307466842115914604068152925 0.21714542058481803331673564792792917778243001662066505866170174
+-1.90859631386542194630592701684910178319715541277322777998739275 -2.71235193086681997250088694486343546851459319897625083730961109
+-0.8723685808040807693510297365816209258011484953524431469491483 -1.90494530705141634509016602844923279839008844457924321455575341
+1.22362001663842233733971527426899996395377018904591694263901303 -1.44789319479742628064975576345173303276328007424126540782951878
+
diff --git a/tests/data/nfft_1d_1_1.txt b/tests/data/nfft_1d_1_1.txt
new file mode 100644
index 0000000..32a4278
--- /dev/null
+++ b/tests/data/nfft_1d_1_1.txt
@@ -0,0 +1,12 @@
+1
+
+1
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+
diff --git a/tests/data/nfft_1d_1_10.txt b/tests/data/nfft_1d_1_10.txt
new file mode 100644
index 0000000..3f5b52b
--- /dev/null
+++ b/tests/data/nfft_1d_1_10.txt
@@ -0,0 +1,30 @@
+1
+
+1
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+0.6316345452201721830125859283102821997036574445025868003866206636 0.7051415661084367709201814372310498119360160763950294411494790334
+
diff --git a/tests/data/nfft_1d_1_20.txt b/tests/data/nfft_1d_1_20.txt
new file mode 100644
index 0000000..25bc9ee
--- /dev/null
+++ b/tests/data/nfft_1d_1_20.txt
@@ -0,0 +1,50 @@
+1
+
+1
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.9286394390238346619050912089405834508747965422378917835718069263
+
diff --git a/tests/data/nfft_1d_1_50.txt b/tests/data/nfft_1d_1_50.txt
new file mode 100644
index 0000000..f437dbb
--- /dev/null
+++ b/tests/data/nfft_1d_1_50.txt
@@ -0,0 +1,110 @@
+1
+
+1
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8786687027770929787301562525828872003547410177701220950278899658
+
diff --git a/tests/data/nfft_1d_20_1.txt b/tests/data/nfft_1d_20_1.txt
new file mode 100644
index 0000000..a7e9184
--- /dev/null
+++ b/tests/data/nfft_1d_20_1.txt
@@ -0,0 +1,31 @@
+1
+
+20
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+0.4471019172896300480425609973334131570061388309850364774868901391 -0.9286394390238346619050912089405834508747965422378917835718069263
+0.02045501150664698515444899608259832622778238194598181287024763486 -0.4763986698707299918532811013155870587476071700798709986377725737
+0.9401551428927267957022414807370223973718851691957439576252972471 0.2184244610344805776516307003112049282480936070481769173095132673
+-0.2612973453579209037151284175096642861921169860192733934510953033 0.5284655557490481515292532588784919125603831832265742904204270183
+0.02064024103910974619444094927932620346955741162547603478536509901 -0.07838835742104840389052756169146943544000206230123216084325830017
+0.9939488506160911489389650693513789013109506369408951165937746417 -0.3158305122954834491361879876118745635891842225287967281157858672
+0.1542994539339733543335730199449084161763486165489462822736549181 0.3458309153991207858067077092337332970573207566667458110876416196
+0.7828695683967973168186338933650258807396624889375162083366143712 -0.01097686940732606761440422015891875954490441842087149586770120005
+0.8196703465056007618204539469140589759950911405168070546332911559 0.2626555858903124974165091427737336367005240661151773835219310271
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.4833001744929688887627302318231007732586579925667420767092911497
+0.7051415661084367709201814372310498119360160763950294411494790334 -0.6470889183313806476439784979725465604750285292906649332158905915
+-0.9186285185242277638228379667640336837252479527413557249796864599 0.9495591103622864735737804468916775971319894153057637661282509133
+0.6059166146272276531659924142280879090009660941492851068272418515 0.1280772471342585841455757702545741213596517009855068302808317718
+-0.95114225448595864485771668441096849436578004346293095519883533 -0.1946943926350927100029394214607870756382213566654573743676056718
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.8391269337210497321784330437702418478537689733296865638890089907
+0.1817134261437800570794256414315250650163873891461146114574620382 0.09000979948494377602070534800332955914923353808674104151336312387
+-0.8768399197753272524248224977827836246291177209791567885209025379 -0.1766812336766545879148652249537685082960598655086779135604123172
+-0.2027179913470305147020813461378369947382030993314951020253012762 -0.1002499995910402071291914694552929590775602478191912580994509247
+0.1375057760993413749724126299163162462121619232755876011030820512 0.8558312786548114618473704491843378278983698142481509704680004653
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.5356506216935318567168964679980224448474954197740742721804425662
+
+-3.7261079332112266132183022577723554935698498438746435261852304 -2.2069101205191373971737900056077694572768375010577057343652991
+
diff --git a/tests/data/nfft_1d_20_10.txt b/tests/data/nfft_1d_20_10.txt
new file mode 100644
index 0000000..07fed74
--- /dev/null
+++ b/tests/data/nfft_1d_20_10.txt
@@ -0,0 +1,49 @@
+1
+
+20
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.4833001744929688887627302318231007732586579925667420767092911497
+0.7051415661084367709201814372310498119360160763950294411494790334 -0.6470889183313806476439784979725465604750285292906649332158905915
+-0.9186285185242277638228379667640336837252479527413557249796864599 0.9495591103622864735737804468916775971319894153057637661282509133
+0.6059166146272276531659924142280879090009660941492851068272418515 0.1280772471342585841455757702545741213596517009855068302808317718
+-0.95114225448595864485771668441096849436578004346293095519883533 -0.1946943926350927100029394214607870756382213566654573743676056718
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.8391269337210497321784330437702418478537689733296865638890089907
+0.1817134261437800570794256414315250650163873891461146114574620382 0.09000979948494377602070534800332955914923353808674104151336312387
+-0.8768399197753272524248224977827836246291177209791567885209025379 -0.1766812336766545879148652249537685082960598655086779135604123172
+-0.2027179913470305147020813461378369947382030993314951020253012762 -0.1002499995910402071291914694552929590775602478191912580994509247
+0.1375057760993413749724126299163162462121619232755876011030820512 0.8558312786548114618473704491843378278983698142481509704680004653
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.5356506216935318567168964679980224448474954197740742721804425662
+-0.9286394390238346619050912089405834508747965422378917835718069263 -0.05251382922654688111844675415661855947948761360659425718759593363
+-0.4763986698707299918532811013155870587476071700798709986377725737 0.9518095182124288782767378820155949547911261560251647626870735792
+0.2184244610344805776516307003112049282480936070481769173095132673 0.9956223852813107496522616247115213137215848581937907906567140918
+0.5284655557490481515292532588784919125603831832265742904204270183 0.6741052796006089834676571454955036801632897076493615121596900136
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.8697750560716627155371707094260289644371901052310063829991901781
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.539462018274751480324642644804511358394409237082129058457521908
+0.3458309153991207858067077092337332970573207566667458110876416196 -0.4274845026027779916855619203781095649893449575458629944853980527
+-0.01097686940732606761440422015891875954490441842087149586770120005 -0.8604697501072873707535504424154609782723273602355359333803551115
+0.2626555858903124974165091427737336367005240661151773835219310271 0.3822062430356176188977280281604014506988427784943414973817258933
+
+-1.1026522684040135946035413520629842386468350692317003520705013 3.6479028202502965001574459389580613847844858563190308802464348
+2.2018363491670813252631046925553575033767274580987562171164531 1.4433467990355805727339372290715687739998183356315573878651539
+-1.93835062068595668014130961644699337231088839034142557633200455 1.29184379408039754335062164506682718003887745279727406160028603
+1.1084507032659972670902519395229223076114270852379365378916771 2.6054659976741499913486521660122068028570925624071757196736121
+-2.3236657533093733034696792322254958751558264302920619878997261 -1.55831375641527733887754066454465460908327029433376216702392296
+-1.93692863724700584524515741247482539266289674498214203709267132 1.29163043536881759438832199551064065379348396201778405558651979
+-1.5191516815523754789925293395832525705298552925348923269761143 2.8615138044514565832775905599255422520483756265906011204599508
+1.66307025993254904006740567529586894904487355294715447702802613 1.03446552811905198863806967667243600947956030588966512226285139
+-3.3605494022101803015840418237751873441940825550145401430998994 -4.2664247361606221001242120420286389775575531813329387342931943
+-1.7115921914056593192323819650091885887266331431330034720150196 -4.602541512274374665681580763806558217072087948271466210176692
+
diff --git a/tests/data/nfft_1d_20_20.txt b/tests/data/nfft_1d_20_20.txt
new file mode 100644
index 0000000..864105e
--- /dev/null
+++ b/tests/data/nfft_1d_20_20.txt
@@ -0,0 +1,69 @@
+1
+
+20
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.5356506216935318567168964679980224448474954197740742721804425662
+-0.9286394390238346619050912089405834508747965422378917835718069263 -0.05251382922654688111844675415661855947948761360659425718759593363
+-0.4763986698707299918532811013155870587476071700798709986377725737 0.9518095182124288782767378820155949547911261560251647626870735792
+0.2184244610344805776516307003112049282480936070481769173095132673 0.9956223852813107496522616247115213137215848581937907906567140918
+0.5284655557490481515292532588784919125603831832265742904204270183 0.6741052796006089834676571454955036801632897076493615121596900136
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.8697750560716627155371707094260289644371901052310063829991901781
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.539462018274751480324642644804511358394409237082129058457521908
+0.3458309153991207858067077092337332970573207566667458110876416196 -0.4274845026027779916855619203781095649893449575458629944853980527
+-0.01097686940732606761440422015891875954490441842087149586770120005 -0.8604697501072873707535504424154609782723273602355359333803551115
+0.2626555858903124974165091427737336367005240661151773835219310271 0.3822062430356176188977280281604014506988427784943414973817258933
+-0.4833001744929688887627302318231007732586579925667420767092911497 -0.7335087736711041883089151876515694737975402817556229765975958245
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.8786687027770929787301562525828872003547410177701220950278899658
+0.9495591103622864735737804468916775971319894153057637661282509133 0.1944979336074391420204691208780533563017707991268605634570366201
+0.1280772471342585841455757702545741213596517009855068302808317718 -0.6717069716036456017860348911350501039034020263227184271420653514
+-0.1946943926350927100029394214607870756382213566654573743676056718 0.1841240265716411858721923885202834145897392121583597644960322461
+-0.8391269337210497321784330437702418478537689733296865638890089907 0.531416327611542071221970089939764430329756625444579259583169101
+0.09000979948494377602070534800332955914923353808674104151336312387 -0.7793598342770851820561551396646691186537674923197586552161425487
+-0.1766812336766545879148652249537685082960598655086779135604123172 -0.04982739811897050028189209963034074300557183166488389610036293982
+-0.1002499995910402071291914694552929590775602478191912580994509247 -0.2152831478765442996690076717147867376683641103330644151579049018
+0.8558312786548114618473704491843378278983698142481509704680004653 -0.1430325904665435237882241441707630670064919508747748361914900932
+
+-2.0951373298663613689568690897435933252982676739523749993886802 0.7625495342420999678875883686489582132847034871580383860915569
+-3.09901249013186759718656318841650916134065691990891659757729551 0.8612546627131401884885581560130829454563840594073056917158307
+-2.72696098969619404807291066457268141997776503975072626472435868 -1.83065566013354030827264336588493475340697875288831716344102742
+3.3838265191236002110411202441343738078917608122252679831560931 0.7174462077880713205346375732192709079900927227621152303996995
+-0.3393568498447377674205114310530955199349140267486921131543844 4.03825172093171576186253137779478802459983702895604046534922027
+-2.73691340558028838676845138524826365218877626184768529607104115 -1.84173716833444282905016122745285778590758043824318619823449876
+0.7829487732430220463902253205339819174894924239717158665897611 1.6445101818075252805910623459807772047062618818758457033903832
+2.34219413026920462071497396197689719163341443613891194378317957 -0.2982811827743736010718652915824668891644882024270682700078264
+-4.2367602190255865765398073945262149778313138319076919318233975 0.8996156016481361655533280321375031849252086505489987790046634
+-3.1989364015590590849815948273838219392252743623391491707759066 2.3459707099594514299068025240349071798202401579096589594745872
+-2.0558859833987004394508434636433872556021411518370516824334915 1.0059509216997711171993818476105250704620549283808109010266308
+-2.9436059842026747041709459501612559327151995156693716331638904 -3.1214058251253754353992636373397101681442749051574112379610386
+-1.359884975720537145779022283630162322809094255074841161769187 -1.1588072662053503386226620604320559071982479403398496272775336
+-1.6604461943521039766725892145080253347938648148145111377502098 2.6113396855343827274336348155444760640247607052798090193325379
+-1.5728204283241684837547549879344833637974569125219574493279635 0.5663348846137103880638885670964671361772861958495328901525025
+5.2848254704827959696252771346106541534053025033274068001659947 -4.0101568532507814128563567967872294659009947256781866878462081
+2.68023580823874916552091531884236256108647875944603647628949968 0.09493324798340006802757180797245824758623746660263216442970685
+-0.1098020500839991173660437889900870993322888773658245309408062 -3.0170688355733575534408831770028290313850692604589077132105715
+-3.32406670470071833804706312859239853539891169504896598175114247 -1.05282141140988743604433568181583379964315223294684463102871172
+1.58570813473792792276123404835595010501049087889448084496434686 -1.06778490637883967511551611129401635182629614959382234558045333
+
diff --git a/tests/data/nfft_1d_20_50.txt b/tests/data/nfft_1d_20_50.txt
new file mode 100644
index 0000000..57820fe
--- /dev/null
+++ b/tests/data/nfft_1d_20_50.txt
@@ -0,0 +1,129 @@
+1
+
+20
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.692720462930580375837580120465281755163139346395305274413909974
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.3484206501444620766420233468327938525050794194268200530793896515
+0.1944979336074391420204691208780533563017707991268605634570366201 -0.5365723013330725289094471599220332027885871668229904917249565862
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.4969838973904267472552603461634423875526049699439467087064029146
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.1099633225953045478540363356794430416477263111166654723490589437
+0.531416327611542071221970089939764430329756625444579259583169101 -0.6756547625687923165084584127259768184144567299620396875756298559
+-0.7793598342770851820561551396646691186537674923197586552161425487 0.8687355316920355914551191479618699998090617653378680974249892199
+-0.04982739811897050028189209963034074300557183166488389610036293982 0.6573707348942885034556657549189062350008259948442460481059842193
+-0.2152831478765442996690076717147867376683641103330644151579049018 0.304092255431421724386276285709205877741518261756931899126135274
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.6923315191547459490617708873077670147989473956854336908747033971
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.8796784447840898801814093263554195453289300559080999490503364787
+0.1856688150172391527088040246433169286752829500750590071977203062 -0.02378306045101476542041128049120676361822587626846492046663605803
+0.8193143821859564924477154245099351963436429074028089074430038904 0.9854996726419986830846511304498671064695985279263874167222764802
+0.4604487491339531156973853721884505256237012331451385915640611729 0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.8378043093573693797427988998204722223522674424680899644391943176
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.3904035160770493684430115148009967524256991556076221372265894266
+0.7727562160593342436881229708062656539223995010850938445718232095 0.3596214942327276879157632590476519168937540906266077357147819608
+0.2216455512897554102911455213296037106714896153079531893725412128 0.7958628339830083470736213000945699871834494249238046750007408612
+0.8060520707732849845829519568044036159880831172244051400087891596 0.5412530329369591795695895418300581875196694253995928145942436878
+0.2494984458565048492106180084187393465587010901621886528310783225 -0.2613537732594101756765510813982454595302525696986533152069370387
+
+-4.0411739662499125130112886361021750748512339422021319154291311 0.9567058716309450450123242640459956054199786166424095395012935
+-4.0670904827660749804521720056764337361829872447048044382260887 -3.7759149093225734664032446652715662836561068863937086822292819
+-0.31650686520472680826803815540773351352327614867580013896144838 0.55556468675041095547553310951440825100031296695837099420588305
+-0.2014824894283542150469451754520411757494454707046977037137536 -0.5376837870511945116676494321927286431445798655625544512956428
+3.14556085913013079606364601173558823351521282346606292031323756 2.18279818029560918868756083904081758043648708959395864636883879
+-0.31237894697343328388554008889221573258485218348122025571095071 0.53626724880500315347815377952648266473783826778891172157631704
+0.0281581702991331591315641211771636254340914940467639831072542 0.111746850643838136332164034980842957260603862704124361661651
+-1.73561934726993378335438958627470560840325949266101787916926448 2.24504101065649115617456075837435987693671484929249250474618848
+1.5257388587215120919986832092432538460309347103234550053598543 -0.6090629613103768564833525506613736110604591627158414390057571
+0.1238652501686591767526960777393882313376656074389724571535015 -0.3297216716373584015625534709788005629663076767578798341473264
+-4.1040435971612989595041977566877402847382462934494326340188338 1.1434176272105910996236642237844542453974768033622117724716817
+-0.1753014883328690612992395848583446361360088979939787340780049 -2.2929058624413701367441968734375248701265817925364453594814599
+-2.6200349676727997124499422943039520588435818515237309013090238 -2.0100141635411687219190228339295648609288815513055090738288158
+-4.2099098777932679689133082022120968580026178055096337435411117 2.2927546334863029229336135068140806954857447171130484188637511
+-1.4486396194288740639644484732210221139923281249216234742362796 -1.0731652250158064184370852546482323290804883571526447768580361
+3.3688437212861530631265143482832060367308804286132823346427749 0.7243733456070559426468546596859160624333025157476253214527666
+-3.40765870804522782773063129071279640453766488289050118030585803 2.73026462507738113015309896601074673186161236228362724774284338
+-3.4758651049125409342758820533234371820930390819832074379792207 -2.5326732054388973086711770063905362007918756201144719804414992
+2.04891826803136173623386576404225755840256011715784670447116364 0.44977348946242792540504309972439172767058431802375496579845144
+-0.60559274385240968158186934079059157605432765701912914563630615 1.16574378208846833151479748373770765125886098840376836005986986
+-2.2200307613859815760737455539958003038507202085195254866294028 -3.4600615920916447809579429098711944678346156413012260518155243
+-2.2738586284890776338336742104791229322088430926381938911347338 -1.7540011491409092370608582364060515423122667391465686143708087
+-0.0067296641979580713961429660916830908780917306620277732953061 -3.742548344770226763893675424070172878229363691023754275510665
+-3.77605573411409136850090584408940623172231138794522816986171595 0.5001272890570780680095618951933385371373819024566785596997092
+-3.783561596863309757467341314572332190042899210270439661785406 -0.4456988893583408036659342400073089954947983134534056052623055
+-0.56829389965167680800466888724218222158794998858100284650690078 4.48105862392991011358965867450446491824349524706765709235016529
+-1.07854794469590692565782775984668658060558572708265641068936426 0.39112267400844631247312436587188777325657714384852720222876501
+4.57725975204190443805260878135882310732539483905081287584723749 -5.19831930590571338398111222794436745672745394395967344896672276
+-0.73701111194820824638837420750806966525682886716882622553377901 3.74299628231761445991946617910522644491974629782353369156521274
+-0.39005578633279834282030200381988343828083802256453535386393266 -4.02222893591243686104845376225339372429034786595431253071594938
+0.2040194265866682851323579765900900003266963204310421952134414 -3.7702255473161158934159002643512541199330776342538527042643467
+2.0038512748539894137386472448905641772867947216938783094239595 0.7530671053852088428765455486193888696199155757707072358137795
+-0.0444332174749905354441436943953261253912114412420932631987085 -0.3398604445440216467227556558532273334393685660765275938840111
+-0.04528129750512847116987561482229451330384098938990615384447299 0.41598506529015027581738155012698743985124116346653378720997124
+1.64426852349989033464228792260498688799047376979657395919453899 0.12104452181647505871946006947777028501816429527869110816309791
+-2.6721679240346717907161754434340572398735702563091473036314786 -2.3750617423094783565581510986848779860042027740974494791699426
+1.10848858786282037261515284731303654520878217593116687946920983 -2.27277885618617906473986151753745570528998978261715118542199771
+0.76941119531503060626357482350938852474074177269301101333894563 -0.41193498317270245808210055317398514522363198529549892678647769
+-0.58173413488204622835557031893253644388271236320608138283377153 2.83916938427446813791048847311461693345438565585447175471205154
+-1.0261276652181612590725764867439897816365353007631491004074078 -0.8333385048633039394064501010484938586765265597411884345288949
+-3.6887745670284581399675182652761429703901245065639496319902414 0.0858034682226456385614947447771012840289145106321610298732264
+-0.64256270770110568676056542804575306430777451434029486091560031 5.48140409547808814217016173620006155119417937945660832900864372
+-0.0125319624959258301421126613121365296014428302102431844949848 -0.2943216318446024149691905427000359446698822970722441601289851
+0.0059620433658516276205112440685554366609233453242634921942883 0.1031112598715033198272406491872005146469472504661211373636224
+-2.2783764710292682681384515884728996965030964266243709378330475 -1.3938865589101468661466640491068070447267090098100434198622833
+-3.4659098506726471931433416994096501389015028646999541440211363 -2.5354432995961710731211383906102099628290282607782197368184832
+-3.6527618547421010916590663103776257913030016910941541923386407 0.362072507169089129351166459865653486782579313802634883320967
+-3.3331605651757182793277706740822474283288273361721171353167083 -3.3190796883748184097078871985592363475093749154020823088671399
+-3.359891464641047241289628661105762521512811013999455833843741 -2.511085914371970326609713777658736183319125904199942958492915
+1.80366330490516735027173616371679766132409611670507025949235291 -3.92517690803462490551272094807323119379021859828370800109940069
+
diff --git a/tests/data/nfft_1d_2_1.txt b/tests/data/nfft_1d_2_1.txt
new file mode 100644
index 0000000..8fa12ff
--- /dev/null
+++ b/tests/data/nfft_1d_2_1.txt
@@ -0,0 +1,13 @@
+1
+
+2
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.9401551428927267957022414807370223973718851691957439576252972471
+0.02045501150664698515444899608259832622778238194598181287024763486 -0.2612973453579209037151284175096642861921169860192733934510953033
+
+-1.020379768447039688303613284504741297807394237911436015506166964 -0.239971820968884883437304102437522961449733975733472121272506127
+
diff --git a/tests/data/nfft_1d_2_10.txt b/tests/data/nfft_1d_2_10.txt
new file mode 100644
index 0000000..0496933
--- /dev/null
+++ b/tests/data/nfft_1d_2_10.txt
@@ -0,0 +1,31 @@
+1
+
+2
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.9186285185242277638228379667640336837252479527413557249796864599
+0.7051415661084367709201814372310498119360160763950294411494790334 0.6059166146272276531659924142280879090009660941492851068272418515
+
+1.283117990905015368600772471557927504807113988380874699454768628 1.559218144123995079217675583374405219679276793269580068646280659
+1.715599492447368509355830371562548476523337213121232038093666714 1.076889366344709936520844690086373108736583677371678899573878386
+1.394464042270003617149056663052146443954644475303302508594481579 -0.270254075147314689211401348376878372025272116025975774612489157
+0.256331386415079403195547322309370514658979115620188159548069341 1.626411580986752368304098521669450111027053560576979977095690664
+0.463436141373071560915861618437339151716151625413724825186080543 -0.482393562397230716321313318958473259873385053906347213575060555
+1.394973783043916513501190728154861688243573232114444594599104363 -0.269852799225181573333055514449943585122411794117700538375847354
+0.091083453194880768471177327054288788895819960968005038791890173 1.536385951965408678072679951366888402073621493087045668338364425
+1.692073477577521458984413959768106970436527822531194464302142442 0.087451614954646096455721070309571794446726356995664542305024624
+0.794000174462940522737242906971802542885916216133336672575694152 1.71719727291423848050122238810408897956001854513586298922996259
+0.66521445009758354391828205129550960396502014807267829761610092 1.720028987401431735626581337130543563786379456071168402581841819
+
diff --git a/tests/data/nfft_1d_2_20.txt b/tests/data/nfft_1d_2_20.txt
new file mode 100644
index 0000000..6803e4f
--- /dev/null
+++ b/tests/data/nfft_1d_2_20.txt
@@ -0,0 +1,51 @@
+1
+
+2
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 -0.4763986698707299918532811013155870587476071700798709986377725737
+-0.9286394390238346619050912089405834508747965422378917835718069263 0.2184244610344805776516307003112049282480936070481769173095132673
+
+-0.312986080588858188689704073474210860225559010534545901824684821 0.011830556159798069601390184815977742643476151508211514667386171
+-0.531805679923707220603052157186809086351089329433077967247782173 -0.295611595018105098448223245219126811098990573883660801744584
+-1.338445491686439580489691297752897278011929903552049276040450072 -0.2853305374367298954012224449917020567557040384065021361064093884
+-0.40606600485785327377360273254792506124796374843847582284822286 0.603946321877167030287556088702813103006253635083155934814082608
+-1.578029127838191542185984920944582939884856584931215461550961656 0.216654900290195022504703500926285648606616945075655492103822796
+-1.338152279355594127416945983085319920779312555181529419041738238 -0.2855689247227631254604942492406130867530516975604868987136590588
+-0.478353392375015106249806580649989168896152916824965082366175039 0.686348146561310989813913468189326102967665571554203619617548108
+-1.097113472816590022597405851157889811068926687517224952446038243 -0.408733094306466029921710306614231676110784741464837169981594661
+-0.28573575861801961023615273001210736354729069304161497431060422 0.309993871889266585301724735104458989856145920448775256174398798
+-0.300590672650530315709284273383457907902814891493220256705804035 0.383545163372514368619119107136309820732961444906301277361640459
+-0.315056931524836069456465670921697436247742928236012023319408799 0.005758982465728573476041705827572029111578139260233885094934832
+-0.282669680444833265829125368743433637091804067582744417801638548 0.151842404254732220446816951306499959897028993810957113376211411
+-0.622133527301049517463501832291844885245016514770183954065648886 0.790931426374308755093124462300651392102560084639994849113520514
+-0.334222212137361737216706917492064728747428948399785671078223224 -0.043067909149106904211232696922970009026543220585309165147549401
+-0.565354077593324428310852414103250081752094805681109257887474622 0.756693766730001850226844617637015042377549271776675984988554781
+-1.132579681816635222212706347451275936522701467756741634238608547 0.834961951097533062130186865034869518412097124750954481719646523
+-1.042542772662465591698031084566778508299472555150489742121523056 -0.420900284200397461160998621615357385288018998307471131590578732
+-0.699715652883249611335234916451060228958581469349466427490678842 0.826128335814537136277779295544049939317457325948391046554674279
+-1.566739559196874948158623379779771669400685344293827446815850958 0.097849439082226606489400815581056388622291748092212640050162733
+-1.12995184492645236424882509029856415963810859746214443671594551 -0.398976069021442418719110220716415489573757074709132861342311795
+
diff --git a/tests/data/nfft_1d_2_50.txt b/tests/data/nfft_1d_2_50.txt
new file mode 100644
index 0000000..d8b2f3c
--- /dev/null
+++ b/tests/data/nfft_1d_2_50.txt
@@ -0,0 +1,111 @@
+1
+
+2
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.1944979336074391420204691208780533563017707991268605634570366201
+-0.8786687027770929787301562525828872003547410177701220950278899658 -0.6717069716036456017860348911350501039034020263227184271420653514
+
+-0.754605160347591691168282625842386010370183914555625079789359758 -1.420354288215342465693285969042063702781594367345322511259868692
+-1.191824353085825112312825410610384319917152247427161944578734064 -1.362936387868438277546388597971755031947346889282148836389584304
+-1.623153571561066033301177683098266489131726604523055349647077192 -0.5247142936167425376597165922407343305365716573415346760206274944
+-0.194437636977218623126089728741565417449219779466822456999047252 -0.999872198013176938213109517547365514176211948613540201510342998
+-1.236282165836475840816276584984652463251659733137266692726093979 -0.00239599883483885805492268055298934006599476342726705301833828
+-1.62323898285805482802842709985208178149607711698866758918751212 -0.5251475459422130316580180667813422279720730996091975376359740906
+-0.148989697240469050861213840915134185724192246462446654873188598 -0.88011310421287210046423515970497794699037488318559882727092361
+-1.618305227950732298213089397327163185320790068074629254520760601 -0.841419604778419490194918705415598814474650070267850820707242032
+-0.431920086923914402733663489139238509920364294971909258691167915 -1.285123829428175912663360908922066281135916771645081715870651684
+-0.364141354633619769167459226532137542670156989268852208073564079 -1.229493826273506093725126059758596113192187513374537805092275877
+-0.762006631593735265761411488991229000685411055176168047264324674 -1.421543305997531939593785098087903204471393157341694916300165148
+-0.5934794286265720570652593999075140394951120851574757736368507 -1.374936411501855475208936369499709109613788253576031573976325812
+-0.119816102824915137365409328260197441343192772959324372400704574 -0.674408596276114408812180596279052797270036618954483698352831094
+-0.822904533359137588701842309308994641260001560442472451879974065 -1.428512709319194718098086773607131343821977720838097570339649989
+-0.124046915572431736043182218012395900110337001722584525200023426 -0.751772728991519719997872666678273386655927122433725548298040075
+-0.354031851959250259590913048980975741511651312393387481416361398 -0.123418049598114291090515014620956343363912615163758205200044178
+-1.600965694063270663912783047812142589410884340666552816697173111 -0.904411985750282138062528671646158419073591772007895044073647575
+-0.125992530663055157878581165067103872088725007404279739129668194 -0.575047015252474676903331191239694676208853801005165016905229386
+-1.352724266995643416386158737358295174154910999828941042095171732 -0.079139769285222687084205402672043792130524876605232950943141028
+-1.626225774918046039638231879623929171595787068781759900185057899 -0.802179156846695985561245517422637696038006551315218703725656489
+-0.821947193072184859403940160583508609806503097656538834224453451 0.085027616985277672752053889046370911324679782175285833954704178
+-0.120276321707759383665386975715414996773350652122218763827791916 -0.698269418140771128044944672550256322271674570768144944765039567
+-0.739041910226657389117017145041550737452487475177878640748354005 0.074194446837242321085024323434966145792300167141659048927273512
+-1.56938861186180092763146852141060449439447572653062971515412704 -0.985984833413961058874516331326557517096230622207720369791477435
+-1.006881206852801682034192051280526031203052925753478166293437617 -1.419654911656084901569580302535065494971819820572756782176888218
+-1.542632210832673882754420714516311383784153382813286088761659021 -0.304260339831659555561265482718185784760841448533817366616949411
+-1.116939938343673152071256039225311080430253173086337772033370502 0.048772997258519373794411631392948368247345115719410520332367166
+-1.392333548428587394993963563747220186103016647220252800138232479 -1.230288204345918613460312595166622688846850577305456859542801944
+-1.605035470293440911517394085688236782431895400987970105804261596 -0.452034746964519440554828797259805935181957693318836823359399866
+-1.519200395105816510825907718738577841134436969949859502124001466 -1.078626765116510258085850055503177735513647690153814792814465063
+-0.722903572184746125586297080655479706047620578699234612379581754 0.070992019456393528407566926966461668072094170711734493458753402
+-0.37755441692816029275447438973761937781437919266076117470408575 -0.101839408262683778497830989358460838310422535244753721102053829
+-0.185042500882740664972855965366851895860272121665357606109625071 -0.979517399100288665171581451468973043087078257372690607494254815
+-1.629761952120078797288118654443153271229507390929792065973351653 -0.77998207502749963134368262741571172530807787330356058966091058
+-1.367508858571248583462545330840346174970562148293805120762217678 -0.091276209743803588552204806950345624378948002371656330250027924
+-0.142694485822014250501925187701514180952212718374614464110060596 -0.486756926436282476886837056494413712978911263143254004500067644
+-1.637315189719959246262117484551852835273580834115565508351549984 -0.689597613830754029546412849759105185596836627269823580365855998
+-1.399555382198589626413092339954030078432712014097003654244713505 -0.119854061462457767771360137299324076881775057421741858585556362
+-1.515850333434316730492281740872730546956083859849079854626472754 -0.259561200324778481006508253678663448581874709047477730139845938
+-0.304227927557834974199295284693561310045916000298556947102440087 -1.167572238582034452331716971326505293434359089924631350496397458
+-0.989966885932428381178599251582096300857645373811959484956514852 -1.422358209966956615270891271954543750186378681310194698370982585
+-1.570275646757193731845903509811228447660004569821109429358601701 -0.359385979243931279611321903163751821641861550611143713389578441
+-0.182883675597083172931490027002621295999723930226278606371784969 -0.974605903893219658559439145889399095813164228050916881855676737
+-0.147904078528009308623614459230388490429622286319097709454791327 -0.876273907290101315565050395093772741178920021558313475237039682
+-0.663292636899092980615212263711851398083608130763599735731378552 -1.399359167008130283573244510017630887706011725252853947611279188
+-0.128323096947641209384284173045592733573258925905544755276006287 -0.558366603497291066747027595883972096229900293433378812928882101
+-0.980970932755952657010703269322633151878815193531915684616325847 -1.423637035486852400557367533858718954527886717824865574890573183
+-0.854858130289317930815795950969562180343308493816582845000494196 0.086776794780220627971587063973534296955526068807239114796527768
+-0.131956557017079379706756870963467513146029440625938783064304986 -0.536482940438592848557390310176631881233154908158682544788364229
+-1.325289349321823764411997495076834464542160784659545570171214808 -1.285217008449024037901104299091066204341659450033907009220812706
+
diff --git a/tests/data/nfft_1d_4_1.txt b/tests/data/nfft_1d_4_1.txt
new file mode 100644
index 0000000..65943d2
--- /dev/null
+++ b/tests/data/nfft_1d_4_1.txt
@@ -0,0 +1,15 @@
+1
+
+4
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02064024103910974619444094927932620346955741162547603478536509901
+0.02045501150664698515444899608259832622778238194598181287024763486 0.9939488506160911489389650693513789013109506369408951165937746417
+0.9401551428927267957022414807370223973718851691957439576252972471 0.1542994539339733543335730199449084161763486165489462822736549181
+-0.2612973453579209037151284175096642861921169860192733934510953033 0.7828695683967973168186338933650258807396624889375162083366143712
+
+0.565998413722617918679255268843282752550874111257973539159096939 -0.667528054035201428218796409882210240320137014441867766990661637
+
diff --git a/tests/data/nfft_1d_4_10.txt b/tests/data/nfft_1d_4_10.txt
new file mode 100644
index 0000000..07ae1e2
--- /dev/null
+++ b/tests/data/nfft_1d_4_10.txt
@@ -0,0 +1,33 @@
+1
+
+4
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.95114225448595864485771668441096849436578004346293095519883533
+0.7051415661084367709201814372310498119360160763950294411494790334 -0.6604794604223456380230982552803888415401900194413775997907443762
+-0.9186285185242277638228379667640336837252479527413557249796864599 0.1817134261437800570794256414315250650163873891461146114574620382
+0.6059166146272276531659924142280879090009660941492851068272418515 -0.8768399197753272524248224977827836246291177209791567885209025379
+
+-2.78552450319339825511647063385976360862560650570393207828085576 1.06060798515886018123765451790357025159997722249214282664206172
+-1.201857742272634274885398425117610229712535672838888030462512477 1.130447259128253504282730346196551047951416730763579001157829741
+1.124161609470661275785127757567625228894296623185457240213086818 -2.208402433299619537992881557765943395924620841543764076168584195
+-2.00879342275227589143768103286649399163426776793061077663388054 0.59385007572585163604426018849900105254958415281471654747827775
+-0.86027271406560717595737626293029272446163207987979417200905033 -1.501271375600254008580893609715271007040141639487754898074549975
+1.124989866940976900709283031865671585027660718542167425646303302 -2.207415589010754844142915568632161530828117007111694921846859416
+-1.63853874031070960507560390792948258286734689116024485233282455 0.74617706335152010413383854620529258731855442323207071895859751
+1.282204329192926680234319197163130517793773062961399164792220879 -1.149493132089830892996100308904856060157770804918246647415558456
+-2.87412025200307040363341296435866755042446924899103386216928239 0.62432708440635517563518864121038629072745398804635472544531046
+-2.73468793745368550637886951753094953528843271679817456909260817 0.55684637506266786858356853778190912798188073901034961633663111
+
diff --git a/tests/data/nfft_1d_4_20.txt b/tests/data/nfft_1d_4_20.txt
new file mode 100644
index 0000000..9664643
--- /dev/null
+++ b/tests/data/nfft_1d_4_20.txt
@@ -0,0 +1,53 @@
+1
+
+4
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.5284655557490481515292532588784919125603831832265742904204270183
+-0.9286394390238346619050912089405834508747965422378917835718069263 -0.07838835742104840389052756169146943544000206230123216084325830017
+-0.4763986698707299918532811013155870587476071700798709986377725737 -0.3158305122954834491361879876118745635891842225287967281157858672
+0.2184244610344805776516307003112049282480936070481769173095132673 0.3458309153991207858067077092337332970573207566667458110876416196
+
+0.890396464523579276453267377579226332775058718648151792397099755 -1.490887875158450277524034409769459649811490102102996651010845534
+0.069220933301298364057557230098662405933768848058952564156250269 -2.046386657859080600429579651642603454732023416499688316663618373
+-1.663308650727210396489233896628685296864651623687088532101725787 0.344943578263527573408972983745881264294014630499596938537967649
+0.084173256789292607027275023869978918842168066163663893162575372 -0.139348267495626674408181140263158272092138686504667621133153704
+-0.712449612519592868690170708765169743953304678496009598730518811 1.108535191348266749762075897531855316252149066474634718986071685
+-1.663579445816292213270215848777771896275806815339153866978387462 0.343678914254645293654845303246822477297583601121279228962419558
+-0.179151257392961577726651543772519858695752469034637375625793888 -0.060170985492440950082216638456550061312889111833004730491718642
+-1.592541916318523905292077949044119311901904470595711761544563852 -0.678652895868131518045066940549686604057230045098981925357744426
+0.769080171779457292893642729858236717588972065704555465489619545 -0.706296529167769816588952386675357047071739285528932321419049201
+0.642101946208886825155076534171718486690460064230565787982448695 -0.533405219335276435989871870071065022426502484709491527686854545
+0.885171320133738817185299066483958527045098914558852952744295246 -1.506671286419838951633257492484483347535746224803198469364209424
+0.919767254197934369008908786512959403525471335267002947194191074 -1.116575842065909758913862963993379329395522579993548206756556123
+-0.539979994091401748629844408398513403849722832809024390551518087 -0.039574717577382580839105135057199971908804169434625246004255121
+0.829975986169170917228943242162634532423175308403448102904136335 -1.630545650529465830956723909173445373828336017779562839039657111
+-0.41976402595287837781420764741121532981924371393865026485632815 -0.03435202747977591982897269553757558779797180539775534396779409
+-0.716458024825117918025269878436936451889832312234165032572011209 -0.095820017353669815507770577353972460189356972115393588834103603
+-1.508918573832771007790438920644555625912313771757229465217281767 -0.892087852303030329307030751923282161054273050232901574184405329
+-0.663735607773567435102810842535138809182375094301247713702928058 -0.061121712862610886826433696104215983292328320994961192364736622
+-0.923529422435451027086720838408743109151288799323369699151218198 1.157987886113263821681408411196014124791850204121380650839693302
+-1.632216113747611514663020813686014892256170362892106426728207082 -0.545593509008174643277531100410540648835852690695090255242348255
+
diff --git a/tests/data/nfft_1d_4_50.txt b/tests/data/nfft_1d_4_50.txt
new file mode 100644
index 0000000..69cb0c5
--- /dev/null
+++ b/tests/data/nfft_1d_4_50.txt
@@ -0,0 +1,113 @@
+1
+
+4
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.1841240265716411858721923885202834145897392121583597644960322461
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.531416327611542071221970089939764430329756625444579259583169101
+0.1944979336074391420204691208780533563017707991268605634570366201 -0.7793598342770851820561551396646691186537674923197586552161425487
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.04982739811897050028189209963034074300557183166488389610036293982
+
+0.925391022149404656929855669557000783710294556247805354078890822 -0.738336666242037693728846922654994343704000557442062268709536113
+-0.001912827106443391771310964273332564737520761765957947994303851 -1.317184276125753521584257501841767933101206029120323077951635582
+-2.141061519748133590632047062900948217188331292856725349424720416 -0.223463132425386661046779331368612993729376815762914202868741846
+0.994269245304768178694610061491266564229213350384600208500084478 -0.85052626276554643270717063510076370314178709931183905292912938
+-0.201182025549997085926568688815838828073867692403500326282155201 0.418924532742511792102679262255731352975022254383649638686983702
+-2.141443450102640843147994506760310558804736721883993931947241761 -0.224475558507284261824175560876261061439807547394290792209372591
+1.00756467767770875670655242759564940992357585583889210609860335 -1.05292329415133959616813847011121465574105950608019303259898275
+-2.014902028960947841267808938314842347469217400022089231779457472 -0.950381804421898864360530276734324927146025285489421459242511051
+1.061294586225315128011838538509870893548121627785302926186938773 -0.527984432978279900615909144117485021126485697943758402241639688
+1.046533273256835210198784394817330870658104420361322264712353449 -0.554392908674937204523250285604916686476768397771449447585993067
+0.917389445567824121945708280733263942210115671380740244945553911 -0.747227467075729583709872591580495038582431056504695526087568648
+1.042144283310996565576453075271858826332409944577963419987150742 -0.58078173877913165013555361813683166854147792495256361547528709
+1.111665072505716872951818803124634320334111854028314864763968326 -1.3912834838659041482949369308356846225852165971215080183499985
+0.842225363032692854389426400775699064260605817756427556069918169 -0.824206828072790223525399409290156241780435390622832843788455821
+1.060655911179184155462734250055094023689751111332343303864479775 -1.26978264096496995520579791234395031333644347652259341257781846
+1.687776668287463625752202883198215996488735785335396190048049462 -1.549483888129739129253095660714666412750410228914908115312927994
+-1.896704385835213504363199406039062989461075069513581924769197714 -1.076394673869941510600608095695186998107690868730420698954879799
+1.196276547719051344038373954997749808216193491191135021087305866 -1.52820021330757236397800445146283110374407689928881462031207898
+-0.744968380257020304631732369717426773973222826373739865802819698 0.486172945877124247204721680668953798588079668500820144972142203
+-2.073175244067804584591126881435850277970532169901157361188186289 -0.866869576075020371929099477279113904968584670412169206656903485
+1.232215300684025078235730558486316560717339387751268539397156357 -0.394958484882972068310260659795455679527038958117616558508794545
+1.094471914928292978889712603225291466519637495985555494948740287 -1.3549379619144567738356490452551283066748243283762710242138067
+1.41195872574081665617951896476779209618258314647611534573575891 -0.61102000619327916237083909322171521803139432877829521184039924
+-1.698325291983492185489336125984644048718007999308416690638486651 -1.220736031471102224588904152963392728793206960149566373802859319
+0.508601874187966459996314696325777639840528878427646588598278221 -1.079198307794714434476467757085950158793141655562888115648064055
+-1.726665485403465659445797330775566411066527004640484762410705983 0.247235839331921141082176539587440326401465591145418435188967444
+0.296746014939115769989856036808578476273432559401652120709920191 0.25491489550805390704068968859858454412512887732664450845250973
+-0.77806962680763522121516634359277310696406277446988208919651662 -1.447076433369851158176110241557611538324025820334830094433244997
+-2.053991809482645400927889559394192633046258315343473790223725885 -0.056685537320982346466863342505295536792222047610065527800922009
+-1.409631749197565950937512506362010828653402632907346876672874203 -1.350491751376653242438738953034792251868731891686443483504435662
+1.44239913401788948634428640532859317204522839494910955156153537 -0.653715184810702604398886049818770061143492746998035623420912
+1.700946573881823756781179225659297869981830316939811816294584137 -1.505175370475152912803947433813500680749964915570651793292713398
+0.994131497629049675989860288638032030067662862767301964290998967 -0.88402146903661884125810389868057192808870667317424392262709242
+-2.100905585835271739263645215962173302047490147877908935941944476 -0.818223729996217504056369404557771897146456337714022013085644641
+-0.817708636100621823935688490806929452900284242900248179847459465 0.486127404014010209480615761277527900687035926074852671096978537
+1.286830766681671728920079781716095839574951758934600152350923226 -1.62420419632759013671137864047864929582289670585412994143034373
+-2.174449632585240659156415451898461045327124450041505150883860012 -0.612260568508006381420778733462917335078905887682720868465074209
+-0.977959398309241510888756041977699689524555988246503330223073029 0.47789040440677542539673393766841478591293911302531730294039522
+-1.583855776462569165362580253819326309585865308657632917049430069 0.323517228299492180686780074581286156049975853566950409010294302
+1.026508023373050780058242470551920574573629161938274406547261805 -0.61211784741861622142925969988724049131143673190262987338210988
+0.546257855467986644780879402697921747952626891431377658626849445 -1.055439039583727846346294466624538221875188710382651175731170633
+-1.873654594618572114475916841457787729431184964440918890136454977 0.141527833081333015394299410099566232313369713517799501072943193
+0.994240977378288679580260678811788557346134298071822206723349493 -0.89218494265079398188423480047077221443844815006110533073893229
+1.008566020851064890044610520093284561630845962097765505604116993 -1.05952214649474542978531377806930836120127063618812154265205703
+1.004662723004007886850577442792609194052695321117984565080538695 -0.639434091172622183571208199256612870546400790665244404058140986
+1.212379813066139018705867385491822912438039215297180536481166445 -1.54843869745380768999871236082987182751593763286164971957081756
+0.565692340431068637284764165297013871879824142768120301241227149 -1.04276419997832779828312669183441394540609299051676903898126132
+1.150272540080389385186242823092021374305104427327748198629280761 -0.311556452288524516335189511925596488081229385458551241032753102
+1.234252400752675577776017414012359905447165253769716637558274004 -1.57358555889125111800515078531727234168790920785111910563385658
+-0.490680482977014726780016832848749168886145564975667239019588461 -1.428750498686012959284798164160864398797251547858278509737100049
+
diff --git a/tests/data/nfft_1d_50_1.txt b/tests/data/nfft_1d_50_1.txt
new file mode 100644
index 0000000..4160f79
--- /dev/null
+++ b/tests/data/nfft_1d_50_1.txt
@@ -0,0 +1,61 @@
+1
+
+50
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+0.4471019172896300480425609973334131570061388309850364774868901391 -0.8786687027770929787301562525828872003547410177701220950278899658
+0.02045501150664698515444899608259832622778238194598181287024763486 0.1944979336074391420204691208780533563017707991268605634570366201
+0.9401551428927267957022414807370223973718851691957439576252972471 -0.6717069716036456017860348911350501039034020263227184271420653514
+-0.2612973453579209037151284175096642861921169860192733934510953033 0.1841240265716411858721923885202834145897392121583597644960322461
+0.02064024103910974619444094927932620346955741162547603478536509901 0.531416327611542071221970089939764430329756625444579259583169101
+0.9939488506160911489389650693513789013109506369408951165937746417 -0.7793598342770851820561551396646691186537674923197586552161425487
+0.1542994539339733543335730199449084161763486165489462822736549181 -0.04982739811897050028189209963034074300557183166488389610036293982
+0.7828695683967973168186338933650258807396624889375162083366143712 -0.2152831478765442996690076717147867376683641103330644151579049018
+0.8196703465056007618204539469140589759950911405168070546332911559 -0.1430325904665435237882241441707630670064919508747748361914900932
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.5458569288127476004682590208265714990676611459841400026017844665
+0.7051415661084367709201814372310498119360160763950294411494790334 0.1856688150172391527088040246433169286752829500750590071977203062
+-0.9186285185242277638228379667640336837252479527413557249796864599 0.8193143821859564924477154245099351963436429074028089074430038904
+0.6059166146272276531659924142280879090009660941492851068272418515 0.4604487491339531156973853721884505256237012331451385915640611729
+-0.95114225448595864485771668441096849436578004346293095519883533 -0.8606535828683120015533980099014960687963233985081987928030018579
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.2028782443808202039078700152556584967073846417006795171717789768
+0.1817134261437800570794256414315250650163873891461146114574620382 0.7727562160593342436881229708062656539223995010850938445718232095
+-0.8768399197753272524248224977827836246291177209791567885209025379 0.2216455512897554102911455213296037106714896153079531893725412128
+-0.2027179913470305147020813461378369947382030993314951020253012762 0.8060520707732849845829519568044036159880831172244051400087891596
+0.1375057760993413749724126299163162462121619232755876011030820512 0.2494984458565048492106180084187393465587010901621886528310783225
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.692720462930580375837580120465281755163139346395305274413909974
+-0.9286394390238346619050912089405834508747965422378917835718069263 0.3484206501444620766420233468327938525050794194268200530793896515
+-0.4763986698707299918532811013155870587476071700798709986377725737 -0.5365723013330725289094471599220332027885871668229904917249565862
+0.2184244610344805776516307003112049282480936070481769173095132673 -0.4969838973904267472552603461634423875526049699439467087064029146
+0.5284655557490481515292532588784919125603831832265742904204270183 -0.1099633225953045478540363356794430416477263111166654723490589437
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.6756547625687923165084584127259768184144567299620396875756298559
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.8687355316920355914551191479618699998090617653378680974249892199
+0.3458309153991207858067077092337332970573207566667458110876416196 0.6573707348942885034556657549189062350008259948442460481059842193
+-0.01097686940732606761440422015891875954490441842087149586770120005 0.304092255431421724386276285709205877741518261756931899126135274
+0.2626555858903124974165091427737336367005240661151773835219310271 0.6923315191547459490617708873077670147989473956854336908747033971
+-0.4833001744929688887627302318231007732586579925667420767092911497 -0.8796784447840898801814093263554195453289300559080999490503364787
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.02378306045101476542041128049120676361822587626846492046663605803
+0.9495591103622864735737804468916775971319894153057637661282509133 0.9854996726419986830846511304498671064695985279263874167222764802
+0.1280772471342585841455757702545741213596517009855068302808317718 0.6717005563662298476413580139956207272362245386339234470714331016
+-0.1946943926350927100029394214607870756382213566654573743676056718 -0.8378043093573693797427988998204722223522674424680899644391943176
+-0.8391269337210497321784330437702418478537689733296865638890089907 -0.3904035160770493684430115148009967524256991556076221372265894266
+0.09000979948494377602070534800332955914923353808674104151336312387 0.3596214942327276879157632590476519168937540906266077357147819608
+-0.1766812336766545879148652249537685082960598655086779135604123172 0.7958628339830083470736213000945699871834494249238046750007408612
+-0.1002499995910402071291914694552929590775602478191912580994509247 0.5412530329369591795695895418300581875196694253995928145942436878
+0.8558312786548114618473704491843378278983698142481509704680004653 -0.2613537732594101756765510813982454595302525696986533152069370387
+0.5356506216935318567168964679980224448474954197740742721804425662 0.435828324052182771698190217679588447000849558850289775314256024
+-0.05251382922654688111844675415661855947948761360659425718759593363 -0.5937465792299257034198201886287226952400923687140794966015317515
+0.9518095182124288782767378820155949547911261560251647626870735792 -0.3218041479377133937935849601301732622610394503588237190352903562
+0.9956223852813107496522616247115213137215848581937907906567140918 -0.7360914574746049921434644450737043073420684008447334807822853276
+0.6741052796006089834676571454955036801632897076493615121596900136 0.553187364694831117272984365230687982396001421226655790220741406
+-0.8697750560716627155371707094260289644371901052310063829991901781 0.01417576197421767893279369309359545621976513518858252000938611031
+0.539462018274751480324642644804511358394409237082129058457521908 0.6897588478092123244219967589255606032813281483291811335150355542
+-0.4274845026027779916855619203781095649893449575458629944853980527 -0.6996703139503628987183738269577949838863048093871175900433716284
+-0.8604697501072873707535504424154609782723273602355359333803551115 -0.1309677757443125377194229250386971011803561306992623123400631451
+0.3822062430356176188977280281604014506988427784943414973817258933 0.09049503268981439002460219767349217513483951010643022102321620286
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.7721031360269444536624854764846278079390436516442447307214583713
+
+1.9472565137507570125692593999729015919614448838256364563491198 -1.0730388153348157306178910804266107605589865320805958993614921
+
diff --git a/tests/data/nfft_1d_50_10.txt b/tests/data/nfft_1d_50_10.txt
new file mode 100644
index 0000000..e502317
--- /dev/null
+++ b/tests/data/nfft_1d_50_10.txt
@@ -0,0 +1,79 @@
+1
+
+50
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.5458569288127476004682590208265714990676611459841400026017844665
+0.7051415661084367709201814372310498119360160763950294411494790334 0.1856688150172391527088040246433169286752829500750590071977203062
+-0.9186285185242277638228379667640336837252479527413557249796864599 0.8193143821859564924477154245099351963436429074028089074430038904
+0.6059166146272276531659924142280879090009660941492851068272418515 0.4604487491339531156973853721884505256237012331451385915640611729
+-0.95114225448595864485771668441096849436578004346293095519883533 -0.8606535828683120015533980099014960687963233985081987928030018579
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.2028782443808202039078700152556584967073846417006795171717789768
+0.1817134261437800570794256414315250650163873891461146114574620382 0.7727562160593342436881229708062656539223995010850938445718232095
+-0.8768399197753272524248224977827836246291177209791567885209025379 0.2216455512897554102911455213296037106714896153079531893725412128
+-0.2027179913470305147020813461378369947382030993314951020253012762 0.8060520707732849845829519568044036159880831172244051400087891596
+0.1375057760993413749724126299163162462121619232755876011030820512 0.2494984458565048492106180084187393465587010901621886528310783225
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.692720462930580375837580120465281755163139346395305274413909974
+-0.9286394390238346619050912089405834508747965422378917835718069263 0.3484206501444620766420233468327938525050794194268200530793896515
+-0.4763986698707299918532811013155870587476071700798709986377725737 -0.5365723013330725289094471599220332027885871668229904917249565862
+0.2184244610344805776516307003112049282480936070481769173095132673 -0.4969838973904267472552603461634423875526049699439467087064029146
+0.5284655557490481515292532588784919125603831832265742904204270183 -0.1099633225953045478540363356794430416477263111166654723490589437
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.6756547625687923165084584127259768184144567299620396875756298559
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.8687355316920355914551191479618699998090617653378680974249892199
+0.3458309153991207858067077092337332970573207566667458110876416196 0.6573707348942885034556657549189062350008259948442460481059842193
+-0.01097686940732606761440422015891875954490441842087149586770120005 0.304092255431421724386276285709205877741518261756931899126135274
+0.2626555858903124974165091427737336367005240661151773835219310271 0.6923315191547459490617708873077670147989473956854336908747033971
+-0.4833001744929688887627302318231007732586579925667420767092911497 -0.8796784447840898801814093263554195453289300559080999490503364787
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.02378306045101476542041128049120676361822587626846492046663605803
+0.9495591103622864735737804468916775971319894153057637661282509133 0.9854996726419986830846511304498671064695985279263874167222764802
+0.1280772471342585841455757702545741213596517009855068302808317718 0.6717005563662298476413580139956207272362245386339234470714331016
+-0.1946943926350927100029394214607870756382213566654573743676056718 -0.8378043093573693797427988998204722223522674424680899644391943176
+-0.8391269337210497321784330437702418478537689733296865638890089907 -0.3904035160770493684430115148009967524256991556076221372265894266
+0.09000979948494377602070534800332955914923353808674104151336312387 0.3596214942327276879157632590476519168937540906266077357147819608
+-0.1766812336766545879148652249537685082960598655086779135604123172 0.7958628339830083470736213000945699871834494249238046750007408612
+-0.1002499995910402071291914694552929590775602478191912580994509247 0.5412530329369591795695895418300581875196694253995928145942436878
+0.8558312786548114618473704491843378278983698142481509704680004653 -0.2613537732594101756765510813982454595302525696986533152069370387
+0.5356506216935318567168964679980224448474954197740742721804425662 0.435828324052182771698190217679588447000849558850289775314256024
+-0.05251382922654688111844675415661855947948761360659425718759593363 -0.5937465792299257034198201886287226952400923687140794966015317515
+0.9518095182124288782767378820155949547911261560251647626870735792 -0.3218041479377133937935849601301732622610394503588237190352903562
+0.9956223852813107496522616247115213137215848581937907906567140918 -0.7360914574746049921434644450737043073420684008447334807822853276
+0.6741052796006089834676571454955036801632897076493615121596900136 0.553187364694831117272984365230687982396001421226655790220741406
+-0.8697750560716627155371707094260289644371901052310063829991901781 0.01417576197421767893279369309359545621976513518858252000938611031
+0.539462018274751480324642644804511358394409237082129058457521908 0.6897588478092123244219967589255606032813281483291811335150355542
+-0.4274845026027779916855619203781095649893449575458629944853980527 -0.6996703139503628987183738269577949838863048093871175900433716284
+-0.8604697501072873707535504424154609782723273602355359333803551115 -0.1309677757443125377194229250386971011803561306992623123400631451
+0.3822062430356176188977280281604014506988427784943414973817258933 0.09049503268981439002460219767349217513483951010643022102321620286
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.7721031360269444536624854764846278079390436516442447307214583713
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.7113282365127787106295924505560767722199840055537543517442585349
+0.1944979336074391420204691208780533563017707991268605634570366201 0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.6127602430473631495393181955733023028663546816025211937039540524
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.5944056790460496081717996899055920305811666877696698395774078378
+0.531416327611542071221970089939764430329756625444579259583169101 0.9839367502424209997890558933686976016082869978582241397510153252
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.4548419343247805224460011391703079342763504118566706946966391853
+-0.04982739811897050028189209963034074300557183166488389610036293982 -0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.2496600323413886386258990085306122333313701779141184118995463959
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.2013567579813494116381818105314838610969816486807952028421948124
+
+1.385028254208267623800211852742162871599280365089061243293502 -5.9330498721104897475182725714738583467259159612428369659579708
+-2.8291773659229911996975090973193007181116033421347026576494435 -5.0622641033130651110994889202926377092766475320527317073414208
+-3.00450806844961038159429578538998139474115932474050845875420584 2.58886286704912317892634939674878914781070660264433090301829387
+1.959454464264022910885318132564236114927955126576031757061562 1.564594787349084054501296739727107931842068321580896108033175
+-2.4050354747208813280744669179490974799316830269447997778796055 -0.9136782862174700411408939910755030807250918495420304208540928
+-2.97033902948434591541387507568853609867402561979551092291072397 2.55668490585225156696602846255349413703868452925531623159660713
+-0.728502565547066556029624958992717820902878814606189287363339 -3.724458252212516923552318232463946302963372595885389130846098
+-0.929417410200694759360123209752409832307713959917223241281328 -0.9915675028160122927409400616590815134436570245641315526066652
+-7.960500496004072400814799511417204328251043790671946619222155 0.66062443255779688465318478329418789747588767153404868280934
+4.564738981621565477611596401899371015580614488496852114255519 3.227373062899941549460674311448901402610157848650223728965026
+
diff --git a/tests/data/nfft_1d_50_20.txt b/tests/data/nfft_1d_50_20.txt
new file mode 100644
index 0000000..549b078
--- /dev/null
+++ b/tests/data/nfft_1d_50_20.txt
@@ -0,0 +1,99 @@
+1
+
+50
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.692720462930580375837580120465281755163139346395305274413909974
+-0.9286394390238346619050912089405834508747965422378917835718069263 0.3484206501444620766420233468327938525050794194268200530793896515
+-0.4763986698707299918532811013155870587476071700798709986377725737 -0.5365723013330725289094471599220332027885871668229904917249565862
+0.2184244610344805776516307003112049282480936070481769173095132673 -0.4969838973904267472552603461634423875526049699439467087064029146
+0.5284655557490481515292532588784919125603831832265742904204270183 -0.1099633225953045478540363356794430416477263111166654723490589437
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.6756547625687923165084584127259768184144567299620396875756298559
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.8687355316920355914551191479618699998090617653378680974249892199
+0.3458309153991207858067077092337332970573207566667458110876416196 0.6573707348942885034556657549189062350008259948442460481059842193
+-0.01097686940732606761440422015891875954490441842087149586770120005 0.304092255431421724386276285709205877741518261756931899126135274
+0.2626555858903124974165091427737336367005240661151773835219310271 0.6923315191547459490617708873077670147989473956854336908747033971
+-0.4833001744929688887627302318231007732586579925667420767092911497 -0.8796784447840898801814093263554195453289300559080999490503364787
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.02378306045101476542041128049120676361822587626846492046663605803
+0.9495591103622864735737804468916775971319894153057637661282509133 0.9854996726419986830846511304498671064695985279263874167222764802
+0.1280772471342585841455757702545741213596517009855068302808317718 0.6717005563662298476413580139956207272362245386339234470714331016
+-0.1946943926350927100029394214607870756382213566654573743676056718 -0.8378043093573693797427988998204722223522674424680899644391943176
+-0.8391269337210497321784330437702418478537689733296865638890089907 -0.3904035160770493684430115148009967524256991556076221372265894266
+0.09000979948494377602070534800332955914923353808674104151336312387 0.3596214942327276879157632590476519168937540906266077357147819608
+-0.1766812336766545879148652249537685082960598655086779135604123172 0.7958628339830083470736213000945699871834494249238046750007408612
+-0.1002499995910402071291914694552929590775602478191912580994509247 0.5412530329369591795695895418300581875196694253995928145942436878
+0.8558312786548114618473704491843378278983698142481509704680004653 -0.2613537732594101756765510813982454595302525696986533152069370387
+0.5356506216935318567168964679980224448474954197740742721804425662 0.435828324052182771698190217679588447000849558850289775314256024
+-0.05251382922654688111844675415661855947948761360659425718759593363 -0.5937465792299257034198201886287226952400923687140794966015317515
+0.9518095182124288782767378820155949547911261560251647626870735792 -0.3218041479377133937935849601301732622610394503588237190352903562
+0.9956223852813107496522616247115213137215848581937907906567140918 -0.7360914574746049921434644450737043073420684008447334807822853276
+0.6741052796006089834676571454955036801632897076493615121596900136 0.553187364694831117272984365230687982396001421226655790220741406
+-0.8697750560716627155371707094260289644371901052310063829991901781 0.01417576197421767893279369309359545621976513518858252000938611031
+0.539462018274751480324642644804511358394409237082129058457521908 0.6897588478092123244219967589255606032813281483291811335150355542
+-0.4274845026027779916855619203781095649893449575458629944853980527 -0.6996703139503628987183738269577949838863048093871175900433716284
+-0.8604697501072873707535504424154609782723273602355359333803551115 -0.1309677757443125377194229250386971011803561306992623123400631451
+0.3822062430356176188977280281604014506988427784943414973817258933 0.09049503268981439002460219767349217513483951010643022102321620286
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.7721031360269444536624854764846278079390436516442447307214583713
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.7113282365127787106295924505560767722199840055537543517442585349
+0.1944979336074391420204691208780533563017707991268605634570366201 0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.6127602430473631495393181955733023028663546816025211937039540524
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.5944056790460496081717996899055920305811666877696698395774078378
+0.531416327611542071221970089939764430329756625444579259583169101 0.9839367502424209997890558933686976016082869978582241397510153252
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.4548419343247805224460011391703079342763504118566706946966391853
+-0.04982739811897050028189209963034074300557183166488389610036293982 -0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.2496600323413886386258990085306122333313701779141184118995463959
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.2013567579813494116381818105314838610969816486807952028421948124
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.85858010457166611374976182888109386496982051035674989499979384
+0.1856688150172391527088040246433169286752829500750590071977203062 0.7326702292582058588316598422918662773838658327971514003421703067
+0.8193143821859564924477154245099351963436429074028089074430038904 -0.2697443704573465465233716116511309018200366900116819867580635278
+0.4604487491339531156973853721884505256237012331451385915640611729 -0.6468087813680422377672655136982917947328505318460482424201962
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.2812302577494115409480047067683469320314228801749259890701395474
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.02167413194230472805204979364706614220652157873015883116130884482
+0.7727562160593342436881229708062656539223995010850938445718232095 -0.680894955890704100546661726757747116024714493408288024374190234
+0.2216455512897554102911455213296037106714896153079531893725412128 -0.9306530725185795934583927665790248017610038861531896668451002839
+0.8060520707732849845829519568044036159880831172244051400087891596 0.3319152007540851906913026983763584438955853838764895977762668678
+0.2494984458565048492106180084187393465587010901621886528310783225 -0.4414898031680223608932387792017485771255689761890070706015387399
+
+6.4632634698243312739944272267593690011433068375265071711107067 -1.8367332945708344188982318180800803433759244037591758500395994
+8.3720007061629638190503437621081065683981009567777458756269271 0.4157214514427998253218320840493298869857408344968518988018567
+-4.88822674519743418893622391733533121722168768573109521075304119 -0.66046870853705510898370663498970589361494469267987736829282785
+-3.010781653954006303092332373250318836675616740767821000995606 -2.853169263384910895606480834287640074626640122934861895330514
+1.8611254405035283078664623267177748636884742771758314110311603 5.230742382878461780646757229786857893524006166993013405057699
+-4.90561287049199313101711100868967951623349734582316785394593387 -0.62983214428478836314673526620278708281774989609355844910560616
+-2.391984392741245136459472583714014575441952010703209543792825 -2.306993598526310372149454158348817232355074544391097138240855
+0.0798828690724005877202371663812104213671179930321378817776035 4.8468206345398614033281791469588325318261727690154946379999674
+-1.2799504751361819103944058704815069932410745283805527492886996 4.510714254862914067712929851278783408465214146418225386998429
+-2.580519194743856018874567615196825140593199099643901772821188 1.417638908158090271671299759203892870360331162533632350178041
+6.7691698506743182076032013501312826245592305981500190391151665 -1.8062709717785970829487144840140366890288054468333572390907395
+-2.824438118293109926293667678325235765452579746197447736032104 -7.0396167831176412106657677175982813331904599669535229958212282
+-2.006049320307903446978940739296874333726149683246827215874369 -8.251661124525055747973898556122014676640283677116508971309083
+3.0047366020977480148761102104266169430072624591965157905135807 -2.3373208327070672920404615357830667662600498117027308629831281
+-0.012778654445586628382849910525239193240544706119382393302673 -6.027321627967311786430261973621978691465964584955528386747645
+-0.0888072451127357736613594555050938085551300509630436888020262 -1.3115940812559851201425342947549295313827030921748613048963378
+1.6972982340144849028629307864741332400361759082526299923516694 -3.8521110098158871111761657205673164586942561132548402927597002
+1.469602289271105455092734539729953202579086205121758907555162 3.85609395507618161380280544073380993771999153882594969033197
+-0.6533766728250374495952200985413633544401273611335775257383909 -4.2678222844290359146264116672767716484073558384916354860778665
+1.723727081940591234684890125982994929131760834716173359966387 6.1623485321912578870722505178521491566609341809103715172668666
+
diff --git a/tests/data/nfft_1d_50_50.txt b/tests/data/nfft_1d_50_50.txt
new file mode 100644
index 0000000..1220f44
--- /dev/null
+++ b/tests/data/nfft_1d_50_50.txt
@@ -0,0 +1,159 @@
+1
+
+50
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.7721031360269444536624854764846278079390436516442447307214583713
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.7113282365127787106295924505560767722199840055537543517442585349
+0.1944979336074391420204691208780533563017707991268605634570366201 0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.6127602430473631495393181955733023028663546816025211937039540524
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.5944056790460496081717996899055920305811666877696698395774078378
+0.531416327611542071221970089939764430329756625444579259583169101 0.9839367502424209997890558933686976016082869978582241397510153252
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.4548419343247805224460011391703079342763504118566706946966391853
+-0.04982739811897050028189209963034074300557183166488389610036293982 -0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.2496600323413886386258990085306122333313701779141184118995463959
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.2013567579813494116381818105314838610969816486807952028421948124
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.85858010457166611374976182888109386496982051035674989499979384
+0.1856688150172391527088040246433169286752829500750590071977203062 0.7326702292582058588316598422918662773838658327971514003421703067
+0.8193143821859564924477154245099351963436429074028089074430038904 -0.2697443704573465465233716116511309018200366900116819867580635278
+0.4604487491339531156973853721884505256237012331451385915640611729 -0.6468087813680422377672655136982917947328505318460482424201962
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.2812302577494115409480047067683469320314228801749259890701395474
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.02167413194230472805204979364706614220652157873015883116130884482
+0.7727562160593342436881229708062656539223995010850938445718232095 -0.680894955890704100546661726757747116024714493408288024374190234
+0.2216455512897554102911455213296037106714896153079531893725412128 -0.9306530725185795934583927665790248017610038861531896668451002839
+0.8060520707732849845829519568044036159880831172244051400087891596 0.3319152007540851906913026983763584438955853838764895977762668678
+0.2494984458565048492106180084187393465587010901621886528310783225 -0.4414898031680223608932387792017485771255689761890070706015387399
+0.692720462930580375837580120465281755163139346395305274413909974 0.04675554236208552284539297942143061834219393972333359647545914081
+0.3484206501444620766420233468327938525050794194268200530793896515 -0.8152568938325646993310760006867681539054279301843202148958871677
+-0.5365723013330725289094471599220332027885871668229904917249565862 0.3952163240756655529212705355453418848569049122249531536768131848
+-0.4969838973904267472552603461634423875526049699439467087064029146 -0.9395163144138835125672454933008856593503204403133472584898229717
+-0.1099633225953045478540363356794430416477263111166654723490589437 -0.08780353633292157461769946866167963633505729824902226238512671868
+-0.6756547625687923165084584127259768184144567299620396875756298559 -0.1743560068378512679152575299947443762504689480476570621749324843
+0.8687355316920355914551191479618699998090617653378680974249892199 0.6018835924636782523215034400201993341434060856497418585329625279
+0.6573707348942885034556657549189062350008259948442460481059842193 0.5094537464059880326374352490064905763350159638438638190213421193
+0.304092255431421724386276285709205877741518261756931899126135274 -0.6412882157453879879998117648467144628970706782597054160685555631
+0.6923315191547459490617708873077670147989473956854336908747033971 0.9017103216368149546517732133490469846549850682301607701578308401
+-0.8796784447840898801814093263554195453289300559080999490503364787 0.9631270643127979384664069651403286361478505285019531813591892173
+-0.02378306045101476542041128049120676361822587626846492046663605803 -0.6210835173793688086670082589175993809833456274087668762475476635
+0.9854996726419986830846511304498671064695985279263874167222764802 -0.8137281645240375388576750044830353268919925528507904843095256157
+0.6717005563662298476413580139956207272362245386339234470714331016 -0.7041297500866612607234884784407130317305843364144413223065323821
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.1235721593345202217795554759876880268687368789792682195280803184
+-0.3904035160770493684430115148009967524256991556076221372265894266 0.01793996302825844948175557573252934185711456214972052895861572493
+0.3596214942327276879157632590476519168937540906266077357147819608 -0.3411596862218241172328579047617234818967459872060847679144866809
+0.7958628339830083470736213000945699871834494249238046750007408612 -0.7379746599220903325806827424480469595800618414934950958452657346
+0.5412530329369591795695895418300581875196694253995928145942436878 0.6843546378904107483368305041075808036585650068151329599810630045
+-0.2613537732594101756765510813982454595302525696986533152069370387 0.4265099420399003863248167494626862205659560797404855195341684806
+0.435828324052182771698190217679588447000849558850289775314256024 -0.9874151891964456486571993218370826427302121071375833081581536189
+-0.5937465792299257034198201886287226952400923687140794966015317515 0.4601637140807105378191037234478805179877043129140064777542238544
+-0.3218041479377133937935849601301732622610394503588237190352903562 -0.4841039802362244364267157134690841461075259779700777041439742307
+-0.7360914574746049921434644450737043073420684008447334807822853276 0.9965877589863013394561112420396792373833365736836351278348301833
+0.553187364694831117272984365230687982396001421226655790220741406 0.191567730523304776574190978829765313731471509331205854313016986
+0.01417576197421767893279369309359545621976513518858252000938611031 -0.9100049476348622207723944867294612891098821253248738836563459568
+0.6897588478092123244219967589255606032813281483291811335150355542 0.8085565025927605798160394591787637574375967583263627553971120289
+-0.6996703139503628987183738269577949838863048093871175900433716284 -0.8851479413535487385573817957243936843534909265401263726020814395
+-0.1309677757443125377194229250386971011803561306992623123400631451 0.6064591258881136876029163103297147737049475826316704311935105558
+0.09049503268981439002460219767349217513483951010643022102321620286 -0.7125906556497681391201675092436355218810428000432951124150783383
+
+-5.4499300117034449160705475793178375869748224239247165624959316 -1.5705334701270204076864990440193317259309785655719915317186916
+-1.8900079647622192895721776226602107011959806156186037919269451 2.5814121696347737676556587351865804715970404385489261943179216
+3.51559280265239014280087045207392251248670575564727055669426171 -6.3674623060024637148495288235188683780948740027889189808743689
+-2.487336751741566045841964661530308147206833307262545781268942 -1.702313780933219899599753020808416933402614380903239559579526
+-2.1160152958951143100163172556510946410424585989296876356344468 2.0481026872656035080537424942922128925346386452808341452918548
+3.55833122382877499123399791841994646424590760616268331730128403 -6.35900071546741724030328392405786092537174200856820287495514262
+-1.892342590537650803320427052820745592081017795845827648434199 -4.272101634215493309180565002834890827215271362314762079614856
+3.2321146153301262110658316951042176869296898050455683976435468 2.0860158997499726626299196516206886321911225688933203810082413
+3.314833879347901273507388309901899996378135264464590815212941 1.031308867574219538289896559252443469574150841564736595361181
+-5.588401327979993722576583723036487955157196177811649910502144 -4.229016056354919900146598886529247444430411019104556929592187
+-5.2942153856016533192552922067029802762988100445349159336176674 -0.7330880671386403749006869494796941682675430329998511224117819
+-3.976007492274990936829249738374150817238552786721718974291676 0.0691389684750258339136098187061108287988167234761782493771555
+2.786356724029585206794510237889876184186110009697910819233058 -12.048460336744624308427669378838476392502448244645644769626782
+0.768639234675115849035060546141456173675871804469869468647 1.9614434609466432297388751384275148375039925544116961210129043
+3.789906732594942774237426010225423324469188591714748852430482 -1.673116560443689589953275192744771240488098615900724953049052
+-2.7066626362287878768370350697227007130358521815707217676913958 -3.7575314226058225509786342686850398449575058285922529338901543
+-0.391649057200408760765470700626844541338409073672263389350579 -4.6819450423363842831700462541606403639390982386100757223238868
+0.712577439920001751409048766919336100293033270664439047598934 7.21349962416356204483533208555919848273932940110972988814072
+-0.628035460528289984273239793794170496993892197097858418654565 1.0451533477344268116519755778628698297735700986064962588798964
+4.0776783670910420957993019381550390403835958199641504982658936 2.300726612652109213866903615438441419566297214196640090426858
+-0.0684075306410076981099429042918841407788794502837671775431166 4.820926252444181781348308363584612349681255286453469902216623
+4.848558621729880499342536675724702461242792578979651764157299 -10.870638433874068727434881020261743172184853525471158515944854
+-6.0932131782696817757777061574931659983918174217606578985033816 -6.0097936507655024058666928479118666793107104453819543189468346
+2.0677142352432491218932607087239311740096553004911906269357138 -6.4892439866890784640053601062936057004338605230730124334787153
+1.3154471313705375405663681707720337283355462540809611440085692 -1.2529348616546458467092152736200661360926339778883256115601257
+-3.2683785500033086151201018838333828358109728912695019036323943 2.9707235186524988677554448682559264019781539308478803889169542
+4.8663068854315138575336491896694555428466314013729043378569012 3.6039996778796744919189834275922526390919971829936934160828392
+-4.5636249951955067658879280923826812149839223025431817581914041 -3.879594515475912188416833144113847098127276577498819430712413
+2.25205848191938151200112540703781297470493556215853246010229653 -3.30517414787929056783508831967572921095121561008087402579314813
+-0.3854796421073942349442774596784935214588470273113696155821983 -5.1886571689225882516564870312475114732558921290188800392550164
+-5.36538330907532959821443816157646165568761445039450590347017 -6.4489068755790690258798956988991466595855190231579324005191131
+-1.4138626893922242713131722304090857221158059234308445919354568 -4.5712861324564736459989096756993754675786702741511858646523463
+-0.014003690520693507972109138943562932466075091402550369945836 -1.832595300918029737038491401586671626367043649367704532244943
+2.3704146031283183186396492599213100601343129258885968311172476 1.4003665582336325968462147145443847149683941607363462694296648
+0.8234622425421302624706432031761725570210221498990189967164295 2.083110344259950766050650253487003001894121527859960261143714
+6.007355617006239807216056645246004887140383919581782027754641 0.257755340495489798929883543699554531526373696252657234854574
+-4.7220959996233236691242903094933995415023786555052154239656841 3.7241848565202583502291131555576293316987338934379973432405772
+-0.905773748483608122505344341549246025964722019376374748461931 4.207724488724576761004360424256405051169002569490593118164571
+-1.8281075019493678600063881455910037338349742960189236090171434 4.3366680046291450543685143950181259753182867900466674234915519
+-4.674434721577513708728855012892754634545930199583344770698109 2.60393198744631372704970336722500501310499916672024245850518
+0.6464334750363472624233301544718660342665938289504623076303993 -2.3819503567749410718804012401331647696951807417555336057445905
+-0.1802297004103158110315440437533570927964262044555743159996181 -1.2909247694463980353276930319374606106137498979036475632863034
+0.517566044568665796367868060013647984799268458014933132087027 -1.914793005440519209980249262930747550631308491788698664949719
+-2.269871907967849811682395950552673566165914987782155771511777 -4.07721462426921773669832060394111624871833958685804469993815
+2.2490058155082289064948158860992219089057345128870702202790069 -7.1754031779234997362606239227039521530010789046898978659297478
+2.644538672106706711296862655752644376586892772900801545267023 8.985739921386985982635083038770122768636379579201205539622926
+0.6138238145392472953792698300578437900640069518222306825293892 -2.8439015590021963472286846117121938523286070444811051515160072
+1.1358898247831745251452815142840800698640941207683134337357317 8.7421163453647793681866857294241981132956527917014066687972549
+5.095520593752918866958280663773628064616476596035519465045405 8.715750028381244881007426753117526949323478670483505825483777
+-1.5276845918813588881309704837492091168908588241906825736962491 -1.0482472072734486913061898270781785039752162758514909654407455
+
diff --git a/tests/data/nfft_2d_10_10_20.txt b/tests/data/nfft_2d_10_10_20.txt
new file mode 100644
index 0000000..7d5ad43
--- /dev/null
+++ b/tests/data/nfft_2d_10_10_20.txt
@@ -0,0 +1,170 @@
+2
+
+10
+10
+
+20
+
++0.3173894901710712338304379034862579946422889909408459156044823877
+-0.2206549379852138057578743061470069389191225157277024467333194435
++0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4643197195119173309525456044702917254373982711189458917859034631
++0.01022750575332349257722449804129916311389119097299090643512381743
+-0.2381993349353649959266405506577935293738035850399354993188862868
++0.4700775714463633978511207403685111986859425845978719788126486235
++0.1092122305172402888258153501556024641240468035240884586547566337
+-0.1306486726789604518575642087548321430960584930096366967255476517
++0.2642327778745240757646266294392459562801915916132871452102135091
++0.01032012051955487309722047463966310173477870581273801739268254951
+-0.03919417871052420194526378084573471772000103115061608042162915008
++0.4969744253080455744694825346756894506554753184704475582968873208
+-0.1579152561477417245680939938059372817945921112643983640578929336
++0.07714972696698667716678650997245420808817430827447314113682745907
++0.1729154576995603929033538546168666485286603783333729055438208098
++0.3914347841983986584093169466825129403698312444687581041683071856
+-0.005488434703663033807202110079459379772452209210435747933850600026
++0.4098351732528003809102269734570294879975455702584035273166455779
++0.1313277929451562487082545713868668183502620330575886917609655136
++0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2416500872464844443813651159115503866293289962833710383546455749
++0.3525707830542183854600907186155249059680080381975147205747395167
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.4593142592621138819114189833820168418626239763706778624898432299
++0.4747795551811432367868902234458387985659947076528818830641254566
++0.3029583073136138265829962071140439545004830470746425534136209257
++0.06403862356712929207278788512728706067982585049275341514041588589
+-0.4755711272429793224288583422054842471828900217314654775994176650
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.4195634668605248660892165218851209239268844866648432819445044954
++0.09085671307189002853971282071576253250819369457305730572873101910
++0.04500489974247188801035267400166477957461676904337052075668156194
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.08834061683832729395743261247688425414802993275433895678020615860
+-0.1013589956735152573510406730689184973691015496657475510126506381
+-0.05012499979552010356459573472764647953878012390959562904972546234
++0.06875288804967068748620631495815812310608096163779380055154102558
++0.4279156393274057309236852245921689139491849071240754852340002326
+
++0.5356506216935318567168964679980224448474954197740742721804425662 -0.9874151891964456486571993218370826427302121071375833081581536189
+-0.05251382922654688111844675415661855947948761360659425718759593363 +0.4601637140807105378191037234478805179877043129140064777542238544
++0.9518095182124288782767378820155949547911261560251647626870735792 -0.4841039802362244364267157134690841461075259779700777041439742307
++0.9956223852813107496522616247115213137215848581937907906567140918 +0.9965877589863013394561112420396792373833365736836351278348301833
++0.6741052796006089834676571454955036801632897076493615121596900136 +0.1915677305233047765741909788297653137314715093312058543130169860
+-0.8697750560716627155371707094260289644371901052310063829991901781 -0.9100049476348622207723944867294612891098821253248738836563459568
++0.5394620182747514803246426448045113583944092370821290584575219080 +0.8085565025927605798160394591787637574375967583263627553971120289
+-0.4274845026027779916855619203781095649893449575458629944853980527 -0.8851479413535487385573817957243936843534909265401263726020814395
+-0.8604697501072873707535504424154609782723273602355359333803551115 +0.6064591258881136876029163103297147737049475826316704311935105558
++0.3822062430356176188977280281604014506988427784943414973817258933 -0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.7605582778547942408060351317015194879473019118917060721292547632
+-0.8786687027770929787301562525828872003547410177701220950278899658 +0.9359455243018989598720894094889086512450300947660621306436953491
++0.1944979336074391420204691208780533563017707991268605634570366201 +0.6403329703003144866532882811013167888478814399097147096856286200
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.7566145378422368715122716757726615136162685098609876740055635889
++0.1841240265716411858721923885202834145897392121583597644960322461 +0.4983934648670891328811187892957709407528386913849427405222396790
++0.5314163276115420712219700899397644303297566254445792595831691010 -0.4971948424110283155918942363898656650230845195141350175248779212
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.3682837387895926737476498418989480477365801929350913148252356807
+-0.04982739811897050028189209963034074300557183166488389610036293982 +0.6148970507477253459184467315745337121338375212139515007860628315
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.9083524682273578446532722997799475788834527253595073048265657245
+-0.1430325904665435237882241441707630670064919508747748361914900932 -0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.5193518691808852117378350732261309854332184624171433727414006814
++0.1856688150172391527088040246433169286752829500750590071977203062 -0.9750431258817692289559363598684739941265076062018304867776204819
++0.8193143821859564924477154245099351963436429074028089074430038904 +0.05005097085661604605086728229374112382053058454731767435671635371
++0.4604487491339531156973853721884505256237012331451385915640611729 +0.4399150750505159978489133507713340072340352057744402647976718275
+-0.8606535828683120015533980099014960687963233985081987928030018579 +0.1872909367861505164718492831692222169018789408412172493435499423
+-0.2028782443808202039078700152556584967073846417006795171717789768 +0.9419321039051109549245680082622391092246632631231828777233002149
++0.7727562160593342436881229708062656539223995010850938445718232095 -0.4287041936652777153072881590344721321081952456510997660597381855
++0.2216455512897554102911455213296037106714896153079531893725412128 -0.2333391111205556198207256592076331117879880842914267473885863455
++0.8060520707732849845829519568044036159880831172244051400087891596 +0.7889477067277564731712862630611699647549102063099584994888747696
++0.2494984458565048492106180084187393465587010901621886528310783225 -0.2563747285446000361218237435955077669028092056157149416120292486
++0.6927204629305803758375801204652817551631393463953052744139099740 +0.8211574497098423675796354902233745259806437217163965161734702361
++0.3484206501444620766420233468327938525050794194268200530793896515 -0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5365723013330725289094471599220332027885871668229904917249565862 -0.5566744269539672218404388199827460990960984415899809143036909069
+-0.4969838973904267472552603461634423875526049699439467087064029146 +0.4524110448637644360868388875231267640338311624103409145041788539
+-0.1099633225953045478540363356794430416477263111166654723490589437 -0.4077100331640054846709900852315956380002910175183742932154068317
+-0.6756547625687923165084584127259768184144567299620396875756298559 +0.9925432694290908433525570320250227385826836114793383624485189244
++0.8687355316920355914551191479618699998090617653378680974249892199 -0.6845441772530325736299180977635806745002567201737916085152286412
++0.6573707348942885034556657549189062350008259948442460481059842193 -0.5689275448635581694575383584343021970227104177442089801706330228
++0.3040922554314217243862762857092058777415182617569318991261352740 +0.3985567814775143901221253743791327148945266133080683203695999962
++0.6923315191547459490617708873077670147989473956854336908747033971 +0.06961382826101090949578301124383292455559947536661707583968975184
+-0.8796784447840898801814093263554195453289300559080999490503364787 +0.04307050119059237005387541827491059927895209375649378090223139587
+-0.02378306045101476542041128049120676361822587626846492046663605803 +0.5849881776459916509815348468661649535409940486756497653761724118
++0.9854996726419986830846511304498671064695985279263874167222764802 +0.02943622593745917222898833754618856585348471594569686881397428726
++0.6717005563662298476413580139956207272362245386339234470714331016 +0.3572417013316431962026919347150511042636763596269956578845059238
+-0.8378043093573693797427988998204722223522674424680899644391943176 +0.8246603472400295391578505724317567517180656867730457579866275623
+-0.3904035160770493684430115148009967524256991556076221372265894266 +0.08267470722577286001217633724236129336011575576077446531397711074
++0.3596214942327276879157632590476519168937540906266077357147819608 +0.5296493544860877224747590127030477951987987258874100707895850711
++0.7958628339830083470736213000945699871834494249238046750007408612 +0.1781616718394205175709349645973564475788988241558791298588188050
++0.5412530329369591795695895418300581875196694253995928145942436878 -0.8633908949968827943561744577901901026376268752722144571223670853
+-0.2613537732594101756765510813982454595302525696986533152069370387 -0.3459820993240706010475901311688197838023719669999227712290509004
++0.4358283240521827716981902176795884470008495588502897753142560240 -0.8814262497135981437569523940906532685397798861799997656375266034
+-0.5937465792299257034198201886287226952400923687140794966015317515 -0.9722552720272006984678084914751283988556792015475269427349942943
+-0.3218041479377133937935849601301732622610394503588237190352903562 +0.6486167889394565452584685154506739738504706411589692034776454683
+-0.7360914574746049921434644450737043073420684008447334807822853276 +0.7237216114456588829885327945423834052953613010855527824331391861
++0.5531873646948311172729843652306879823960014212266557902207414060 +0.9153832161606877637775414865990581395464326012246760580785761313
++0.01417576197421767893279369309359545621976513518858252000938611031 -0.5010512652356920074204032205934276172215285762480987760943959851
++0.6897588478092123244219967589255606032813281483291811335150355542 -0.003517119711452846559277971844364606295296520854275366315952866112
+-0.6996703139503628987183738269577949838863048093871175900433716284 -0.7432644962454565902867854377146609433353697756825593784757725371
+-0.1309677757443125377194229250386971011803561306992623123400631451 -0.6678889143320625765336213759043802181180754155696893060399849702
++0.09049503268981439002460219767349217513483951010643022102321620286 -0.6231432486376980435414857670687342821530306865222818413703487444
++0.7721031360269444536624854764846278079390436516442447307214583713 -0.7612655580159597760389639032422118132475827999877015743017274080
++0.7113282365127787106295924505560767722199840055537543517442585349 +0.1046561870893663260798556882535941223232955552582338303672866205
++0.7679535856628120283990827155162180966010981503917935490380557142 -0.4422178249719287625023613714462236578393297082084105686699745527
+-0.6127602430473631495393181955733023028663546816025211937039540524 -0.3006761386836519584160039426021947715604263308295216335254395417
+-0.5944056790460496081717996899055920305811666877696698395774078378 -0.3931472033430920383369653755030364057981520323323553764459192375
++0.9839367502424209997890558933686976016082869978582241397510153252 +0.8009564737468829284569870438621332728504682800502357253909429840
+-0.4548419343247805224460011391703079342763504118566706946966391853 -0.1173363847349279118426129136160276265546406000211794923295485560
+-0.8849845588398620212194475625021727518116463369860566764411889312 +0.4299591565232924801870368761556079288133632606094048768501521181
+-0.2496600323413886386258990085306122333313701779141184118995463959 +0.3519508427149724056038340065726224107858818936655812955385008590
++0.2013567579813494116381818105314838610969816486807952028421948124 +0.4719165407085054156880418423268675488422117760448059022673468457
+-0.8585801045716661137497618288810938649698205103567498949997938400 -0.1600709565700552484491336034747507816107856100797576115468140784
++0.7326702292582058588316598422918662773838658327971514003421703067 -0.7196566232553047172113131790990428945643928116318893875786802199
+-0.2697443704573465465233716116511309018200366900116819867580635278 +0.9506852903491360468879758484099667312771993016096956267658366287
+-0.6468087813680422377672655136982917947328505318460482424201962000 -0.3776736725704435658453332291251578463493585478972191163904289213
+-0.2812302577494115409480047067683469320314228801749259890701395474 +0.6001953620324393368833490197603304801854572549372059847172328017
+-0.02167413194230472805204979364706614220652157873015883116130884482 +0.6978878736648347125949172253483236996713754832649550025174381314
+-0.6808949558907041005466617267577471160247144934082880243741902340 +0.8508443401291057488517795791511283359984797073308503806275388226
+-0.9306530725185795934583927665790248017610038861531896668451002839 -0.4669474695063991815703085816201270850746349019459750890255838246
++0.3319152007540851906913026983763584438955853838764895977762668678 -0.4916857659539131984511014678316277462480514807356006060275370059
+-0.4414898031680223608932387792017485771255689761890070706015387399 +0.6805454442564243054841615570704809357725921633306984108877804159
++0.04675554236208552284539297942143061834219393972333359647545914081 -0.7429928693445994197394008924008488085983664860223161935727994358
+-0.8152568938325646993310760006867681539054279301843202148958871677 -0.6969676211949719236627008807329635886036631346596064918901094455
++0.3952163240756655529212705355453418848569049122249531536768131848 +0.7197019444966162425693701580554867509036572823057158142921206547
+-0.9395163144138835125672454933008856593503204403133472584898229717 +0.7821091276993633157184444189269089852199610591029476119050859896
+-0.08780353633292157461769946866167963633505729824902226238512671868 +0.8533226121539329221550195141712150337184702154268885269745819910
+-0.1743560068378512679152575299947443762504689480476570621749324843 -0.5271231904299831306010230073357821701271416210281300595416035220
++0.6018835924636782523215034400201993341434060856497418585329625279 -0.04518836599707041257371263007133991513702551585551047967233360089
++0.5094537464059880326374352490064905763350159638438638190213421193 -0.3994910205015023995978692651199523393500004114939614636352980640
+-0.6412882157453879879998117648467144628970706782597054160685555631 +0.1151112248581587985459044273509734339372139569519498681662926204
++0.9017103216368149546517732133490469846549850682301607701578308401 +0.4120054991803597141675815179438163442823969621208991056428168406
++0.9631270643127979384664069651403286361478505285019531813591892173 +0.4343579826046095597725968699957767082823418268721181549420071456
+-0.6210835173793688086670082589175993809833456274087668762475476635 +0.2535126428268633086086116718856542176680789611156801564801311848
+-0.8137281645240375388576750044830353268919925528507904843095256157 +0.07575910820021246358816323232702289803823041246205070258897871070
+-0.7041297500866612607234884784407130317305843364144413223065323821 -0.009921455995466628736212379839332998874975285848956671613709936322
+-0.1235721593345202217795554759876880268687368789792682195280803184 -0.5891566693005274615768435832037723406013603962165946345013825592
++0.01793996302825844948175557573252934185711456214972052895861572493 +0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3411596862218241172328579047617234818967459872060847679144866809 -0.3642689669126664223527375212471788979005234643229363317834063467
+-0.7379746599220903325806827424480469595800618414934950958452657346 +0.9106160875739411428476569185959640646231793213239998804082355729
++0.6843546378904107483368305041075808036585650068151329599810630045 -0.1554296096295892351142787706783742826880784898341993011418432069
++0.4265099420399003863248167494626862205659560797404855195341684806 -0.8069065915498787556695276318086362565827819941733622970182376756
+
+-1.5148473028584926516645924691764761683662342879197351005457855 -16.4565002693456675608155418781435873892436387877711619249517915
+-1.8665039440077158934404629361871434252358488417214524622341783 -8.5746076631319285546285439739134883279942309326927434692560685
++0.3788683238283351425644044222957684342414486992175824866139526 -1.2716541663049563258983274561933372446784791197821924443476153
+-4.5330742198157684101165600944284570132649713373361632609723078 -7.6036442853853080435159318289135422195241092749340472802473828
++0.3032826208670046943329474329039077726100238557402627355103068 +10.9819936197160209546727547646802687254754838703979887431487634
++0.0323661411174510708494771310914866899694189373726809510679403 +7.0737463427531499286185769122039914623555993846607720410129164
++4.4357706958853936784686355483449398286652910022205211061053760 +2.0210944160741578353660108764988640326044944331238830560424359
+-5.6630609769298251730462033939332492256221822044470377416816357 -7.1143237498771611150785213886565118822664757801183976891200160
++1.0139256292502159025623277665706830996458961713059559426081381 -5.4830581630224030866676830077750986577251682977660402923659977
+-11.7525879845826962736660816958894447804814002376095023957744462 +1.1496345443487964547704679273954985574229969686493915519101435
+-4.9108847619470385150909631049072271254732826059047445603969824 -13.8880027727407584124307864192077156870669248433148484653281145
+-1.5911007301588347577359830865334790827218881164221923983950062 +14.1287354707261463691554242633763172880145369820982091023100099
+-9.778845661347686211420930974780248515176984184416936641122989 -3.289395955755541015795308970137892485315696472173287819015603
++1.0874115835194344363592783591299525612729641719621320199737618 -7.7491022720040747883399822912308057679188769166791546585729810
++3.0101378995554603765927913943637162791284556025648456232790020 +4.8538962541305238658529025160692118043221702637916686524436347
+-3.4702476715270621811337487598516326366095904255263514187588003 -11.9749699653645986711023426187851351783845222490410990714380463
++3.8628119446129038431019708984101308778507779018090743563095512 +5.2114350951270201217828366220296472909683706789420629697771706
++2.9392139183364332518599896938829422514668358855179844187426166 +3.2542095233223640136014751335335049794751731113512241817031162
++0.3428439817068800051109507915796316855851338014985897404696063 -7.1034066953065391609346763688822394177134598641829604124211878
+-3.1120267131194289624380169139197443055655106437340667904849670 +4.3490937391861284016127332153407345529702246634969756196120015
+
diff --git a/tests/data/nfft_2d_10_10_50.txt b/tests/data/nfft_2d_10_10_50.txt
new file mode 100644
index 0000000..3f36401
--- /dev/null
+++ b/tests/data/nfft_2d_10_10_50.txt
@@ -0,0 +1,260 @@
+2
+
+10
+10
+
+50
+
++0.3173894901710712338304379034862579946422889909408459156044823877
+-0.3667543868355520941544575938257847368987701408778114882987979123
++0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4393343513885464893650781262914436001773705088850610475139449829
++0.01022750575332349257722449804129916311389119097299090643512381743
++0.09724896680371957101023456043902667815088539956343028172851831004
++0.4700775714463633978511207403685111986859425845978719788126486235
+-0.3358534858018228008930174455675250519517010131613592135710326757
+-0.1306486726789604518575642087548321430960584930096366967255476517
++0.09206201328582059293609619426014170729486960607917988224801612305
++0.01032012051955487309722047463966310173477870581273801739268254951
++0.2657081638057710356109850449698822151648783127222896297915845505
++0.4969744253080455744694825346756894506554753184704475582968873208
+-0.3896799171385425910280775698323345593268837461598793276080712743
++0.07714972696698667716678650997245420808817430827447314113682745907
+-0.02491369905948525014094604981517037150278591583244194805018146991
++0.3914347841983986584093169466825129403698312444687581041683071856
+-0.1076415739382721498345038358573933688341820551665322075789524509
++0.4098351732528003809102269734570294879975455702584035273166455779
+-0.07151629523327176189411207208538153350324597543738741809574504658
++0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2729284644063738002341295104132857495338305729920700013008922333
++0.3525707830542183854600907186155249059680080381975147205747395167
++0.09283440750861957635440201232165846433764147503752950359886015311
+-0.4593142592621138819114189833820168418626239763706778624898432299
++0.4096571910929782462238577122549675981718214537014044537215019452
++0.3029583073136138265829962071140439545004830470746425534136209257
++0.2302243745669765578486926860942252628118506165725692957820305864
+-0.4755711272429793224288583422054842471828900217314654775994176650
+-0.4303267914341560007766990049507480343981616992540993964015009290
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.1014391221904101019539350076278292483536923208503397585858894884
++0.09085671307189002853971282071576253250819369457305730572873101910
++0.3863781080296671218440614854031328269611997505425469222859116048
+-0.4384199598876636262124112488913918123145588604895783942604512689
++0.1108227756448777051455727606648018553357448076539765946862706064
+-0.1013589956735152573510406730689184973691015496657475510126506381
++0.4030260353866424922914759784022018079940415586122025700043945798
++0.06875288804967068748620631495815812310608096163779380055154102558
++0.1247492229282524246053090042093696732793505450810943264155391612
+-0.2206549379852138057578743061470069389191225157277024467333194435
++0.3463602314652901879187900602326408775815696731976526372069549870
+-0.4643197195119173309525456044702917254373982711189458917859034631
++0.1742103250722310383210116734163969262525397097134100265396948258
+-0.2381993349353649959266405506577935293738035850399354993188862868
+-0.2682861506665362644547235799610166013942935834114952458624782931
++0.1092122305172402888258153501556024641240468035240884586547566337
+-0.2484919486952133736276301730817211937763024849719733543532014573
++0.2642327778745240757646266294392459562801915916132871452102135091
+-0.05498166129765227392701816783972152082386315555833273617452947187
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.3378273812843961582542292063629884092072283649810198437878149280
+-0.1579152561477417245680939938059372817945921112643983640578929336
++0.4343677658460177957275595739809349999045308826689340487124946099
++0.1729154576995603929033538546168666485286603783333729055438208098
++0.3286853674471442517278328774594531175004129974221230240529921097
+-0.005488434703663033807202110079459379772452209210435747933850600026
++0.1520461277157108621931381428546029388707591308784659495630676370
++0.1313277929451562487082545713868668183502620330575886917609655136
++0.3461657595773729745308854436538835073994736978427168454373516985
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.4398392223920449400907046631777097726644650279540499745251682393
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.01189153022550738271020564024560338180911293813423246023331802902
++0.4747795551811432367868902234458387985659947076528818830641254566
++0.4927498363209993415423255652249335532347992639631937083611382401
++0.06403862356712929207278788512728706067982585049275341514041588589
++0.3358502781831149238206790069978103636181122693169617235357165508
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4189021546786846898713994499102361111761337212340449822195971588
+-0.4195634668605248660892165218851209239268844866648432819445044954
+-0.1952017580385246842215057574004983762128495778038110686132947133
++0.04500489974247188801035267400166477957461676904337052075668156194
++0.1798107471163638439578816295238259584468770453133038678573909804
+-0.08834061683832729395743261247688425414802993275433895678020615860
++0.3979314169915041735368106500472849935917247124619023375003704306
+-0.05012499979552010356459573472764647953878012390959562904972546234
++0.2706265164684795897847947709150290937598347126997964072971218439
++0.4279156393274057309236852245921689139491849071240754852340002326
+-0.1306768866297050878382755406991227297651262848493266576034685194
++0.2678253108467659283584482339990112224237477098870371360902212831
++0.2179141620260913858490951088397942235004247794251448876571280120
+-0.02625691461327344055922337707830927973974380680329712859379796682
+-0.2968732896149628517099100943143613476200461843570397483007658758
++0.4759047591062144391383689410077974773955630780125823813435367896
+-0.1609020739688566968967924800650866311305197251794118595176451781
++0.4978111926406553748261308123557606568607924290968953953283570459
+-0.3680457287373024960717322225368521536710342004223667403911426638
++0.3370526398003044917338285727477518400816448538246807560798450068
++0.2765936823474155586364921826153439911980007106133278951103707030
+-0.4348875280358313577685853547130144822185950526155031914995950890
++0.007087880987108839466396846546797728109882567594291260004693055154
++0.2697310091373757401623213224022556791972046185410645292287609540
++0.3448794239046061622109983794627803016406640741645905667575177771
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.3498351569751814493591869134788974919431524046935587950216858142
+-0.4302348750536436853767752212077304891361636801177679666901775557
+-0.06548388787215626885971146251934855059017806534963115617003157257
++0.1911031215178088094488640140802007253494213892471707486908629466
++0.04524751634490719501230109883674608756741975505321511051160810143
+
++0.7721031360269444536624854764846278079390436516442447307214583713 -0.7612655580159597760389639032422118132475827999877015743017274080
++0.7113282365127787106295924505560767722199840055537543517442585349 +0.1046561870893663260798556882535941223232955552582338303672866205
++0.7679535856628120283990827155162180966010981503917935490380557142 -0.4422178249719287625023613714462236578393297082084105686699745527
+-0.6127602430473631495393181955733023028663546816025211937039540524 -0.3006761386836519584160039426021947715604263308295216335254395417
+-0.5944056790460496081717996899055920305811666877696698395774078378 -0.3931472033430920383369653755030364057981520323323553764459192375
++0.9839367502424209997890558933686976016082869978582241397510153252 +0.8009564737468829284569870438621332728504682800502357253909429840
+-0.4548419343247805224460011391703079342763504118566706946966391853 -0.1173363847349279118426129136160276265546406000211794923295485560
+-0.8849845588398620212194475625021727518116463369860566764411889312 +0.4299591565232924801870368761556079288133632606094048768501521181
+-0.2496600323413886386258990085306122333313701779141184118995463959 +0.3519508427149724056038340065726224107858818936655812955385008590
++0.2013567579813494116381818105314838610969816486807952028421948124 +0.4719165407085054156880418423268675488422117760448059022673468457
+-0.8585801045716661137497618288810938649698205103567498949997938400 -0.1600709565700552484491336034747507816107856100797576115468140784
++0.7326702292582058588316598422918662773838658327971514003421703067 -0.7196566232553047172113131790990428945643928116318893875786802199
+-0.2697443704573465465233716116511309018200366900116819867580635278 +0.9506852903491360468879758484099667312771993016096956267658366287
+-0.6468087813680422377672655136982917947328505318460482424201962000 -0.3776736725704435658453332291251578463493585478972191163904289213
+-0.2812302577494115409480047067683469320314228801749259890701395474 +0.6001953620324393368833490197603304801854572549372059847172328017
+-0.02167413194230472805204979364706614220652157873015883116130884482 +0.6978878736648347125949172253483236996713754832649550025174381314
+-0.6808949558907041005466617267577471160247144934082880243741902340 +0.8508443401291057488517795791511283359984797073308503806275388226
+-0.9306530725185795934583927665790248017610038861531896668451002839 -0.4669474695063991815703085816201270850746349019459750890255838246
++0.3319152007540851906913026983763584438955853838764895977762668678 -0.4916857659539131984511014678316277462480514807356006060275370059
+-0.4414898031680223608932387792017485771255689761890070706015387399 +0.6805454442564243054841615570704809357725921633306984108877804159
++0.04675554236208552284539297942143061834219393972333359647545914081 -0.7429928693445994197394008924008488085983664860223161935727994358
+-0.8152568938325646993310760006867681539054279301843202148958871677 -0.6969676211949719236627008807329635886036631346596064918901094455
++0.3952163240756655529212705355453418848569049122249531536768131848 +0.7197019444966162425693701580554867509036572823057158142921206547
+-0.9395163144138835125672454933008856593503204403133472584898229717 +0.7821091276993633157184444189269089852199610591029476119050859896
+-0.08780353633292157461769946866167963633505729824902226238512671868 +0.8533226121539329221550195141712150337184702154268885269745819910
+-0.1743560068378512679152575299947443762504689480476570621749324843 -0.5271231904299831306010230073357821701271416210281300595416035220
++0.6018835924636782523215034400201993341434060856497418585329625279 -0.04518836599707041257371263007133991513702551585551047967233360089
++0.5094537464059880326374352490064905763350159638438638190213421193 -0.3994910205015023995978692651199523393500004114939614636352980640
+-0.6412882157453879879998117648467144628970706782597054160685555631 +0.1151112248581587985459044273509734339372139569519498681662926204
++0.9017103216368149546517732133490469846549850682301607701578308401 +0.4120054991803597141675815179438163442823969621208991056428168406
++0.9631270643127979384664069651403286361478505285019531813591892173 +0.4343579826046095597725968699957767082823418268721181549420071456
+-0.6210835173793688086670082589175993809833456274087668762475476635 +0.2535126428268633086086116718856542176680789611156801564801311848
+-0.8137281645240375388576750044830353268919925528507904843095256157 +0.07575910820021246358816323232702289803823041246205070258897871070
+-0.7041297500866612607234884784407130317305843364144413223065323821 -0.009921455995466628736212379839332998874975285848956671613709936322
+-0.1235721593345202217795554759876880268687368789792682195280803184 -0.5891566693005274615768435832037723406013603962165946345013825592
++0.01793996302825844948175557573252934185711456214972052895861572493 +0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3411596862218241172328579047617234818967459872060847679144866809 -0.3642689669126664223527375212471788979005234643229363317834063467
+-0.7379746599220903325806827424480469595800618414934950958452657346 +0.9106160875739411428476569185959640646231793213239998804082355729
++0.6843546378904107483368305041075808036585650068151329599810630045 -0.1554296096295892351142787706783742826880784898341993011418432069
++0.4265099420399003863248167494626862205659560797404855195341684806 -0.8069065915498787556695276318086362565827819941733622970182376756
+-0.9874151891964456486571993218370826427302121071375833081581536189 +0.3774149419137016419806042817145212836004227419492405559087274340
++0.4601637140807105378191037234478805179877043129140064777542238544 +0.2862571560348818269179471614749431512680830893414487690534246820
+-0.4841039802362244364267157134690841461075259779700777041439742307 +0.9392006333865916821227548404291848184201007925131229813910957774
++0.9965877589863013394561112420396792373833365736836351278348301833 +0.5114205299580920868823613420213360686329180904621350249508347984
++0.1915677305233047765741909788297653137314715093312058543130169860 -0.6408078680635244612899765081025913686282954450887306823350772997
+-0.9100049476348622207723944867294612891098821253248738836563459568 +0.6103476918632637106424717122234807592708375161253117953076031400
++0.8085565025927605798160394591787637574375967583263627553971120289 -0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8851479413535487385573817957243936843534909265401263726020814395 -0.8353594742240205937097730115138661305557325449129426505768609534
++0.6064591258881136876029163103297147737049475826316704311935105558 +0.1821483418007667766250895141417107286953921543595289977783017637
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.4074526958925963909486488891837393063126910851657623153854908031
+-0.7605582778547942408060351317015194879473019118917060721292547632 +0.5194123128321160939700776973599963366760031201335463428826305590
++0.9359455243018989598720894094889086512450300947660621306436953491 -0.1339026726689501933617889040862807661257038358606191032725698017
++0.6403329703003144866532882811013167888478814399097147096856286200 +0.1617840119849052908674425797539541379830915417411164257796009655
+-0.7566145378422368715122716757726615136162685098609876740055635889 -0.5833399591688895541493678958036554117556929951798174740043291689
++0.4983934648670891328811187892957709407528386913849427405222396790 +0.2558611196916433369649336532000849479904305619298222327625863899
+-0.4971948424110283155918942363898656650230845195141350175248779212 +0.9637184128969163713272727389388526394331293708405231601274766637
+-0.3682837387895926737476498418989480477365801929350913148252356807 +0.02398516466411951663039478357357263297576765858214578984119980389
++0.6148970507477253459184467315745337121338375212139515007860628315 +0.7220807768185265925885711430037484304092954076856054861183001563
+-0.9083524682273578446532722997799475788834527253595073048265657245 -0.8314034062393001851412680462190559603040746972786212429324375224
+-0.3916716877161613504785809028033398517645549846406356231576213868 -0.2313683087056718682580625867623460795004227069874977160354372877
+-0.5193518691808852117378350732261309854332184624171433727414006814 +0.5241531162028989758906123049906275766571616823241720374203214447
+-0.9750431258817692289559363598684739941265076062018304867776204819 +0.09003216360057281587724105549690566269005814841108581287665281058
++0.05005097085661604605086728229374112382053058454731767435671635371 -0.1599268816032428776743959117270259866309677355351818460136443291
++0.4399150750505159978489133507713340072340352057744402647976718275 +0.7126643265921692501928118835762400720628273345745039396768073268
++0.1872909367861505164718492831692222169018789408412172493435499423 +0.1443381463559750344148688262608847179704805274810841956785523095
++0.9419321039051109549245680082622391092246632631231828777233002149 -0.9541149480810226451568227541620900387924893378859274527595762471
+-0.4287041936652777153072881590344721321081952456510997660597381855 +0.3516772517804962317135771244694045300550581304302552629989927399
+-0.2333391111205556198207256592076331117879880842914267473885863455 +0.8312645047002901343481040986077492354211106507977246573848547872
++0.7889477067277564731712862630611699647549102063099584994888747696 +0.8922074343575836687927424867109565448477559678636672119414443701
+-0.2563747285446000361218237435955077669028092056157149416120292486 -0.03914580715076807517564668371313115131680481962361916796431130169
++0.8211574497098423675796354902233745259806437217163965161734702361 +0.9746573852711840936336177201962708050687509298510135226623575906
+-0.2430326281692574737943057410600918611450147916626606070615468027 -0.7287905575728605025843722055111257091486772902084438557782657679
+-0.5566744269539672218404388199827460990960984415899809143036909069 +0.02849594996466824865218850207780069267985584074611847663329993142
++0.4524110448637644360868388875231267640338311624103409145041788539 +0.6459433245400880395491408374407025292588521318149535734854910274
+-0.4077100331640054846709900852315956380002910175183742932154068317 +0.8136628661132407079541934173897141567434892632439804419184181281
++0.9925432694290908433525570320250227385826836114793383624485189244 -0.5672690776078439250283757912452916624289131865014778354746409640
+-0.6845441772530325736299180977635806745002567201737916085152286412 -0.9476387464140397458861421362921055215974651715794066883914951208
+-0.5689275448635581694575383584343021970227104177442089801706330228 -0.2605437240709855372272831411319884164143200014969561164796810212
++0.3985567814775143901221253743791327148945266133080683203695999962 -0.3311597085631775241605389615954882776971235843100995205029515984
++0.06961382826101090949578301124383292455559947536661707583968975184 -0.8695822150875121724691553338257829869250127182425918912387649806
++0.04307050119059237005387541827491059927895209375649378090223139587 +0.8891098289754707421060220890985710245132795198449297271458423909
++0.5849881776459916509815348468661649535409940486756497653761724118 +0.2895552325554255930167653346015931047558748269272406529926466973
++0.02943622593745917222898833754618856585348471594569686881397428726 +0.2650936900762128600362413578030729270793479332746334793752266553
++0.3572417013316431962026919347150511042636763596269956578845059238 +0.7046936151828971593710415948632896548808680079056988913118083777
++0.8246603472400295391578505724317567517180656867730457579866275623 -0.2115570299364757676008017443811649086191736127455534555376144021
++0.08267470722577286001217633724236129336011575576077446531397711074 +0.1470216587412559156294994682432100810761459629584248289010138317
++0.5296493544860877224747590127030477951987987258874100707895850711 -0.4329010361486256961244622956913108506550874170254014125575533479
++0.1781616718394205175709349645973564475788988241558791298588188050 -0.1766818323431859044625743795499747752198631648846896440459670393
+-0.8633908949968827943561744577901901026376268752722144571223670853 +0.3427075333057822059987675632859967887158938796610229803331114623
+-0.3459820993240706010475901311688197838023719669999227712290509004 -0.1833768865732711001295741826816961691797355582139228551235621230
+-0.8814262497135981437569523940906532685397798861799997656375266034 +0.5665067551831146950685364521560101025985707475803564862178192914
+-0.9722552720272006984678084914751283988556792015475269427349942943 +0.5846720091653589171386464934439494744713232525388330403763032709
++0.6486167889394565452584685154506739738504706411589692034776454683 +0.3128821017947787434710701629862425068710081298914976621641025408
++0.7237216114456588829885327945423834052953613010855527824331391861 +0.1943703959062877206669871517590249058034169064564194870074554031
++0.9153832161606877637775414865990581395464326012246760580785761313 +0.8893705554674630659403991877841826994191514257022249874261157104
+-0.5010512652356920074204032205934276172215285762480987760943959851 -0.8883357910902242353575856676539666074648753053656660309143767467
+-0.003517119711452846559277971844364606295296520854275366315952866112 -0.4607165734661637817512681868591410520464620690313830851265222420
+-0.7432644962454565902867854377146609433353697756825593784757725371 +0.2571290378683215613044136510821588749887474163677002652639520119
+-0.6678889143320625765336213759043802181180754155696893060399849702 +0.05683348973511969001808746192505133291481235528637618587938493271
+-0.6231432486376980435414857670687342821530306865222818413703487444 +0.8458238445504835463314748515393830432307810942061667936052115581
+
+-14.4021038615287074196656024373364513683337134236591981699882508 -16.6037948445625496867265134376145653622725162825623331983177547
+-9.9544603247834424159172755999290594484564691598954993057552412 -3.7305518441634069360976419398596077617730921587343030566132673
+-4.1743989563465293424160718690764275131566287565857873983067355 +3.6143356189581447785332506050483644036930406186471462408945208
++3.6915923259663647301570759220484292330524446147631638602224784 -2.8159022607573599955556493949974351352412366395382210179910247
+-1.8123356329293943752792461104617850835475124411868877123277021 +0.3881870877567796402119721172661191221541496663188412831951375
++0.5447983751457460790964718803622091722766283387896529626741792 +0.1390544853548251686885584842975725214141921825463915095144929
++9.993911591651123827608278624776460389764444547108285288441498 +0.0768631144203781225317470673300002081277219528126453634165597
++1.7944304025014281821066211943480192989910471321048732910500260 -4.6032543289449923433376074621710153202812922211119685153173417
+-7.8624397814486395448978957893295013033997224899981790997186997 +13.5456100472621079459670465544327572468610147177499293742736185
+-5.1674792986308246572959562741710844365753399502456789361180668 +1.4358206579122773523573465894324854821448859753351476146102845
+-6.0778850453587354879860821741364074844485729535203294814372450 +1.3275989054958514910361078322718553215950856556170392105419877
+-1.5390109848005517172403803209500513068562859726422033900100432 -5.2782212415127262519112634233178408806261797270973081275106299
+-4.4583424272415897297150800778164598779160466991744820583250246 +3.0186882207516155916932813904705935135168126568049385805404861
+-6.8681184565578806153773838343559947649439241018682837869349799 -1.9391642617611186828860491080639109518997942859935071458395435
++6.321886382643755681734992829957625615156147539161613287121630 +0.426038705570379032616955917991641005340552258792470845614635
++6.2085098852564038485381578243718924834639874892373911253776747 -2.9975391222102910039149413411924407478063433976483215328869338
++0.6082326958217228568720643838277673717702596675747791841926724 -0.8690479986452585967165985987190635417398426712256430948466108
+-2.7548312486936029535670587558939394570042666139360044301256063 +5.4656623164495117023458975216008771252391960802521826251495996
++0.6813128417104001831552317985917819500672121207322405692119309 +8.6769422612772622424481223774612153319426341091275574362813812
++1.4096871366406741024158200936959582056755694933752595942106915 -6.5348042096504821945986250912966398697086054985690583030626544
++1.7062705724781715730911227865779704686023278680468999328679780 +11.3072475835844400937431657944558906165909923860524683271671383
++2.1101633715548466728494574212302472047057523822802875601458258 +10.5974767071795839033196926569962914154984893504819105531121555
++2.3109822133450743171108021409066828911010152217017989117931606 +9.4645251661727729133846094904933491811949164096312366959719020
+-6.7604175034307348570138118300289907266232547399137710555007804 -11.1847726928312968837033164998772018571147123664591490246800581
++7.7007118622653801318525621257443276305608839897977423050726428 +3.0159742910022704139770076287767782128849338064141284852099542
++5.8849514629769830452045472761832975862078814330607573680687858 -2.4301644218177903754122555003276391048280458452741506893392295
++3.3728199833173413161110306686899193682210637169375888708376853 +4.6560480206172204056012187834781389689728082767150714887276686
++1.2180714173484307504541160179845403780328943870087937309056808 -2.4706410432015385516349883224667704390673125366497202925827476
++1.2410410193107402231031028533942337740579422458672358848166196 +4.0398292200153981859718705865744212367490984165403139103659184
+-2.4313821632458011287914485678353282406147997175511669576690097 -2.4975618207370474936084552577678556614914777312372069037452941
++11.3004362904018592112576241458654789119530316607729054602034560 +3.5226021805053154475775920782712042875511868873450920684295763
+-0.9983576425162172598391055758168694403385238336519570713366480 +0.4119978483157262492682604341327801613146269249921555772533459
+-2.763121622893952861482475722081436787542845296353613919302891 -2.157211157124892137424688347170850597380953777570452559655172
+-4.2594165528956653724800696028555830643386486757238543489692449 +4.1665813756367109730287885310258390714330576037868286357818417
+-3.3834152106944455866719269015202453016896728153045905139533310 +11.0424410495025976332905594933280960000601398405583695345710072
++1.3082429504791667754225333685036322561511697529251221248778816 +2.3490822138119605010657469329338378941462936558404023615079349
++3.5970765174758998933940499818929965259333746941078483022440098 +2.7824973763957315241707566294227953110251607583293413060001973
+-0.1486221835053942348104600124953106551673710124856168526263257 +8.7795116876278444071893745194792649497368836217907331241594632
++4.8203786009086132485906319468244403677032132292125572262411698 -18.1518300801250494807677184459716888412965340330129609075169638
+-2.2566529158992857447575223673788685792089998779993297032882159 +14.1951586405654998465798276687213932935682764053004161483744822
+-8.0869606120817037681978222396914882479434948276681216682659955 +1.2702784624119883153916670130660541123256447919553731343969893
++8.8175198133496601406530252305278724065473225514795738048418500 -4.8277010328317640164632541894158406160569722900936190922310146
++0.0194268653418280927785004977109963896767150823694906535778962 +8.6403723584294595000727055299011038697116765138523203569216483
++7.9778256603705021890041062277219569594688176611251996348740434 -2.2916784901063518684947279057762302114515261736912111526148960
+-4.8368090347575568587133281480363092025525483729385380951904635 +0.9800808170982931485105773456870645718650699636586576269532122
+-2.3349641419624231441721387918113488002779221545053868580060645 -4.0662365495589449265322338363282711593608413270490224694378487
+-9.9551141380823370127923721652601011043944885635982761697564816 +6.7712883547888049974322744096736473729228085856435170735148003
++6.0699769833539561407634172572621975111679174292826118335951535 -4.1525711377879224218863781561183722237982631533648961670241665
+-7.8949482086927533400035302870709226043594363173672673514235385 -3.1263601653122249506400584502778892211900404794185783626109460
++3.0412608496294384970793824194171893100019357868703631097129567 +1.4754576682706873246807445998744449491618509478888277671942129
+
diff --git a/tests/data/nfft_2d_10_20_20.txt b/tests/data/nfft_2d_10_20_20.txt
new file mode 100644
index 0000000..e517498
--- /dev/null
+++ b/tests/data/nfft_2d_10_20_20.txt
@@ -0,0 +1,270 @@
+2
+
+10
+20
+
+20
+
++0.3173894901710712338304379034862579946422889909408459156044823877
+-0.2206549379852138057578743061470069389191225157277024467333194435
++0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4643197195119173309525456044702917254373982711189458917859034631
++0.01022750575332349257722449804129916311389119097299090643512381743
+-0.2381993349353649959266405506577935293738035850399354993188862868
++0.4700775714463633978511207403685111986859425845978719788126486235
++0.1092122305172402888258153501556024641240468035240884586547566337
+-0.1306486726789604518575642087548321430960584930096366967255476517
++0.2642327778745240757646266294392459562801915916132871452102135091
++0.01032012051955487309722047463966310173477870581273801739268254951
+-0.03919417871052420194526378084573471772000103115061608042162915008
++0.4969744253080455744694825346756894506554753184704475582968873208
+-0.1579152561477417245680939938059372817945921112643983640578929336
++0.07714972696698667716678650997245420808817430827447314113682745907
++0.1729154576995603929033538546168666485286603783333729055438208098
++0.3914347841983986584093169466825129403698312444687581041683071856
+-0.005488434703663033807202110079459379772452209210435747933850600026
++0.4098351732528003809102269734570294879975455702584035273166455779
++0.1313277929451562487082545713868668183502620330575886917609655136
++0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2416500872464844443813651159115503866293289962833710383546455749
++0.3525707830542183854600907186155249059680080381975147205747395167
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.4593142592621138819114189833820168418626239763706778624898432299
++0.4747795551811432367868902234458387985659947076528818830641254566
++0.3029583073136138265829962071140439545004830470746425534136209257
++0.06403862356712929207278788512728706067982585049275341514041588589
+-0.4755711272429793224288583422054842471828900217314654775994176650
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.4195634668605248660892165218851209239268844866648432819445044954
++0.09085671307189002853971282071576253250819369457305730572873101910
++0.04500489974247188801035267400166477957461676904337052075668156194
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.08834061683832729395743261247688425414802993275433895678020615860
+-0.1013589956735152573510406730689184973691015496657475510126506381
+-0.05012499979552010356459573472764647953878012390959562904972546234
++0.06875288804967068748620631495815812310608096163779380055154102558
++0.4279156393274057309236852245921689139491849071240754852340002326
+
++0.5356506216935318567168964679980224448474954197740742721804425662 +0.3774149419137016419806042817145212836004227419492405559087274340
+-0.05251382922654688111844675415661855947948761360659425718759593363 +0.2862571560348818269179471614749431512680830893414487690534246820
++0.9518095182124288782767378820155949547911261560251647626870735792 +0.9392006333865916821227548404291848184201007925131229813910957774
++0.9956223852813107496522616247115213137215848581937907906567140918 +0.5114205299580920868823613420213360686329180904621350249508347984
++0.6741052796006089834676571454955036801632897076493615121596900136 -0.6408078680635244612899765081025913686282954450887306823350772997
+-0.8697750560716627155371707094260289644371901052310063829991901781 +0.6103476918632637106424717122234807592708375161253117953076031400
++0.5394620182747514803246426448045113583944092370821290584575219080 -0.1695324055840820458497589349479760035964663521113253737383164439
+-0.4274845026027779916855619203781095649893449575458629944853980527 -0.8353594742240205937097730115138661305557325449129426505768609534
+-0.8604697501072873707535504424154609782723273602355359333803551115 +0.1821483418007667766250895141417107286953921543595289977783017637
++0.3822062430356176188977280281604014506988427784943414973817258933 -0.4074526958925963909486488891837393063126910851657623153854908031
+-0.7335087736711041883089151876515694737975402817556229765975958245 +0.5194123128321160939700776973599963366760031201335463428826305590
+-0.8786687027770929787301562525828872003547410177701220950278899658 -0.1339026726689501933617889040862807661257038358606191032725698017
++0.1944979336074391420204691208780533563017707991268605634570366201 +0.1617840119849052908674425797539541379830915417411164257796009655
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.5833399591688895541493678958036554117556929951798174740043291689
++0.1841240265716411858721923885202834145897392121583597644960322461 +0.2558611196916433369649336532000849479904305619298222327625863899
++0.5314163276115420712219700899397644303297566254445792595831691010 +0.9637184128969163713272727389388526394331293708405231601274766637
+-0.7793598342770851820561551396646691186537674923197586552161425487 +0.02398516466411951663039478357357263297576765858214578984119980389
+-0.04982739811897050028189209963034074300557183166488389610036293982 +0.7220807768185265925885711430037484304092954076856054861183001563
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.8314034062393001851412680462190559603040746972786212429324375224
+-0.1430325904665435237882241441707630670064919508747748361914900932 -0.2313683087056718682580625867623460795004227069874977160354372877
+-0.5458569288127476004682590208265714990676611459841400026017844665 +0.5241531162028989758906123049906275766571616823241720374203214447
++0.1856688150172391527088040246433169286752829500750590071977203062 +0.09003216360057281587724105549690566269005814841108581287665281058
++0.8193143821859564924477154245099351963436429074028089074430038904 -0.1599268816032428776743959117270259866309677355351818460136443291
++0.4604487491339531156973853721884505256237012331451385915640611729 +0.7126643265921692501928118835762400720628273345745039396768073268
+-0.8606535828683120015533980099014960687963233985081987928030018579 +0.1443381463559750344148688262608847179704805274810841956785523095
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.9541149480810226451568227541620900387924893378859274527595762471
++0.7727562160593342436881229708062656539223995010850938445718232095 +0.3516772517804962317135771244694045300550581304302552629989927399
++0.2216455512897554102911455213296037106714896153079531893725412128 +0.8312645047002901343481040986077492354211106507977246573848547872
++0.8060520707732849845829519568044036159880831172244051400087891596 +0.8922074343575836687927424867109565448477559678636672119414443701
++0.2494984458565048492106180084187393465587010901621886528310783225 -0.03914580715076807517564668371313115131680481962361916796431130169
++0.6927204629305803758375801204652817551631393463953052744139099740 +0.9746573852711840936336177201962708050687509298510135226623575906
++0.3484206501444620766420233468327938525050794194268200530793896515 -0.7287905575728605025843722055111257091486772902084438557782657679
+-0.5365723013330725289094471599220332027885871668229904917249565862 +0.02849594996466824865218850207780069267985584074611847663329993142
+-0.4969838973904267472552603461634423875526049699439467087064029146 +0.6459433245400880395491408374407025292588521318149535734854910274
+-0.1099633225953045478540363356794430416477263111166654723490589437 +0.8136628661132407079541934173897141567434892632439804419184181281
+-0.6756547625687923165084584127259768184144567299620396875756298559 -0.5672690776078439250283757912452916624289131865014778354746409640
++0.8687355316920355914551191479618699998090617653378680974249892199 -0.9476387464140397458861421362921055215974651715794066883914951208
++0.6573707348942885034556657549189062350008259948442460481059842193 -0.2605437240709855372272831411319884164143200014969561164796810212
++0.3040922554314217243862762857092058777415182617569318991261352740 -0.3311597085631775241605389615954882776971235843100995205029515984
++0.6923315191547459490617708873077670147989473956854336908747033971 -0.8695822150875121724691553338257829869250127182425918912387649806
+-0.8796784447840898801814093263554195453289300559080999490503364787 +0.8891098289754707421060220890985710245132795198449297271458423909
+-0.02378306045101476542041128049120676361822587626846492046663605803 +0.2895552325554255930167653346015931047558748269272406529926466973
++0.9854996726419986830846511304498671064695985279263874167222764802 +0.2650936900762128600362413578030729270793479332746334793752266553
++0.6717005563662298476413580139956207272362245386339234470714331016 +0.7046936151828971593710415948632896548808680079056988913118083777
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.2115570299364757676008017443811649086191736127455534555376144021
+-0.3904035160770493684430115148009967524256991556076221372265894266 +0.1470216587412559156294994682432100810761459629584248289010138317
++0.3596214942327276879157632590476519168937540906266077357147819608 -0.4329010361486256961244622956913108506550874170254014125575533479
++0.7958628339830083470736213000945699871834494249238046750007408612 -0.1766818323431859044625743795499747752198631648846896440459670393
++0.5412530329369591795695895418300581875196694253995928145942436878 +0.3427075333057822059987675632859967887158938796610229803331114623
+-0.2613537732594101756765510813982454595302525696986533152069370387 -0.1833768865732711001295741826816961691797355582139228551235621230
++0.4358283240521827716981902176795884470008495588502897753142560240 +0.5665067551831146950685364521560101025985707475803564862178192914
+-0.5937465792299257034198201886287226952400923687140794966015317515 +0.5846720091653589171386464934439494744713232525388330403763032709
+-0.3218041479377133937935849601301732622610394503588237190352903562 +0.3128821017947787434710701629862425068710081298914976621641025408
+-0.7360914574746049921434644450737043073420684008447334807822853276 +0.1943703959062877206669871517590249058034169064564194870074554031
++0.5531873646948311172729843652306879823960014212266557902207414060 +0.8893705554674630659403991877841826994191514257022249874261157104
++0.01417576197421767893279369309359545621976513518858252000938611031 -0.8883357910902242353575856676539666074648753053656660309143767467
++0.6897588478092123244219967589255606032813281483291811335150355542 -0.4607165734661637817512681868591410520464620690313830851265222420
+-0.6996703139503628987183738269577949838863048093871175900433716284 +0.2571290378683215613044136510821588749887474163677002652639520119
+-0.1309677757443125377194229250386971011803561306992623123400631451 +0.05683348973511969001808746192505133291481235528637618587938493271
++0.09049503268981439002460219767349217513483951010643022102321620286 +0.8458238445504835463314748515393830432307810942061667936052115581
++0.7721031360269444536624854764846278079390436516442447307214583713 +0.2568190130746644331048317748223591322462097932104379543095780599
++0.7113282365127787106295924505560767722199840055537543517442585349 +0.9282397683744983930469496205745698232573096227549226254155622007
++0.7679535856628120283990827155162180966010981503917935490380557142 +0.6733680895626635922558736333908780380926273791887898430485173634
+-0.6127602430473631495393181955733023028663546816025211937039540524 +0.6834258455476852992466772196651133096274086383123765308288566681
+-0.5944056790460496081717996899055920305811666877696698395774078378 -0.3197260966794518948885909003357003020869183279810950125249989182
++0.9839367502424209997890558933686976016082869978582241397510153252 -0.3602154836971247653552601690662060499632143516459194629015046587
+-0.4548419343247805224460011391703079342763504118566706946966391853 +0.5644944652643029946030943876077187355907298250270171876933333996
+-0.8849845588398620212194475625021727518116463369860566764411889312 +0.3002450060649265466224439088480847866613297705716750391656367250
+-0.2496600323413886386258990085306122333313701779141184118995463959 +0.9109171936013987677935840681404253773950900911474823029568083952
++0.2013567579813494116381818105314838610969816486807952028421948124 +0.9809865904559495207084689029816148884009367903151903920423149056
+-0.8585801045716661137497618288810938649698205103567498949997938400 +0.6673430101175698152854688993768041548769019864465421762641808302
++0.7326702292582058588316598422918662773838658327971514003421703067 +0.1912403836532585581545915780169638266665110774534903895312903483
+-0.2697443704573465465233716116511309018200366900116819867580635278 -0.8390872225468263142545242699093560592768485203012323759548269441
+-0.6468087813680422377672655136982917947328505318460482424201962000 -0.1694425027392812196149909158729299355102867577367629176586906841
+-0.2812302577494115409480047067683469320314228801749259890701395474 -0.1109481979293641305323565532634133494943626968908239858539934786
+-0.02167413194230472805204979364706614220652157873015883116130884482 -0.7576390226829376962602306885924643215709630457357178698800775945
+-0.6808949558907041005466617267577471160247144934082880243741902340 -0.2384036559822549222513803512289385096334288445624862912807231185
+-0.9306530725185795934583927665790248017610038861531896668451002839 +0.3322077770142086566449475410492734728431728270878221527000512398
++0.3319152007540851906913026983763584438955853838764895977762668678 +0.3008294101164568639831269327829387098511379992571638835271467486
+-0.4414898031680223608932387792017485771255689761890070706015387399 -0.8500127542413940364553721045188171752513697377512921485742321549
++0.04675554236208552284539297942143061834219393972333359647545914081 +0.8368368938909749223146178710811008588487209933709262501849117012
+-0.8152568938325646993310760006867681539054279301843202148958871677 -0.6301301812957352916599361333234055414853612961930455283065817178
++0.3952163240756655529212705355453418848569049122249531536768131848 +0.9291299159382365190501422959288431216663095157691743654943652200
+-0.9395163144138835125672454933008856593503204403133472584898229717 -0.2057454411726747632614076986736370443370299660132771686206360685
+-0.08780353633292157461769946866167963633505729824902226238512671868 -0.1506655683923674574544013920490541109453108644791859114657837843
+-0.1743560068378512679152575299947443762504689480476570621749324843 +0.8300887071220306139363536768734752416692057466278345728554448043
++0.6018835924636782523215034400201993341434060856497418585329625279 +0.8244806963149490337769127166910316223379101498545059699144474846
++0.5094537464059880326374352490064905763350159638438638190213421193 -0.3267801787861358921558326193709571898654303757814961069177939802
+-0.6412882157453879879998117648467144628970706782597054160685555631 +0.3173522145518535642355402682590855477810669842087119833799882044
++0.9017103216368149546517732133490469846549850682301607701578308401 -0.9157683658115979207506514703487531113998263500938211160185082296
++0.9631270643127979384664069651403286361478505285019531813591892173 -0.5134442544464950511308392504791416236936576938651094919168340614
+-0.6210835173793688086670082589175993809833456274087668762475476635 -0.7129018571172519683293420596961998697718416105831222546361506794
+-0.8137281645240375388576750044830353268919925528507904843095256157 +0.9065123083843027156086152486704570882336886865580199421650643667
+-0.7041297500866612607234884784407130317305843364144413223065323821 -0.2793634385919329761753480106077153213406385720130702294691355484
+-0.1235721593345202217795554759876880268687368789792682195280803184 +0.9164978685669781253679917402797926874507921723240255331025472326
++0.01793996302825844948175557573252934185711456214972052895861572493 -0.7596059702886165943031875281927001506068162489624554198112485991
+-0.3411596862218241172328579047617234818967459872060847679144866809 +0.7396561092486294627586234874177829200642603190414086001487983221
+-0.7379746599220903325806827424480469595800618414934950958452657346 +0.2718148178589837914007749073085756104697032416499157400657364344
++0.6843546378904107483368305041075808036585650068151329599810630045 +0.4662517483044007390427270839972516857434523020114609710559500148
++0.4265099420399003863248167494626862205659560797404855195341684806 +0.08808257115588047484358934167308625153926780195956135649522315482
+-0.9874151891964456486571993218370826427302121071375833081581536189 +0.07657390220669434590596313316601208477726655511807687988961336808
++0.4601637140807105378191037234478805179877043129140064777542238544 +0.4588569896068761120165974962862286433176923282523892852244105839
+-0.4841039802362244364267157134690841461075259779700777041439742307 -0.6615298742890711325192770516946564063654133133292967525875541474
++0.9965877589863013394561112420396792373833365736836351278348301833 +0.07011733953074958640104399325017215014827304325156759173135366906
++0.1915677305233047765741909788297653137314715093312058543130169860 -0.9612259440538002535765483137294916063381851202661518339189071839
+-0.9100049476348622207723944867294612891098821253248738836563459568 +0.9171138429339400553744807769217606095680344268845843714152250596
++0.8085565025927605798160394591787637574375967583263627553971120289 -0.9187643669939806209463756973588109095305506934347503023729389190
+-0.8851479413535487385573817957243936843534909265401263726020814395 -0.4415653525364425875595561926619571676937519758818885848285036367
++0.6064591258881136876029163103297147737049475826316704311935105558 -0.2086520325624420487101916822135314045088175303036646863500495381
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.1511824375843169824185114172319147719223588913836399964007230083
+-0.7605582778547942408060351317015194879473019118917060721292547632 -0.7035924603583511535986984592864385797537640709172487432674768657
++0.9359455243018989598720894094889086512450300947660621306436953491 -0.6564151567101526404248033266354854181628562195765596859557723591
++0.6403329703003144866532882811013167888478814399097147096856286200 +0.6965977875831549207460696210505433710177694513815592587963931164
+-0.7566145378422368715122716757726615136162685098609876740055635889 +0.5816085290684877844083071838790011353935994102902484256340030157
++0.4983934648670891328811187892957709407528386913849427405222396790 -0.5272537155512824066074255359659027189627420792613958690510029190
+-0.4971948424110283155918942363898656650230845195141350175248779212 -0.8587217878456442924783287669774302171560923546889427532593498197
+-0.3682837387895926737476498418989480477365801929350913148252356807 +0.8026154977853840476009847583617913539728860956242379381174833460
++0.6148970507477253459184467315745337121338375212139515007860628315 +0.8316489546057848621322523310402149298559936201982941913906852864
+-0.9083524682273578446532722997799475788834527253595073048265657245 -0.6097628083165813974260954335449904988521230536577883358240508937
+-0.3916716877161613504785809028033398517645549846406356231576213868 -0.7453827739395389922953742392780783948094849228955462762695809318
+-0.5193518691808852117378350732261309854332184624171433727414006814 -0.1809554132180854707773280908184743372302489521523696413745651906
+-0.9750431258817692289559363598684739941265076062018304867776204819 -0.8150644675782343977339925655387466104832252738719676821788883516
++0.05005097085661604605086728229374112382053058454731767435671635371 +0.8917866574285656025686075793775106139378346795002297501283298878
++0.4399150750505159978489133507713340072340352057744402647976718275 +0.1101358891689796743272094664641471479081663952426245980291616029
++0.1872909367861505164718492831692222169018789408412172493435499423 -0.05419673336890120775922638146599077291212376190352050517562870720
++0.9419321039051109549245680082622391092246632631231828777233002149 +0.8788147199714254107037333013127960617440138295766969973173354907
+-0.4287041936652777153072881590344721321081952456510997660597381855 -0.9270379263943661268097274055148115732381615337919171906603260360
+-0.2333391111205556198207256592076331117879880842914267473885863455 +0.4642977843367946473083173399076729199459994296180290689057358231
++0.7889477067277564731712862630611699647549102063099584994888747696 +0.1101424766711395834493541735390025259293259452693930682212953338
+-0.2563747285446000361218237435955077669028092056157149416120292486 +0.9804018990020609521055380413227891839510323211141337706692935583
++0.8211574497098423675796354902233745259806437217163965161734702361 +0.8144388485796060257725468016904833551056739055694392606072812336
+-0.2430326281692574737943057410600918611450147916626606070615468027 -0.8395517493960846429066650820934625099120153763823264316622178314
+-0.5566744269539672218404388199827460990960984415899809143036909069 -0.5356363024105526066730000892740728141483682520537699099980586020
++0.4524110448637644360868388875231267640338311624103409145041788539 +0.3785984554723058056848684987205281373405286509670642510688353225
+-0.4077100331640054846709900852315956380002910175183742932154068317 +0.8125408356507693035783621684477489598336579370455636449932920399
++0.9925432694290908433525570320250227385826836114793383624485189244 -0.7304988390989189945560089553959860009999748685520304348991029980
+-0.6845441772530325736299180977635806745002567201737916085152286412 +0.7456261383135196385610840292806346156606897621955571769519287646
+-0.5689275448635581694575383584343021970227104177442089801706330228 +0.7757376987729343002700728678244609761294630501410110238207420656
++0.3985567814775143901221253743791327148945266133080683203695999962 +0.4078040359990933213948732923927214812372340416337539086249054226
++0.06961382826101090949578301124383292455559947536661707583968975184 +0.1767712938446947695198229699328249449877999447752262239584762909
++0.04307050119059237005387541827491059927895209375649378090223139587 +0.07365715096199305303280147905505827004287730234420360693427261478
++0.5849881776459916509815348468661649535409940486756497653761724118 -0.3108355387530528344022186566449990520542204513871372429842394977
++0.02943622593745917222898833754618856585348471594569686881397428726 -0.9157841385420411790181903606309676436954041107787988394005532203
++0.3572417013316431962026919347150511042636763596269956578845059238 +0.5517970855559362574840981197851271127548171428450299159534222246
++0.8246603472400295391578505724317567517180656867730457579866275623 +0.8076059738124808816284579607205742577625775175934575040140126923
++0.08267470722577286001217633724236129336011575576077446531397711074 -0.3623547609761457713662054674281991237079618589827581000231798627
++0.5296493544860877224747590127030477951987987258874100707895850711 +0.8183208109839758987990961359356649031888827382055407382873878803
++0.1781616718394205175709349645973564475788988241558791298588188050 -0.8535325136050236145755622731382685357658674118927526952194103789
+-0.8633908949968827943561744577901901026376268752722144571223670853 +0.7385965807078199198295561757281636178085738161163241745076529168
+-0.3459820993240706010475901311688197838023719669999227712290509004 +0.4178732695594172450325633659542989992529347731253116371174433175
+-0.8814262497135981437569523940906532685397798861799997656375266034 -0.5340515573220288676539037563933896861133701709641430080525373334
+-0.9722552720272006984678084914751283988556792015475269427349942943 -0.4642629009871243127720569534731497065151730863379424324926815934
++0.6486167889394565452584685154506739738504706411589692034776454683 -0.8697898736666791719966463521302103516597198677810465705462889386
++0.7237216114456588829885327945423834052953613010855527824331391861 +0.9260211067928626234987335196506123804866588031248091568668186807
++0.9153832161606877637775414865990581395464326012246760580785761313 -0.008817333363577657304077859427800946074653041725554105998740790418
+-0.5010512652356920074204032205934276172215285762480987760943959851 +0.5582339538069273279851977709472563742471538090477435724053193958
+-0.003517119711452846559277971844364606295296520854275366315952866112 -0.7255700875545188795082017268145707633365451965771130961377344798
+-0.7432644962454565902867854377146609433353697756825593784757725371 -0.9882699898882978270887601698779901692432742326870804476209571454
+-0.6678889143320625765336213759043802181180754155696893060399849702 -0.9276804865150421462892365252888320798428705497677187785005965023
+-0.6231432486376980435414857670687342821530306865222818413703487444 -0.7832811923001301276864916736742146403933964466320677660322633051
+-0.7612655580159597760389639032422118132475827999877015743017274080 +0.9875308623632782097656312821453924896496525870736205800843638587
++0.1046561870893663260798556882535941223232955552582338303672866205 +0.1783373466436970660022454632463179035762888722766888416391448363
+-0.4422178249719287625023613714462236578393297082084105686699745527 +0.7336545898457146349237975784794059749253087905334857489144998895
+-0.3006761386836519584160039426021947715604263308295216335254395417 +0.9127856868366581467510500732005220443872380003084957447131950721
+-0.3931472033430920383369653755030364057981520323323553764459192375 -0.3632881183963366167884860409201422151102177606787650299072097307
++0.8009564737468829284569870438621332728504682800502357253909429840 -0.3268576018334922472384377473775779415605488146060240031080037115
+-0.1173363847349279118426129136160276265546406000211794923295485560 +0.9427149588672463047630742061537997891278684495348468159028173334
++0.4299591565232924801870368761556079288133632606094048768501521181 +0.7916571579983658653317798731563225080239623370784297265192438825
++0.3519508427149724056038340065726224107858818936655812955385008590 -0.6817701452011630996907953818868671270735516339211681814255907609
++0.4719165407085054156880418423268675488422117760448059022673468457 -0.5168940707242169951406978648595076294647040487113324969763690473
+-0.1600709565700552484491336034747507816107856100797576115468140784 +0.4155311954965517114024103086773167213755429855677272377839721067
+-0.7196566232553047172113131790990428945643928116318893875786802199 +0.6506707691016388017357516362760131941221566979795718699904936102
++0.9506852903491360468879758484099667312771993016096956267658366287 -0.7043718208306549962960929614939365734224121070283816720729220425
+-0.3776736725704435658453332291251578463493585478972191163904289213 -0.9030673117697692613858834879354138789682350761417043644810908266
++0.6001953620324393368833490197603304801854572549372059847172328017 +0.5465706740090774853953336301894435415008351646460109707839721596
++0.6978878736648347125949172253483236996713754832649550025174381314 -0.6814239608934778019209189605706175697331566277120687413401512713
++0.8508443401291057488517795791511283359984797073308503806275388226 +0.9205925082347564380336697132499017123825554431098646503055203834
+-0.4669474695063991815703085816201270850746349019459750890255838246 -0.5020782788038677346392099888475830183897864323626792080264544951
+-0.4916857659539131984511014678316277462480514807356006060275370059 +0.1045062318771655437961420896781653537832869869453123103733053855
++0.6805454442564243054841615570704809357725921633306984108877804159 -0.1600201060994392446745228713066083331646179396065484107159119337
+-0.7429928693445994197394008924008488085983664860223161935727994358 -0.1176882561544923620215084381200312622694313533614808151971725197
+-0.6969676211949719236627008807329635886036631346596064918901094455 -0.1898251716095867210440135081381899859506047209026635006620997810
++0.7197019444966162425693701580554867509036572823057158142921206547 +0.7858779951083861580332996484728804881745801231417586365625881696
++0.7821091276993633157184444189269089852199610591029476119050859896 -0.2279832493810412940114966076664112325854082672090777285019621618
++0.8533226121539329221550195141712150337184702154268885269745819910 +0.07761160430503009576118799101543653660926181662195182427626478291
+-0.5271231904299831306010230073357821701271416210281300595416035220 -0.2055488181060608320954691371766551168555828485198254292077222517
+-0.04518836599707041257371263007133991513702551585551047967233360089 -0.8570653123756356936765798157651852007633450856266713907351356642
+-0.3994910205015023995978692651199523393500004114939614636352980640 +0.8510470630599207981929699284163199387691742475697788917650312737
++0.1151112248581587985459044273509734339372139569519498681662926204 -0.1656012361332616709224523200638076386717414816760750375488963700
++0.4120054991803597141675815179438163442823969621208991056428168406 +0.4313169396402067420747675191335695107540210953445957632944683466
++0.4343579826046095597725968699957767082823418268721181549420071456 -0.6136943581151102724274558633917286896829715873222934810854627144
++0.2535126428268633086086116718856542176680789611156801564801311848 +0.6107089044121956416324813364187592386184059323011742030772237424
++0.07575910820021246358816323232702289803823041246205070258897871070 +0.4569955077979069087363694857841772836360708458051620753700613184
+-0.009921455995466628736212379839332998874975285848956671613709936322 -0.2056316517130173688144925128431576975079195367781834481815163780
+-0.5891566693005274615768435832037723406013603962165946345013825592 -0.3127653344142269367017311068934194736573539345353684494263561034
++0.4725424296459514103640632185799575468737722475096114637473172301 +0.5675769204970204695935245199626881958749158960158155816882247751
+-0.3642689669126664223527375212471788979005234643229363317834063467 -0.7973797882525385651192136516616674358654229933256541899442767797
++0.9106160875739411428476569185959640646231793213239998804082355729 +0.5012904467166158311205187729565579292182659743325041112386977484
+-0.1554296096295892351142787706783742826880784898341993011418432069 -0.2570017860782360774767408845442523659054818260225494146244853645
+-0.8069065915498787556695276318086362565827819941733622970182376756 +0.8152856345265963021214702712184311864712144712337072499723510820
+
+-7.624563886872635640561705518181576563330448203557926944316767 +14.819899929512716892172630222024265743523066524925065859282514
++1.414551640086091408755204352630684635784995563430483454000222 +5.866705544572522284188227294170352276275353108573656615903288
++13.203316489402651862180225297764936135372500778359320988598754 +11.434683438522942787895220499599497313411512852023874818722092
++9.015664107243742102810205207636598395811156370584706216781558 -10.696161432077655699030797477978245549869763150688655823813317
+-17.246766654556094083334856598698279771612491449509528316805484 -12.041628695664423183751433277534525715889574410189590139932198
++13.7295972110726398693945081735822661847055054979167669267231894 -10.4072888107398075992543239585780669076604021067509536339047727
++9.465363518759040156162566806942279307125631939759258461900719 +4.403606774168237042608405022971117147411258280690016774667774
++8.152870420698895922453298209285537074751970755192279602432086 -2.816657221571488239943288285354893092466615005071967628103227
++1.2886259885361557242083299069873656575917687392394800498984853 -9.5421990847937342439272003789835384152476637996190933046503432
+-3.765735876332464344951175912038370896410530432333604980667586 +6.496822303892519040808453362615018954554007651267498935680775
+-1.149352667272502211123472143649856235584085472422736485199281 +7.782164412456111700870571463088881097249018727302874080753775
+-0.596859202444493036720432201208470390094492759464154372784381 +20.311286497788349299438025541653431799380093484565273168212688
+-8.605333232090884410378159207741094517712346981745201714582758 -17.309643970281373923209336838580797248154676741336765576761570
++6.016796638573742261948568922407277487110721973072773635771745 +1.034239893591255350125417327939890498022872121330165947319647
++5.373027196419271381194858940738786343222508157476137538469551 +20.009374729429212258791960247082251850352843342200681918762995
+-0.598406765794123907592735075167997058673216618049571682620145 +12.659877277143632890226681944197279852491510342618757665292810
++0.4866644028585072634779184616097992577805152690352804798407709 -7.6743320147949691466190576789238093582501616240390894985255338
+-0.213971168729614659939258797396450367321506687558313960364567 +27.648808557080130401961944490714079756740946367595916984085054
+-0.6732111349147678067099805691691538921020045688546972776159055 +1.9929847063183988084751445759478995321032889318449127894905554
+-16.667734822170197796004715318120610735553778449110004211687341 -8.193305492468275366809646133871646608178510288886234093055545
+
diff --git a/tests/data/nfft_2d_10_20_50.txt b/tests/data/nfft_2d_10_20_50.txt
new file mode 100644
index 0000000..63cdcc7
--- /dev/null
+++ b/tests/data/nfft_2d_10_20_50.txt
@@ -0,0 +1,360 @@
+2
+
+10
+20
+
+50
+
++0.3173894901710712338304379034862579946422889909408459156044823877
+-0.3667543868355520941544575938257847368987701408778114882987979123
++0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4393343513885464893650781262914436001773705088850610475139449829
++0.01022750575332349257722449804129916311389119097299090643512381743
++0.09724896680371957101023456043902667815088539956343028172851831004
++0.4700775714463633978511207403685111986859425845978719788126486235
+-0.3358534858018228008930174455675250519517010131613592135710326757
+-0.1306486726789604518575642087548321430960584930096366967255476517
++0.09206201328582059293609619426014170729486960607917988224801612305
++0.01032012051955487309722047463966310173477870581273801739268254951
++0.2657081638057710356109850449698822151648783127222896297915845505
++0.4969744253080455744694825346756894506554753184704475582968873208
+-0.3896799171385425910280775698323345593268837461598793276080712743
++0.07714972696698667716678650997245420808817430827447314113682745907
+-0.02491369905948525014094604981517037150278591583244194805018146991
++0.3914347841983986584093169466825129403698312444687581041683071856
+-0.1076415739382721498345038358573933688341820551665322075789524509
++0.4098351732528003809102269734570294879975455702584035273166455779
+-0.07151629523327176189411207208538153350324597543738741809574504658
++0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2729284644063738002341295104132857495338305729920700013008922333
++0.3525707830542183854600907186155249059680080381975147205747395167
++0.09283440750861957635440201232165846433764147503752950359886015311
+-0.4593142592621138819114189833820168418626239763706778624898432299
++0.4096571910929782462238577122549675981718214537014044537215019452
++0.3029583073136138265829962071140439545004830470746425534136209257
++0.2302243745669765578486926860942252628118506165725692957820305864
+-0.4755711272429793224288583422054842471828900217314654775994176650
+-0.4303267914341560007766990049507480343981616992540993964015009290
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.1014391221904101019539350076278292483536923208503397585858894884
++0.09085671307189002853971282071576253250819369457305730572873101910
++0.3863781080296671218440614854031328269611997505425469222859116048
+-0.4384199598876636262124112488913918123145588604895783942604512689
++0.1108227756448777051455727606648018553357448076539765946862706064
+-0.1013589956735152573510406730689184973691015496657475510126506381
++0.4030260353866424922914759784022018079940415586122025700043945798
++0.06875288804967068748620631495815812310608096163779380055154102558
++0.1247492229282524246053090042093696732793505450810943264155391612
+-0.2206549379852138057578743061470069389191225157277024467333194435
++0.3463602314652901879187900602326408775815696731976526372069549870
+-0.4643197195119173309525456044702917254373982711189458917859034631
++0.1742103250722310383210116734163969262525397097134100265396948258
+-0.2381993349353649959266405506577935293738035850399354993188862868
+-0.2682861506665362644547235799610166013942935834114952458624782931
++0.1092122305172402888258153501556024641240468035240884586547566337
+-0.2484919486952133736276301730817211937763024849719733543532014573
++0.2642327778745240757646266294392459562801915916132871452102135091
+-0.05498166129765227392701816783972152082386315555833273617452947187
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.3378273812843961582542292063629884092072283649810198437878149280
+-0.1579152561477417245680939938059372817945921112643983640578929336
++0.4343677658460177957275595739809349999045308826689340487124946099
++0.1729154576995603929033538546168666485286603783333729055438208098
++0.3286853674471442517278328774594531175004129974221230240529921097
+-0.005488434703663033807202110079459379772452209210435747933850600026
++0.1520461277157108621931381428546029388707591308784659495630676370
++0.1313277929451562487082545713868668183502620330575886917609655136
++0.3461657595773729745308854436538835073994736978427168454373516985
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.4398392223920449400907046631777097726644650279540499745251682393
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.01189153022550738271020564024560338180911293813423246023331802902
++0.4747795551811432367868902234458387985659947076528818830641254566
++0.4927498363209993415423255652249335532347992639631937083611382401
++0.06403862356712929207278788512728706067982585049275341514041588589
++0.3358502781831149238206790069978103636181122693169617235357165508
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4189021546786846898713994499102361111761337212340449822195971588
+-0.4195634668605248660892165218851209239268844866648432819445044954
+-0.1952017580385246842215057574004983762128495778038110686132947133
++0.04500489974247188801035267400166477957461676904337052075668156194
++0.1798107471163638439578816295238259584468770453133038678573909804
+-0.08834061683832729395743261247688425414802993275433895678020615860
++0.3979314169915041735368106500472849935917247124619023375003704306
+-0.05012499979552010356459573472764647953878012390959562904972546234
++0.2706265164684795897847947709150290937598347126997964072971218439
++0.4279156393274057309236852245921689139491849071240754852340002326
+-0.1306768866297050878382755406991227297651262848493266576034685194
++0.2678253108467659283584482339990112224237477098870371360902212831
++0.2179141620260913858490951088397942235004247794251448876571280120
+-0.02625691461327344055922337707830927973974380680329712859379796682
+-0.2968732896149628517099100943143613476200461843570397483007658758
++0.4759047591062144391383689410077974773955630780125823813435367896
+-0.1609020739688566968967924800650866311305197251794118595176451781
++0.4978111926406553748261308123557606568607924290968953953283570459
+-0.3680457287373024960717322225368521536710342004223667403911426638
++0.3370526398003044917338285727477518400816448538246807560798450068
++0.2765936823474155586364921826153439911980007106133278951103707030
+-0.4348875280358313577685853547130144822185950526155031914995950890
++0.007087880987108839466396846546797728109882567594291260004693055154
++0.2697310091373757401623213224022556791972046185410645292287609540
++0.3448794239046061622109983794627803016406640741645905667575177771
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.3498351569751814493591869134788974919431524046935587950216858142
+-0.4302348750536436853767752212077304891361636801177679666901775557
+-0.06548388787215626885971146251934855059017806534963115617003157257
++0.1911031215178088094488640140802007253494213892471707486908629466
++0.04524751634490719501230109883674608756741975505321511051160810143
+
++0.7721031360269444536624854764846278079390436516442447307214583713 +0.2568190130746644331048317748223591322462097932104379543095780599
++0.7113282365127787106295924505560767722199840055537543517442585349 +0.9282397683744983930469496205745698232573096227549226254155622007
++0.7679535856628120283990827155162180966010981503917935490380557142 +0.6733680895626635922558736333908780380926273791887898430485173634
+-0.6127602430473631495393181955733023028663546816025211937039540524 +0.6834258455476852992466772196651133096274086383123765308288566681
+-0.5944056790460496081717996899055920305811666877696698395774078378 -0.3197260966794518948885909003357003020869183279810950125249989182
++0.9839367502424209997890558933686976016082869978582241397510153252 -0.3602154836971247653552601690662060499632143516459194629015046587
+-0.4548419343247805224460011391703079342763504118566706946966391853 +0.5644944652643029946030943876077187355907298250270171876933333996
+-0.8849845588398620212194475625021727518116463369860566764411889312 +0.3002450060649265466224439088480847866613297705716750391656367250
+-0.2496600323413886386258990085306122333313701779141184118995463959 +0.9109171936013987677935840681404253773950900911474823029568083952
++0.2013567579813494116381818105314838610969816486807952028421948124 +0.9809865904559495207084689029816148884009367903151903920423149056
+-0.8585801045716661137497618288810938649698205103567498949997938400 +0.6673430101175698152854688993768041548769019864465421762641808302
++0.7326702292582058588316598422918662773838658327971514003421703067 +0.1912403836532585581545915780169638266665110774534903895312903483
+-0.2697443704573465465233716116511309018200366900116819867580635278 -0.8390872225468263142545242699093560592768485203012323759548269441
+-0.6468087813680422377672655136982917947328505318460482424201962000 -0.1694425027392812196149909158729299355102867577367629176586906841
+-0.2812302577494115409480047067683469320314228801749259890701395474 -0.1109481979293641305323565532634133494943626968908239858539934786
+-0.02167413194230472805204979364706614220652157873015883116130884482 -0.7576390226829376962602306885924643215709630457357178698800775945
+-0.6808949558907041005466617267577471160247144934082880243741902340 -0.2384036559822549222513803512289385096334288445624862912807231185
+-0.9306530725185795934583927665790248017610038861531896668451002839 +0.3322077770142086566449475410492734728431728270878221527000512398
++0.3319152007540851906913026983763584438955853838764895977762668678 +0.3008294101164568639831269327829387098511379992571638835271467486
+-0.4414898031680223608932387792017485771255689761890070706015387399 -0.8500127542413940364553721045188171752513697377512921485742321549
++0.04675554236208552284539297942143061834219393972333359647545914081 +0.8368368938909749223146178710811008588487209933709262501849117012
+-0.8152568938325646993310760006867681539054279301843202148958871677 -0.6301301812957352916599361333234055414853612961930455283065817178
++0.3952163240756655529212705355453418848569049122249531536768131848 +0.9291299159382365190501422959288431216663095157691743654943652200
+-0.9395163144138835125672454933008856593503204403133472584898229717 -0.2057454411726747632614076986736370443370299660132771686206360685
+-0.08780353633292157461769946866167963633505729824902226238512671868 -0.1506655683923674574544013920490541109453108644791859114657837843
+-0.1743560068378512679152575299947443762504689480476570621749324843 +0.8300887071220306139363536768734752416692057466278345728554448043
++0.6018835924636782523215034400201993341434060856497418585329625279 +0.8244806963149490337769127166910316223379101498545059699144474846
++0.5094537464059880326374352490064905763350159638438638190213421193 -0.3267801787861358921558326193709571898654303757814961069177939802
+-0.6412882157453879879998117648467144628970706782597054160685555631 +0.3173522145518535642355402682590855477810669842087119833799882044
++0.9017103216368149546517732133490469846549850682301607701578308401 -0.9157683658115979207506514703487531113998263500938211160185082296
++0.9631270643127979384664069651403286361478505285019531813591892173 -0.5134442544464950511308392504791416236936576938651094919168340614
+-0.6210835173793688086670082589175993809833456274087668762475476635 -0.7129018571172519683293420596961998697718416105831222546361506794
+-0.8137281645240375388576750044830353268919925528507904843095256157 +0.9065123083843027156086152486704570882336886865580199421650643667
+-0.7041297500866612607234884784407130317305843364144413223065323821 -0.2793634385919329761753480106077153213406385720130702294691355484
+-0.1235721593345202217795554759876880268687368789792682195280803184 +0.9164978685669781253679917402797926874507921723240255331025472326
++0.01793996302825844948175557573252934185711456214972052895861572493 -0.7596059702886165943031875281927001506068162489624554198112485991
+-0.3411596862218241172328579047617234818967459872060847679144866809 +0.7396561092486294627586234874177829200642603190414086001487983221
+-0.7379746599220903325806827424480469595800618414934950958452657346 +0.2718148178589837914007749073085756104697032416499157400657364344
++0.6843546378904107483368305041075808036585650068151329599810630045 +0.4662517483044007390427270839972516857434523020114609710559500148
++0.4265099420399003863248167494626862205659560797404855195341684806 +0.08808257115588047484358934167308625153926780195956135649522315482
+-0.9874151891964456486571993218370826427302121071375833081581536189 +0.07657390220669434590596313316601208477726655511807687988961336808
++0.4601637140807105378191037234478805179877043129140064777542238544 +0.4588569896068761120165974962862286433176923282523892852244105839
+-0.4841039802362244364267157134690841461075259779700777041439742307 -0.6615298742890711325192770516946564063654133133292967525875541474
++0.9965877589863013394561112420396792373833365736836351278348301833 +0.07011733953074958640104399325017215014827304325156759173135366906
++0.1915677305233047765741909788297653137314715093312058543130169860 -0.9612259440538002535765483137294916063381851202661518339189071839
+-0.9100049476348622207723944867294612891098821253248738836563459568 +0.9171138429339400553744807769217606095680344268845843714152250596
++0.8085565025927605798160394591787637574375967583263627553971120289 -0.9187643669939806209463756973588109095305506934347503023729389190
+-0.8851479413535487385573817957243936843534909265401263726020814395 -0.4415653525364425875595561926619571676937519758818885848285036367
++0.6064591258881136876029163103297147737049475826316704311935105558 -0.2086520325624420487101916822135314045088175303036646863500495381
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.1511824375843169824185114172319147719223588913836399964007230083
+-0.7605582778547942408060351317015194879473019118917060721292547632 -0.7035924603583511535986984592864385797537640709172487432674768657
++0.9359455243018989598720894094889086512450300947660621306436953491 -0.6564151567101526404248033266354854181628562195765596859557723591
++0.6403329703003144866532882811013167888478814399097147096856286200 +0.6965977875831549207460696210505433710177694513815592587963931164
+-0.7566145378422368715122716757726615136162685098609876740055635889 +0.5816085290684877844083071838790011353935994102902484256340030157
++0.4983934648670891328811187892957709407528386913849427405222396790 -0.5272537155512824066074255359659027189627420792613958690510029190
+-0.4971948424110283155918942363898656650230845195141350175248779212 -0.8587217878456442924783287669774302171560923546889427532593498197
+-0.3682837387895926737476498418989480477365801929350913148252356807 +0.8026154977853840476009847583617913539728860956242379381174833460
++0.6148970507477253459184467315745337121338375212139515007860628315 +0.8316489546057848621322523310402149298559936201982941913906852864
+-0.9083524682273578446532722997799475788834527253595073048265657245 -0.6097628083165813974260954335449904988521230536577883358240508937
+-0.3916716877161613504785809028033398517645549846406356231576213868 -0.7453827739395389922953742392780783948094849228955462762695809318
+-0.5193518691808852117378350732261309854332184624171433727414006814 -0.1809554132180854707773280908184743372302489521523696413745651906
+-0.9750431258817692289559363598684739941265076062018304867776204819 -0.8150644675782343977339925655387466104832252738719676821788883516
++0.05005097085661604605086728229374112382053058454731767435671635371 +0.8917866574285656025686075793775106139378346795002297501283298878
++0.4399150750505159978489133507713340072340352057744402647976718275 +0.1101358891689796743272094664641471479081663952426245980291616029
++0.1872909367861505164718492831692222169018789408412172493435499423 -0.05419673336890120775922638146599077291212376190352050517562870720
++0.9419321039051109549245680082622391092246632631231828777233002149 +0.8788147199714254107037333013127960617440138295766969973173354907
+-0.4287041936652777153072881590344721321081952456510997660597381855 -0.9270379263943661268097274055148115732381615337919171906603260360
+-0.2333391111205556198207256592076331117879880842914267473885863455 +0.4642977843367946473083173399076729199459994296180290689057358231
++0.7889477067277564731712862630611699647549102063099584994888747696 +0.1101424766711395834493541735390025259293259452693930682212953338
+-0.2563747285446000361218237435955077669028092056157149416120292486 +0.9804018990020609521055380413227891839510323211141337706692935583
++0.8211574497098423675796354902233745259806437217163965161734702361 +0.8144388485796060257725468016904833551056739055694392606072812336
+-0.2430326281692574737943057410600918611450147916626606070615468027 -0.8395517493960846429066650820934625099120153763823264316622178314
+-0.5566744269539672218404388199827460990960984415899809143036909069 -0.5356363024105526066730000892740728141483682520537699099980586020
++0.4524110448637644360868388875231267640338311624103409145041788539 +0.3785984554723058056848684987205281373405286509670642510688353225
+-0.4077100331640054846709900852315956380002910175183742932154068317 +0.8125408356507693035783621684477489598336579370455636449932920399
++0.9925432694290908433525570320250227385826836114793383624485189244 -0.7304988390989189945560089553959860009999748685520304348991029980
+-0.6845441772530325736299180977635806745002567201737916085152286412 +0.7456261383135196385610840292806346156606897621955571769519287646
+-0.5689275448635581694575383584343021970227104177442089801706330228 +0.7757376987729343002700728678244609761294630501410110238207420656
++0.3985567814775143901221253743791327148945266133080683203695999962 +0.4078040359990933213948732923927214812372340416337539086249054226
++0.06961382826101090949578301124383292455559947536661707583968975184 +0.1767712938446947695198229699328249449877999447752262239584762909
++0.04307050119059237005387541827491059927895209375649378090223139587 +0.07365715096199305303280147905505827004287730234420360693427261478
++0.5849881776459916509815348468661649535409940486756497653761724118 -0.3108355387530528344022186566449990520542204513871372429842394977
++0.02943622593745917222898833754618856585348471594569686881397428726 -0.9157841385420411790181903606309676436954041107787988394005532203
++0.3572417013316431962026919347150511042636763596269956578845059238 +0.5517970855559362574840981197851271127548171428450299159534222246
++0.8246603472400295391578505724317567517180656867730457579866275623 +0.8076059738124808816284579607205742577625775175934575040140126923
++0.08267470722577286001217633724236129336011575576077446531397711074 -0.3623547609761457713662054674281991237079618589827581000231798627
++0.5296493544860877224747590127030477951987987258874100707895850711 +0.8183208109839758987990961359356649031888827382055407382873878803
++0.1781616718394205175709349645973564475788988241558791298588188050 -0.8535325136050236145755622731382685357658674118927526952194103789
+-0.8633908949968827943561744577901901026376268752722144571223670853 +0.7385965807078199198295561757281636178085738161163241745076529168
+-0.3459820993240706010475901311688197838023719669999227712290509004 +0.4178732695594172450325633659542989992529347731253116371174433175
+-0.8814262497135981437569523940906532685397798861799997656375266034 -0.5340515573220288676539037563933896861133701709641430080525373334
+-0.9722552720272006984678084914751283988556792015475269427349942943 -0.4642629009871243127720569534731497065151730863379424324926815934
++0.6486167889394565452584685154506739738504706411589692034776454683 -0.8697898736666791719966463521302103516597198677810465705462889386
++0.7237216114456588829885327945423834052953613010855527824331391861 +0.9260211067928626234987335196506123804866588031248091568668186807
++0.9153832161606877637775414865990581395464326012246760580785761313 -0.008817333363577657304077859427800946074653041725554105998740790418
+-0.5010512652356920074204032205934276172215285762480987760943959851 +0.5582339538069273279851977709472563742471538090477435724053193958
+-0.003517119711452846559277971844364606295296520854275366315952866112 -0.7255700875545188795082017268145707633365451965771130961377344798
+-0.7432644962454565902867854377146609433353697756825593784757725371 -0.9882699898882978270887601698779901692432742326870804476209571454
+-0.6678889143320625765336213759043802181180754155696893060399849702 -0.9276804865150421462892365252888320798428705497677187785005965023
+-0.6231432486376980435414857670687342821530306865222818413703487444 -0.7832811923001301276864916736742146403933964466320677660322633051
+-0.7612655580159597760389639032422118132475827999877015743017274080 +0.9875308623632782097656312821453924896496525870736205800843638587
++0.1046561870893663260798556882535941223232955552582338303672866205 +0.1783373466436970660022454632463179035762888722766888416391448363
+-0.4422178249719287625023613714462236578393297082084105686699745527 +0.7336545898457146349237975784794059749253087905334857489144998895
+-0.3006761386836519584160039426021947715604263308295216335254395417 +0.9127856868366581467510500732005220443872380003084957447131950721
+-0.3931472033430920383369653755030364057981520323323553764459192375 -0.3632881183963366167884860409201422151102177606787650299072097307
++0.8009564737468829284569870438621332728504682800502357253909429840 -0.3268576018334922472384377473775779415605488146060240031080037115
+-0.1173363847349279118426129136160276265546406000211794923295485560 +0.9427149588672463047630742061537997891278684495348468159028173334
++0.4299591565232924801870368761556079288133632606094048768501521181 +0.7916571579983658653317798731563225080239623370784297265192438825
++0.3519508427149724056038340065726224107858818936655812955385008590 -0.6817701452011630996907953818868671270735516339211681814255907609
++0.4719165407085054156880418423268675488422117760448059022673468457 -0.5168940707242169951406978648595076294647040487113324969763690473
+-0.1600709565700552484491336034747507816107856100797576115468140784 +0.4155311954965517114024103086773167213755429855677272377839721067
+-0.7196566232553047172113131790990428945643928116318893875786802199 +0.6506707691016388017357516362760131941221566979795718699904936102
++0.9506852903491360468879758484099667312771993016096956267658366287 -0.7043718208306549962960929614939365734224121070283816720729220425
+-0.3776736725704435658453332291251578463493585478972191163904289213 -0.9030673117697692613858834879354138789682350761417043644810908266
++0.6001953620324393368833490197603304801854572549372059847172328017 +0.5465706740090774853953336301894435415008351646460109707839721596
++0.6978878736648347125949172253483236996713754832649550025174381314 -0.6814239608934778019209189605706175697331566277120687413401512713
++0.8508443401291057488517795791511283359984797073308503806275388226 +0.9205925082347564380336697132499017123825554431098646503055203834
+-0.4669474695063991815703085816201270850746349019459750890255838246 -0.5020782788038677346392099888475830183897864323626792080264544951
+-0.4916857659539131984511014678316277462480514807356006060275370059 +0.1045062318771655437961420896781653537832869869453123103733053855
++0.6805454442564243054841615570704809357725921633306984108877804159 -0.1600201060994392446745228713066083331646179396065484107159119337
+-0.7429928693445994197394008924008488085983664860223161935727994358 -0.1176882561544923620215084381200312622694313533614808151971725197
+-0.6969676211949719236627008807329635886036631346596064918901094455 -0.1898251716095867210440135081381899859506047209026635006620997810
++0.7197019444966162425693701580554867509036572823057158142921206547 +0.7858779951083861580332996484728804881745801231417586365625881696
++0.7821091276993633157184444189269089852199610591029476119050859896 -0.2279832493810412940114966076664112325854082672090777285019621618
++0.8533226121539329221550195141712150337184702154268885269745819910 +0.07761160430503009576118799101543653660926181662195182427626478291
+-0.5271231904299831306010230073357821701271416210281300595416035220 -0.2055488181060608320954691371766551168555828485198254292077222517
+-0.04518836599707041257371263007133991513702551585551047967233360089 -0.8570653123756356936765798157651852007633450856266713907351356642
+-0.3994910205015023995978692651199523393500004114939614636352980640 +0.8510470630599207981929699284163199387691742475697788917650312737
++0.1151112248581587985459044273509734339372139569519498681662926204 -0.1656012361332616709224523200638076386717414816760750375488963700
++0.4120054991803597141675815179438163442823969621208991056428168406 +0.4313169396402067420747675191335695107540210953445957632944683466
++0.4343579826046095597725968699957767082823418268721181549420071456 -0.6136943581151102724274558633917286896829715873222934810854627144
++0.2535126428268633086086116718856542176680789611156801564801311848 +0.6107089044121956416324813364187592386184059323011742030772237424
++0.07575910820021246358816323232702289803823041246205070258897871070 +0.4569955077979069087363694857841772836360708458051620753700613184
+-0.009921455995466628736212379839332998874975285848956671613709936322 -0.2056316517130173688144925128431576975079195367781834481815163780
+-0.5891566693005274615768435832037723406013603962165946345013825592 -0.3127653344142269367017311068934194736573539345353684494263561034
++0.4725424296459514103640632185799575468737722475096114637473172301 +0.5675769204970204695935245199626881958749158960158155816882247751
+-0.3642689669126664223527375212471788979005234643229363317834063467 -0.7973797882525385651192136516616674358654229933256541899442767797
++0.9106160875739411428476569185959640646231793213239998804082355729 +0.5012904467166158311205187729565579292182659743325041112386977484
+-0.1554296096295892351142787706783742826880784898341993011418432069 -0.2570017860782360774767408845442523659054818260225494146244853645
+-0.8069065915498787556695276318086362565827819941733622970182376756 +0.8152856345265963021214702712184311864712144712337072499723510820
++0.3774149419137016419806042817145212836004227419492405559087274340 +0.3474550590975565404544821867969338696280672245517491821876495039
++0.2862571560348818269179471614749431512680830893414487690534246820 +0.7718119181978566336150728291679018907122826327418198982205731192
++0.9392006333865916821227548404291848184201007925131229813910957774 +0.04535880498283686865208322483522967139304884767842664817216330064
++0.5114205299580920868823613420213360686329180904621350249508347984 -0.7174845876743344015633175484139120449777707133419695966520824564
+-0.6408078680635244612899765081025913686282954450887306823350772997 -0.8532961844667343672614407218622874059456622649181507984554557180
++0.6103476918632637106424717122234807592708375161253117953076031400 -0.3551691762386405619967249318449133353395153150287271325435124081
+-0.1695324055840820458497589349479760035964663521113253737383164439 -0.3797572987358468877601704908647997438784227376119508300980299747
+-0.8353594742240205937097730115138661305557325449129426505768609534 +0.3764932269744641381853168742044507381862031491302365412212635060
++0.1821483418007667766250895141417107286953921543595289977783017637 +0.2816632617692655097062060192076384166912647824219953750826131631
+-0.4074526958925963909486488891837393063126910851657623153854908031 +0.6936970465516315197236088803729008972356138275937389314888615401
++0.5194123128321160939700776973599963366760031201335463428826305590 -0.8093948466492362612217398058810377625062288216775489656468562411
+-0.1339026726689501933617889040862807661257038358606191032725698017 +0.7179094192553983421088688870290454722724258927762520549683983736
++0.1617840119849052908674425797539541379830915417411164257796009655 -0.8752125899339353908597128121427435294227530087554395150859455125
+-0.5833399591688895541493678958036554117556929951798174740043291689 +0.04176278772058224232241432506737925045260833246510034386845030186
++0.2558611196916433369649336532000849479904305619298222327625863899 +0.9269329565460541008731323076781001715661419867914361439680533663
++0.9637184128969163713272727389388526394331293708405231601274766637 +0.7868192948478988386779315105006009612933033201432314519183555363
++0.02398516466411951663039478357357263297576765858214578984119980389 -0.006266353716036539320572064746082526752743361256443337864258505608
++0.7220807768185265925885711430037484304092954076856054861183001563 +0.2266154233841305998807280483192876569901369827513556377738818721
+-0.8314034062393001851412680462190559603040746972786212429324375224 +0.2746350702494963366663352365693945459844370045750631885709403566
+-0.2313683087056718682580625867623460795004227069874977160354372877 -0.5247772986387898164750425486144677116796659442569793354035835811
++0.5241531162028989758906123049906275766571616823241720374203214447 -0.4928925951310793013273500011155592100819574396889780507999573189
++0.09003216360057281587724105549690566269005814841108581287665281058 -0.3113637472666701974473222596908779747755145602641740095469526339
+-0.1599268816032428776743959117270259866309677355351818460136443291 -0.5748854355426279234162395955225246347221834110564955747956209638
++0.7126643265921692501928118835762400720628273345745039396768073268 -0.2554460407289573319602333075606187389397146712378109702048311016
++0.1443381463559750344148688262608847179704805274810841956785523095 -0.5765429128839939287156523310227195364489667524718802860187766530
+-0.9541149480810226451568227541620900387924893378859274527595762471 +0.9094805878752663366484875502653563100058416506406189283398268678
++0.3516772517804962317135771244694045300550581304302552629989927399 +0.8848752416174802394989820330821347631944308988732361074957483326
++0.8312645047002901343481040986077492354211106507977246573848547872 -0.2800064663747466167971611334477592148285678388000719119052505901
++0.8922074343575836687927424867109565448477559678636672119414443701 -0.3524957419793069043802183938505947717728662986795036125951037387
+-0.03914580715076807517564668371313115131680481962361916796431130169 -0.9266175799130044754501565944451928082906704525569144780860061500
++0.9746573852711840936336177201962708050687509298510135226623575906 -0.5330220313943443910835605702117655504592614398056913858309712345
+-0.7287905575728605025843722055111257091486772902084438557782657679 -0.7330266194736301185266620028746862947402855823289205835841036965
++0.02849594996466824865218850207780069267985584074611847663329993142 -0.08901643770401430747538873378587416087951119772581637121305331682
++0.6459433245400880395491408374407025292588521318149535734854910274 +0.8550765251384289421250035837565358470833355010809526497352204912
++0.8136628661132407079541934173897141567434892632439804419184181281 -0.6907357918123153055314910754893467338334399179189583430196498864
+-0.5672690776078439250283757912452916624289131865014778354746409640 +0.8787770736433328745035234902871834306966611855454194152763085168
+-0.9476387464140397458861421362921055215974651715794066883914951208 -0.01738793803090707722596079625349684366463055472987575653160098446
+-0.2605437240709855372272831411319884164143200014969561164796810212 -0.8437894361676828459420431516790179378543254071636108492466529010
+-0.3311597085631775241605389615954882776971235843100995205029515984 -0.8141497075382254027096074950311514491854968487203741238943799987
+-0.8695822150875121724691553338257829869250127182425918912387649806 +0.03889316514893840261980283978604250703936072380623394289182754247
++0.8891098289754707421060220890985710245132795198449297271458423909 -0.5493273108612277875600478109570404534520845332638624479667841502
++0.2895552325554255930167653346015931047558748269272406529926466973 +0.6715912488533200815290011024385797575217363717470920802742883653
++0.2650936900762128600362413578030729270793479332746334793752266553 -0.8438919390970836161462370188424965610990320605153865447984219469
++0.7046936151828971593710415948632896548808680079056988913118083777 +0.7184582122882689810255427112660454958040291396946043511983687288
+-0.2115570299364757676008017443811649086191736127455534555376144021 -0.4086097264688666636790174928803728608266459573162410770584140364
++0.1470216587412559156294994682432100810761459629584248289010138317 -0.5697919261032078557614020481060183849522111669616974872492012829
+-0.4329010361486256961244622956913108506550874170254014125575533479 -0.6278243966060881460501444931432866833291695231208083680886203722
+-0.1766818323431859044625743795499747752198631648846896440459670393 +0.03368286177059315443832500997308649526629280623504246086916187170
++0.3427075333057822059987675632859967887158938796610229803331114623 -0.7436883526680899648969850724114253803054818951808117927039564586
+-0.1833768865732711001295741826816961691797355582139228551235621230 -0.4515446035045963800470270932006012917142703741148728102920678819
++0.5665067551831146950685364521560101025985707475803564862178192914 -0.4810931364819359747828351037417496237257328332185652823964021884
++0.5846720091653589171386464934439494744713232525388330403763032709 +0.4458845011005795413736316288478062406750213207171946521339936816
++0.3128821017947787434710701629862425068710081298914976621641025408 -0.07022130270408117391201617422037495983519685200057324281521736371
++0.1943703959062877206669871517590249058034169064564194870074554031 -0.9363332435815881306934514312012861106386014749526768950073553811
++0.8893705554674630659403991877841826994191514257022249874261157104 +0.5931834085557288286300206310139754784241341457686571795494994774
+-0.8883357910902242353575856676539666074648753053656660309143767467 +0.7036190395840156286745266326175275923901923175942468576350074587
+-0.4607165734661637817512681868591410520464620690313830851265222420 -0.5793821363841516257942372216607612745507267978856920167262365904
++0.2571290378683215613044136510821588749887474163677002652639520119 +0.009045022679082836013363681378660810610692103525817615455038021560
++0.05683348973511969001808746192505133291481235528637618587938493271 -0.2778968847485682179896478779214700059419569060048743113852325563
++0.8458238445504835463314748515393830432307810942061667936052115581 -0.2784308881971247865302566270327586460636817633229294056506703495
+
+-5.661560458893715970224504375535551033868667646863113875324430 -6.096325263064864657025101529517642267437641183685247641684381
+-2.094188666956264069374110403934831984914707547856130468863403 -20.645765800776945152787098024832191591655972027696177015722238
+-1.3048371725830007506646486546971400656299083118293973171230571 -17.1316331648363123487874576399964632529303128291408847290465289
+-5.931757849443519657639089713622632382502729983052894199673929 -4.658629649184365858012622141907686441549924198807789047565760
+-14.4512845188543885644514164445943504775717829548143635668477394 +9.0960145577489554699560660257150844470729170958526091314157140
+-1.122375678735400920107293229061204740398558626934280475895342 +1.231408413866192843257367834860070878743444386756826007652333
++14.507350817630842505001211867147576269462636839833428980926897 -2.047248523169907487335891100583467247608869217635324651514406
+-0.5458479611842112698835233786486991301777398213181026200742110 -0.9013826215962920726967523272067683535128388123935544565012017
+-2.423474704821027304741199408334309332469815254583599250559833 +2.459348433814100569956646247964872543752509904300168348820538
+-13.454281277294251100876720623713195004797495359033615270854669 -13.776345895836203009386531131689088742727728715068673088677177
++10.168592393886016509877849975170122199629788806250582775363349 +2.066929032601815432185852486096479427482399086710101846843248
++2.773030249805959138456316395549811807914522976879441416754001 -2.714867242791261662916271596626792519364825092607673203198261
+-0.680393901206214182847364223694455399650056127355116100641754 -5.737637279840080754208846804291497566599915241470191913832481
+-1.572055702770046494264347638467083889601498260287482901964619 -1.584312048920668451817869737432514293902527791654019368987209
++20.007870113216231405752185916648303739303907481164278193521707 -15.698706274016059952693017806118326493178777581662169263711699
+-15.908958504724939610641857985283899729923374134269952922069527 -0.266171486252570555390533537846061822645975246849052322674563
+-3.497594361281737249282116741842937019307906735476913640514070 +5.722568540705769432042099867601708654307176521095533079107951
+-7.820888067912960795777715112798699557102802571353468853532489 +12.519842055831865603716048562331530697541503550424702776836986
+-1.841376661076548672569532059639515714697771992777835673115744 +7.221515564857580300731415025735507227101960899203905625584403
+-10.1743699209646404542629659717579032916899852664026070801634740 -14.2538401289369906114713027263251398042435633467793196991965776
++0.220280946484585111577414866315721661333312198386301404220267 -1.939160806963779172430569461824031697068412818990919106738889
++1.181737792586401938509024670533791550143473597481940353210050 +5.144283290026636450870516490239442493915849302362863955060679
+-4.958523857167577364837170469576114505863448909073390656120670 +5.321477146753837071448995568705448275558744372122549708003079
+-11.664533323778862068010871304750085332828497753772302214852821 +9.130502207237633536705023725838011686614008688915132776746964
++2.8768052109241674588510740658299195639356924669897181839900151 -0.7331331935703797913805369077069067222640499881496860648327802
+-12.494434902202192131622380344755652433856334152713967849164761 +1.993518891859253256585956394816611541646550728042436075072283
++4.183643979534659993958699970145510848190952540030174823268667 -8.840521593842750922558912896602388766896295217715329561979142
+-7.502031910847774214373307736510949537446096420163040202666917 +7.612480704510518322677857209869321723695589766806907154195042
+-8.7345193876970784516739068600380317453902785128077596445687526 +1.9297753465443278567723108574409783193794233794508694252668813
++1.124502704457003791218463309840556371873361411501771819934743 +11.844704938409003425926225580628890417025762871535167293372858
+-9.494584942074900071052582363074648068061178002669142855246401 +9.752623331641398465364736847475497628327873156659238127073153
+-0.3741202266425928420906971289067048713469366826622927196559581 -4.2305519249707070775459321803422785647891048334664425788969565
++1.019648698454050297539004501891917262815452100911316390654461 +7.684755583587584866773868412204518440962043056929215424216532
+-0.009473510103603420587053673653971918521705648298912207409628 +1.998421741174507360569463546180288005545868073791484934679826
++10.629251394923553599160983348549837304596499904372034239626963 -2.841896888240689173935587347858353553715466401464040533749751
++11.334254036852394984074702950573128403581602314120574354623530 +3.987891567387106349297949679526338954347744269138472080087705
++3.234099724483887347208013946123762383783564560212671769903220 +13.7565158678739199982147287989100356090491208068751221949382033
++0.580311394993200286938065896186216105834617923602528774096605 +7.244858557808933885279330119841775133095446201883288296208388
++6.849236817676589379351404736497441328570586816028611812135789 +19.852222221917077626450724310296291162729117133744431666032644
++1.404417664675566624705494328675773989329708979513809213465103 +15.432964148605022507617649641108327704228281007070090247284054
+-1.011846237724988554656066751163670049171913961670034492126084 +8.121173318358809986417433845182968726377094121018858895517338
++2.753657223751200790432762212517493409687253217009826410451565 +6.871960447293024968650410614343140001542007873375584228934563
+-2.198855096822242821359106194162401103977274742134917749107648 +2.665182825991836970040143730934959268849192190319678929334603
++7.425945758513098857648840492667498546135776552857423135415367 +7.704227534751177472306076699569165705284705461572670809438005
+-7.955877533206828973305595212572059603687640491484668054970644 -0.011974445253118120492025991120234495167976845663085956233911
+-2.995229954258458554019297530477680350899137217574950860813073 +9.662301879951201276904212174791481574756177562295792205557508
+-0.840576096691601379737683648814851712366074473552206949384543 +0.859196375248610511681893598189944768881726145507697296124206
++9.390240441567684951704188594973748339118278918866845401921894 -15.748829021547313494576064433664107276154254250873239050126260
++14.749067824557299111279594672239738750011652243749716311745825 +9.086159992722953609986661348544787419005682913370537966783726
+-19.2675956726433658298646869258777646313009326204147671927839286 -5.1782010140952716762731249946673066072557575619454313881608707
+
diff --git a/tests/data/nfft_2d_20_10_20.txt b/tests/data/nfft_2d_20_10_20.txt
new file mode 100644
index 0000000..79c3be1
--- /dev/null
+++ b/tests/data/nfft_2d_20_10_20.txt
@@ -0,0 +1,270 @@
+2
+
+20
+10
+
+20
+
++0.3173894901710712338304379034862579946422889909408459156044823877
+-0.2206549379852138057578743061470069389191225157277024467333194435
++0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4643197195119173309525456044702917254373982711189458917859034631
++0.01022750575332349257722449804129916311389119097299090643512381743
+-0.2381993349353649959266405506577935293738035850399354993188862868
++0.4700775714463633978511207403685111986859425845978719788126486235
++0.1092122305172402888258153501556024641240468035240884586547566337
+-0.1306486726789604518575642087548321430960584930096366967255476517
++0.2642327778745240757646266294392459562801915916132871452102135091
++0.01032012051955487309722047463966310173477870581273801739268254951
+-0.03919417871052420194526378084573471772000103115061608042162915008
++0.4969744253080455744694825346756894506554753184704475582968873208
+-0.1579152561477417245680939938059372817945921112643983640578929336
++0.07714972696698667716678650997245420808817430827447314113682745907
++0.1729154576995603929033538546168666485286603783333729055438208098
++0.3914347841983986584093169466825129403698312444687581041683071856
+-0.005488434703663033807202110079459379772452209210435747933850600026
++0.4098351732528003809102269734570294879975455702584035273166455779
++0.1313277929451562487082545713868668183502620330575886917609655136
++0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2416500872464844443813651159115503866293289962833710383546455749
++0.3525707830542183854600907186155249059680080381975147205747395167
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.4593142592621138819114189833820168418626239763706778624898432299
++0.4747795551811432367868902234458387985659947076528818830641254566
++0.3029583073136138265829962071140439545004830470746425534136209257
++0.06403862356712929207278788512728706067982585049275341514041588589
+-0.4755711272429793224288583422054842471828900217314654775994176650
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.4195634668605248660892165218851209239268844866648432819445044954
++0.09085671307189002853971282071576253250819369457305730572873101910
++0.04500489974247188801035267400166477957461676904337052075668156194
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.08834061683832729395743261247688425414802993275433895678020615860
+-0.1013589956735152573510406730689184973691015496657475510126506381
+-0.05012499979552010356459573472764647953878012390959562904972546234
++0.06875288804967068748620631495815812310608096163779380055154102558
++0.4279156393274057309236852245921689139491849071240754852340002326
+
++0.5356506216935318567168964679980224448474954197740742721804425662 +0.3774149419137016419806042817145212836004227419492405559087274340
+-0.05251382922654688111844675415661855947948761360659425718759593363 +0.2862571560348818269179471614749431512680830893414487690534246820
++0.9518095182124288782767378820155949547911261560251647626870735792 +0.9392006333865916821227548404291848184201007925131229813910957774
++0.9956223852813107496522616247115213137215848581937907906567140918 +0.5114205299580920868823613420213360686329180904621350249508347984
++0.6741052796006089834676571454955036801632897076493615121596900136 -0.6408078680635244612899765081025913686282954450887306823350772997
+-0.8697750560716627155371707094260289644371901052310063829991901781 +0.6103476918632637106424717122234807592708375161253117953076031400
++0.5394620182747514803246426448045113583944092370821290584575219080 -0.1695324055840820458497589349479760035964663521113253737383164439
+-0.4274845026027779916855619203781095649893449575458629944853980527 -0.8353594742240205937097730115138661305557325449129426505768609534
+-0.8604697501072873707535504424154609782723273602355359333803551115 +0.1821483418007667766250895141417107286953921543595289977783017637
++0.3822062430356176188977280281604014506988427784943414973817258933 -0.4074526958925963909486488891837393063126910851657623153854908031
+-0.7335087736711041883089151876515694737975402817556229765975958245 +0.5194123128321160939700776973599963366760031201335463428826305590
+-0.8786687027770929787301562525828872003547410177701220950278899658 -0.1339026726689501933617889040862807661257038358606191032725698017
++0.1944979336074391420204691208780533563017707991268605634570366201 +0.1617840119849052908674425797539541379830915417411164257796009655
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.5833399591688895541493678958036554117556929951798174740043291689
++0.1841240265716411858721923885202834145897392121583597644960322461 +0.2558611196916433369649336532000849479904305619298222327625863899
++0.5314163276115420712219700899397644303297566254445792595831691010 +0.9637184128969163713272727389388526394331293708405231601274766637
+-0.7793598342770851820561551396646691186537674923197586552161425487 +0.02398516466411951663039478357357263297576765858214578984119980389
+-0.04982739811897050028189209963034074300557183166488389610036293982 +0.7220807768185265925885711430037484304092954076856054861183001563
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.8314034062393001851412680462190559603040746972786212429324375224
+-0.1430325904665435237882241441707630670064919508747748361914900932 -0.2313683087056718682580625867623460795004227069874977160354372877
+-0.5458569288127476004682590208265714990676611459841400026017844665 +0.5241531162028989758906123049906275766571616823241720374203214447
++0.1856688150172391527088040246433169286752829500750590071977203062 +0.09003216360057281587724105549690566269005814841108581287665281058
++0.8193143821859564924477154245099351963436429074028089074430038904 -0.1599268816032428776743959117270259866309677355351818460136443291
++0.4604487491339531156973853721884505256237012331451385915640611729 +0.7126643265921692501928118835762400720628273345745039396768073268
+-0.8606535828683120015533980099014960687963233985081987928030018579 +0.1443381463559750344148688262608847179704805274810841956785523095
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.9541149480810226451568227541620900387924893378859274527595762471
++0.7727562160593342436881229708062656539223995010850938445718232095 +0.3516772517804962317135771244694045300550581304302552629989927399
++0.2216455512897554102911455213296037106714896153079531893725412128 +0.8312645047002901343481040986077492354211106507977246573848547872
++0.8060520707732849845829519568044036159880831172244051400087891596 +0.8922074343575836687927424867109565448477559678636672119414443701
++0.2494984458565048492106180084187393465587010901621886528310783225 -0.03914580715076807517564668371313115131680481962361916796431130169
++0.6927204629305803758375801204652817551631393463953052744139099740 +0.9746573852711840936336177201962708050687509298510135226623575906
++0.3484206501444620766420233468327938525050794194268200530793896515 -0.7287905575728605025843722055111257091486772902084438557782657679
+-0.5365723013330725289094471599220332027885871668229904917249565862 +0.02849594996466824865218850207780069267985584074611847663329993142
+-0.4969838973904267472552603461634423875526049699439467087064029146 +0.6459433245400880395491408374407025292588521318149535734854910274
+-0.1099633225953045478540363356794430416477263111166654723490589437 +0.8136628661132407079541934173897141567434892632439804419184181281
+-0.6756547625687923165084584127259768184144567299620396875756298559 -0.5672690776078439250283757912452916624289131865014778354746409640
++0.8687355316920355914551191479618699998090617653378680974249892199 -0.9476387464140397458861421362921055215974651715794066883914951208
++0.6573707348942885034556657549189062350008259948442460481059842193 -0.2605437240709855372272831411319884164143200014969561164796810212
++0.3040922554314217243862762857092058777415182617569318991261352740 -0.3311597085631775241605389615954882776971235843100995205029515984
++0.6923315191547459490617708873077670147989473956854336908747033971 -0.8695822150875121724691553338257829869250127182425918912387649806
+-0.8796784447840898801814093263554195453289300559080999490503364787 +0.8891098289754707421060220890985710245132795198449297271458423909
+-0.02378306045101476542041128049120676361822587626846492046663605803 +0.2895552325554255930167653346015931047558748269272406529926466973
++0.9854996726419986830846511304498671064695985279263874167222764802 +0.2650936900762128600362413578030729270793479332746334793752266553
++0.6717005563662298476413580139956207272362245386339234470714331016 +0.7046936151828971593710415948632896548808680079056988913118083777
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.2115570299364757676008017443811649086191736127455534555376144021
+-0.3904035160770493684430115148009967524256991556076221372265894266 +0.1470216587412559156294994682432100810761459629584248289010138317
++0.3596214942327276879157632590476519168937540906266077357147819608 -0.4329010361486256961244622956913108506550874170254014125575533479
++0.7958628339830083470736213000945699871834494249238046750007408612 -0.1766818323431859044625743795499747752198631648846896440459670393
++0.5412530329369591795695895418300581875196694253995928145942436878 +0.3427075333057822059987675632859967887158938796610229803331114623
+-0.2613537732594101756765510813982454595302525696986533152069370387 -0.1833768865732711001295741826816961691797355582139228551235621230
++0.4358283240521827716981902176795884470008495588502897753142560240 +0.5665067551831146950685364521560101025985707475803564862178192914
+-0.5937465792299257034198201886287226952400923687140794966015317515 +0.5846720091653589171386464934439494744713232525388330403763032709
+-0.3218041479377133937935849601301732622610394503588237190352903562 +0.3128821017947787434710701629862425068710081298914976621641025408
+-0.7360914574746049921434644450737043073420684008447334807822853276 +0.1943703959062877206669871517590249058034169064564194870074554031
++0.5531873646948311172729843652306879823960014212266557902207414060 +0.8893705554674630659403991877841826994191514257022249874261157104
++0.01417576197421767893279369309359545621976513518858252000938611031 -0.8883357910902242353575856676539666074648753053656660309143767467
++0.6897588478092123244219967589255606032813281483291811335150355542 -0.4607165734661637817512681868591410520464620690313830851265222420
+-0.6996703139503628987183738269577949838863048093871175900433716284 +0.2571290378683215613044136510821588749887474163677002652639520119
+-0.1309677757443125377194229250386971011803561306992623123400631451 +0.05683348973511969001808746192505133291481235528637618587938493271
++0.09049503268981439002460219767349217513483951010643022102321620286 +0.8458238445504835463314748515393830432307810942061667936052115581
++0.7721031360269444536624854764846278079390436516442447307214583713 +0.2568190130746644331048317748223591322462097932104379543095780599
++0.7113282365127787106295924505560767722199840055537543517442585349 +0.9282397683744983930469496205745698232573096227549226254155622007
++0.7679535856628120283990827155162180966010981503917935490380557142 +0.6733680895626635922558736333908780380926273791887898430485173634
+-0.6127602430473631495393181955733023028663546816025211937039540524 +0.6834258455476852992466772196651133096274086383123765308288566681
+-0.5944056790460496081717996899055920305811666877696698395774078378 -0.3197260966794518948885909003357003020869183279810950125249989182
++0.9839367502424209997890558933686976016082869978582241397510153252 -0.3602154836971247653552601690662060499632143516459194629015046587
+-0.4548419343247805224460011391703079342763504118566706946966391853 +0.5644944652643029946030943876077187355907298250270171876933333996
+-0.8849845588398620212194475625021727518116463369860566764411889312 +0.3002450060649265466224439088480847866613297705716750391656367250
+-0.2496600323413886386258990085306122333313701779141184118995463959 +0.9109171936013987677935840681404253773950900911474823029568083952
++0.2013567579813494116381818105314838610969816486807952028421948124 +0.9809865904559495207084689029816148884009367903151903920423149056
+-0.8585801045716661137497618288810938649698205103567498949997938400 +0.6673430101175698152854688993768041548769019864465421762641808302
++0.7326702292582058588316598422918662773838658327971514003421703067 +0.1912403836532585581545915780169638266665110774534903895312903483
+-0.2697443704573465465233716116511309018200366900116819867580635278 -0.8390872225468263142545242699093560592768485203012323759548269441
+-0.6468087813680422377672655136982917947328505318460482424201962000 -0.1694425027392812196149909158729299355102867577367629176586906841
+-0.2812302577494115409480047067683469320314228801749259890701395474 -0.1109481979293641305323565532634133494943626968908239858539934786
+-0.02167413194230472805204979364706614220652157873015883116130884482 -0.7576390226829376962602306885924643215709630457357178698800775945
+-0.6808949558907041005466617267577471160247144934082880243741902340 -0.2384036559822549222513803512289385096334288445624862912807231185
+-0.9306530725185795934583927665790248017610038861531896668451002839 +0.3322077770142086566449475410492734728431728270878221527000512398
++0.3319152007540851906913026983763584438955853838764895977762668678 +0.3008294101164568639831269327829387098511379992571638835271467486
+-0.4414898031680223608932387792017485771255689761890070706015387399 -0.8500127542413940364553721045188171752513697377512921485742321549
++0.04675554236208552284539297942143061834219393972333359647545914081 +0.8368368938909749223146178710811008588487209933709262501849117012
+-0.8152568938325646993310760006867681539054279301843202148958871677 -0.6301301812957352916599361333234055414853612961930455283065817178
++0.3952163240756655529212705355453418848569049122249531536768131848 +0.9291299159382365190501422959288431216663095157691743654943652200
+-0.9395163144138835125672454933008856593503204403133472584898229717 -0.2057454411726747632614076986736370443370299660132771686206360685
+-0.08780353633292157461769946866167963633505729824902226238512671868 -0.1506655683923674574544013920490541109453108644791859114657837843
+-0.1743560068378512679152575299947443762504689480476570621749324843 +0.8300887071220306139363536768734752416692057466278345728554448043
++0.6018835924636782523215034400201993341434060856497418585329625279 +0.8244806963149490337769127166910316223379101498545059699144474846
++0.5094537464059880326374352490064905763350159638438638190213421193 -0.3267801787861358921558326193709571898654303757814961069177939802
+-0.6412882157453879879998117648467144628970706782597054160685555631 +0.3173522145518535642355402682590855477810669842087119833799882044
++0.9017103216368149546517732133490469846549850682301607701578308401 -0.9157683658115979207506514703487531113998263500938211160185082296
++0.9631270643127979384664069651403286361478505285019531813591892173 -0.5134442544464950511308392504791416236936576938651094919168340614
+-0.6210835173793688086670082589175993809833456274087668762475476635 -0.7129018571172519683293420596961998697718416105831222546361506794
+-0.8137281645240375388576750044830353268919925528507904843095256157 +0.9065123083843027156086152486704570882336886865580199421650643667
+-0.7041297500866612607234884784407130317305843364144413223065323821 -0.2793634385919329761753480106077153213406385720130702294691355484
+-0.1235721593345202217795554759876880268687368789792682195280803184 +0.9164978685669781253679917402797926874507921723240255331025472326
++0.01793996302825844948175557573252934185711456214972052895861572493 -0.7596059702886165943031875281927001506068162489624554198112485991
+-0.3411596862218241172328579047617234818967459872060847679144866809 +0.7396561092486294627586234874177829200642603190414086001487983221
+-0.7379746599220903325806827424480469595800618414934950958452657346 +0.2718148178589837914007749073085756104697032416499157400657364344
++0.6843546378904107483368305041075808036585650068151329599810630045 +0.4662517483044007390427270839972516857434523020114609710559500148
++0.4265099420399003863248167494626862205659560797404855195341684806 +0.08808257115588047484358934167308625153926780195956135649522315482
+-0.9874151891964456486571993218370826427302121071375833081581536189 +0.07657390220669434590596313316601208477726655511807687988961336808
++0.4601637140807105378191037234478805179877043129140064777542238544 +0.4588569896068761120165974962862286433176923282523892852244105839
+-0.4841039802362244364267157134690841461075259779700777041439742307 -0.6615298742890711325192770516946564063654133133292967525875541474
++0.9965877589863013394561112420396792373833365736836351278348301833 +0.07011733953074958640104399325017215014827304325156759173135366906
++0.1915677305233047765741909788297653137314715093312058543130169860 -0.9612259440538002535765483137294916063381851202661518339189071839
+-0.9100049476348622207723944867294612891098821253248738836563459568 +0.9171138429339400553744807769217606095680344268845843714152250596
++0.8085565025927605798160394591787637574375967583263627553971120289 -0.9187643669939806209463756973588109095305506934347503023729389190
+-0.8851479413535487385573817957243936843534909265401263726020814395 -0.4415653525364425875595561926619571676937519758818885848285036367
++0.6064591258881136876029163103297147737049475826316704311935105558 -0.2086520325624420487101916822135314045088175303036646863500495381
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.1511824375843169824185114172319147719223588913836399964007230083
+-0.7605582778547942408060351317015194879473019118917060721292547632 -0.7035924603583511535986984592864385797537640709172487432674768657
++0.9359455243018989598720894094889086512450300947660621306436953491 -0.6564151567101526404248033266354854181628562195765596859557723591
++0.6403329703003144866532882811013167888478814399097147096856286200 +0.6965977875831549207460696210505433710177694513815592587963931164
+-0.7566145378422368715122716757726615136162685098609876740055635889 +0.5816085290684877844083071838790011353935994102902484256340030157
++0.4983934648670891328811187892957709407528386913849427405222396790 -0.5272537155512824066074255359659027189627420792613958690510029190
+-0.4971948424110283155918942363898656650230845195141350175248779212 -0.8587217878456442924783287669774302171560923546889427532593498197
+-0.3682837387895926737476498418989480477365801929350913148252356807 +0.8026154977853840476009847583617913539728860956242379381174833460
++0.6148970507477253459184467315745337121338375212139515007860628315 +0.8316489546057848621322523310402149298559936201982941913906852864
+-0.9083524682273578446532722997799475788834527253595073048265657245 -0.6097628083165813974260954335449904988521230536577883358240508937
+-0.3916716877161613504785809028033398517645549846406356231576213868 -0.7453827739395389922953742392780783948094849228955462762695809318
+-0.5193518691808852117378350732261309854332184624171433727414006814 -0.1809554132180854707773280908184743372302489521523696413745651906
+-0.9750431258817692289559363598684739941265076062018304867776204819 -0.8150644675782343977339925655387466104832252738719676821788883516
++0.05005097085661604605086728229374112382053058454731767435671635371 +0.8917866574285656025686075793775106139378346795002297501283298878
++0.4399150750505159978489133507713340072340352057744402647976718275 +0.1101358891689796743272094664641471479081663952426245980291616029
++0.1872909367861505164718492831692222169018789408412172493435499423 -0.05419673336890120775922638146599077291212376190352050517562870720
++0.9419321039051109549245680082622391092246632631231828777233002149 +0.8788147199714254107037333013127960617440138295766969973173354907
+-0.4287041936652777153072881590344721321081952456510997660597381855 -0.9270379263943661268097274055148115732381615337919171906603260360
+-0.2333391111205556198207256592076331117879880842914267473885863455 +0.4642977843367946473083173399076729199459994296180290689057358231
++0.7889477067277564731712862630611699647549102063099584994888747696 +0.1101424766711395834493541735390025259293259452693930682212953338
+-0.2563747285446000361218237435955077669028092056157149416120292486 +0.9804018990020609521055380413227891839510323211141337706692935583
++0.8211574497098423675796354902233745259806437217163965161734702361 +0.8144388485796060257725468016904833551056739055694392606072812336
+-0.2430326281692574737943057410600918611450147916626606070615468027 -0.8395517493960846429066650820934625099120153763823264316622178314
+-0.5566744269539672218404388199827460990960984415899809143036909069 -0.5356363024105526066730000892740728141483682520537699099980586020
++0.4524110448637644360868388875231267640338311624103409145041788539 +0.3785984554723058056848684987205281373405286509670642510688353225
+-0.4077100331640054846709900852315956380002910175183742932154068317 +0.8125408356507693035783621684477489598336579370455636449932920399
++0.9925432694290908433525570320250227385826836114793383624485189244 -0.7304988390989189945560089553959860009999748685520304348991029980
+-0.6845441772530325736299180977635806745002567201737916085152286412 +0.7456261383135196385610840292806346156606897621955571769519287646
+-0.5689275448635581694575383584343021970227104177442089801706330228 +0.7757376987729343002700728678244609761294630501410110238207420656
++0.3985567814775143901221253743791327148945266133080683203695999962 +0.4078040359990933213948732923927214812372340416337539086249054226
++0.06961382826101090949578301124383292455559947536661707583968975184 +0.1767712938446947695198229699328249449877999447752262239584762909
++0.04307050119059237005387541827491059927895209375649378090223139587 +0.07365715096199305303280147905505827004287730234420360693427261478
++0.5849881776459916509815348468661649535409940486756497653761724118 -0.3108355387530528344022186566449990520542204513871372429842394977
++0.02943622593745917222898833754618856585348471594569686881397428726 -0.9157841385420411790181903606309676436954041107787988394005532203
++0.3572417013316431962026919347150511042636763596269956578845059238 +0.5517970855559362574840981197851271127548171428450299159534222246
++0.8246603472400295391578505724317567517180656867730457579866275623 +0.8076059738124808816284579607205742577625775175934575040140126923
++0.08267470722577286001217633724236129336011575576077446531397711074 -0.3623547609761457713662054674281991237079618589827581000231798627
++0.5296493544860877224747590127030477951987987258874100707895850711 +0.8183208109839758987990961359356649031888827382055407382873878803
++0.1781616718394205175709349645973564475788988241558791298588188050 -0.8535325136050236145755622731382685357658674118927526952194103789
+-0.8633908949968827943561744577901901026376268752722144571223670853 +0.7385965807078199198295561757281636178085738161163241745076529168
+-0.3459820993240706010475901311688197838023719669999227712290509004 +0.4178732695594172450325633659542989992529347731253116371174433175
+-0.8814262497135981437569523940906532685397798861799997656375266034 -0.5340515573220288676539037563933896861133701709641430080525373334
+-0.9722552720272006984678084914751283988556792015475269427349942943 -0.4642629009871243127720569534731497065151730863379424324926815934
++0.6486167889394565452584685154506739738504706411589692034776454683 -0.8697898736666791719966463521302103516597198677810465705462889386
++0.7237216114456588829885327945423834052953613010855527824331391861 +0.9260211067928626234987335196506123804866588031248091568668186807
++0.9153832161606877637775414865990581395464326012246760580785761313 -0.008817333363577657304077859427800946074653041725554105998740790418
+-0.5010512652356920074204032205934276172215285762480987760943959851 +0.5582339538069273279851977709472563742471538090477435724053193958
+-0.003517119711452846559277971844364606295296520854275366315952866112 -0.7255700875545188795082017268145707633365451965771130961377344798
+-0.7432644962454565902867854377146609433353697756825593784757725371 -0.9882699898882978270887601698779901692432742326870804476209571454
+-0.6678889143320625765336213759043802181180754155696893060399849702 -0.9276804865150421462892365252888320798428705497677187785005965023
+-0.6231432486376980435414857670687342821530306865222818413703487444 -0.7832811923001301276864916736742146403933964466320677660322633051
+-0.7612655580159597760389639032422118132475827999877015743017274080 +0.9875308623632782097656312821453924896496525870736205800843638587
++0.1046561870893663260798556882535941223232955552582338303672866205 +0.1783373466436970660022454632463179035762888722766888416391448363
+-0.4422178249719287625023613714462236578393297082084105686699745527 +0.7336545898457146349237975784794059749253087905334857489144998895
+-0.3006761386836519584160039426021947715604263308295216335254395417 +0.9127856868366581467510500732005220443872380003084957447131950721
+-0.3931472033430920383369653755030364057981520323323553764459192375 -0.3632881183963366167884860409201422151102177606787650299072097307
++0.8009564737468829284569870438621332728504682800502357253909429840 -0.3268576018334922472384377473775779415605488146060240031080037115
+-0.1173363847349279118426129136160276265546406000211794923295485560 +0.9427149588672463047630742061537997891278684495348468159028173334
++0.4299591565232924801870368761556079288133632606094048768501521181 +0.7916571579983658653317798731563225080239623370784297265192438825
++0.3519508427149724056038340065726224107858818936655812955385008590 -0.6817701452011630996907953818868671270735516339211681814255907609
++0.4719165407085054156880418423268675488422117760448059022673468457 -0.5168940707242169951406978648595076294647040487113324969763690473
+-0.1600709565700552484491336034747507816107856100797576115468140784 +0.4155311954965517114024103086773167213755429855677272377839721067
+-0.7196566232553047172113131790990428945643928116318893875786802199 +0.6506707691016388017357516362760131941221566979795718699904936102
++0.9506852903491360468879758484099667312771993016096956267658366287 -0.7043718208306549962960929614939365734224121070283816720729220425
+-0.3776736725704435658453332291251578463493585478972191163904289213 -0.9030673117697692613858834879354138789682350761417043644810908266
++0.6001953620324393368833490197603304801854572549372059847172328017 +0.5465706740090774853953336301894435415008351646460109707839721596
++0.6978878736648347125949172253483236996713754832649550025174381314 -0.6814239608934778019209189605706175697331566277120687413401512713
++0.8508443401291057488517795791511283359984797073308503806275388226 +0.9205925082347564380336697132499017123825554431098646503055203834
+-0.4669474695063991815703085816201270850746349019459750890255838246 -0.5020782788038677346392099888475830183897864323626792080264544951
+-0.4916857659539131984511014678316277462480514807356006060275370059 +0.1045062318771655437961420896781653537832869869453123103733053855
++0.6805454442564243054841615570704809357725921633306984108877804159 -0.1600201060994392446745228713066083331646179396065484107159119337
+-0.7429928693445994197394008924008488085983664860223161935727994358 -0.1176882561544923620215084381200312622694313533614808151971725197
+-0.6969676211949719236627008807329635886036631346596064918901094455 -0.1898251716095867210440135081381899859506047209026635006620997810
++0.7197019444966162425693701580554867509036572823057158142921206547 +0.7858779951083861580332996484728804881745801231417586365625881696
++0.7821091276993633157184444189269089852199610591029476119050859896 -0.2279832493810412940114966076664112325854082672090777285019621618
++0.8533226121539329221550195141712150337184702154268885269745819910 +0.07761160430503009576118799101543653660926181662195182427626478291
+-0.5271231904299831306010230073357821701271416210281300595416035220 -0.2055488181060608320954691371766551168555828485198254292077222517
+-0.04518836599707041257371263007133991513702551585551047967233360089 -0.8570653123756356936765798157651852007633450856266713907351356642
+-0.3994910205015023995978692651199523393500004114939614636352980640 +0.8510470630599207981929699284163199387691742475697788917650312737
++0.1151112248581587985459044273509734339372139569519498681662926204 -0.1656012361332616709224523200638076386717414816760750375488963700
++0.4120054991803597141675815179438163442823969621208991056428168406 +0.4313169396402067420747675191335695107540210953445957632944683466
++0.4343579826046095597725968699957767082823418268721181549420071456 -0.6136943581151102724274558633917286896829715873222934810854627144
++0.2535126428268633086086116718856542176680789611156801564801311848 +0.6107089044121956416324813364187592386184059323011742030772237424
++0.07575910820021246358816323232702289803823041246205070258897871070 +0.4569955077979069087363694857841772836360708458051620753700613184
+-0.009921455995466628736212379839332998874975285848956671613709936322 -0.2056316517130173688144925128431576975079195367781834481815163780
+-0.5891566693005274615768435832037723406013603962165946345013825592 -0.3127653344142269367017311068934194736573539345353684494263561034
++0.4725424296459514103640632185799575468737722475096114637473172301 +0.5675769204970204695935245199626881958749158960158155816882247751
+-0.3642689669126664223527375212471788979005234643229363317834063467 -0.7973797882525385651192136516616674358654229933256541899442767797
++0.9106160875739411428476569185959640646231793213239998804082355729 +0.5012904467166158311205187729565579292182659743325041112386977484
+-0.1554296096295892351142787706783742826880784898341993011418432069 -0.2570017860782360774767408845442523659054818260225494146244853645
+-0.8069065915498787556695276318086362565827819941733622970182376756 +0.8152856345265963021214702712184311864712144712337072499723510820
+
++11.112731010037672319672714886649842183247152925635985829355736 +11.487532036128187421049681637097855401636416439633453015410621
++8.073612057924486015274231092881445539682935229783925440409372 +12.842874332821997194647656761337947680696223065963972340386133
++4.9072357379952072175010214869021888041672603535111392960940445 -1.5613325354119970708214185394917930564405887498609701488872053
++7.735716361771931287902627377694638059768161868483948487547441 -2.536353718194301083306876614155610170483036136299518729394411
+-6.253053917392203666965833677005216708300746988021208470659179 -11.556342189152883931578943468691215693253080119520709371337812
++5.6204523568560686275009605427687315638965797678974548686641464 +12.7184905065532844312234201654862354708356959130337426969974893
+-12.747546157601416462754866933762443187832738441731261138326376 -12.051673231821713550633641590736609940516370887621942942093798
++14.2054042172327108907793522017085480444415644118386374571767388 +6.0835670907567850587363877785288151168038836556571690661151573
++3.588946940463933397132880616881490802912613262772267637371429 -11.488311046370761749905032865569815841054230182606778016132999
++6.995033718943369861409136460460570767488039026084809315140999 +9.805741481290458793548140782750507800293181480897936682330630
++14.057023648424192944223260002238287105687514952627807202336967 +3.236193963527939282983410517744553278640861286439670138393346
++4.831446110406278920127445551257445200487631844066185511284803 +1.543154075081786888779461722110915153008711176692139172943087
+-2.105423234793732287145612684723980542244052165848146986186719 +13.195593106836538961917263934759620450536858386302362644258350
+-5.968955625984070790521378240141724039652748758434211663021187 -2.816399287603190653778559344724000063249357117681341045420905
++12.844905890401802455044189493769543111123754435887078897852227 -6.014786090259150158415607318491330548580226093665761413137092
++17.540279835382206257723143421236416710905530220745671026274283 +9.239750349685122110817215710895465124188273470692389876579660
++2.9921365221556002878286576856778169306646006199999244183611179 -3.9483139562979198178828643815331789578110532135544421406111834
++6.788350478053641075595852044087525450028398924278885383117025 +0.424114138169744443826525555087282003845969305117489319544946
+-5.7246149664933648447303465121718991587430213528177815975204192 +1.5308080198712286116756593403797462981715632024288545459183357
++4.266951726722623667838784613963078987583509451044497780376076 -8.812491984875432943624021596078727146440370561319817062361322
+
diff --git a/tests/data/nfft_2d_20_10_50.txt b/tests/data/nfft_2d_20_10_50.txt
new file mode 100644
index 0000000..37abf2a
--- /dev/null
+++ b/tests/data/nfft_2d_20_10_50.txt
@@ -0,0 +1,360 @@
+2
+
+20
+10
+
+50
+
++0.3173894901710712338304379034862579946422889909408459156044823877
+-0.3667543868355520941544575938257847368987701408778114882987979123
++0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4393343513885464893650781262914436001773705088850610475139449829
++0.01022750575332349257722449804129916311389119097299090643512381743
++0.09724896680371957101023456043902667815088539956343028172851831004
++0.4700775714463633978511207403685111986859425845978719788126486235
+-0.3358534858018228008930174455675250519517010131613592135710326757
+-0.1306486726789604518575642087548321430960584930096366967255476517
++0.09206201328582059293609619426014170729486960607917988224801612305
++0.01032012051955487309722047463966310173477870581273801739268254951
++0.2657081638057710356109850449698822151648783127222896297915845505
++0.4969744253080455744694825346756894506554753184704475582968873208
+-0.3896799171385425910280775698323345593268837461598793276080712743
++0.07714972696698667716678650997245420808817430827447314113682745907
+-0.02491369905948525014094604981517037150278591583244194805018146991
++0.3914347841983986584093169466825129403698312444687581041683071856
+-0.1076415739382721498345038358573933688341820551665322075789524509
++0.4098351732528003809102269734570294879975455702584035273166455779
+-0.07151629523327176189411207208538153350324597543738741809574504658
++0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2729284644063738002341295104132857495338305729920700013008922333
++0.3525707830542183854600907186155249059680080381975147205747395167
++0.09283440750861957635440201232165846433764147503752950359886015311
+-0.4593142592621138819114189833820168418626239763706778624898432299
++0.4096571910929782462238577122549675981718214537014044537215019452
++0.3029583073136138265829962071140439545004830470746425534136209257
++0.2302243745669765578486926860942252628118506165725692957820305864
+-0.4755711272429793224288583422054842471828900217314654775994176650
+-0.4303267914341560007766990049507480343981616992540993964015009290
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.1014391221904101019539350076278292483536923208503397585858894884
++0.09085671307189002853971282071576253250819369457305730572873101910
++0.3863781080296671218440614854031328269611997505425469222859116048
+-0.4384199598876636262124112488913918123145588604895783942604512689
++0.1108227756448777051455727606648018553357448076539765946862706064
+-0.1013589956735152573510406730689184973691015496657475510126506381
++0.4030260353866424922914759784022018079940415586122025700043945798
++0.06875288804967068748620631495815812310608096163779380055154102558
++0.1247492229282524246053090042093696732793505450810943264155391612
+-0.2206549379852138057578743061470069389191225157277024467333194435
++0.3463602314652901879187900602326408775815696731976526372069549870
+-0.4643197195119173309525456044702917254373982711189458917859034631
++0.1742103250722310383210116734163969262525397097134100265396948258
+-0.2381993349353649959266405506577935293738035850399354993188862868
+-0.2682861506665362644547235799610166013942935834114952458624782931
++0.1092122305172402888258153501556024641240468035240884586547566337
+-0.2484919486952133736276301730817211937763024849719733543532014573
++0.2642327778745240757646266294392459562801915916132871452102135091
+-0.05498166129765227392701816783972152082386315555833273617452947187
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.3378273812843961582542292063629884092072283649810198437878149280
+-0.1579152561477417245680939938059372817945921112643983640578929336
++0.4343677658460177957275595739809349999045308826689340487124946099
++0.1729154576995603929033538546168666485286603783333729055438208098
++0.3286853674471442517278328774594531175004129974221230240529921097
+-0.005488434703663033807202110079459379772452209210435747933850600026
++0.1520461277157108621931381428546029388707591308784659495630676370
++0.1313277929451562487082545713868668183502620330575886917609655136
++0.3461657595773729745308854436538835073994736978427168454373516985
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.4398392223920449400907046631777097726644650279540499745251682393
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.01189153022550738271020564024560338180911293813423246023331802902
++0.4747795551811432367868902234458387985659947076528818830641254566
++0.4927498363209993415423255652249335532347992639631937083611382401
++0.06403862356712929207278788512728706067982585049275341514041588589
++0.3358502781831149238206790069978103636181122693169617235357165508
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4189021546786846898713994499102361111761337212340449822195971588
+-0.4195634668605248660892165218851209239268844866648432819445044954
+-0.1952017580385246842215057574004983762128495778038110686132947133
++0.04500489974247188801035267400166477957461676904337052075668156194
++0.1798107471163638439578816295238259584468770453133038678573909804
+-0.08834061683832729395743261247688425414802993275433895678020615860
++0.3979314169915041735368106500472849935917247124619023375003704306
+-0.05012499979552010356459573472764647953878012390959562904972546234
++0.2706265164684795897847947709150290937598347126997964072971218439
++0.4279156393274057309236852245921689139491849071240754852340002326
+-0.1306768866297050878382755406991227297651262848493266576034685194
++0.2678253108467659283584482339990112224237477098870371360902212831
++0.2179141620260913858490951088397942235004247794251448876571280120
+-0.02625691461327344055922337707830927973974380680329712859379796682
+-0.2968732896149628517099100943143613476200461843570397483007658758
++0.4759047591062144391383689410077974773955630780125823813435367896
+-0.1609020739688566968967924800650866311305197251794118595176451781
++0.4978111926406553748261308123557606568607924290968953953283570459
+-0.3680457287373024960717322225368521536710342004223667403911426638
++0.3370526398003044917338285727477518400816448538246807560798450068
++0.2765936823474155586364921826153439911980007106133278951103707030
+-0.4348875280358313577685853547130144822185950526155031914995950890
++0.007087880987108839466396846546797728109882567594291260004693055154
++0.2697310091373757401623213224022556791972046185410645292287609540
++0.3448794239046061622109983794627803016406640741645905667575177771
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.3498351569751814493591869134788974919431524046935587950216858142
+-0.4302348750536436853767752212077304891361636801177679666901775557
+-0.06548388787215626885971146251934855059017806534963115617003157257
++0.1911031215178088094488640140802007253494213892471707486908629466
++0.04524751634490719501230109883674608756741975505321511051160810143
+
++0.7721031360269444536624854764846278079390436516442447307214583713 +0.2568190130746644331048317748223591322462097932104379543095780599
++0.7113282365127787106295924505560767722199840055537543517442585349 +0.9282397683744983930469496205745698232573096227549226254155622007
++0.7679535856628120283990827155162180966010981503917935490380557142 +0.6733680895626635922558736333908780380926273791887898430485173634
+-0.6127602430473631495393181955733023028663546816025211937039540524 +0.6834258455476852992466772196651133096274086383123765308288566681
+-0.5944056790460496081717996899055920305811666877696698395774078378 -0.3197260966794518948885909003357003020869183279810950125249989182
++0.9839367502424209997890558933686976016082869978582241397510153252 -0.3602154836971247653552601690662060499632143516459194629015046587
+-0.4548419343247805224460011391703079342763504118566706946966391853 +0.5644944652643029946030943876077187355907298250270171876933333996
+-0.8849845588398620212194475625021727518116463369860566764411889312 +0.3002450060649265466224439088480847866613297705716750391656367250
+-0.2496600323413886386258990085306122333313701779141184118995463959 +0.9109171936013987677935840681404253773950900911474823029568083952
++0.2013567579813494116381818105314838610969816486807952028421948124 +0.9809865904559495207084689029816148884009367903151903920423149056
+-0.8585801045716661137497618288810938649698205103567498949997938400 +0.6673430101175698152854688993768041548769019864465421762641808302
++0.7326702292582058588316598422918662773838658327971514003421703067 +0.1912403836532585581545915780169638266665110774534903895312903483
+-0.2697443704573465465233716116511309018200366900116819867580635278 -0.8390872225468263142545242699093560592768485203012323759548269441
+-0.6468087813680422377672655136982917947328505318460482424201962000 -0.1694425027392812196149909158729299355102867577367629176586906841
+-0.2812302577494115409480047067683469320314228801749259890701395474 -0.1109481979293641305323565532634133494943626968908239858539934786
+-0.02167413194230472805204979364706614220652157873015883116130884482 -0.7576390226829376962602306885924643215709630457357178698800775945
+-0.6808949558907041005466617267577471160247144934082880243741902340 -0.2384036559822549222513803512289385096334288445624862912807231185
+-0.9306530725185795934583927665790248017610038861531896668451002839 +0.3322077770142086566449475410492734728431728270878221527000512398
++0.3319152007540851906913026983763584438955853838764895977762668678 +0.3008294101164568639831269327829387098511379992571638835271467486
+-0.4414898031680223608932387792017485771255689761890070706015387399 -0.8500127542413940364553721045188171752513697377512921485742321549
++0.04675554236208552284539297942143061834219393972333359647545914081 +0.8368368938909749223146178710811008588487209933709262501849117012
+-0.8152568938325646993310760006867681539054279301843202148958871677 -0.6301301812957352916599361333234055414853612961930455283065817178
++0.3952163240756655529212705355453418848569049122249531536768131848 +0.9291299159382365190501422959288431216663095157691743654943652200
+-0.9395163144138835125672454933008856593503204403133472584898229717 -0.2057454411726747632614076986736370443370299660132771686206360685
+-0.08780353633292157461769946866167963633505729824902226238512671868 -0.1506655683923674574544013920490541109453108644791859114657837843
+-0.1743560068378512679152575299947443762504689480476570621749324843 +0.8300887071220306139363536768734752416692057466278345728554448043
++0.6018835924636782523215034400201993341434060856497418585329625279 +0.8244806963149490337769127166910316223379101498545059699144474846
++0.5094537464059880326374352490064905763350159638438638190213421193 -0.3267801787861358921558326193709571898654303757814961069177939802
+-0.6412882157453879879998117648467144628970706782597054160685555631 +0.3173522145518535642355402682590855477810669842087119833799882044
++0.9017103216368149546517732133490469846549850682301607701578308401 -0.9157683658115979207506514703487531113998263500938211160185082296
++0.9631270643127979384664069651403286361478505285019531813591892173 -0.5134442544464950511308392504791416236936576938651094919168340614
+-0.6210835173793688086670082589175993809833456274087668762475476635 -0.7129018571172519683293420596961998697718416105831222546361506794
+-0.8137281645240375388576750044830353268919925528507904843095256157 +0.9065123083843027156086152486704570882336886865580199421650643667
+-0.7041297500866612607234884784407130317305843364144413223065323821 -0.2793634385919329761753480106077153213406385720130702294691355484
+-0.1235721593345202217795554759876880268687368789792682195280803184 +0.9164978685669781253679917402797926874507921723240255331025472326
++0.01793996302825844948175557573252934185711456214972052895861572493 -0.7596059702886165943031875281927001506068162489624554198112485991
+-0.3411596862218241172328579047617234818967459872060847679144866809 +0.7396561092486294627586234874177829200642603190414086001487983221
+-0.7379746599220903325806827424480469595800618414934950958452657346 +0.2718148178589837914007749073085756104697032416499157400657364344
++0.6843546378904107483368305041075808036585650068151329599810630045 +0.4662517483044007390427270839972516857434523020114609710559500148
++0.4265099420399003863248167494626862205659560797404855195341684806 +0.08808257115588047484358934167308625153926780195956135649522315482
+-0.9874151891964456486571993218370826427302121071375833081581536189 +0.07657390220669434590596313316601208477726655511807687988961336808
++0.4601637140807105378191037234478805179877043129140064777542238544 +0.4588569896068761120165974962862286433176923282523892852244105839
+-0.4841039802362244364267157134690841461075259779700777041439742307 -0.6615298742890711325192770516946564063654133133292967525875541474
++0.9965877589863013394561112420396792373833365736836351278348301833 +0.07011733953074958640104399325017215014827304325156759173135366906
++0.1915677305233047765741909788297653137314715093312058543130169860 -0.9612259440538002535765483137294916063381851202661518339189071839
+-0.9100049476348622207723944867294612891098821253248738836563459568 +0.9171138429339400553744807769217606095680344268845843714152250596
++0.8085565025927605798160394591787637574375967583263627553971120289 -0.9187643669939806209463756973588109095305506934347503023729389190
+-0.8851479413535487385573817957243936843534909265401263726020814395 -0.4415653525364425875595561926619571676937519758818885848285036367
++0.6064591258881136876029163103297147737049475826316704311935105558 -0.2086520325624420487101916822135314045088175303036646863500495381
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.1511824375843169824185114172319147719223588913836399964007230083
+-0.7605582778547942408060351317015194879473019118917060721292547632 -0.7035924603583511535986984592864385797537640709172487432674768657
++0.9359455243018989598720894094889086512450300947660621306436953491 -0.6564151567101526404248033266354854181628562195765596859557723591
++0.6403329703003144866532882811013167888478814399097147096856286200 +0.6965977875831549207460696210505433710177694513815592587963931164
+-0.7566145378422368715122716757726615136162685098609876740055635889 +0.5816085290684877844083071838790011353935994102902484256340030157
++0.4983934648670891328811187892957709407528386913849427405222396790 -0.5272537155512824066074255359659027189627420792613958690510029190
+-0.4971948424110283155918942363898656650230845195141350175248779212 -0.8587217878456442924783287669774302171560923546889427532593498197
+-0.3682837387895926737476498418989480477365801929350913148252356807 +0.8026154977853840476009847583617913539728860956242379381174833460
++0.6148970507477253459184467315745337121338375212139515007860628315 +0.8316489546057848621322523310402149298559936201982941913906852864
+-0.9083524682273578446532722997799475788834527253595073048265657245 -0.6097628083165813974260954335449904988521230536577883358240508937
+-0.3916716877161613504785809028033398517645549846406356231576213868 -0.7453827739395389922953742392780783948094849228955462762695809318
+-0.5193518691808852117378350732261309854332184624171433727414006814 -0.1809554132180854707773280908184743372302489521523696413745651906
+-0.9750431258817692289559363598684739941265076062018304867776204819 -0.8150644675782343977339925655387466104832252738719676821788883516
++0.05005097085661604605086728229374112382053058454731767435671635371 +0.8917866574285656025686075793775106139378346795002297501283298878
++0.4399150750505159978489133507713340072340352057744402647976718275 +0.1101358891689796743272094664641471479081663952426245980291616029
++0.1872909367861505164718492831692222169018789408412172493435499423 -0.05419673336890120775922638146599077291212376190352050517562870720
++0.9419321039051109549245680082622391092246632631231828777233002149 +0.8788147199714254107037333013127960617440138295766969973173354907
+-0.4287041936652777153072881590344721321081952456510997660597381855 -0.9270379263943661268097274055148115732381615337919171906603260360
+-0.2333391111205556198207256592076331117879880842914267473885863455 +0.4642977843367946473083173399076729199459994296180290689057358231
++0.7889477067277564731712862630611699647549102063099584994888747696 +0.1101424766711395834493541735390025259293259452693930682212953338
+-0.2563747285446000361218237435955077669028092056157149416120292486 +0.9804018990020609521055380413227891839510323211141337706692935583
++0.8211574497098423675796354902233745259806437217163965161734702361 +0.8144388485796060257725468016904833551056739055694392606072812336
+-0.2430326281692574737943057410600918611450147916626606070615468027 -0.8395517493960846429066650820934625099120153763823264316622178314
+-0.5566744269539672218404388199827460990960984415899809143036909069 -0.5356363024105526066730000892740728141483682520537699099980586020
++0.4524110448637644360868388875231267640338311624103409145041788539 +0.3785984554723058056848684987205281373405286509670642510688353225
+-0.4077100331640054846709900852315956380002910175183742932154068317 +0.8125408356507693035783621684477489598336579370455636449932920399
++0.9925432694290908433525570320250227385826836114793383624485189244 -0.7304988390989189945560089553959860009999748685520304348991029980
+-0.6845441772530325736299180977635806745002567201737916085152286412 +0.7456261383135196385610840292806346156606897621955571769519287646
+-0.5689275448635581694575383584343021970227104177442089801706330228 +0.7757376987729343002700728678244609761294630501410110238207420656
++0.3985567814775143901221253743791327148945266133080683203695999962 +0.4078040359990933213948732923927214812372340416337539086249054226
++0.06961382826101090949578301124383292455559947536661707583968975184 +0.1767712938446947695198229699328249449877999447752262239584762909
++0.04307050119059237005387541827491059927895209375649378090223139587 +0.07365715096199305303280147905505827004287730234420360693427261478
++0.5849881776459916509815348468661649535409940486756497653761724118 -0.3108355387530528344022186566449990520542204513871372429842394977
++0.02943622593745917222898833754618856585348471594569686881397428726 -0.9157841385420411790181903606309676436954041107787988394005532203
++0.3572417013316431962026919347150511042636763596269956578845059238 +0.5517970855559362574840981197851271127548171428450299159534222246
++0.8246603472400295391578505724317567517180656867730457579866275623 +0.8076059738124808816284579607205742577625775175934575040140126923
++0.08267470722577286001217633724236129336011575576077446531397711074 -0.3623547609761457713662054674281991237079618589827581000231798627
++0.5296493544860877224747590127030477951987987258874100707895850711 +0.8183208109839758987990961359356649031888827382055407382873878803
++0.1781616718394205175709349645973564475788988241558791298588188050 -0.8535325136050236145755622731382685357658674118927526952194103789
+-0.8633908949968827943561744577901901026376268752722144571223670853 +0.7385965807078199198295561757281636178085738161163241745076529168
+-0.3459820993240706010475901311688197838023719669999227712290509004 +0.4178732695594172450325633659542989992529347731253116371174433175
+-0.8814262497135981437569523940906532685397798861799997656375266034 -0.5340515573220288676539037563933896861133701709641430080525373334
+-0.9722552720272006984678084914751283988556792015475269427349942943 -0.4642629009871243127720569534731497065151730863379424324926815934
++0.6486167889394565452584685154506739738504706411589692034776454683 -0.8697898736666791719966463521302103516597198677810465705462889386
++0.7237216114456588829885327945423834052953613010855527824331391861 +0.9260211067928626234987335196506123804866588031248091568668186807
++0.9153832161606877637775414865990581395464326012246760580785761313 -0.008817333363577657304077859427800946074653041725554105998740790418
+-0.5010512652356920074204032205934276172215285762480987760943959851 +0.5582339538069273279851977709472563742471538090477435724053193958
+-0.003517119711452846559277971844364606295296520854275366315952866112 -0.7255700875545188795082017268145707633365451965771130961377344798
+-0.7432644962454565902867854377146609433353697756825593784757725371 -0.9882699898882978270887601698779901692432742326870804476209571454
+-0.6678889143320625765336213759043802181180754155696893060399849702 -0.9276804865150421462892365252888320798428705497677187785005965023
+-0.6231432486376980435414857670687342821530306865222818413703487444 -0.7832811923001301276864916736742146403933964466320677660322633051
+-0.7612655580159597760389639032422118132475827999877015743017274080 +0.9875308623632782097656312821453924896496525870736205800843638587
++0.1046561870893663260798556882535941223232955552582338303672866205 +0.1783373466436970660022454632463179035762888722766888416391448363
+-0.4422178249719287625023613714462236578393297082084105686699745527 +0.7336545898457146349237975784794059749253087905334857489144998895
+-0.3006761386836519584160039426021947715604263308295216335254395417 +0.9127856868366581467510500732005220443872380003084957447131950721
+-0.3931472033430920383369653755030364057981520323323553764459192375 -0.3632881183963366167884860409201422151102177606787650299072097307
++0.8009564737468829284569870438621332728504682800502357253909429840 -0.3268576018334922472384377473775779415605488146060240031080037115
+-0.1173363847349279118426129136160276265546406000211794923295485560 +0.9427149588672463047630742061537997891278684495348468159028173334
++0.4299591565232924801870368761556079288133632606094048768501521181 +0.7916571579983658653317798731563225080239623370784297265192438825
++0.3519508427149724056038340065726224107858818936655812955385008590 -0.6817701452011630996907953818868671270735516339211681814255907609
++0.4719165407085054156880418423268675488422117760448059022673468457 -0.5168940707242169951406978648595076294647040487113324969763690473
+-0.1600709565700552484491336034747507816107856100797576115468140784 +0.4155311954965517114024103086773167213755429855677272377839721067
+-0.7196566232553047172113131790990428945643928116318893875786802199 +0.6506707691016388017357516362760131941221566979795718699904936102
++0.9506852903491360468879758484099667312771993016096956267658366287 -0.7043718208306549962960929614939365734224121070283816720729220425
+-0.3776736725704435658453332291251578463493585478972191163904289213 -0.9030673117697692613858834879354138789682350761417043644810908266
++0.6001953620324393368833490197603304801854572549372059847172328017 +0.5465706740090774853953336301894435415008351646460109707839721596
++0.6978878736648347125949172253483236996713754832649550025174381314 -0.6814239608934778019209189605706175697331566277120687413401512713
++0.8508443401291057488517795791511283359984797073308503806275388226 +0.9205925082347564380336697132499017123825554431098646503055203834
+-0.4669474695063991815703085816201270850746349019459750890255838246 -0.5020782788038677346392099888475830183897864323626792080264544951
+-0.4916857659539131984511014678316277462480514807356006060275370059 +0.1045062318771655437961420896781653537832869869453123103733053855
++0.6805454442564243054841615570704809357725921633306984108877804159 -0.1600201060994392446745228713066083331646179396065484107159119337
+-0.7429928693445994197394008924008488085983664860223161935727994358 -0.1176882561544923620215084381200312622694313533614808151971725197
+-0.6969676211949719236627008807329635886036631346596064918901094455 -0.1898251716095867210440135081381899859506047209026635006620997810
++0.7197019444966162425693701580554867509036572823057158142921206547 +0.7858779951083861580332996484728804881745801231417586365625881696
++0.7821091276993633157184444189269089852199610591029476119050859896 -0.2279832493810412940114966076664112325854082672090777285019621618
++0.8533226121539329221550195141712150337184702154268885269745819910 +0.07761160430503009576118799101543653660926181662195182427626478291
+-0.5271231904299831306010230073357821701271416210281300595416035220 -0.2055488181060608320954691371766551168555828485198254292077222517
+-0.04518836599707041257371263007133991513702551585551047967233360089 -0.8570653123756356936765798157651852007633450856266713907351356642
+-0.3994910205015023995978692651199523393500004114939614636352980640 +0.8510470630599207981929699284163199387691742475697788917650312737
++0.1151112248581587985459044273509734339372139569519498681662926204 -0.1656012361332616709224523200638076386717414816760750375488963700
++0.4120054991803597141675815179438163442823969621208991056428168406 +0.4313169396402067420747675191335695107540210953445957632944683466
++0.4343579826046095597725968699957767082823418268721181549420071456 -0.6136943581151102724274558633917286896829715873222934810854627144
++0.2535126428268633086086116718856542176680789611156801564801311848 +0.6107089044121956416324813364187592386184059323011742030772237424
++0.07575910820021246358816323232702289803823041246205070258897871070 +0.4569955077979069087363694857841772836360708458051620753700613184
+-0.009921455995466628736212379839332998874975285848956671613709936322 -0.2056316517130173688144925128431576975079195367781834481815163780
+-0.5891566693005274615768435832037723406013603962165946345013825592 -0.3127653344142269367017311068934194736573539345353684494263561034
++0.4725424296459514103640632185799575468737722475096114637473172301 +0.5675769204970204695935245199626881958749158960158155816882247751
+-0.3642689669126664223527375212471788979005234643229363317834063467 -0.7973797882525385651192136516616674358654229933256541899442767797
++0.9106160875739411428476569185959640646231793213239998804082355729 +0.5012904467166158311205187729565579292182659743325041112386977484
+-0.1554296096295892351142787706783742826880784898341993011418432069 -0.2570017860782360774767408845442523659054818260225494146244853645
+-0.8069065915498787556695276318086362565827819941733622970182376756 +0.8152856345265963021214702712184311864712144712337072499723510820
++0.3774149419137016419806042817145212836004227419492405559087274340 +0.3474550590975565404544821867969338696280672245517491821876495039
++0.2862571560348818269179471614749431512680830893414487690534246820 +0.7718119181978566336150728291679018907122826327418198982205731192
++0.9392006333865916821227548404291848184201007925131229813910957774 +0.04535880498283686865208322483522967139304884767842664817216330064
++0.5114205299580920868823613420213360686329180904621350249508347984 -0.7174845876743344015633175484139120449777707133419695966520824564
+-0.6408078680635244612899765081025913686282954450887306823350772997 -0.8532961844667343672614407218622874059456622649181507984554557180
++0.6103476918632637106424717122234807592708375161253117953076031400 -0.3551691762386405619967249318449133353395153150287271325435124081
+-0.1695324055840820458497589349479760035964663521113253737383164439 -0.3797572987358468877601704908647997438784227376119508300980299747
+-0.8353594742240205937097730115138661305557325449129426505768609534 +0.3764932269744641381853168742044507381862031491302365412212635060
++0.1821483418007667766250895141417107286953921543595289977783017637 +0.2816632617692655097062060192076384166912647824219953750826131631
+-0.4074526958925963909486488891837393063126910851657623153854908031 +0.6936970465516315197236088803729008972356138275937389314888615401
++0.5194123128321160939700776973599963366760031201335463428826305590 -0.8093948466492362612217398058810377625062288216775489656468562411
+-0.1339026726689501933617889040862807661257038358606191032725698017 +0.7179094192553983421088688870290454722724258927762520549683983736
++0.1617840119849052908674425797539541379830915417411164257796009655 -0.8752125899339353908597128121427435294227530087554395150859455125
+-0.5833399591688895541493678958036554117556929951798174740043291689 +0.04176278772058224232241432506737925045260833246510034386845030186
++0.2558611196916433369649336532000849479904305619298222327625863899 +0.9269329565460541008731323076781001715661419867914361439680533663
++0.9637184128969163713272727389388526394331293708405231601274766637 +0.7868192948478988386779315105006009612933033201432314519183555363
++0.02398516466411951663039478357357263297576765858214578984119980389 -0.006266353716036539320572064746082526752743361256443337864258505608
++0.7220807768185265925885711430037484304092954076856054861183001563 +0.2266154233841305998807280483192876569901369827513556377738818721
+-0.8314034062393001851412680462190559603040746972786212429324375224 +0.2746350702494963366663352365693945459844370045750631885709403566
+-0.2313683087056718682580625867623460795004227069874977160354372877 -0.5247772986387898164750425486144677116796659442569793354035835811
++0.5241531162028989758906123049906275766571616823241720374203214447 -0.4928925951310793013273500011155592100819574396889780507999573189
++0.09003216360057281587724105549690566269005814841108581287665281058 -0.3113637472666701974473222596908779747755145602641740095469526339
+-0.1599268816032428776743959117270259866309677355351818460136443291 -0.5748854355426279234162395955225246347221834110564955747956209638
++0.7126643265921692501928118835762400720628273345745039396768073268 -0.2554460407289573319602333075606187389397146712378109702048311016
++0.1443381463559750344148688262608847179704805274810841956785523095 -0.5765429128839939287156523310227195364489667524718802860187766530
+-0.9541149480810226451568227541620900387924893378859274527595762471 +0.9094805878752663366484875502653563100058416506406189283398268678
++0.3516772517804962317135771244694045300550581304302552629989927399 +0.8848752416174802394989820330821347631944308988732361074957483326
++0.8312645047002901343481040986077492354211106507977246573848547872 -0.2800064663747466167971611334477592148285678388000719119052505901
++0.8922074343575836687927424867109565448477559678636672119414443701 -0.3524957419793069043802183938505947717728662986795036125951037387
+-0.03914580715076807517564668371313115131680481962361916796431130169 -0.9266175799130044754501565944451928082906704525569144780860061500
++0.9746573852711840936336177201962708050687509298510135226623575906 -0.5330220313943443910835605702117655504592614398056913858309712345
+-0.7287905575728605025843722055111257091486772902084438557782657679 -0.7330266194736301185266620028746862947402855823289205835841036965
++0.02849594996466824865218850207780069267985584074611847663329993142 -0.08901643770401430747538873378587416087951119772581637121305331682
++0.6459433245400880395491408374407025292588521318149535734854910274 +0.8550765251384289421250035837565358470833355010809526497352204912
++0.8136628661132407079541934173897141567434892632439804419184181281 -0.6907357918123153055314910754893467338334399179189583430196498864
+-0.5672690776078439250283757912452916624289131865014778354746409640 +0.8787770736433328745035234902871834306966611855454194152763085168
+-0.9476387464140397458861421362921055215974651715794066883914951208 -0.01738793803090707722596079625349684366463055472987575653160098446
+-0.2605437240709855372272831411319884164143200014969561164796810212 -0.8437894361676828459420431516790179378543254071636108492466529010
+-0.3311597085631775241605389615954882776971235843100995205029515984 -0.8141497075382254027096074950311514491854968487203741238943799987
+-0.8695822150875121724691553338257829869250127182425918912387649806 +0.03889316514893840261980283978604250703936072380623394289182754247
++0.8891098289754707421060220890985710245132795198449297271458423909 -0.5493273108612277875600478109570404534520845332638624479667841502
++0.2895552325554255930167653346015931047558748269272406529926466973 +0.6715912488533200815290011024385797575217363717470920802742883653
++0.2650936900762128600362413578030729270793479332746334793752266553 -0.8438919390970836161462370188424965610990320605153865447984219469
++0.7046936151828971593710415948632896548808680079056988913118083777 +0.7184582122882689810255427112660454958040291396946043511983687288
+-0.2115570299364757676008017443811649086191736127455534555376144021 -0.4086097264688666636790174928803728608266459573162410770584140364
++0.1470216587412559156294994682432100810761459629584248289010138317 -0.5697919261032078557614020481060183849522111669616974872492012829
+-0.4329010361486256961244622956913108506550874170254014125575533479 -0.6278243966060881460501444931432866833291695231208083680886203722
+-0.1766818323431859044625743795499747752198631648846896440459670393 +0.03368286177059315443832500997308649526629280623504246086916187170
++0.3427075333057822059987675632859967887158938796610229803331114623 -0.7436883526680899648969850724114253803054818951808117927039564586
+-0.1833768865732711001295741826816961691797355582139228551235621230 -0.4515446035045963800470270932006012917142703741148728102920678819
++0.5665067551831146950685364521560101025985707475803564862178192914 -0.4810931364819359747828351037417496237257328332185652823964021884
++0.5846720091653589171386464934439494744713232525388330403763032709 +0.4458845011005795413736316288478062406750213207171946521339936816
++0.3128821017947787434710701629862425068710081298914976621641025408 -0.07022130270408117391201617422037495983519685200057324281521736371
++0.1943703959062877206669871517590249058034169064564194870074554031 -0.9363332435815881306934514312012861106386014749526768950073553811
++0.8893705554674630659403991877841826994191514257022249874261157104 +0.5931834085557288286300206310139754784241341457686571795494994774
+-0.8883357910902242353575856676539666074648753053656660309143767467 +0.7036190395840156286745266326175275923901923175942468576350074587
+-0.4607165734661637817512681868591410520464620690313830851265222420 -0.5793821363841516257942372216607612745507267978856920167262365904
++0.2571290378683215613044136510821588749887474163677002652639520119 +0.009045022679082836013363681378660810610692103525817615455038021560
++0.05683348973511969001808746192505133291481235528637618587938493271 -0.2778968847485682179896478779214700059419569060048743113852325563
++0.8458238445504835463314748515393830432307810942061667936052115581 -0.2784308881971247865302566270327586460636817633229294056506703495
+
+-1.875265938695308705723635987672011479346465883255866041126847 +21.641816447841474153893366577071941174426145924590947682148565
+-17.989740974803099443498159788837364788585262270200012857387829 -3.758379859529311556270161941124010833081153807658441338028474
++5.3823849727274563312804988359922791356019346623006091616969088 +17.8006255796198396505865145221110306949238235297653244802816245
++5.006556664420771052609425764416823804932064896573179582753976 +8.522660860172788167089964413741439667789154042387999856371594
+-2.3639673812998954486197783238136300714661968137228256740383211 +0.4885863921718977073670354540004049543115754022863126178432440
++8.7282337116875875046332357215812001577839922378744014457613117 +3.2754984631443414686574864725658605874545049342534038336590983
+-5.542135451063121443254000096146021612054808410427258398678619 +16.963183077284035839367087064013899809094297117297199601105266
++10.0574924672062823588677899397634824990308565218084721415754528 +8.7222729255437780905062663587648317126719569499554896174163132
++5.267409537675013824665136344048522950586604980208700090325230 +14.055584862854114636249276844502141783705534681891265625122581
+-0.883203788561539913072664744708387331998128523123434080629179 +7.720460693430073964753213600879673175374350864186264805339935
+-0.994075834554717305833663691791169933448662508896093028062603 -10.389128712914758358209120066331042159064478804556893990403812
+-1.789343124897348138582193138981199995604307462272118562329845 -4.951340902351172386414730333296923657923334903905864010666289
+-21.095283145091685343498350827957452373504167659686568711339274 -2.221356884259525909477195446400265956602381426380325630486957
++1.223031341872630606014609958655728107315360615311367796603229 +8.511696575080746415580190564856249100779565151745835320660381
++5.034490669857179661772551276086502819532486004898704141546154 +13.882581898701481523992108585877710634532375174740906742076077
+-4.766014010821380121632735913088795507138223686218247726106877 +2.333374343416039781425567978880035729949536207452670521967604
++2.742275663967752189378820675040739847040912076584055518742431 +4.627561183863364148040288636011128049029744473898990728617203
+-1.147744720002243017423173723552128793711329408838856642906545 +6.360163573874787930331205408673852070699117738549893046591255
+-3.580511945349825407207055153731309559545839716876299877269616 -10.902054687667015881251588859843712482269279225591182560552359
+-1.6196964326528423778227589109470703445953019711802623043632601 -3.4006154683053816070939716626778788911211135833592312795806305
+-1.188009857305049236696328331318013069882496158865667223686634 +6.492828267496428165797756738513886561607569621885924052914815
+-8.665865942711137487807966727086879181931731328677849178953605 +0.231266975259053346603743703086006119989183948897368203827819
++7.263209645916035081036328094731407947471633615762298070024155 +8.041314253842332657557619891266460101367240593663856667772065
++18.144792295065556491995439765946138909661007530032357302825179 -2.052376498543463432371463034181356493153649683054997968179030
++2.555938972675799674479652847551293485143375904879424024884837 +7.355120919589886543895140376402394672341946447805479342237794
++0.468817285915575792876086424125844136013907186575597381462144 +0.891925349038018772989398696379907779327697188724931529914253
+-2.887304160683726418306771765626250596596051207912559339630077 -7.099936099389021779918920511300768168108906543261428370250565
+-0.065119540628569750112013334394915381840856041521390555866411 -5.821198892372638820454104631845863199168382205219550174388946
++0.6510774209440052566088191496305516203425869013749295605265170 +8.8574419277863106957356540642201057854677655280976226581905690
++0.674922443816503192768655585210017920153185784311198524146178 +11.095722256374799354818233502461872297303335305741381812379385
++30.052577584712652998302676745855413023167576930551648279714358 +2.064697412351759431238897321121452639010702411598563826800554
++5.144745074918503834653236284152424310456849454614103798783457 +1.658873185920783382135408398850307656001768167661430062512077
++8.740302725787527285820841853400894748599855370490147298570464 +1.879299355390323661998485951932789159305262959376276739530455
++4.082668528452845241702997295478334362099933233289825134006771 -5.476493354457732796260894624406154112991039260156965272261980
+-3.825235792532433207155524700315021893664141981940797625997848 -5.675168716676723805366191052807017601999756627684146861647354
++1.662354999170965054633223385967767078914006912493327067024073 -2.654414915731346337593827442123396614951315203562412622792872
+-1.2490851698786960290226910563759649512802261412280744543222639 +5.9314305895170256166835315364475914998998643483945611059455479
+-5.061371894584374486283181931151318545963454439876209764948143 -4.462013000062900682446539873778093115840624554717461424995399
+-12.0977127456086484352455309691459287915407855732749718184472633 -18.0563667536085139749572689909494966758023890307384091191837713
++6.573718302822289433576380706280373926691619129521356334144098 -11.240604805917807263170373493658334541452174814782054212538771
++12.552441437559743977923375727796774973667313650724663930996443 -5.532733774543442555761406040652546849906139237559573150792765
+-4.2999815696994067313294340202789799581391417653411644005231833 -8.5975070171082677411402064440934578853137810739491295610641188
+-7.971919880762737631818503751384788368335874973041526885328781 -15.120002359751712006896594987034440552716806822973165905576831
+-7.172520979370089959023575791689212414172583091371473397021817 +15.007423913131295499555900921325481500842583292892315429906442
+-8.792723304307259667025161539796298390352833067328100534493748 +1.466162864609956240896137315743096979227057981910016792534253
+-1.651029877302513005204289888597759803517452351987647464862280 +2.660113883290289534718342801374823743500755256521353281446716
+-4.099728906027827916680530009490500335091451120871724029542771 -6.998688376214228174875296406960106052222275633444631555082996
++1.404989268859266613007202995138594775533631647241318576348889 -10.584961574354863172615870379025480590736320267641534096938374
+-8.637036727666165571355718206895707222306779912494444984957209 +8.957311296164027514341378376252402017662017559083776492669505
+-2.410958300343304491578977568366961203696579455260861208504521 -0.656989240962943001710001085062273537895201972225185964053729
+
diff --git a/tests/data/nfft_2d_20_20_20.txt b/tests/data/nfft_2d_20_20_20.txt
new file mode 100644
index 0000000..8ffbbdf
--- /dev/null
+++ b/tests/data/nfft_2d_20_20_20.txt
@@ -0,0 +1,470 @@
+2
+
+20
+20
+
+20
+
++0.3173894901710712338304379034862579946422889909408459156044823877
+-0.2206549379852138057578743061470069389191225157277024467333194435
++0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4643197195119173309525456044702917254373982711189458917859034631
++0.01022750575332349257722449804129916311389119097299090643512381743
+-0.2381993349353649959266405506577935293738035850399354993188862868
++0.4700775714463633978511207403685111986859425845978719788126486235
++0.1092122305172402888258153501556024641240468035240884586547566337
+-0.1306486726789604518575642087548321430960584930096366967255476517
++0.2642327778745240757646266294392459562801915916132871452102135091
++0.01032012051955487309722047463966310173477870581273801739268254951
+-0.03919417871052420194526378084573471772000103115061608042162915008
++0.4969744253080455744694825346756894506554753184704475582968873208
+-0.1579152561477417245680939938059372817945921112643983640578929336
++0.07714972696698667716678650997245420808817430827447314113682745907
++0.1729154576995603929033538546168666485286603783333729055438208098
++0.3914347841983986584093169466825129403698312444687581041683071856
+-0.005488434703663033807202110079459379772452209210435747933850600026
++0.4098351732528003809102269734570294879975455702584035273166455779
++0.1313277929451562487082545713868668183502620330575886917609655136
++0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2416500872464844443813651159115503866293289962833710383546455749
++0.3525707830542183854600907186155249059680080381975147205747395167
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.4593142592621138819114189833820168418626239763706778624898432299
++0.4747795551811432367868902234458387985659947076528818830641254566
++0.3029583073136138265829962071140439545004830470746425534136209257
++0.06403862356712929207278788512728706067982585049275341514041588589
+-0.4755711272429793224288583422054842471828900217314654775994176650
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.4195634668605248660892165218851209239268844866648432819445044954
++0.09085671307189002853971282071576253250819369457305730572873101910
++0.04500489974247188801035267400166477957461676904337052075668156194
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.08834061683832729395743261247688425414802993275433895678020615860
+-0.1013589956735152573510406730689184973691015496657475510126506381
+-0.05012499979552010356459573472764647953878012390959562904972546234
++0.06875288804967068748620631495815812310608096163779380055154102558
++0.4279156393274057309236852245921689139491849071240754852340002326
+
++0.5356506216935318567168964679980224448474954197740742721804425662 +0.3474550590975565404544821867969338696280672245517491821876495039
+-0.05251382922654688111844675415661855947948761360659425718759593363 +0.7718119181978566336150728291679018907122826327418198982205731192
++0.9518095182124288782767378820155949547911261560251647626870735792 +0.04535880498283686865208322483522967139304884767842664817216330064
++0.9956223852813107496522616247115213137215848581937907906567140918 -0.7174845876743344015633175484139120449777707133419695966520824564
++0.6741052796006089834676571454955036801632897076493615121596900136 -0.8532961844667343672614407218622874059456622649181507984554557180
+-0.8697750560716627155371707094260289644371901052310063829991901781 -0.3551691762386405619967249318449133353395153150287271325435124081
++0.5394620182747514803246426448045113583944092370821290584575219080 -0.3797572987358468877601704908647997438784227376119508300980299747
+-0.4274845026027779916855619203781095649893449575458629944853980527 +0.3764932269744641381853168742044507381862031491302365412212635060
+-0.8604697501072873707535504424154609782723273602355359333803551115 +0.2816632617692655097062060192076384166912647824219953750826131631
++0.3822062430356176188977280281604014506988427784943414973817258933 +0.6936970465516315197236088803729008972356138275937389314888615401
+-0.7335087736711041883089151876515694737975402817556229765975958245 -0.8093948466492362612217398058810377625062288216775489656468562411
+-0.8786687027770929787301562525828872003547410177701220950278899658 +0.7179094192553983421088688870290454722724258927762520549683983736
++0.1944979336074391420204691208780533563017707991268605634570366201 -0.8752125899339353908597128121427435294227530087554395150859455125
+-0.6717069716036456017860348911350501039034020263227184271420653514 +0.04176278772058224232241432506737925045260833246510034386845030186
++0.1841240265716411858721923885202834145897392121583597644960322461 +0.9269329565460541008731323076781001715661419867914361439680533663
++0.5314163276115420712219700899397644303297566254445792595831691010 +0.7868192948478988386779315105006009612933033201432314519183555363
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.006266353716036539320572064746082526752743361256443337864258505608
+-0.04982739811897050028189209963034074300557183166488389610036293982 +0.2266154233841305998807280483192876569901369827513556377738818721
+-0.2152831478765442996690076717147867376683641103330644151579049018 +0.2746350702494963366663352365693945459844370045750631885709403566
+-0.1430325904665435237882241441707630670064919508747748361914900932 -0.5247772986387898164750425486144677116796659442569793354035835811
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.4928925951310793013273500011155592100819574396889780507999573189
++0.1856688150172391527088040246433169286752829500750590071977203062 -0.3113637472666701974473222596908779747755145602641740095469526339
++0.8193143821859564924477154245099351963436429074028089074430038904 -0.5748854355426279234162395955225246347221834110564955747956209638
++0.4604487491339531156973853721884505256237012331451385915640611729 -0.2554460407289573319602333075606187389397146712378109702048311016
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.5765429128839939287156523310227195364489667524718802860187766530
+-0.2028782443808202039078700152556584967073846417006795171717789768 +0.9094805878752663366484875502653563100058416506406189283398268678
++0.7727562160593342436881229708062656539223995010850938445718232095 +0.8848752416174802394989820330821347631944308988732361074957483326
++0.2216455512897554102911455213296037106714896153079531893725412128 -0.2800064663747466167971611334477592148285678388000719119052505901
++0.8060520707732849845829519568044036159880831172244051400087891596 -0.3524957419793069043802183938505947717728662986795036125951037387
++0.2494984458565048492106180084187393465587010901621886528310783225 -0.9266175799130044754501565944451928082906704525569144780860061500
++0.6927204629305803758375801204652817551631393463953052744139099740 -0.5330220313943443910835605702117655504592614398056913858309712345
++0.3484206501444620766420233468327938525050794194268200530793896515 -0.7330266194736301185266620028746862947402855823289205835841036965
+-0.5365723013330725289094471599220332027885871668229904917249565862 -0.08901643770401430747538873378587416087951119772581637121305331682
+-0.4969838973904267472552603461634423875526049699439467087064029146 +0.8550765251384289421250035837565358470833355010809526497352204912
+-0.1099633225953045478540363356794430416477263111166654723490589437 -0.6907357918123153055314910754893467338334399179189583430196498864
+-0.6756547625687923165084584127259768184144567299620396875756298559 +0.8787770736433328745035234902871834306966611855454194152763085168
++0.8687355316920355914551191479618699998090617653378680974249892199 -0.01738793803090707722596079625349684366463055472987575653160098446
++0.6573707348942885034556657549189062350008259948442460481059842193 -0.8437894361676828459420431516790179378543254071636108492466529010
++0.3040922554314217243862762857092058777415182617569318991261352740 -0.8141497075382254027096074950311514491854968487203741238943799987
++0.6923315191547459490617708873077670147989473956854336908747033971 +0.03889316514893840261980283978604250703936072380623394289182754247
+-0.8796784447840898801814093263554195453289300559080999490503364787 -0.5493273108612277875600478109570404534520845332638624479667841502
+-0.02378306045101476542041128049120676361822587626846492046663605803 +0.6715912488533200815290011024385797575217363717470920802742883653
++0.9854996726419986830846511304498671064695985279263874167222764802 -0.8438919390970836161462370188424965610990320605153865447984219469
++0.6717005563662298476413580139956207272362245386339234470714331016 +0.7184582122882689810255427112660454958040291396946043511983687288
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.4086097264688666636790174928803728608266459573162410770584140364
+-0.3904035160770493684430115148009967524256991556076221372265894266 -0.5697919261032078557614020481060183849522111669616974872492012829
++0.3596214942327276879157632590476519168937540906266077357147819608 -0.6278243966060881460501444931432866833291695231208083680886203722
++0.7958628339830083470736213000945699871834494249238046750007408612 +0.03368286177059315443832500997308649526629280623504246086916187170
++0.5412530329369591795695895418300581875196694253995928145942436878 -0.7436883526680899648969850724114253803054818951808117927039564586
+-0.2613537732594101756765510813982454595302525696986533152069370387 -0.4515446035045963800470270932006012917142703741148728102920678819
++0.4358283240521827716981902176795884470008495588502897753142560240 -0.4810931364819359747828351037417496237257328332185652823964021884
+-0.5937465792299257034198201886287226952400923687140794966015317515 +0.4458845011005795413736316288478062406750213207171946521339936816
+-0.3218041479377133937935849601301732622610394503588237190352903562 -0.07022130270408117391201617422037495983519685200057324281521736371
+-0.7360914574746049921434644450737043073420684008447334807822853276 -0.9363332435815881306934514312012861106386014749526768950073553811
++0.5531873646948311172729843652306879823960014212266557902207414060 +0.5931834085557288286300206310139754784241341457686571795494994774
++0.01417576197421767893279369309359545621976513518858252000938611031 +0.7036190395840156286745266326175275923901923175942468576350074587
++0.6897588478092123244219967589255606032813281483291811335150355542 -0.5793821363841516257942372216607612745507267978856920167262365904
+-0.6996703139503628987183738269577949838863048093871175900433716284 +0.009045022679082836013363681378660810610692103525817615455038021560
+-0.1309677757443125377194229250386971011803561306992623123400631451 -0.2778968847485682179896478779214700059419569060048743113852325563
++0.09049503268981439002460219767349217513483951010643022102321620286 -0.2784308881971247865302566270327586460636817633229294056506703495
++0.7721031360269444536624854764846278079390436516442447307214583713 +0.1546520626861422333359961640658948790503364483967590843600863470
++0.7113282365127787106295924505560767722199840055537543517442585349 -0.6225775243116540313116281463349420309042753281761340281921133715
++0.7679535856628120283990827155162180966010981503917935490380557142 -0.4711163590978376126454985059281824288897326557537760286424713720
+-0.6127602430473631495393181955733023028663546816025211937039540524 +0.05019084624368743889926916934552108615492017653478974426758842368
+-0.5944056790460496081717996899055920305811666877696698395774078378 +0.6461406780733109189385884425756901416390710262453176809391037054
++0.9839367502424209997890558933686976016082869978582241397510153252 -0.3646945557234024586517840337629880176834748783187949036037901754
+-0.4548419343247805224460011391703079342763504118566706946966391853 -0.3370795553642254807046883165466968306962599317309657519831180634
+-0.8849845588398620212194475625021727518116463369860566764411889312 +0.07406951035684034748316975863636120744360012351054481175945110032
+-0.2496600323413886386258990085306122333313701779141184118995463959 -0.07060713770177340715744598544748134178291677100256386910808243090
++0.2013567579813494116381818105314838610969816486807952028421948124 +0.09360709618916370956867688682300922265055482761303476467874635515
+-0.8585801045716661137497618288810938649698205103567498949997938400 -0.4903988627030185676892387805777880755902392098553657129246566032
++0.7326702292582058588316598422918662773838658327971514003421703067 +0.8668617192033373216803865611020212154378552305142050619982759533
+-0.2697443704573465465233716116511309018200366900116819867580635278 -0.1745567235833106956445457069963316833929324818668372064961096495
+-0.6468087813680422377672655136982917947328505318460482424201962000 -0.6495725409582065831276338775327045761031092852475255376332913976
+-0.2812302577494115409480047067683469320314228801749259890701395474 +0.3132302317415336986457546693818300494005409790462961496623925972
+-0.02167413194230472805204979364706614220652157873015883116130884482 -0.08002014266656912107124326141465267585210492463107808149275462116
+-0.6808949558907041005466617267577471160247144934082880243741902340 +0.8439760661050647193221008089223906976491469018983477783830651032
+-0.9306530725185795934583927665790248017610038861531896668451002839 +0.2742491031513893827528343314344994279572977620848668278687664294
++0.3319152007540851906913026983763584438955853838764895977762668678 -0.02731317148254747797517682815221303356852477238112794448774630271
+-0.4414898031680223608932387792017485771255689761890070706015387399 +0.8474076414796548139557410486347838750741787558443005871442567576
++0.04675554236208552284539297942143061834219393972333359647545914081 -0.05779005908514727153148268653835324462294291367795091759798861981
+-0.8152568938325646993310760006867681539054279301843202148958871677 +0.6263509070486716842858384400904599373074897647536296406115669676
++0.3952163240756655529212705355453418848569049122249531536768131848 +0.9742953226314242461965632460638579799905807780876871234627553275
+-0.9395163144138835125672454933008856593503204403133472584898229717 -0.5412738282089598200095228242549815505925302427991012087392399282
+-0.08780353633292157461769946866167963633505729824902226238512671868 -0.2810841851319220937367807869615879057727320463374091858347990139
+-0.1743560068378512679152575299947443762504689480476570621749324843 -0.6332274216696186147542273193898355103863532218808631013492331016
++0.6018835924636782523215034400201993341434060856497418585329625279 +0.02172241435608649221235119486946747660849609106303200545112768013
++0.5094537464059880326374352490064905763350159638438638190213421193 +0.7184196840602424035733157087786269966875702807495568534158194777
+-0.6412882157453879879998117648467144628970706782597054160685555631 +0.3749586907344833235687996618371211329945742347114437060445496025
++0.9017103216368149546517732133490469846549850682301607701578308401 +0.5197997067097932079572481275469253932045397138803211253153129772
++0.9631270643127979384664069651403286361478505285019531813591892173 +0.1001908957778599515703760968602291233036923939615286132670111686
+-0.6210835173793688086670082589175993809833456274087668762475476635 +0.1982609831290281879535544386961448200899094658928947930993426901
+-0.8137281645240375388576750044830353268919925528507904843095256157 +0.2265305308299656396847919737333043590525494945051651354564266382
+-0.7041297500866612607234884784407130317305843364144413223065323821 +0.7906018990132069071786050772247164464130165003035494689544865899
+-0.1235721593345202217795554759876880268687368789792682195280803184 +0.6124546368149888732224396347205514888588534382757197943350914313
++0.01793996302825844948175557573252934185711456214972052895861572493 -0.2036417356829187550510823664309236059942206079488018356074124469
+-0.3411596862218241172328579047617234818967459872060847679144866809 -0.4438641124602506074890760872561035010575387638641217902217169658
+-0.7379746599220903325806827424480469595800618414934950958452657346 -0.5447672261425203273417086435093105975335032310084217017530290470
++0.6843546378904107483368305041075808036585650068151329599810630045 +0.4877743695516254187304790685268488336758168947119202326402657771
++0.4265099420399003863248167494626862205659560797404855195341684806 +0.3326494238536684877812162306671513312155429822231139301441247885
+-0.9874151891964456486571993218370826427302121071375833081581536189 +0.5288035512647287264400603641207174184836483925130588246958035505
++0.4601637140807105378191037234478805179877043129140064777542238544 -0.05640118305249958065859491687650402005035008328934427052170270651
+-0.4841039802362244364267157134690841461075259779700777041439742307 -0.9339602027658081848487965258726967589939079607563390689984129939
++0.9965877589863013394561112420396792373833365736836351278348301833 -0.3212759575531287456939226418539215769220226916859681989419700560
++0.1915677305233047765741909788297653137314715093312058543130169860 -0.1418273761530124142414318806991383724249955778125131615411614959
+-0.9100049476348622207723944867294612891098821253248738836563459568 -0.4264505073732180514731028302116498991019475563421457885360967122
++0.8085565025927605798160394591787637574375967583263627553971120289 -0.3923419951379572363099277373060742200052172625687618481037698142
+-0.8851479413535487385573817957243936843534909265401263726020814395 +0.8711561101780366371965222118006359089295680450882925107561352892
++0.6064591258881136876029163103297147737049475826316704311935105558 -0.4467304300012012793076027789623627915431040635298455194234986428
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.2307052332975307401648420105809548829532849045676342380730437307
+-0.7605582778547942408060351317015194879473019118917060721292547632 +0.6986593716253086507864036814802859528738405415349193484448192348
++0.9359455243018989598720894094889086512450300947660621306436953491 -0.9881297466207630693750918682605017613031699244501296308233100941
++0.6403329703003144866532882811013167888478814399097147096856286200 -0.6760661791650244249188462300591840173691864903003885411720888657
+-0.7566145378422368715122716757726615136162685098609876740055635889 +0.4739376045463275401017721226048506342846991506758626675206797346
++0.4983934648670891328811187892957709407528386913849427405222396790 -0.07231115199509153957529197477078330317517719228116128797380329585
+-0.4971948424110283155918942363898656650230845195141350175248779212 -0.2135268112097198247010681889001898755255288900766137207891430752
+-0.3682837387895926737476498418989480477365801929350913148252356807 -0.003917199824269020439593469952174519795117950159938847928888256440
++0.6148970507477253459184467315745337121338375212139515007860628315 -0.4074397155278875973813395109079469465734104483931918973323186003
+-0.9083524682273578446532722997799475788834527253595073048265657245 +0.6066576651382865740459746508693765522490832331025440239481867214
+-0.3916716877161613504785809028033398517645549846406356231576213868 +0.5054494871102213639926772825334560876816388786177817611761657915
+-0.5193518691808852117378350732261309854332184624171433727414006814 +0.8226583267458482637565255432456222691986173539474741807557700154
+-0.9750431258817692289559363598684739941265076062018304867776204819 +0.9730166336949259260659399295334240422964809729308435599151328247
++0.05005097085661604605086728229374112382053058454731767435671635371 -0.3641854575026222563078669476933564861036228536147606660764202030
++0.4399150750505159978489133507713340072340352057744402647976718275 -0.4001542376557859551557248563046997931549614286245539273687375468
++0.1872909367861505164718492831692222169018789408412172493435499423 -0.5991001696282898040123634868273777281536442446666818065487436690
++0.9419321039051109549245680082622391092246632631231828777233002149 -0.8583780681190373783452031494167712583130326378561487627832196622
+-0.4287041936652777153072881590344721321081952456510997660597381855 -0.3045463752630304889449065225990597597721299636237444059518468086
+-0.2333391111205556198207256592076331117879880842914267473885863455 +0.7886150417047268238377576739443317830511703278264640239600600345
++0.7889477067277564731712862630611699647549102063099584994888747696 -0.5588043912338361844241544228067077162062321498757294327644573793
+-0.2563747285446000361218237435955077669028092056157149416120292486 +0.9071330745977313051988105614460259168291466673224895548345358330
++0.8211574497098423675796354902233745259806437217163965161734702361 -0.5243116831901749378885595705756835723840503890753765390640241880
+-0.2430326281692574737943057410600918611450147916626606070615468027 +0.6581907342494117061956856142004712902056506998470355167826692893
+-0.5566744269539672218404388199827460990960984415899809143036909069 +0.1974669756782317180727160357254418526609096592424426109684117699
++0.4524110448637644360868388875231267640338311624103409145041788539 -0.01972112572276554306178203846081429764689884696412132525401824731
+-0.4077100331640054846709900852315956380002910175183742932154068317 -0.3943372514930171657629732037269730921596189301320479370982030610
++0.9925432694290908433525570320250227385826836114793383624485189244 -0.8596972563284409333221353720093891317237347467906295445875608281
+-0.6845441772530325736299180977635806745002567201737916085152286412 +0.2054557247504006267846823161008744108436686866387260670209192195
+-0.5689275448635581694575383584343021970227104177442089801706330228 +0.9164793193765776053806704726303778876533969118110393675531419928
++0.3985567814775143901221253743791327148945266133080683203695999962 -0.6145730810103541808333969921377717371467821795648928293281783767
++0.06961382826101090949578301124383292455559947536661707583968975184 +0.007095154334222720138793901658750269696036135112599827909026723408
++0.04307050119059237005387541827491059927895209375649378090223139587 +0.8623200152218083367220882180263569709602229105502792928185580311
++0.5849881776459916509815348468661649535409940486756497653761724118 +0.2328862533541289876695060577850480885078345462436653283599123436
++0.02943622593745917222898833754618856585348471594569686881397428726 -0.8594243434084773575696832444002804697287780740482575549078989199
++0.3572417013316431962026919347150511042636763596269956578845059238 +0.4665227761410612503864559792071327777686034364978804464477715773
++0.8246603472400295391578505724317567517180656867730457579866275623 -0.9811624944532105651955157652071808929067746331174047524578239984
++0.08267470722577286001217633724236129336011575576077446531397711074 -0.5372721741325555621080856058022867645684999577425925732434683467
++0.5296493544860877224747590127030477951987987258874100707895850711 +0.9142689324243093913109361832104779693761718654772557241029242509
++0.1781616718394205175709349645973564475788988241558791298588188050 -0.8519800093917999049786710873262630254438596819890789333402870548
+-0.8633908949968827943561744577901901026376268752722144571223670853 -0.8663463923987564465482638692819190364387064757346171016284231869
+-0.3459820993240706010475901311688197838023719669999227712290509004 +0.2709558465428488894177444835034893857451398992362135202765939096
+-0.8814262497135981437569523940906532685397798861799997656375266034 +0.8083674519889074596117164158478163589581003465847262190755456111
+-0.9722552720272006984678084914751283988556792015475269427349942943 +0.08192318101143036468909245818104351795349752285255508370548377145
++0.6486167889394565452584685154506739738504706411589692034776454683 +0.4432662295285746068645760939682334332432727709335441542485014646
++0.7237216114456588829885327945423834052953613010855527824331391861 +0.7098458531193496043308156335940587627787235570183896188894276827
++0.9153832161606877637775414865990581395464326012246760580785761313 +0.9032298901921960006119686705979881366192290964459568515483982700
+-0.5010512652356920074204032205934276172215285762480987760943959851 +0.4794254791268536633480562976950887435436025549286522438789030803
+-0.003517119711452846559277971844364606295296520854275366315952866112 -0.7746484154169456512809937246271660173202685744110036148882342333
+-0.7432644962454565902867854377146609433353697756825593784757725371 -0.2763771350523139054750111351929364757670962641805178507420343842
+-0.6678889143320625765336213759043802181180754155696893060399849702 -0.6737640502546376711965235263761153629368423334845050663282786384
+-0.6231432486376980435414857670687342821530306865222818413703487444 +0.9860843557274707818224203215557433615103323795855487753603071846
+-0.7612655580159597760389639032422118132475827999877015743017274080 -0.09908250822208310979388125313393386625642518646689831540002743491
++0.1046561870893663260798556882535941223232955552582338303672866205 +0.4083364361722581165801901479594515422760935325739573558840448982
+-0.4422178249719287625023613714462236578393297082084105686699745527 -0.1987464128103913290537565707198845322065664181338633370605495606
+-0.3006761386836519584160039426021947715604263308295216335254395417 -0.5407738721582197458183352565621496660631978320791939263962860219
+-0.3931472033430920383369653755030364057981520323323553764459192375 +0.3927066115442214638047153163113331662262162359392646773307752893
++0.8009564737468829284569870438621332728504682800502357253909429840 -0.3547265721044417796948020637228927981006372674781249634536133803
+-0.1173363847349279118426129136160276265546406000211794923295485560 +0.7443511718754498369053636558248957547288930096116725829118390452
++0.4299591565232924801870368761556079288133632606094048768501521181 -0.6106514856175809946267252713465468241183844646996285763158471635
++0.3519508427149724056038340065726224107858818936655812955385008590 +0.9765239261833813284111571517754977297583489388043457576976222170
++0.4719165407085054156880418423268675488422117760448059022673468457 +0.7738274296309371782471493836581620439388102593378042753716890516
+-0.1600709565700552484491336034747507816107856100797576115468140784 +0.6303435590127475728343988381089812280592884794559438601115730286
+-0.7196566232553047172113131790990428945643928116318893875786802199 -0.4840633718139391300830506517721753832091260846484462137715340380
++0.9506852903491360468879758484099667312771993016096956267658366287 +0.8525922176927925458770820230111251769664015980843161969462044384
+-0.3776736725704435658453332291251578463493585478972191163904289213 -0.08163044187898704046903120648457597371959955348165323805504010125
++0.6001953620324393368833490197603304801854572549372059847172328017 +0.4211480223456360833806669261665081502935228321732339446555554080
++0.6978878736648347125949172253483236996713754832649550025174381314 +0.1636579949610354489441057651722542939624135888641020127310796368
++0.8508443401291057488517795791511283359984797073308503806275388226 +0.1158996829838767780820446554770404024129821417414276676244486116
+-0.4669474695063991815703085816201270850746349019459750890255838246 +0.6122743525100609786427539952903164332986527922843188026822436303
+-0.4916857659539131984511014678316277462480514807356006060275370059 +0.8287184948673512642625509766623864745682445181955817748687592982
++0.6805454442564243054841615570704809357725921633306984108877804159 -0.9776838203117432640468561992811674532088503638852841073034452293
+-0.7429928693445994197394008924008488085983664860223161935727994358 +0.4475824486005748840610281907314246250638614806065401547533877687
+-0.6969676211949719236627008807329635886036631346596064918901094455 -0.2012889019039510414651830187674193045950194169108930931856542009
++0.7197019444966162425693701580554867509036572823057158142921206547 -0.01171834366241198933438406373716581804955151297150743304159782864
++0.7821091276993633157184444189269089852199610591029476119050859896 +0.4922455338395964925166766918239575749296275172064692575993556194
++0.8533226121539329221550195141712150337184702154268885269745819910 -0.05364567611959903567502330013213963546585099551575719307976293259
+-0.5271231904299831306010230073357821701271416210281300595416035220 +0.2859039723670674295294361938847146749682776282795557426834523284
+-0.04518836599707041257371263007133991513702551585551047967233360089 +0.8750329779299614706148239867721002941643109143868880399745229725
+-0.3994910205015023995978692651199523393500004114939614636352980640 -0.7722586575162211931712103266374485003179050625215461656404618225
++0.1151112248581587985459044273509734339372139569519498681662926204 +0.1401034745337237615620302020951018938757063985922213398050129090
++0.4120054991803597141675815179438163442823969621208991056428168406 +0.8390047845124423734044204882406751006849491027338704535253123886
++0.4343579826046095597725968699957767082823418268721181549420071456 -0.3131244711658136124319194937374637201951191483185787516824163028
++0.2535126428268633086086116718856542176680789611156801564801311848 +0.5906431155148677342149308852685885638274033210013285902888289507
++0.07575910820021246358816323232702289803823041246205070258897871070 -0.9162048078433982131383742722173468399551265719825246809663028450
+-0.009921455995466628736212379839332998874975285848956671613709936322 +0.4438198023728849844308452858166958526884620742389769268237679581
+-0.5891566693005274615768435832037723406013603962165946345013825592 +0.6601586762490308568348505588115261580494881196839526850118211037
++0.4725424296459514103640632185799575468737722475096114637473172301 -0.9618853586098018371722211571527418635003319023500739295420333417
+-0.3642689669126664223527375212471788979005234643229363317834063467 -0.1292609718107532753146691377641856162241453138036350409973849233
++0.9106160875739411428476569185959640646231793213239998804082355729 +0.2813027204528153923329019336432992610341145263276842828170084429
+-0.1554296096295892351142787706783742826880784898341993011418432069 +0.02901692607382806767360968742809799650944015215104495220771449394
+-0.8069065915498787556695276318086362565827819941733622970182376756 +0.3041938498059602562920829742497990465452656988389381717366180348
++0.3774149419137016419806042817145212836004227419492405559087274340 -0.8416332863784354708625199574482551667809708135793159735459802674
++0.2862571560348818269179471614749431512680830893414487690534246820 -0.3149500081266670190500312574505458081725795156829625594727778990
++0.9392006333865916821227548404291848184201007925131229813910957774 -0.003275852688626340591683182725592289209533360992124403573787800845
++0.5114205299580920868823613420213360686329180904621350249508347984 -0.8378625925962227631792682994265765481907889744535199746129185636
+-0.6408078680635244612899765081025913686282954450887306823350772997 -0.4342779984921702749034944690110939090155169682108203705245647346
++0.6103476918632637106424717122234807592708375161253117953076031400 -0.9068313407149762968086567340954913610684595084886817903492351126
+-0.1695324055840820458497589349479760035964663521113253737383164439 -0.5878274041052291477943021502436561002773261803924218942833270832
+-0.8353594742240205937097730115138661305557325449129426505768609534 +0.7976934088261920073242997664284179394988305733935216816478972594
++0.1821483418007667766250895141417107286953921543595289977783017637 +0.3072993380346806450796644618533558809298372285335849801472800055
+-0.4074526958925963909486488891837393063126910851657623153854908031 -0.3158899277774763040436693675498339368716705701915489772738691617
++0.5194123128321160939700776973599963366760031201335463428826305590 +0.4666714471594296105907779829907728877151358508508298995416084212
+-0.1339026726689501933617889040862807661257038358606191032725698017 -0.8392523157365762982920248338178402207864299927730430032011993670
++0.1617840119849052908674425797539541379830915417411164257796009655 +0.3724656798429113456573796032664972786754306954066217858782865155
+-0.5833399591688895541493678958036554117556929951798174740043291689 +0.7833206787384097305592819931133370072071003949491040665893856821
++0.2558611196916433369649336532000849479904305619298222327625863899 -0.7544051316606455187663010577509845083171139981413787259246099009
++0.9637184128969163713272727389388526394331293708405231601274766637 +0.3363836481324219723370186210692794125850649784394352985597901553
++0.02398516466411951663039478357357263297576765858214578984119980389 -0.6491840008149435654312968884792746101712975654905192131468895032
++0.7220807768185265925885711430037484304092954076856054861183001563 -0.5376568533061764969177810125554299187960447693632897302426453216
+-0.8314034062393001851412680462190559603040746972786212429324375224 +0.3436505628709939568617544614844578999694824109632610235366179258
+-0.2313683087056718682580625867623460795004227069874977160354372877 -0.9878395889167084950186530859519776075387863865636110539086573895
++0.5241531162028989758906123049906275766571616823241720374203214447 +0.2314306995279594008644153922190752850317480341450266921892543850
++0.09003216360057281587724105549690566269005814841108581287665281058 +0.8865073285770955099860020924501486556125845788147491503154690747
+-0.1599268816032428776743959117270259866309677355351818460136443291 +0.9964078756487818306982678918396703581497863065837502553775568638
++0.7126643265921692501928118835762400720628273345745039396768073268 -0.1327340387426539333160769890953460166634179046951612739896832303
++0.1443381463559750344148688262608847179704805274810841956785523095 +0.1516135436026911837076485354625099431713490636151252380398422077
+-0.9541149480810226451568227541620900387924893378859274527595762471 -0.6794254217136540815383429489211152521219412790709340904663043984
++0.3516772517804962317135771244694045300550581304302552629989927399 -0.8608338971722177289009152884317389810381974752382902396992736197
++0.8312645047002901343481040986077492354211106507977246573848547872 -0.8579601284570283198168880475663448240213020365272821075300399251
++0.8922074343575836687927424867109565448477559678636672119414443701 +0.8642621396528582742546522275938696917350964149850345375415910969
+-0.03914580715076807517564668371313115131680481962361916796431130169 +0.9793589839033901948731783645080578582463688236077166539472268901
++0.9746573852711840936336177201962708050687509298510135226623575906 +0.9683660064401229939001661515228452132613132290247913394628566994
+-0.7287905575728605025843722055111257091486772902084438557782657679 +0.9871325644646234051116914095144895949244082254772823408822757459
++0.02849594996466824865218850207780069267985584074611847663329993142 +0.7429408357918861651391940854314483777231519683391271617922207998
++0.6459433245400880395491408374407025292588521318149535734854910274 -0.6679971490414301274552666497306612376613754110623070491783068932
++0.8136628661132407079541934173897141567434892632439804419184181281 -0.2222054162805692664553590963524746378422134405027779312108432929
+-0.5672690776078439250283757912452916624289131865014778354746409640 +0.2825286514059141882920658191340775973641769752737899181429072621
+-0.9476387464140397458861421362921055215974651715794066883914951208 -0.8641655578339237157426364564226402388621743753891534760458972311
+-0.2605437240709855372272831411319884164143200014969561164796810212 -0.9996084107935015679473594078714884074981488464073778279217385790
+-0.3311597085631775241605389615954882776971235843100995205029515984 +0.6918702869983347579958468231672430091995168889418395643526262834
+-0.8695822150875121724691553338257829869250127182425918912387649806 -0.9376354253015494471896434810153189325665084438405669131018104586
++0.8891098289754707421060220890985710245132795198449297271458423909 +0.4924687906770157503064991069141120219191665852506741133594520199
++0.2895552325554255930167653346015931047558748269272406529926466973 -0.7528019931350588413939154566388023308331979635236679471693177896
++0.2650936900762128600362413578030729270793479332746334793752266553 +0.6977106568122303299097295004137729206078400517066513083779044291
++0.7046936151828971593710415948632896548808680079056988913118083777 -0.9241816059668043365862855436852035390363373632288175077727370967
+-0.2115570299364757676008017443811649086191736127455534555376144021 +0.5191919026143328960366321977745092648338330203592978236081348129
++0.1470216587412559156294994682432100810761459629584248289010138317 +0.6714084342259733896142403819832445282754246581821439681178412078
+-0.4329010361486256961244622956913108506550874170254014125575533479 -0.3305661727568643970967579496852928159892749092036565327744186388
+-0.1766818323431859044625743795499747752198631648846896440459670393 -0.9004094513551951169051621458619598995816695783221496309703950609
++0.3427075333057822059987675632859967887158938796610229803331114623 -0.9884847412191905817622272610251608563747945077452623649671510335
+-0.1833768865732711001295741826816961691797355582139228551235621230 +0.8297590431974834390160620549937730525352694881027721814298674934
++0.5665067551831146950685364521560101025985707475803564862178192914 -0.2609452664773769489135290033372776145152097963873696107291657849
++0.5846720091653589171386464934439494744713232525388330403763032709 -0.3951818418178703493034052559225176300190976118265294520872713497
++0.3128821017947787434710701629862425068710081298914976621641025408 -0.4205393286734249298736520308575155093951794910953125656434538838
++0.1943703959062877206669871517590249058034169064564194870074554031 +0.05443728213987669453050764608083824248316758211754927414048785268
++0.8893705554674630659403991877841826994191514257022249874261157104 -0.6146453888431441977579264187991304908673042553348506918953110581
+-0.8883357910902242353575856676539666074648753053656660309143767467 -0.7563078968082354624200473875899165193618716500707274646443978808
+-0.4607165734661637817512681868591410520464620690313830851265222420 +0.09396735259632912882662399404023686834860630896601823063552973929
++0.2571290378683215613044136510821588749887474163677002652639520119 -0.5785656457034163940108434599486778925179861427139603882087606858
++0.05683348973511969001808746192505133291481235528637618587938493271 +0.03957899544097907583965796242273333021337860785083816690457151443
++0.8458238445504835463314748515393830432307810942061667936052115581 -0.8523897650942072388808518940380192479382746023303926709202228227
++0.2568190130746644331048317748223591322462097932104379543095780599 -0.07832784865185524359112370175488914434099640145831082963347294260
++0.9282397683744983930469496205745698232573096227549226254155622007 +0.6033167859658457194486961001342941735744068154496164938059859501
++0.6733680895626635922558736333908780380926273791887898430485173634 -0.3586026685282925549652109446290082081072664311191650680624687117
++0.6834258455476852992466772196651133096274086383123765308288566681 -0.1022768096029592458455381062000780279188050363478560222801108958
+-0.3197260966794518948885909003357003020869183279810950125249989182 +0.8294682959773017741218920869469493367635666889096531886515534716
+-0.3602154836971247653552601690662060499632143516459194629015046587 +0.2439910403168467755961516475103100677957670811159700079381010653
++0.5644944652643029946030943876077187355907298250270171876933333996 -0.6217436439651384803300734137423667977560295277969228092600510878
++0.3002450060649265466224439088480847866613297705716750391656367250 -0.4555149377465992268639969728371691262215382223593256475914395574
++0.9109171936013987677935840681404253773950900911474823029568083952 -0.3638121656089442802844698751087347999906808525959787225726673495
++0.9809865904559495207084689029816148884009367903151903920423149056 +0.08022634781470307543831149021588896288336888891859159188614295157
++0.6673430101175698152854688993768041548769019864465421762641808302 -0.3442492480706474446280159530436383963980497643713948380702723602
++0.1912403836532585581545915780169638266665110774534903895312903483 +0.7731435513750314635297578456626328452295898224889367523690353904
+-0.8390872225468263142545242699093560592768485203012323759548269441 -0.8066018250843343819679233406902709051909675387567362077697223646
+-0.1694425027392812196149909158729299355102867577367629176586906841 +0.6498496955876471932216884562708997543204996823603089491219376678
+-0.1109481979293641305323565532634133494943626968908239858539934786 +0.1642905711773671334665778070841332282088323895041996317816766814
+-0.7576390226829376962602306885924643215709630457357178698800775945 -0.4518494760071388063906173756614064107276944654373102185018585977
+-0.2384036559822549222513803512289385096334288445624862912807231185 -0.9844987906209126811310473648289719482037695495421754529715646006
++0.3322077770142086566449475410492734728431728270878221527000512398 -0.6862637852309942369330177604164877864573475794822016327133076690
++0.3008294101164568639831269327829387098511379992571638835271467486 -0.4753695156132390969461568813093716281405845709725218384460712431
+-0.8500127542413940364553721045188171752513697377512921485742321549 +0.6556099024117094888056949870591826089394312227646540750168521309
++0.8368368938909749223146178710811008588487209933709262501849117012 -0.6080521800564137609237437916037781526823806391293867985443226801
+-0.6301301812957352916599361333234055414853612961930455283065817178 -0.07321134672111011808388258675460374818656780673570195420048014019
++0.9291299159382365190501422959288431216663095157691743654943652200 +0.8884544237779923905868256068860494057150693464894071066550039493
+-0.2057454411726747632614076986736370443370299660132771686206360685 -0.8354897195734111780068198561837673077169847832110436146953999212
+-0.1506655683923674574544013920490541109453108644791859114657837843 +0.1896995674958023935839174980322220379530103420320344001246792964
++0.8300887071220306139363536768734752416692057466278345728554448043 +0.7156441808215881403448442063593792131902759984326841936686872424
++0.8244806963149490337769127166910316223379101498545059699144474846 -0.8421913219903778026902017651605922300271071155283113389911103057
+-0.3267801787861358921558326193709571898654303757814961069177939802 +0.5143856875534824565378222075822768838973165471074914221146249537
++0.3173522145518535642355402682590855477810669842087119833799882044 -0.9085106045944224577834248408304889618324419212648761341182940048
+-0.9157683658115979207506514703487531113998263500938211160185082296 +0.1490964832693746980567218590257837834356289516139096586207694171
+-0.5134442544464950511308392504791416236936576938651094919168340614 -0.6533071204065437867348628824043457513023406779543663479731285027
+-0.7129018571172519683293420596961998697718416105831222546361506794 +0.2589807129282846863190912997106752238855054803532441648210855276
++0.9065123083843027156086152486704570882336886865580199421650643667 -0.5271138651419218022479534356690600389529298477310942773491339837
+-0.2793634385919329761753480106077153213406385720130702294691355484 -0.1196937413617940965411274610059650995185123109435955751314866664
++0.9164978685669781253679917402797926874507921723240255331025472326 -0.5906276157747267452890097085607812150766085943725793971349352161
+-0.7596059702886165943031875281927001506068162489624554198112485991 +0.9512474782975162982677561838668759755171776738883301392493992342
++0.7396561092486294627586234874177829200642603190414086001487983221 -0.2585173836652346672012366614981640522011558252359692008464201827
++0.2718148178589837914007749073085756104697032416499157400657364344 +0.7524677433111812677624154358601882415953170885621945514823934717
++0.4662517483044007390427270839972516857434523020114609710559500148 +0.007453434967834908162912548875213581989444052811981129593774874339
++0.08808257115588047484358934167308625153926780195956135649522315482 +0.7024443905669303463325044999633524679292030510648808694652482144
++0.07657390220669434590596313316601208477726655511807687988961336808 +0.6106130060934301223265972559359941935828860808582178521600687689
++0.4588569896068761120165974962862286433176923282523892852244105839 +0.1231870173638568907727920838441539340012116028226779971441342773
+-0.6615298742890711325192770516946564063654133133292967525875541474 -0.1170516315450676456572605810356433736658383171876884602766708347
++0.07011733953074958640104399325017215014827304325156759173135366906 +0.2379797449298319474236531372730651577119969114593543972996184914
+-0.9612259440538002535765483137294916063381851202661518339189071839 +0.04370148341573901145774807336854657018472602856035430580322484601
++0.9171138429339400553744807769217606095680344268845843714152250596 -0.01566823635122952039094015583015458940797919213007079339305198311
+-0.9187643669939806209463756973588109095305506934347503023729389190 +0.4492410143872176596850637170953881938575382076365915189809344711
+-0.4415653525364425875595561926619571676937519758818885848285036367 -0.6585592493830587345638673165535959781595035622455918843124435087
+-0.2086520325624420487101916822135314045088175303036646863500495381 -0.5444085272080392258191197590500321857185674913140620444083228958
+-0.1511824375843169824185114172319147719223588913836399964007230083 +0.2626598519861605182484353725321079345286314106027470449537646385
+-0.7035924603583511535986984592864385797537640709172487432674768657 +0.1376877378972272155729752353482066269049185939455101441339815693
+-0.6564151567101526404248033266354854181628562195765596859557723591 -0.4006520844525121330244486700355445948137705338803507925144414887
++0.6965977875831549207460696210505433710177694513815592587963931164 +0.08187311850883778757260063595415584588170542069096467766500950588
++0.5816085290684877844083071838790011353935994102902484256340030157 +0.9752391076391505122735918291390393444711089786801290853210824038
+-0.5272537155512824066074255359659027189627420792613958690510029190 -0.3212233362207097908208338883029696979756133137518721105877588565
+-0.8587217878456442924783287669774302171560923546889427532593498197 +0.5092639397663682383837026485562440892473560288009820563671444933
++0.8026154977853840476009847583617913539728860956242379381174833460 -0.9571379854001650517501024933554614772600734829289247917367756493
++0.8316489546057848621322523310402149298559936201982941913906852864 +0.9579502281429485110215155578987438072018283869571111430893435551
+-0.6097628083165813974260954335449904988521230536577883358240508937 +0.3116411197945126357426362801452345353189409007169370813457229298
+-0.7453827739395389922953742392780783948094849228955462762695809318 +0.2484690374248004683657335128660389207658914051458060123112784396
+-0.1809554132180854707773280908184743372302489521523696413745651906 -0.2403660132684514567917017973919081346210503357988971554421714242
+-0.8150644675782343977339925655387466104832252738719676821788883516 -0.02986334821072979924224111997913925489081104546097247260975607194
++0.8917866574285656025686075793775106139378346795002297501283298878 +0.5977941490131509497666546060166199756407694477860275134227129505
++0.1101358891689796743272094664641471479081663952426245980291616029 +0.5145115831024917350771487623634444529741726046272463842307467712
+-0.05419673336890120775922638146599077291212376190352050517562870720 -0.7541553021228906536629213394846582989904144710061232966318795443
++0.8788147199714254107037333013127960617440138295766969973173354907 +0.7215762228889012669141339870935883519063070343940349153354454459
+-0.9270379263943661268097274055148115732381615337919171906603260360 -0.3757236072892213223759673623545904150820876477587753267821153705
++0.4642977843367946473083173399076729199459994296180290689057358231 +0.8864064018561367367355324494712486320859803052580392598955795870
++0.1101424766711395834493541735390025259293259452693930682212953338 +0.4057019665186648592183688760924469834594142722897462461494035496
++0.9804018990020609521055380413227891839510323211141337706692935583 -0.3284277009657261944551439092589604980107747815322980776576085825
++0.8144388485796060257725468016904833551056739055694392606072812336 -0.1777090344048752749868466524587491971848025402228041103900027514
+-0.8395517493960846429066650820934625099120153763823264316622178314 +0.7025976419353913069965590229613118351129290432212715559282810098
+-0.5356363024105526066730000892740728141483682520537699099980586020 +0.3990016476245110843441767494987687694349242069283992238432221596
++0.3785984554723058056848684987205281373405286509670642510688353225 +0.3522709802937692057034311857540090052484305021670363804665177075
++0.8125408356507693035783621684477489598336579370455636449932920399 +0.6096844813075936531458411576391258658725446389952314976494357776
+-0.7304988390989189945560089553959860009999748685520304348991029980 -0.4549769991327555564253844700669738447513018849545614196904514137
++0.7456261383135196385610840292806346156606897621955571769519287646 +0.9699905592272083477620210980908355812396449180212971060144950085
++0.7757376987729343002700728678244609761294630501410110238207420656 +0.7498232594481433855584036311186800022691030339499672238685843473
++0.4078040359990933213948732923927214812372340416337539086249054226 -0.08124130795517090131865875331800862391840778776587451797446618149
++0.1767712938446947695198229699328249449877999447752262239584762909 -0.09608706390583456918004750266897051008736997259681691100079702620
++0.07365715096199305303280147905505827004287730234420360693427261478 -0.5451927647116297262326583980470264138959459348620324728883459141
+-0.3108355387530528344022186566449990520542204513871372429842394977 +0.8138649538996382349722837036147514066724946600810522362707622419
+-0.9157841385420411790181903606309676436954041107787988394005532203 -0.9018403921117378936802781754521301934139934044453768436394590943
++0.5517970855559362574840981197851271127548171428450299159534222246 +0.3323218555553240311260400216534485073169253622482884577923238363
++0.8076059738124808816284579607205742577625775175934575040140126923 -0.7200684774603297918875338542123878593140667304342330332159602576
+-0.3623547609761457713662054674281991237079618589827581000231798627 -0.02147961864887678528738957408023612168444237053929164356826981822
++0.8183208109839758987990961359356649031888827382055407382873878803 +0.5254410558460859605087208173100905614171277200826824289213165419
+-0.8535325136050236145755622731382685357658674118927526952194103789 -0.5249878506388901472711579370102540928769837177979577663672379389
++0.7385965807078199198295561757281636178085738161163241745076529168 +0.5805934135960616521845017309786436466437346159859903276506130233
++0.4178732695594172450325633659542989992529347731253116371174433175 +0.4108150684088852998686733919545657392411926766770777777434045282
+-0.5340515573220288676539037563933896861133701709641430080525373334 -0.3441749701647517477889510233603120937668261799325819146170898937
+-0.4642629009871243127720569534731497065151730863379424324926815934 +0.4606212594814430218118465286853643990316522819951705528199959195
+-0.8697898736666791719966463521302103516597198677810465705462889386 -0.6677323105521650119681003048917889833758906781477621751672096581
++0.9260211067928626234987335196506123804866588031248091568668186807 -0.7218154524979247604553644963494122676763226491036820436746768133
+-0.008817333363577657304077859427800946074653041725554105998740790418 -0.08677847959311221967673968929014363704659954185573439280425805990
++0.5582339538069273279851977709472563742471538090477435724053193958 -0.1162626639637333266228071663736609088361388919438879190762081927
+-0.7255700875545188795082017268145707633365451965771130961377344798 +0.03274719788121083841144977470346545977395349469623216732733634841
+-0.9882699898882978270887601698779901692432742326870804476209571454 -0.6698237693339085919901027803019699057313615574070964514240769928
+-0.9276804865150421462892365252888320798428705497677187785005965023 -0.3983027464023792902660409298411153556965778110241386434583873687
+-0.7832811923001301276864916736742146403933964466320677660322633051 +0.1458638411143874921434364272961719617992984163054373216031041553
++0.9875308623632782097656312821453924896496525870736205800843638587 +0.3615685859214923600758423868663452073069284731781755564707775459
++0.1783373466436970660022454632463179035762888722766888416391448363 -0.7426549681496496864935726783036103464805027722297231928075561102
++0.7336545898457146349237975784794059749253087905334857489144998895 -0.7684547660681665066519515554733654436448393642017706465245375186
++0.9127856868366581467510500732005220443872380003084957447131950721 +0.4458807741099861526177247771025494665820255592246066435566207648
+-0.3632881183963366167884860409201422151102177606787650299072097307 +0.3985566738857450435051359965750125351685476804564258720752876964
+-0.3268576018334922472384377473775779415605488146060240031080037115 -0.2174549546747868154169543892908084467015810892894924116151543348
++0.9427149588672463047630742061537997891278684495348468159028173334 -0.1343548927096384947198371844463249261084445176993169652813594255
++0.7916571579983658653317798731563225080239623370784297265192438825 +0.1852175416481633972409369103417702230894995364414738802035725357
+-0.6817701452011630996907953818868671270735516339211681814255907609 +0.005172797816632007280598823316568992300651834729652523723869275114
+-0.5168940707242169951406978648595076294647040487113324969763690473 +0.3903666610258509892634735735047308300250403568162514376305044435
++0.4155311954965517114024103086773167213755429855677272377839721067 -0.8338754075241486479086633477945877914531212580308062491411496161
++0.6506707691016388017357516362760131941221566979795718699904936102 +0.9847519439196839847214964401341029639624640911172288944197443621
+-0.7043718208306549962960929614939365734224121070283816720729220425 -0.6938477689490435789374980639756215337149150918466472657060994131
+-0.9030673117697692613858834879354138789682350761417043644810908266 -0.1913079077139120099096772633142294225126821843059502310007984547
++0.5465706740090774853953336301894435415008351646460109707839721596 -0.6463862057713601285734282272154419712784254507858418032612428110
+-0.6814239608934778019209189605706175697331566277120687413401512713 +0.3827413613342640231652503472879078021424394585972829272328681104
++0.9205925082347564380336697132499017123825554431098646503055203834 -0.7720727472864134929959291632086941618438820822136574072028080816
+-0.5020782788038677346392099888475830183897864323626792080264544951 -0.9990561012320254273797384718605153699422951092251275740070161952
++0.1045062318771655437961420896781653537832869869453123103733053855 -0.05673453008754950631927284903780550602200891995748822809908372908
+-0.1600201060994392446745228713066083331646179396065484107159119337 -0.7953526631375207473973935672161373786589466594986701111277564482
+-0.1176882561544923620215084381200312622694313533614808151971725197 -0.2504551465835887632060924159923293764112237727458078357294223108
+-0.1898251716095867210440135081381899859506047209026635006620997810 -0.4184080482860242370284660832395590539701823250090284783416406620
++0.7858779951083861580332996484728804881745801231417586365625881696 +0.4627023914663900838116145359154475820528077271388401807481594188
+-0.2279832493810412940114966076664112325854082672090777285019621618 -0.9778541501693169375385988125771891870771302850159179165932180271
++0.07761160430503009576118799101543653660926181662195182427626478291 -0.6176977705983222379679597772002642591215510705962786127767690952
+-0.2055488181060608320954691371766551168555828485198254292077222517 -0.7541605226957988014908091549921751556524059465395174795048280547
+-0.8570653123756356936765798157651852007633450856266713907351356642 -0.1253235895127937928416118627091859968820485598057931356340900519
++0.8510470630599207981929699284163199387691742475697788917650312737 -0.4187104369303610544925298251218699802587106413082815802235640076
+-0.1656012361332616709224523200638076386717414816760750375488963700 -0.6422645834248161180981306371913293914715780430590361996931403270
++0.4313169396402067420747675191335695107540210953445957632944683466 -0.7157336868929923060690058655020407030459354695577846075047088545
+-0.6136943581151102724274558633917286896829715873222934810854627144 +0.6744567026101178112623880708847480864912523409387769550153255080
++0.6107089044121956416324813364187592386184059323011742030772237424 +0.9684795236552485996383537120932404726037512006334180858124873702
++0.4569955077979069087363694857841772836360708458051620753700613184 -0.9364479987247586564267417005885206163400558318164035469189463548
+-0.2056316517130173688144925128431576975079195367781834481815163780 -0.4725527711350699472125218431374656002115592959658867245652296612
+-0.3127653344142269367017311068934194736573539345353684494263561034 -0.5623226095453870369737212532437716556558003329623573147896780539
++0.5675769204970204695935245199626881958749158960158155816882247751 +0.6833494333970390945851345559669690436120905354950143433137210547
+-0.7973797882525385651192136516616674358654229933256541899442767797 -0.4970065305795287266242254709139657981059135202258178150278338814
++0.5012904467166158311205187729565579292182659743325041112386977484 -0.8365192429273594561843462788788615100781580396259325379294717739
+-0.2570017860782360774767408845442523659054818260225494146244853645 -0.3252225194471257008753413701908571595368179590991062801693037256
++0.8152856345265963021214702712184311864712144712337072499723510820 -0.6706101550145821024931531452723694481078020194592345583367982326
+
++6.051209069149031916982882020103755953436331799345486958704712 -1.856049444995375095328353965686258416077875685873707436830644
+-3.620591525268711307741941007477336047121892839352311738190627 -6.437957738098963305381292172606476537087152288172767267477737
++6.139664267871117051298641061928290818488618162066659702438678 +19.888065200614420689843922648235703651074813154941121198200453
++10.561236897373525896580702171561033812465841993719527257174043 +6.535250592921773313108974692037438758092547823133253818155453
++34.300998040683476994770023285543861741693925133055359262911673 +5.676429421255063638772146734841765682075767321273698786812385
+-0.5641252026902008136160417701834970240307209383969729192495719 -25.8448470796940102099704982981476557758266922944736482259463674
++5.541092952685418440632451344967671886073682032827129082470625 -1.350721426391229924254759069647822575073887633985110818494120
+-3.207234694793258818079216454874297991505438336984481987623212 +14.903537324164236660153134639446098569007404413040083172699612
+-2.197816091450544503316701466965113669668398969435385539724657 -14.459347926867286483761332401161387577508644023269403089521856
++2.586399619861275682748647073251536937660341501940074656800834 -18.826633018404344886378680381581042625529056119634425294428766
++8.790617880591261904427027334948512450171483416804465811235521 -0.275811390163416892780876518742044738089522240630416220759955
++16.184926708613349409058322921709966849001261174448817369521610 +25.797081997105530874904868234027027334895948795477134330158400
+-0.306867909279765136011501302999670507357894867708418776273897 -8.952816789370793138162880087102173495570364406303705981536533
++4.407171260519866824685861597186360190768191112717546160696189 +5.471708551468248793159068974705548640675638912859088748519787
+-6.869719812226353503359781655157886208189156847358945621382365 -24.839395066730605554760623497017967404620778882902140233555345
+-20.904843684857333401258817364238350109203255689303786273432927 -10.005841681061563679115529932204947163337136666009930707454816
+-8.401556127567436777815922255425630788684701576721275045024425 +13.150941588274351114324402323322781249216618064186369669380663
++21.764467911429970413324659269843776769025005106744562094525643 +1.130458560381387160259883428319798928017524628704636452371855
++11.162677374983847769952631631702969595533261063087566874421134 +6.013371906729266940560365205405971852505275268850959080100527
++18.516221214372209617155794031038150037299866200675864271476902 -8.896435599179572241674838676038942137957270985575749946211338
+
diff --git a/tests/data/nfft_2d_20_20_50.txt b/tests/data/nfft_2d_20_20_50.txt
new file mode 100644
index 0000000..d50cf1e
--- /dev/null
+++ b/tests/data/nfft_2d_20_20_50.txt
@@ -0,0 +1,560 @@
+2
+
+20
+20
+
+50
+
++0.3173894901710712338304379034862579946422889909408459156044823877
+-0.3667543868355520941544575938257847368987701408778114882987979123
++0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4393343513885464893650781262914436001773705088850610475139449829
++0.01022750575332349257722449804129916311389119097299090643512381743
++0.09724896680371957101023456043902667815088539956343028172851831004
++0.4700775714463633978511207403685111986859425845978719788126486235
+-0.3358534858018228008930174455675250519517010131613592135710326757
+-0.1306486726789604518575642087548321430960584930096366967255476517
++0.09206201328582059293609619426014170729486960607917988224801612305
++0.01032012051955487309722047463966310173477870581273801739268254951
++0.2657081638057710356109850449698822151648783127222896297915845505
++0.4969744253080455744694825346756894506554753184704475582968873208
+-0.3896799171385425910280775698323345593268837461598793276080712743
++0.07714972696698667716678650997245420808817430827447314113682745907
+-0.02491369905948525014094604981517037150278591583244194805018146991
++0.3914347841983986584093169466825129403698312444687581041683071856
+-0.1076415739382721498345038358573933688341820551665322075789524509
++0.4098351732528003809102269734570294879975455702584035273166455779
+-0.07151629523327176189411207208538153350324597543738741809574504658
++0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2729284644063738002341295104132857495338305729920700013008922333
++0.3525707830542183854600907186155249059680080381975147205747395167
++0.09283440750861957635440201232165846433764147503752950359886015311
+-0.4593142592621138819114189833820168418626239763706778624898432299
++0.4096571910929782462238577122549675981718214537014044537215019452
++0.3029583073136138265829962071140439545004830470746425534136209257
++0.2302243745669765578486926860942252628118506165725692957820305864
+-0.4755711272429793224288583422054842471828900217314654775994176650
+-0.4303267914341560007766990049507480343981616992540993964015009290
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.1014391221904101019539350076278292483536923208503397585858894884
++0.09085671307189002853971282071576253250819369457305730572873101910
++0.3863781080296671218440614854031328269611997505425469222859116048
+-0.4384199598876636262124112488913918123145588604895783942604512689
++0.1108227756448777051455727606648018553357448076539765946862706064
+-0.1013589956735152573510406730689184973691015496657475510126506381
++0.4030260353866424922914759784022018079940415586122025700043945798
++0.06875288804967068748620631495815812310608096163779380055154102558
++0.1247492229282524246053090042093696732793505450810943264155391612
+-0.2206549379852138057578743061470069389191225157277024467333194435
++0.3463602314652901879187900602326408775815696731976526372069549870
+-0.4643197195119173309525456044702917254373982711189458917859034631
++0.1742103250722310383210116734163969262525397097134100265396948258
+-0.2381993349353649959266405506577935293738035850399354993188862868
+-0.2682861506665362644547235799610166013942935834114952458624782931
++0.1092122305172402888258153501556024641240468035240884586547566337
+-0.2484919486952133736276301730817211937763024849719733543532014573
++0.2642327778745240757646266294392459562801915916132871452102135091
+-0.05498166129765227392701816783972152082386315555833273617452947187
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.3378273812843961582542292063629884092072283649810198437878149280
+-0.1579152561477417245680939938059372817945921112643983640578929336
++0.4343677658460177957275595739809349999045308826689340487124946099
++0.1729154576995603929033538546168666485286603783333729055438208098
++0.3286853674471442517278328774594531175004129974221230240529921097
+-0.005488434703663033807202110079459379772452209210435747933850600026
++0.1520461277157108621931381428546029388707591308784659495630676370
++0.1313277929451562487082545713868668183502620330575886917609655136
++0.3461657595773729745308854436538835073994736978427168454373516985
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.4398392223920449400907046631777097726644650279540499745251682393
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.01189153022550738271020564024560338180911293813423246023331802902
++0.4747795551811432367868902234458387985659947076528818830641254566
++0.4927498363209993415423255652249335532347992639631937083611382401
++0.06403862356712929207278788512728706067982585049275341514041588589
++0.3358502781831149238206790069978103636181122693169617235357165508
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4189021546786846898713994499102361111761337212340449822195971588
+-0.4195634668605248660892165218851209239268844866648432819445044954
+-0.1952017580385246842215057574004983762128495778038110686132947133
++0.04500489974247188801035267400166477957461676904337052075668156194
++0.1798107471163638439578816295238259584468770453133038678573909804
+-0.08834061683832729395743261247688425414802993275433895678020615860
++0.3979314169915041735368106500472849935917247124619023375003704306
+-0.05012499979552010356459573472764647953878012390959562904972546234
++0.2706265164684795897847947709150290937598347126997964072971218439
++0.4279156393274057309236852245921689139491849071240754852340002326
+-0.1306768866297050878382755406991227297651262848493266576034685194
++0.2678253108467659283584482339990112224237477098870371360902212831
++0.2179141620260913858490951088397942235004247794251448876571280120
+-0.02625691461327344055922337707830927973974380680329712859379796682
+-0.2968732896149628517099100943143613476200461843570397483007658758
++0.4759047591062144391383689410077974773955630780125823813435367896
+-0.1609020739688566968967924800650866311305197251794118595176451781
++0.4978111926406553748261308123557606568607924290968953953283570459
+-0.3680457287373024960717322225368521536710342004223667403911426638
++0.3370526398003044917338285727477518400816448538246807560798450068
++0.2765936823474155586364921826153439911980007106133278951103707030
+-0.4348875280358313577685853547130144822185950526155031914995950890
++0.007087880987108839466396846546797728109882567594291260004693055154
++0.2697310091373757401623213224022556791972046185410645292287609540
++0.3448794239046061622109983794627803016406640741645905667575177771
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.3498351569751814493591869134788974919431524046935587950216858142
+-0.4302348750536436853767752212077304891361636801177679666901775557
+-0.06548388787215626885971146251934855059017806534963115617003157257
++0.1911031215178088094488640140802007253494213892471707486908629466
++0.04524751634490719501230109883674608756741975505321511051160810143
+
++0.7721031360269444536624854764846278079390436516442447307214583713 +0.1546520626861422333359961640658948790503364483967590843600863470
++0.7113282365127787106295924505560767722199840055537543517442585349 -0.6225775243116540313116281463349420309042753281761340281921133715
++0.7679535856628120283990827155162180966010981503917935490380557142 -0.4711163590978376126454985059281824288897326557537760286424713720
+-0.6127602430473631495393181955733023028663546816025211937039540524 +0.05019084624368743889926916934552108615492017653478974426758842368
+-0.5944056790460496081717996899055920305811666877696698395774078378 +0.6461406780733109189385884425756901416390710262453176809391037054
++0.9839367502424209997890558933686976016082869978582241397510153252 -0.3646945557234024586517840337629880176834748783187949036037901754
+-0.4548419343247805224460011391703079342763504118566706946966391853 -0.3370795553642254807046883165466968306962599317309657519831180634
+-0.8849845588398620212194475625021727518116463369860566764411889312 +0.07406951035684034748316975863636120744360012351054481175945110032
+-0.2496600323413886386258990085306122333313701779141184118995463959 -0.07060713770177340715744598544748134178291677100256386910808243090
++0.2013567579813494116381818105314838610969816486807952028421948124 +0.09360709618916370956867688682300922265055482761303476467874635515
+-0.8585801045716661137497618288810938649698205103567498949997938400 -0.4903988627030185676892387805777880755902392098553657129246566032
++0.7326702292582058588316598422918662773838658327971514003421703067 +0.8668617192033373216803865611020212154378552305142050619982759533
+-0.2697443704573465465233716116511309018200366900116819867580635278 -0.1745567235833106956445457069963316833929324818668372064961096495
+-0.6468087813680422377672655136982917947328505318460482424201962000 -0.6495725409582065831276338775327045761031092852475255376332913976
+-0.2812302577494115409480047067683469320314228801749259890701395474 +0.3132302317415336986457546693818300494005409790462961496623925972
+-0.02167413194230472805204979364706614220652157873015883116130884482 -0.08002014266656912107124326141465267585210492463107808149275462116
+-0.6808949558907041005466617267577471160247144934082880243741902340 +0.8439760661050647193221008089223906976491469018983477783830651032
+-0.9306530725185795934583927665790248017610038861531896668451002839 +0.2742491031513893827528343314344994279572977620848668278687664294
++0.3319152007540851906913026983763584438955853838764895977762668678 -0.02731317148254747797517682815221303356852477238112794448774630271
+-0.4414898031680223608932387792017485771255689761890070706015387399 +0.8474076414796548139557410486347838750741787558443005871442567576
++0.04675554236208552284539297942143061834219393972333359647545914081 -0.05779005908514727153148268653835324462294291367795091759798861981
+-0.8152568938325646993310760006867681539054279301843202148958871677 +0.6263509070486716842858384400904599373074897647536296406115669676
++0.3952163240756655529212705355453418848569049122249531536768131848 +0.9742953226314242461965632460638579799905807780876871234627553275
+-0.9395163144138835125672454933008856593503204403133472584898229717 -0.5412738282089598200095228242549815505925302427991012087392399282
+-0.08780353633292157461769946866167963633505729824902226238512671868 -0.2810841851319220937367807869615879057727320463374091858347990139
+-0.1743560068378512679152575299947443762504689480476570621749324843 -0.6332274216696186147542273193898355103863532218808631013492331016
++0.6018835924636782523215034400201993341434060856497418585329625279 +0.02172241435608649221235119486946747660849609106303200545112768013
++0.5094537464059880326374352490064905763350159638438638190213421193 +0.7184196840602424035733157087786269966875702807495568534158194777
+-0.6412882157453879879998117648467144628970706782597054160685555631 +0.3749586907344833235687996618371211329945742347114437060445496025
++0.9017103216368149546517732133490469846549850682301607701578308401 +0.5197997067097932079572481275469253932045397138803211253153129772
++0.9631270643127979384664069651403286361478505285019531813591892173 +0.1001908957778599515703760968602291233036923939615286132670111686
+-0.6210835173793688086670082589175993809833456274087668762475476635 +0.1982609831290281879535544386961448200899094658928947930993426901
+-0.8137281645240375388576750044830353268919925528507904843095256157 +0.2265305308299656396847919737333043590525494945051651354564266382
+-0.7041297500866612607234884784407130317305843364144413223065323821 +0.7906018990132069071786050772247164464130165003035494689544865899
+-0.1235721593345202217795554759876880268687368789792682195280803184 +0.6124546368149888732224396347205514888588534382757197943350914313
++0.01793996302825844948175557573252934185711456214972052895861572493 -0.2036417356829187550510823664309236059942206079488018356074124469
+-0.3411596862218241172328579047617234818967459872060847679144866809 -0.4438641124602506074890760872561035010575387638641217902217169658
+-0.7379746599220903325806827424480469595800618414934950958452657346 -0.5447672261425203273417086435093105975335032310084217017530290470
++0.6843546378904107483368305041075808036585650068151329599810630045 +0.4877743695516254187304790685268488336758168947119202326402657771
++0.4265099420399003863248167494626862205659560797404855195341684806 +0.3326494238536684877812162306671513312155429822231139301441247885
+-0.9874151891964456486571993218370826427302121071375833081581536189 +0.5288035512647287264400603641207174184836483925130588246958035505
++0.4601637140807105378191037234478805179877043129140064777542238544 -0.05640118305249958065859491687650402005035008328934427052170270651
+-0.4841039802362244364267157134690841461075259779700777041439742307 -0.9339602027658081848487965258726967589939079607563390689984129939
++0.9965877589863013394561112420396792373833365736836351278348301833 -0.3212759575531287456939226418539215769220226916859681989419700560
++0.1915677305233047765741909788297653137314715093312058543130169860 -0.1418273761530124142414318806991383724249955778125131615411614959
+-0.9100049476348622207723944867294612891098821253248738836563459568 -0.4264505073732180514731028302116498991019475563421457885360967122
++0.8085565025927605798160394591787637574375967583263627553971120289 -0.3923419951379572363099277373060742200052172625687618481037698142
+-0.8851479413535487385573817957243936843534909265401263726020814395 +0.8711561101780366371965222118006359089295680450882925107561352892
++0.6064591258881136876029163103297147737049475826316704311935105558 -0.4467304300012012793076027789623627915431040635298455194234986428
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.2307052332975307401648420105809548829532849045676342380730437307
+-0.7605582778547942408060351317015194879473019118917060721292547632 +0.6986593716253086507864036814802859528738405415349193484448192348
++0.9359455243018989598720894094889086512450300947660621306436953491 -0.9881297466207630693750918682605017613031699244501296308233100941
++0.6403329703003144866532882811013167888478814399097147096856286200 -0.6760661791650244249188462300591840173691864903003885411720888657
+-0.7566145378422368715122716757726615136162685098609876740055635889 +0.4739376045463275401017721226048506342846991506758626675206797346
++0.4983934648670891328811187892957709407528386913849427405222396790 -0.07231115199509153957529197477078330317517719228116128797380329585
+-0.4971948424110283155918942363898656650230845195141350175248779212 -0.2135268112097198247010681889001898755255288900766137207891430752
+-0.3682837387895926737476498418989480477365801929350913148252356807 -0.003917199824269020439593469952174519795117950159938847928888256440
++0.6148970507477253459184467315745337121338375212139515007860628315 -0.4074397155278875973813395109079469465734104483931918973323186003
+-0.9083524682273578446532722997799475788834527253595073048265657245 +0.6066576651382865740459746508693765522490832331025440239481867214
+-0.3916716877161613504785809028033398517645549846406356231576213868 +0.5054494871102213639926772825334560876816388786177817611761657915
+-0.5193518691808852117378350732261309854332184624171433727414006814 +0.8226583267458482637565255432456222691986173539474741807557700154
+-0.9750431258817692289559363598684739941265076062018304867776204819 +0.9730166336949259260659399295334240422964809729308435599151328247
++0.05005097085661604605086728229374112382053058454731767435671635371 -0.3641854575026222563078669476933564861036228536147606660764202030
++0.4399150750505159978489133507713340072340352057744402647976718275 -0.4001542376557859551557248563046997931549614286245539273687375468
++0.1872909367861505164718492831692222169018789408412172493435499423 -0.5991001696282898040123634868273777281536442446666818065487436690
++0.9419321039051109549245680082622391092246632631231828777233002149 -0.8583780681190373783452031494167712583130326378561487627832196622
+-0.4287041936652777153072881590344721321081952456510997660597381855 -0.3045463752630304889449065225990597597721299636237444059518468086
+-0.2333391111205556198207256592076331117879880842914267473885863455 +0.7886150417047268238377576739443317830511703278264640239600600345
++0.7889477067277564731712862630611699647549102063099584994888747696 -0.5588043912338361844241544228067077162062321498757294327644573793
+-0.2563747285446000361218237435955077669028092056157149416120292486 +0.9071330745977313051988105614460259168291466673224895548345358330
++0.8211574497098423675796354902233745259806437217163965161734702361 -0.5243116831901749378885595705756835723840503890753765390640241880
+-0.2430326281692574737943057410600918611450147916626606070615468027 +0.6581907342494117061956856142004712902056506998470355167826692893
+-0.5566744269539672218404388199827460990960984415899809143036909069 +0.1974669756782317180727160357254418526609096592424426109684117699
++0.4524110448637644360868388875231267640338311624103409145041788539 -0.01972112572276554306178203846081429764689884696412132525401824731
+-0.4077100331640054846709900852315956380002910175183742932154068317 -0.3943372514930171657629732037269730921596189301320479370982030610
++0.9925432694290908433525570320250227385826836114793383624485189244 -0.8596972563284409333221353720093891317237347467906295445875608281
+-0.6845441772530325736299180977635806745002567201737916085152286412 +0.2054557247504006267846823161008744108436686866387260670209192195
+-0.5689275448635581694575383584343021970227104177442089801706330228 +0.9164793193765776053806704726303778876533969118110393675531419928
++0.3985567814775143901221253743791327148945266133080683203695999962 -0.6145730810103541808333969921377717371467821795648928293281783767
++0.06961382826101090949578301124383292455559947536661707583968975184 +0.007095154334222720138793901658750269696036135112599827909026723408
++0.04307050119059237005387541827491059927895209375649378090223139587 +0.8623200152218083367220882180263569709602229105502792928185580311
++0.5849881776459916509815348468661649535409940486756497653761724118 +0.2328862533541289876695060577850480885078345462436653283599123436
++0.02943622593745917222898833754618856585348471594569686881397428726 -0.8594243434084773575696832444002804697287780740482575549078989199
++0.3572417013316431962026919347150511042636763596269956578845059238 +0.4665227761410612503864559792071327777686034364978804464477715773
++0.8246603472400295391578505724317567517180656867730457579866275623 -0.9811624944532105651955157652071808929067746331174047524578239984
++0.08267470722577286001217633724236129336011575576077446531397711074 -0.5372721741325555621080856058022867645684999577425925732434683467
++0.5296493544860877224747590127030477951987987258874100707895850711 +0.9142689324243093913109361832104779693761718654772557241029242509
++0.1781616718394205175709349645973564475788988241558791298588188050 -0.8519800093917999049786710873262630254438596819890789333402870548
+-0.8633908949968827943561744577901901026376268752722144571223670853 -0.8663463923987564465482638692819190364387064757346171016284231869
+-0.3459820993240706010475901311688197838023719669999227712290509004 +0.2709558465428488894177444835034893857451398992362135202765939096
+-0.8814262497135981437569523940906532685397798861799997656375266034 +0.8083674519889074596117164158478163589581003465847262190755456111
+-0.9722552720272006984678084914751283988556792015475269427349942943 +0.08192318101143036468909245818104351795349752285255508370548377145
++0.6486167889394565452584685154506739738504706411589692034776454683 +0.4432662295285746068645760939682334332432727709335441542485014646
++0.7237216114456588829885327945423834052953613010855527824331391861 +0.7098458531193496043308156335940587627787235570183896188894276827
++0.9153832161606877637775414865990581395464326012246760580785761313 +0.9032298901921960006119686705979881366192290964459568515483982700
+-0.5010512652356920074204032205934276172215285762480987760943959851 +0.4794254791268536633480562976950887435436025549286522438789030803
+-0.003517119711452846559277971844364606295296520854275366315952866112 -0.7746484154169456512809937246271660173202685744110036148882342333
+-0.7432644962454565902867854377146609433353697756825593784757725371 -0.2763771350523139054750111351929364757670962641805178507420343842
+-0.6678889143320625765336213759043802181180754155696893060399849702 -0.6737640502546376711965235263761153629368423334845050663282786384
+-0.6231432486376980435414857670687342821530306865222818413703487444 +0.9860843557274707818224203215557433615103323795855487753603071846
+-0.7612655580159597760389639032422118132475827999877015743017274080 -0.09908250822208310979388125313393386625642518646689831540002743491
++0.1046561870893663260798556882535941223232955552582338303672866205 +0.4083364361722581165801901479594515422760935325739573558840448982
+-0.4422178249719287625023613714462236578393297082084105686699745527 -0.1987464128103913290537565707198845322065664181338633370605495606
+-0.3006761386836519584160039426021947715604263308295216335254395417 -0.5407738721582197458183352565621496660631978320791939263962860219
+-0.3931472033430920383369653755030364057981520323323553764459192375 +0.3927066115442214638047153163113331662262162359392646773307752893
++0.8009564737468829284569870438621332728504682800502357253909429840 -0.3547265721044417796948020637228927981006372674781249634536133803
+-0.1173363847349279118426129136160276265546406000211794923295485560 +0.7443511718754498369053636558248957547288930096116725829118390452
++0.4299591565232924801870368761556079288133632606094048768501521181 -0.6106514856175809946267252713465468241183844646996285763158471635
++0.3519508427149724056038340065726224107858818936655812955385008590 +0.9765239261833813284111571517754977297583489388043457576976222170
++0.4719165407085054156880418423268675488422117760448059022673468457 +0.7738274296309371782471493836581620439388102593378042753716890516
+-0.1600709565700552484491336034747507816107856100797576115468140784 +0.6303435590127475728343988381089812280592884794559438601115730286
+-0.7196566232553047172113131790990428945643928116318893875786802199 -0.4840633718139391300830506517721753832091260846484462137715340380
++0.9506852903491360468879758484099667312771993016096956267658366287 +0.8525922176927925458770820230111251769664015980843161969462044384
+-0.3776736725704435658453332291251578463493585478972191163904289213 -0.08163044187898704046903120648457597371959955348165323805504010125
++0.6001953620324393368833490197603304801854572549372059847172328017 +0.4211480223456360833806669261665081502935228321732339446555554080
++0.6978878736648347125949172253483236996713754832649550025174381314 +0.1636579949610354489441057651722542939624135888641020127310796368
++0.8508443401291057488517795791511283359984797073308503806275388226 +0.1158996829838767780820446554770404024129821417414276676244486116
+-0.4669474695063991815703085816201270850746349019459750890255838246 +0.6122743525100609786427539952903164332986527922843188026822436303
+-0.4916857659539131984511014678316277462480514807356006060275370059 +0.8287184948673512642625509766623864745682445181955817748687592982
++0.6805454442564243054841615570704809357725921633306984108877804159 -0.9776838203117432640468561992811674532088503638852841073034452293
+-0.7429928693445994197394008924008488085983664860223161935727994358 +0.4475824486005748840610281907314246250638614806065401547533877687
+-0.6969676211949719236627008807329635886036631346596064918901094455 -0.2012889019039510414651830187674193045950194169108930931856542009
++0.7197019444966162425693701580554867509036572823057158142921206547 -0.01171834366241198933438406373716581804955151297150743304159782864
++0.7821091276993633157184444189269089852199610591029476119050859896 +0.4922455338395964925166766918239575749296275172064692575993556194
++0.8533226121539329221550195141712150337184702154268885269745819910 -0.05364567611959903567502330013213963546585099551575719307976293259
+-0.5271231904299831306010230073357821701271416210281300595416035220 +0.2859039723670674295294361938847146749682776282795557426834523284
+-0.04518836599707041257371263007133991513702551585551047967233360089 +0.8750329779299614706148239867721002941643109143868880399745229725
+-0.3994910205015023995978692651199523393500004114939614636352980640 -0.7722586575162211931712103266374485003179050625215461656404618225
++0.1151112248581587985459044273509734339372139569519498681662926204 +0.1401034745337237615620302020951018938757063985922213398050129090
++0.4120054991803597141675815179438163442823969621208991056428168406 +0.8390047845124423734044204882406751006849491027338704535253123886
++0.4343579826046095597725968699957767082823418268721181549420071456 -0.3131244711658136124319194937374637201951191483185787516824163028
++0.2535126428268633086086116718856542176680789611156801564801311848 +0.5906431155148677342149308852685885638274033210013285902888289507
++0.07575910820021246358816323232702289803823041246205070258897871070 -0.9162048078433982131383742722173468399551265719825246809663028450
+-0.009921455995466628736212379839332998874975285848956671613709936322 +0.4438198023728849844308452858166958526884620742389769268237679581
+-0.5891566693005274615768435832037723406013603962165946345013825592 +0.6601586762490308568348505588115261580494881196839526850118211037
++0.4725424296459514103640632185799575468737722475096114637473172301 -0.9618853586098018371722211571527418635003319023500739295420333417
+-0.3642689669126664223527375212471788979005234643229363317834063467 -0.1292609718107532753146691377641856162241453138036350409973849233
++0.9106160875739411428476569185959640646231793213239998804082355729 +0.2813027204528153923329019336432992610341145263276842828170084429
+-0.1554296096295892351142787706783742826880784898341993011418432069 +0.02901692607382806767360968742809799650944015215104495220771449394
+-0.8069065915498787556695276318086362565827819941733622970182376756 +0.3041938498059602562920829742497990465452656988389381717366180348
++0.3774149419137016419806042817145212836004227419492405559087274340 -0.8416332863784354708625199574482551667809708135793159735459802674
++0.2862571560348818269179471614749431512680830893414487690534246820 -0.3149500081266670190500312574505458081725795156829625594727778990
++0.9392006333865916821227548404291848184201007925131229813910957774 -0.003275852688626340591683182725592289209533360992124403573787800845
++0.5114205299580920868823613420213360686329180904621350249508347984 -0.8378625925962227631792682994265765481907889744535199746129185636
+-0.6408078680635244612899765081025913686282954450887306823350772997 -0.4342779984921702749034944690110939090155169682108203705245647346
++0.6103476918632637106424717122234807592708375161253117953076031400 -0.9068313407149762968086567340954913610684595084886817903492351126
+-0.1695324055840820458497589349479760035964663521113253737383164439 -0.5878274041052291477943021502436561002773261803924218942833270832
+-0.8353594742240205937097730115138661305557325449129426505768609534 +0.7976934088261920073242997664284179394988305733935216816478972594
++0.1821483418007667766250895141417107286953921543595289977783017637 +0.3072993380346806450796644618533558809298372285335849801472800055
+-0.4074526958925963909486488891837393063126910851657623153854908031 -0.3158899277774763040436693675498339368716705701915489772738691617
++0.5194123128321160939700776973599963366760031201335463428826305590 +0.4666714471594296105907779829907728877151358508508298995416084212
+-0.1339026726689501933617889040862807661257038358606191032725698017 -0.8392523157365762982920248338178402207864299927730430032011993670
++0.1617840119849052908674425797539541379830915417411164257796009655 +0.3724656798429113456573796032664972786754306954066217858782865155
+-0.5833399591688895541493678958036554117556929951798174740043291689 +0.7833206787384097305592819931133370072071003949491040665893856821
++0.2558611196916433369649336532000849479904305619298222327625863899 -0.7544051316606455187663010577509845083171139981413787259246099009
++0.9637184128969163713272727389388526394331293708405231601274766637 +0.3363836481324219723370186210692794125850649784394352985597901553
++0.02398516466411951663039478357357263297576765858214578984119980389 -0.6491840008149435654312968884792746101712975654905192131468895032
++0.7220807768185265925885711430037484304092954076856054861183001563 -0.5376568533061764969177810125554299187960447693632897302426453216
+-0.8314034062393001851412680462190559603040746972786212429324375224 +0.3436505628709939568617544614844578999694824109632610235366179258
+-0.2313683087056718682580625867623460795004227069874977160354372877 -0.9878395889167084950186530859519776075387863865636110539086573895
++0.5241531162028989758906123049906275766571616823241720374203214447 +0.2314306995279594008644153922190752850317480341450266921892543850
++0.09003216360057281587724105549690566269005814841108581287665281058 +0.8865073285770955099860020924501486556125845788147491503154690747
+-0.1599268816032428776743959117270259866309677355351818460136443291 +0.9964078756487818306982678918396703581497863065837502553775568638
++0.7126643265921692501928118835762400720628273345745039396768073268 -0.1327340387426539333160769890953460166634179046951612739896832303
++0.1443381463559750344148688262608847179704805274810841956785523095 +0.1516135436026911837076485354625099431713490636151252380398422077
+-0.9541149480810226451568227541620900387924893378859274527595762471 -0.6794254217136540815383429489211152521219412790709340904663043984
++0.3516772517804962317135771244694045300550581304302552629989927399 -0.8608338971722177289009152884317389810381974752382902396992736197
++0.8312645047002901343481040986077492354211106507977246573848547872 -0.8579601284570283198168880475663448240213020365272821075300399251
++0.8922074343575836687927424867109565448477559678636672119414443701 +0.8642621396528582742546522275938696917350964149850345375415910969
+-0.03914580715076807517564668371313115131680481962361916796431130169 +0.9793589839033901948731783645080578582463688236077166539472268901
++0.9746573852711840936336177201962708050687509298510135226623575906 +0.9683660064401229939001661515228452132613132290247913394628566994
+-0.7287905575728605025843722055111257091486772902084438557782657679 +0.9871325644646234051116914095144895949244082254772823408822757459
++0.02849594996466824865218850207780069267985584074611847663329993142 +0.7429408357918861651391940854314483777231519683391271617922207998
++0.6459433245400880395491408374407025292588521318149535734854910274 -0.6679971490414301274552666497306612376613754110623070491783068932
++0.8136628661132407079541934173897141567434892632439804419184181281 -0.2222054162805692664553590963524746378422134405027779312108432929
+-0.5672690776078439250283757912452916624289131865014778354746409640 +0.2825286514059141882920658191340775973641769752737899181429072621
+-0.9476387464140397458861421362921055215974651715794066883914951208 -0.8641655578339237157426364564226402388621743753891534760458972311
+-0.2605437240709855372272831411319884164143200014969561164796810212 -0.9996084107935015679473594078714884074981488464073778279217385790
+-0.3311597085631775241605389615954882776971235843100995205029515984 +0.6918702869983347579958468231672430091995168889418395643526262834
+-0.8695822150875121724691553338257829869250127182425918912387649806 -0.9376354253015494471896434810153189325665084438405669131018104586
++0.8891098289754707421060220890985710245132795198449297271458423909 +0.4924687906770157503064991069141120219191665852506741133594520199
++0.2895552325554255930167653346015931047558748269272406529926466973 -0.7528019931350588413939154566388023308331979635236679471693177896
++0.2650936900762128600362413578030729270793479332746334793752266553 +0.6977106568122303299097295004137729206078400517066513083779044291
++0.7046936151828971593710415948632896548808680079056988913118083777 -0.9241816059668043365862855436852035390363373632288175077727370967
+-0.2115570299364757676008017443811649086191736127455534555376144021 +0.5191919026143328960366321977745092648338330203592978236081348129
++0.1470216587412559156294994682432100810761459629584248289010138317 +0.6714084342259733896142403819832445282754246581821439681178412078
+-0.4329010361486256961244622956913108506550874170254014125575533479 -0.3305661727568643970967579496852928159892749092036565327744186388
+-0.1766818323431859044625743795499747752198631648846896440459670393 -0.9004094513551951169051621458619598995816695783221496309703950609
++0.3427075333057822059987675632859967887158938796610229803331114623 -0.9884847412191905817622272610251608563747945077452623649671510335
+-0.1833768865732711001295741826816961691797355582139228551235621230 +0.8297590431974834390160620549937730525352694881027721814298674934
++0.5665067551831146950685364521560101025985707475803564862178192914 -0.2609452664773769489135290033372776145152097963873696107291657849
++0.5846720091653589171386464934439494744713232525388330403763032709 -0.3951818418178703493034052559225176300190976118265294520872713497
++0.3128821017947787434710701629862425068710081298914976621641025408 -0.4205393286734249298736520308575155093951794910953125656434538838
++0.1943703959062877206669871517590249058034169064564194870074554031 +0.05443728213987669453050764608083824248316758211754927414048785268
++0.8893705554674630659403991877841826994191514257022249874261157104 -0.6146453888431441977579264187991304908673042553348506918953110581
+-0.8883357910902242353575856676539666074648753053656660309143767467 -0.7563078968082354624200473875899165193618716500707274646443978808
+-0.4607165734661637817512681868591410520464620690313830851265222420 +0.09396735259632912882662399404023686834860630896601823063552973929
++0.2571290378683215613044136510821588749887474163677002652639520119 -0.5785656457034163940108434599486778925179861427139603882087606858
++0.05683348973511969001808746192505133291481235528637618587938493271 +0.03957899544097907583965796242273333021337860785083816690457151443
++0.8458238445504835463314748515393830432307810942061667936052115581 -0.8523897650942072388808518940380192479382746023303926709202228227
++0.2568190130746644331048317748223591322462097932104379543095780599 -0.07832784865185524359112370175488914434099640145831082963347294260
++0.9282397683744983930469496205745698232573096227549226254155622007 +0.6033167859658457194486961001342941735744068154496164938059859501
++0.6733680895626635922558736333908780380926273791887898430485173634 -0.3586026685282925549652109446290082081072664311191650680624687117
++0.6834258455476852992466772196651133096274086383123765308288566681 -0.1022768096029592458455381062000780279188050363478560222801108958
+-0.3197260966794518948885909003357003020869183279810950125249989182 +0.8294682959773017741218920869469493367635666889096531886515534716
+-0.3602154836971247653552601690662060499632143516459194629015046587 +0.2439910403168467755961516475103100677957670811159700079381010653
++0.5644944652643029946030943876077187355907298250270171876933333996 -0.6217436439651384803300734137423667977560295277969228092600510878
++0.3002450060649265466224439088480847866613297705716750391656367250 -0.4555149377465992268639969728371691262215382223593256475914395574
++0.9109171936013987677935840681404253773950900911474823029568083952 -0.3638121656089442802844698751087347999906808525959787225726673495
++0.9809865904559495207084689029816148884009367903151903920423149056 +0.08022634781470307543831149021588896288336888891859159188614295157
++0.6673430101175698152854688993768041548769019864465421762641808302 -0.3442492480706474446280159530436383963980497643713948380702723602
++0.1912403836532585581545915780169638266665110774534903895312903483 +0.7731435513750314635297578456626328452295898224889367523690353904
+-0.8390872225468263142545242699093560592768485203012323759548269441 -0.8066018250843343819679233406902709051909675387567362077697223646
+-0.1694425027392812196149909158729299355102867577367629176586906841 +0.6498496955876471932216884562708997543204996823603089491219376678
+-0.1109481979293641305323565532634133494943626968908239858539934786 +0.1642905711773671334665778070841332282088323895041996317816766814
+-0.7576390226829376962602306885924643215709630457357178698800775945 -0.4518494760071388063906173756614064107276944654373102185018585977
+-0.2384036559822549222513803512289385096334288445624862912807231185 -0.9844987906209126811310473648289719482037695495421754529715646006
++0.3322077770142086566449475410492734728431728270878221527000512398 -0.6862637852309942369330177604164877864573475794822016327133076690
++0.3008294101164568639831269327829387098511379992571638835271467486 -0.4753695156132390969461568813093716281405845709725218384460712431
+-0.8500127542413940364553721045188171752513697377512921485742321549 +0.6556099024117094888056949870591826089394312227646540750168521309
++0.8368368938909749223146178710811008588487209933709262501849117012 -0.6080521800564137609237437916037781526823806391293867985443226801
+-0.6301301812957352916599361333234055414853612961930455283065817178 -0.07321134672111011808388258675460374818656780673570195420048014019
++0.9291299159382365190501422959288431216663095157691743654943652200 +0.8884544237779923905868256068860494057150693464894071066550039493
+-0.2057454411726747632614076986736370443370299660132771686206360685 -0.8354897195734111780068198561837673077169847832110436146953999212
+-0.1506655683923674574544013920490541109453108644791859114657837843 +0.1896995674958023935839174980322220379530103420320344001246792964
++0.8300887071220306139363536768734752416692057466278345728554448043 +0.7156441808215881403448442063593792131902759984326841936686872424
++0.8244806963149490337769127166910316223379101498545059699144474846 -0.8421913219903778026902017651605922300271071155283113389911103057
+-0.3267801787861358921558326193709571898654303757814961069177939802 +0.5143856875534824565378222075822768838973165471074914221146249537
++0.3173522145518535642355402682590855477810669842087119833799882044 -0.9085106045944224577834248408304889618324419212648761341182940048
+-0.9157683658115979207506514703487531113998263500938211160185082296 +0.1490964832693746980567218590257837834356289516139096586207694171
+-0.5134442544464950511308392504791416236936576938651094919168340614 -0.6533071204065437867348628824043457513023406779543663479731285027
+-0.7129018571172519683293420596961998697718416105831222546361506794 +0.2589807129282846863190912997106752238855054803532441648210855276
++0.9065123083843027156086152486704570882336886865580199421650643667 -0.5271138651419218022479534356690600389529298477310942773491339837
+-0.2793634385919329761753480106077153213406385720130702294691355484 -0.1196937413617940965411274610059650995185123109435955751314866664
++0.9164978685669781253679917402797926874507921723240255331025472326 -0.5906276157747267452890097085607812150766085943725793971349352161
+-0.7596059702886165943031875281927001506068162489624554198112485991 +0.9512474782975162982677561838668759755171776738883301392493992342
++0.7396561092486294627586234874177829200642603190414086001487983221 -0.2585173836652346672012366614981640522011558252359692008464201827
++0.2718148178589837914007749073085756104697032416499157400657364344 +0.7524677433111812677624154358601882415953170885621945514823934717
++0.4662517483044007390427270839972516857434523020114609710559500148 +0.007453434967834908162912548875213581989444052811981129593774874339
++0.08808257115588047484358934167308625153926780195956135649522315482 +0.7024443905669303463325044999633524679292030510648808694652482144
++0.07657390220669434590596313316601208477726655511807687988961336808 +0.6106130060934301223265972559359941935828860808582178521600687689
++0.4588569896068761120165974962862286433176923282523892852244105839 +0.1231870173638568907727920838441539340012116028226779971441342773
+-0.6615298742890711325192770516946564063654133133292967525875541474 -0.1170516315450676456572605810356433736658383171876884602766708347
++0.07011733953074958640104399325017215014827304325156759173135366906 +0.2379797449298319474236531372730651577119969114593543972996184914
+-0.9612259440538002535765483137294916063381851202661518339189071839 +0.04370148341573901145774807336854657018472602856035430580322484601
++0.9171138429339400553744807769217606095680344268845843714152250596 -0.01566823635122952039094015583015458940797919213007079339305198311
+-0.9187643669939806209463756973588109095305506934347503023729389190 +0.4492410143872176596850637170953881938575382076365915189809344711
+-0.4415653525364425875595561926619571676937519758818885848285036367 -0.6585592493830587345638673165535959781595035622455918843124435087
+-0.2086520325624420487101916822135314045088175303036646863500495381 -0.5444085272080392258191197590500321857185674913140620444083228958
+-0.1511824375843169824185114172319147719223588913836399964007230083 +0.2626598519861605182484353725321079345286314106027470449537646385
+-0.7035924603583511535986984592864385797537640709172487432674768657 +0.1376877378972272155729752353482066269049185939455101441339815693
+-0.6564151567101526404248033266354854181628562195765596859557723591 -0.4006520844525121330244486700355445948137705338803507925144414887
++0.6965977875831549207460696210505433710177694513815592587963931164 +0.08187311850883778757260063595415584588170542069096467766500950588
++0.5816085290684877844083071838790011353935994102902484256340030157 +0.9752391076391505122735918291390393444711089786801290853210824038
+-0.5272537155512824066074255359659027189627420792613958690510029190 -0.3212233362207097908208338883029696979756133137518721105877588565
+-0.8587217878456442924783287669774302171560923546889427532593498197 +0.5092639397663682383837026485562440892473560288009820563671444933
++0.8026154977853840476009847583617913539728860956242379381174833460 -0.9571379854001650517501024933554614772600734829289247917367756493
++0.8316489546057848621322523310402149298559936201982941913906852864 +0.9579502281429485110215155578987438072018283869571111430893435551
+-0.6097628083165813974260954335449904988521230536577883358240508937 +0.3116411197945126357426362801452345353189409007169370813457229298
+-0.7453827739395389922953742392780783948094849228955462762695809318 +0.2484690374248004683657335128660389207658914051458060123112784396
+-0.1809554132180854707773280908184743372302489521523696413745651906 -0.2403660132684514567917017973919081346210503357988971554421714242
+-0.8150644675782343977339925655387466104832252738719676821788883516 -0.02986334821072979924224111997913925489081104546097247260975607194
++0.8917866574285656025686075793775106139378346795002297501283298878 +0.5977941490131509497666546060166199756407694477860275134227129505
++0.1101358891689796743272094664641471479081663952426245980291616029 +0.5145115831024917350771487623634444529741726046272463842307467712
+-0.05419673336890120775922638146599077291212376190352050517562870720 -0.7541553021228906536629213394846582989904144710061232966318795443
++0.8788147199714254107037333013127960617440138295766969973173354907 +0.7215762228889012669141339870935883519063070343940349153354454459
+-0.9270379263943661268097274055148115732381615337919171906603260360 -0.3757236072892213223759673623545904150820876477587753267821153705
++0.4642977843367946473083173399076729199459994296180290689057358231 +0.8864064018561367367355324494712486320859803052580392598955795870
++0.1101424766711395834493541735390025259293259452693930682212953338 +0.4057019665186648592183688760924469834594142722897462461494035496
++0.9804018990020609521055380413227891839510323211141337706692935583 -0.3284277009657261944551439092589604980107747815322980776576085825
++0.8144388485796060257725468016904833551056739055694392606072812336 -0.1777090344048752749868466524587491971848025402228041103900027514
+-0.8395517493960846429066650820934625099120153763823264316622178314 +0.7025976419353913069965590229613118351129290432212715559282810098
+-0.5356363024105526066730000892740728141483682520537699099980586020 +0.3990016476245110843441767494987687694349242069283992238432221596
++0.3785984554723058056848684987205281373405286509670642510688353225 +0.3522709802937692057034311857540090052484305021670363804665177075
++0.8125408356507693035783621684477489598336579370455636449932920399 +0.6096844813075936531458411576391258658725446389952314976494357776
+-0.7304988390989189945560089553959860009999748685520304348991029980 -0.4549769991327555564253844700669738447513018849545614196904514137
++0.7456261383135196385610840292806346156606897621955571769519287646 +0.9699905592272083477620210980908355812396449180212971060144950085
++0.7757376987729343002700728678244609761294630501410110238207420656 +0.7498232594481433855584036311186800022691030339499672238685843473
++0.4078040359990933213948732923927214812372340416337539086249054226 -0.08124130795517090131865875331800862391840778776587451797446618149
++0.1767712938446947695198229699328249449877999447752262239584762909 -0.09608706390583456918004750266897051008736997259681691100079702620
++0.07365715096199305303280147905505827004287730234420360693427261478 -0.5451927647116297262326583980470264138959459348620324728883459141
+-0.3108355387530528344022186566449990520542204513871372429842394977 +0.8138649538996382349722837036147514066724946600810522362707622419
+-0.9157841385420411790181903606309676436954041107787988394005532203 -0.9018403921117378936802781754521301934139934044453768436394590943
++0.5517970855559362574840981197851271127548171428450299159534222246 +0.3323218555553240311260400216534485073169253622482884577923238363
++0.8076059738124808816284579607205742577625775175934575040140126923 -0.7200684774603297918875338542123878593140667304342330332159602576
+-0.3623547609761457713662054674281991237079618589827581000231798627 -0.02147961864887678528738957408023612168444237053929164356826981822
++0.8183208109839758987990961359356649031888827382055407382873878803 +0.5254410558460859605087208173100905614171277200826824289213165419
+-0.8535325136050236145755622731382685357658674118927526952194103789 -0.5249878506388901472711579370102540928769837177979577663672379389
++0.7385965807078199198295561757281636178085738161163241745076529168 +0.5805934135960616521845017309786436466437346159859903276506130233
++0.4178732695594172450325633659542989992529347731253116371174433175 +0.4108150684088852998686733919545657392411926766770777777434045282
+-0.5340515573220288676539037563933896861133701709641430080525373334 -0.3441749701647517477889510233603120937668261799325819146170898937
+-0.4642629009871243127720569534731497065151730863379424324926815934 +0.4606212594814430218118465286853643990316522819951705528199959195
+-0.8697898736666791719966463521302103516597198677810465705462889386 -0.6677323105521650119681003048917889833758906781477621751672096581
++0.9260211067928626234987335196506123804866588031248091568668186807 -0.7218154524979247604553644963494122676763226491036820436746768133
+-0.008817333363577657304077859427800946074653041725554105998740790418 -0.08677847959311221967673968929014363704659954185573439280425805990
++0.5582339538069273279851977709472563742471538090477435724053193958 -0.1162626639637333266228071663736609088361388919438879190762081927
+-0.7255700875545188795082017268145707633365451965771130961377344798 +0.03274719788121083841144977470346545977395349469623216732733634841
+-0.9882699898882978270887601698779901692432742326870804476209571454 -0.6698237693339085919901027803019699057313615574070964514240769928
+-0.9276804865150421462892365252888320798428705497677187785005965023 -0.3983027464023792902660409298411153556965778110241386434583873687
+-0.7832811923001301276864916736742146403933964466320677660322633051 +0.1458638411143874921434364272961719617992984163054373216031041553
++0.9875308623632782097656312821453924896496525870736205800843638587 +0.3615685859214923600758423868663452073069284731781755564707775459
++0.1783373466436970660022454632463179035762888722766888416391448363 -0.7426549681496496864935726783036103464805027722297231928075561102
++0.7336545898457146349237975784794059749253087905334857489144998895 -0.7684547660681665066519515554733654436448393642017706465245375186
++0.9127856868366581467510500732005220443872380003084957447131950721 +0.4458807741099861526177247771025494665820255592246066435566207648
+-0.3632881183963366167884860409201422151102177606787650299072097307 +0.3985566738857450435051359965750125351685476804564258720752876964
+-0.3268576018334922472384377473775779415605488146060240031080037115 -0.2174549546747868154169543892908084467015810892894924116151543348
++0.9427149588672463047630742061537997891278684495348468159028173334 -0.1343548927096384947198371844463249261084445176993169652813594255
++0.7916571579983658653317798731563225080239623370784297265192438825 +0.1852175416481633972409369103417702230894995364414738802035725357
+-0.6817701452011630996907953818868671270735516339211681814255907609 +0.005172797816632007280598823316568992300651834729652523723869275114
+-0.5168940707242169951406978648595076294647040487113324969763690473 +0.3903666610258509892634735735047308300250403568162514376305044435
++0.4155311954965517114024103086773167213755429855677272377839721067 -0.8338754075241486479086633477945877914531212580308062491411496161
++0.6506707691016388017357516362760131941221566979795718699904936102 +0.9847519439196839847214964401341029639624640911172288944197443621
+-0.7043718208306549962960929614939365734224121070283816720729220425 -0.6938477689490435789374980639756215337149150918466472657060994131
+-0.9030673117697692613858834879354138789682350761417043644810908266 -0.1913079077139120099096772633142294225126821843059502310007984547
++0.5465706740090774853953336301894435415008351646460109707839721596 -0.6463862057713601285734282272154419712784254507858418032612428110
+-0.6814239608934778019209189605706175697331566277120687413401512713 +0.3827413613342640231652503472879078021424394585972829272328681104
++0.9205925082347564380336697132499017123825554431098646503055203834 -0.7720727472864134929959291632086941618438820822136574072028080816
+-0.5020782788038677346392099888475830183897864323626792080264544951 -0.9990561012320254273797384718605153699422951092251275740070161952
++0.1045062318771655437961420896781653537832869869453123103733053855 -0.05673453008754950631927284903780550602200891995748822809908372908
+-0.1600201060994392446745228713066083331646179396065484107159119337 -0.7953526631375207473973935672161373786589466594986701111277564482
+-0.1176882561544923620215084381200312622694313533614808151971725197 -0.2504551465835887632060924159923293764112237727458078357294223108
+-0.1898251716095867210440135081381899859506047209026635006620997810 -0.4184080482860242370284660832395590539701823250090284783416406620
++0.7858779951083861580332996484728804881745801231417586365625881696 +0.4627023914663900838116145359154475820528077271388401807481594188
+-0.2279832493810412940114966076664112325854082672090777285019621618 -0.9778541501693169375385988125771891870771302850159179165932180271
++0.07761160430503009576118799101543653660926181662195182427626478291 -0.6176977705983222379679597772002642591215510705962786127767690952
+-0.2055488181060608320954691371766551168555828485198254292077222517 -0.7541605226957988014908091549921751556524059465395174795048280547
+-0.8570653123756356936765798157651852007633450856266713907351356642 -0.1253235895127937928416118627091859968820485598057931356340900519
++0.8510470630599207981929699284163199387691742475697788917650312737 -0.4187104369303610544925298251218699802587106413082815802235640076
+-0.1656012361332616709224523200638076386717414816760750375488963700 -0.6422645834248161180981306371913293914715780430590361996931403270
++0.4313169396402067420747675191335695107540210953445957632944683466 -0.7157336868929923060690058655020407030459354695577846075047088545
+-0.6136943581151102724274558633917286896829715873222934810854627144 +0.6744567026101178112623880708847480864912523409387769550153255080
++0.6107089044121956416324813364187592386184059323011742030772237424 +0.9684795236552485996383537120932404726037512006334180858124873702
++0.4569955077979069087363694857841772836360708458051620753700613184 -0.9364479987247586564267417005885206163400558318164035469189463548
+-0.2056316517130173688144925128431576975079195367781834481815163780 -0.4725527711350699472125218431374656002115592959658867245652296612
+-0.3127653344142269367017311068934194736573539345353684494263561034 -0.5623226095453870369737212532437716556558003329623573147896780539
++0.5675769204970204695935245199626881958749158960158155816882247751 +0.6833494333970390945851345559669690436120905354950143433137210547
+-0.7973797882525385651192136516616674358654229933256541899442767797 -0.4970065305795287266242254709139657981059135202258178150278338814
++0.5012904467166158311205187729565579292182659743325041112386977484 -0.8365192429273594561843462788788615100781580396259325379294717739
+-0.2570017860782360774767408845442523659054818260225494146244853645 -0.3252225194471257008753413701908571595368179590991062801693037256
++0.8152856345265963021214702712184311864712144712337072499723510820 -0.6706101550145821024931531452723694481078020194592345583367982326
++0.3474550590975565404544821867969338696280672245517491821876495039 +0.9338381906303263731050021307994290132395866766867230545424335603
++0.7718119181978566336150728291679018907122826327418198982205731192 -0.03551040283907854841082533333557868811617492251695756619678198462
++0.04535880498283686865208322483522967139304884767842664817216330064 -0.5692613436333678550460523108523458631150385379297184173761581304
+-0.7174845876743344015633175484139120449777707133419695966520824564 -0.6363307073075527209394469163730940591751156936270557608676600723
+-0.8532961844667343672614407218622874059456622649181507984554557180 -0.4085908952208837261831869077267270379549759076959904334842310961
+-0.3551691762386405619967249318449133353395153150287271325435124081 +0.7300916173166646121592320041656905807338704426451979820849115241
+-0.3797572987358468877601704908647997438784227376119508300980299747 -0.001383372764599846106738356863937115678648437689000099723461837086
++0.3764932269744641381853168742044507381862031491302365412212635060 -0.4777567385457321995351536662662648285058677482460016331360745385
++0.2816632617692655097062060192076384166912647824219953750826131631 -0.1948330061967239431823175756756826607091943555542911070423987994
++0.6936970465516315197236088803729008972356138275937389314888615401 +0.8459710208321990958775051952334276595720116143915933968673357192
+-0.8093948466492362612217398058810377625062288216775489656468562411 +0.6035682379636567548550688236410906509336931607022509463445925614
++0.7179094192553983421088688870290454722724258927762520549683983736 +0.3345059467096545054215769577936193613915366469519794818172132859
+-0.8752125899339353908597128121427435294227530087554395150859455125 -0.07667425439564145607101535969424721636092278932236997554927225037
++0.04176278772058224232241432506737925045260833246510034386845030186 -0.4636172268361160720545798584411346764175855811798465874861547810
++0.9269329565460541008731323076781001715661419867914361439680533663 +0.1804278237744440381430309435895397955575873092635332985172711154
++0.7868192948478988386779315105006009612933033201432314519183555363 -0.02252217472447147430417959341668363763071277651553525973484567039
+-0.006266353716036539320572064746082526752743361256443337864258505608 +0.7501013915358726015119991716079777953558342589570629821437705197
++0.2266154233841305998807280483192876569901369827513556377738818721 -0.7871400621970839566465938957310461940711201701430985082043945502
++0.2746350702494963366663352365693945459844370045750631885709403566 -0.8151009004932257635659144525098860694888983374172709801351488110
+-0.5247772986387898164750425486144677116796659442569793354035835811 -0.1686213462656900022656329498466718798824813012517022157941484313
+-0.4928925951310793013273500011155592100819574396889780507999573189 -0.06313967597639198900381462843243109023663888159588330858774026117
+-0.3113637472666701974473222596908779747755145602641740095469526339 +0.5726166900593667226677583335398103942743907152723495487813430139
+-0.5748854355426279234162395955225246347221834110564955747956209638 +0.6258604194737129856199495492933383664795032355582888427775124459
+-0.2554460407289573319602333075606187389397146712378109702048311016 +0.2712449131844571979750590354811209555227623988669955594208125657
+-0.5765429128839939287156523310227195364489667524718802860187766530 +0.6134058161573621731734197478725144201633628025773585632852272489
++0.9094805878752663366484875502653563100058416506406189283398268678 +0.5278989115962966203372785753827399861302284751273929887507126329
++0.8848752416174802394989820330821347631944308988732361074957483326 +0.4120506415803016771334319087538670308193728429535410489266885161
+-0.2800064663747466167971611334477592148285678388000719119052505901 +0.3545576081530893721298388549248502297730179531579546710726862788
+-0.3524957419793069043802183938505947717728662986795036125951037387 +0.9954080102248826632557698397884240124609718895723927601777380499
+-0.9266175799130044754501565944451928082906704525569144780860061500 +0.8772865295885211052933189491505995439826084904697856702586933050
+-0.5330220313943443910835605702117655504592614398056913858309712345 -0.1729582755759392122304422895087558193404264121887563063778951356
+-0.7330266194736301185266620028746862947402855823289205835841036965 +0.1762668389658963968962456080988213348661449619145333641202307191
+-0.08901643770401430747538873378587416087951119772581637121305331682 +0.1627471475602144975348073285777323748185127599370078689268949577
++0.8550765251384289421250035837565358470833355010809526497352204912 -0.7643173297589358708829460838166575906722628803947798199199892918
+-0.6907357918123153055314910754893467338334399179189583430196498864 -0.9483965851770196106903073158919092222066419153939605413720684238
++0.8787770736433328745035234902871834306966611855454194152763085168 -0.4110620648461661976040812962350232509055935504737445633507550000
+-0.01738793803090707722596079625349684366463055472987575653160098446 -0.3916247393905563070329929201293916235502844853649152216175431002
+-0.8437894361676828459420431516790179378543254071636108492466529010 -0.1692968550760303048659412472462158621894331623355288012456478502
+-0.8141497075382254027096074950311514491854968487203741238943799987 +0.7939708466508500149635028098461967945381902597647140226048707733
++0.03889316514893840261980283978604250703936072380623394289182754247 +0.1755359202379921866069215868439830278095556184633912262229245804
+-0.5493273108612277875600478109570404534520845332638624479667841502 -0.2058860363049366819482401982172892014693921998279485163968466177
++0.6715912488533200815290011024385797575217363717470920802742883653 +0.2559787616604292818916512520106511162736504164763801635619180878
+-0.8438919390970836161462370188424965610990320605153865447984219469 +0.1276708600748879334947561016681847262811830975924911095919544508
++0.7184582122882689810255427112660454958040291396946043511983687288 +0.8760436753090542847847135932217121401527053160560084831960143593
+-0.4086097264688666636790174928803728608266459573162410770584140364 +0.07351698801837884840350528581184895847574439119624698642085424494
+-0.5697919261032078557614020481060183849522111669616974872492012829 -0.3039496890780872600154134361379205841668603387773376739391879981
+-0.6278243966060881460501444931432866833291695231208083680886203722 -0.3907346338213221479806245911718328382900706209181763616721575594
++0.03368286177059315443832500997308649526629280623504246086916187170 -0.4388940823989610336759726471781391531278685673540721007319100110
+-0.7436883526680899648969850724114253803054818951808117927039564586 +0.5825626412257374534228754073010703282797138907243105547408114499
+-0.4515446035045963800470270932006012917142703741148728102920678819 -0.6822025478392511825665891340014210548424097859019063003298929114
+-0.4810931364819359747828351037417496237257328332185652823964021884 +0.1545185080993607592672497799365112139383088433518173333061566559
++0.4458845011005795413736316288478062406750213207171946521339936816 -0.4143669554567358180204045828576984362759995052100693730217120812
+-0.07022130270408117391201617422037495983519685200057324281521736371 +0.4753177789592309918230775580385921417863787358258761083730464393
+-0.9363332435815881306934514312012861106386014749526768950073553811 +0.3381112107962121322618268829368716348475620132240222907038939887
++0.5931834085557288286300206310139754784241341457686571795494994774 -0.9358096238962393427505781408693047651496562497418868348861861035
++0.7036190395840156286745266326175275923901923175942468576350074587 -0.08535245274454884668189804324981279737218996224284012980894287651
+-0.5793821363841516257942372216607612745507267978856920167262365904 -0.7102354155198365907516134110899809885611419503815361240641323568
++0.009045022679082836013363681378660810610692103525817615455038021560 +0.9406474081275973498975356771926002702836768966349619838574684753
+-0.2778968847485682179896478779214700059419569060048743113852325563 -0.2000685096329297319258072334148781412585948790410411642646256195
+-0.2784308881971247865302566270327586460636817633229294056506703495 -0.1948085218544742821796599695605371957131897781266723768851470405
+
++2.454046396219744270414329918031544266269737628249730080410241 -7.725524353158691871336356937209747593101764309242889378757570
+-6.793881937264935152816952419791484942958951701571153575336648 +6.471734647329341847102071768859307631147963542512078102153887
+-3.932394243141055690281663161033532966946449745208459715237287 +12.169141093322009322766553294847348776754707964461246620461673
++11.330597356750029024357385136066868880694852244716954363642933 -4.337534726855754144407219621412733613865786190611050936434690
++15.688569455173833196867665693047265982311020645065864560224108 -10.216107387428952431519322474869486519471741163621745363688278
++3.907279219990434123646388199047522768322613900738569846461013 +6.344813279586770164768296108444918419681701907314696799989648
+-22.937162112956248518146500937765829753691974255937378095051434 -10.256318201781286473127352449344401399035595220041817637802113
+-1.804029667514452233694191683595100678322648139867869114178109 +6.337025179656873139814993827888532411103098005765093168861935
++12.443831735508551195222287527063740071995614499054770653733225 -8.761325738874490516052619752420351073666730746217427269482579
+-16.034995907168068462940507407309734227399222087252176607468310 +0.621433515177778298163930189086682604513573421402336455571016
+-5.066679296110575067666481283043734433122153028780034769458001 +2.367958290626418482085206358329766159428943537281328067046322
++4.814838452676643828834297202350677371056823486583200543943651 +4.020107668229956633726291138837368103252731514305679146992875
++6.608096153182293449056746536845314646208050213462717654911925 -27.793237736316618138558043981225779303375756064635132828133681
++33.491508120378515799831891416614086379642915747122891082034342 -2.516710020914619065369373879430578518549732408427328771050253
+-13.355395516486888231485522295810853249427880058665155125646361 +29.238856152244518294633224892758789726027874567318175728916577
+-2.342946929619740791711596361144002622829334898461195446265716 -8.619772996428635525048952784364161029051588281247563153555094
+-23.110646126317544954527120125434624554061673433141309774182584 +0.061044510558037183275766110567609150271237035343786708930897
++6.147485874538237854649504970552389339376687995063744807224058 +32.719985791626661173607942522481778341887515081507287611711768
+-6.092468938772647637374140622912705670546675349158897342662573 -13.300415472482472139410489102761359123704401250387308293607287
++23.052652446634998041223877374297381462468283526967927303449666 +3.648657261260528075506923074171688333747600260681647901848918
+-8.232917757190017964940274338258266424489452335846566689381313 -3.373772590647520057173012245987234421591497393652381561257220
+-6.764159947637541334177730514925129585882731298327385850310959 -5.060944272197570818020133102785955308326143880127962473536702
+-2.240934947133966796509087806512318160544472858769960943885477 -2.707793776606990304607002606936522149394934825942314917490769
++2.389781091499821647508587958354094622012928658660510494139214 -3.046848400644212694616020077616993352802017960236318894337037
++10.477883062237486704997104680171663685730659265189866688475213 -2.734354665053025055855305702226352716736725059040424200862671
+-0.611940459273792486502206048436849754723555931107471415621601 -3.021043125925237870614407723041573987160683312514643585642663
+-23.336386018341235320356353996043401067745939729561586568382388 -2.318889172927669970457740346697553005738191924933057721663297
+-4.302672171749188369547231162217618620613695056813992062492538 +4.557671771088877287582301178106490817837454664821645323847071
+-9.599064011484287377209218155953219974161881329137802029283469 +13.184564726451980740896954511159887813237453623658407868640545
+-11.666732277654734953153347381040619553704116462449536653177465 +3.420592785210169455330562108370866675324256366409714173814365
+-2.895273098494676319630048126916501711860104891165755846400309 +13.216920269803289771557540728784232263022996336915032574777566
+-3.595208689300122487275409484673751526448414293506915201576239 -4.554353632344715364075412199412256281108595875190849256174427
+-10.436019235101020475032927205040088869930184160438230027661272 -8.168443000825934499859861716299994635477592167066624112720151
++8.622571429429741232895430264474608505504673270288232751621911 -12.711646036114061441508275015647051385295071107644099490798423
++9.798502444741841425565451658563438412035407928508916477764529 -0.703629382108282539525277668012080094913060113638761136920303
++19.050332302821093096571148620983951862740399463356269266501211 -7.071790253762666607692705701935210345467009880790506030481249
+-2.629692308222238035907030466392236878582061509924361437575156 +5.662992376870513381995752432441736863859117827664330180353875
++4.059814805445126532042585317045028370704310136379209281719190 -7.904118822236912335389242543167355790804875948211601377112458
++9.111673672018291501729791221965589805650769681961775613552917 +15.874536869445799054064285893724769405385509407525159317607779
++12.422664194622268563046125813933700731192061145529094926625313 -16.664229481530742894774627728177057335951165836203369483276198
+-15.889754239271871559454342367361842789118142250509916344651110 -9.783656797868544621208303541538587266089616107264817038523687
++15.309886913293996949835894261977392068219415788217179361478411 -2.288093839944787663970806888633323862662154206014135220569629
++6.417795557903404861541582265900154416019614642704183786319524 -4.209323540720224939065353723381584830871419410748765908174553
+-19.388978331833596262593162997812886413000361938996129612789555 -26.413964564011461789980911060979051055247390125991502224765674
+-3.641566342702438812921006982082109369410077450713842001872430 +8.876635007156269835874327890570966611490100668082559700400734
+-17.789884630040035454697804354294083121504465566399645381877794 +15.322720072524669853792232654369452483831123371435063119942246
++7.626055762344040067968147247810635725447814468571288775189554 +10.854426666114797564466612553971856714203369826040953001999906
+-21.696142122564211998924986541294402851727936994730419470385089 -16.194952193722109350685287250234922120808062284069775601095843
++11.679015249418398679275904194349602895036079499540059586884410 +1.153237802688442658404452235990697293383884085012002473113086
+-9.089035591221778505608502049508075316805819970099093649757929 +4.827050006189241004937261041007416164994941282697660135217219
+
diff --git a/tests/data/nfft_3d_10_10_10_10.txt b/tests/data/nfft_3d_10_10_10_10.txt
new file mode 100644
index 0000000..9c4d00b
--- /dev/null
+++ b/tests/data/nfft_3d_10_10_10_10.txt
@@ -0,0 +1,1051 @@
+3
+
+10
+10
+10
+
+10
+
++0.3173894901710712338304379034862579946422889909408459156044823877
++0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2206549379852138057578743061470069389191225157277024467333194435
++0.2235509586448150240212804986667065785030694154925182387434450696
++0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4643197195119173309525456044702917254373982711189458917859034631
++0.01022750575332349257722449804129916311389119097299090643512381743
+-0.4593142592621138819114189833820168418626239763706778624898432299
+-0.2381993349353649959266405506577935293738035850399354993188862868
++0.4700775714463633978511207403685111986859425845978719788126486235
++0.3029583073136138265829962071140439545004830470746425534136209257
++0.1092122305172402888258153501556024641240468035240884586547566337
+-0.1306486726789604518575642087548321430960584930096366967255476517
+-0.4755711272429793224288583422054842471828900217314654775994176650
++0.2642327778745240757646266294392459562801915916132871452102135091
++0.01032012051955487309722047463966310173477870581273801739268254951
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.03919417871052420194526378084573471772000103115061608042162915008
++0.4969744253080455744694825346756894506554753184704475582968873208
++0.09085671307189002853971282071576253250819369457305730572873101910
+-0.1579152561477417245680939938059372817945921112643983640578929336
++0.07714972696698667716678650997245420808817430827447314113682745907
+-0.4384199598876636262124112488913918123145588604895783942604512689
++0.1729154576995603929033538546168666485286603783333729055438208098
++0.3914347841983986584093169466825129403698312444687581041683071856
+-0.1013589956735152573510406730689184973691015496657475510126506381
+-0.005488434703663033807202110079459379772452209210435747933850600026
++0.4098351732528003809102269734570294879975455702584035273166455779
++0.06875288804967068748620631495815812310608096163779380055154102558
++0.1313277929451562487082545713868668183502620330575886917609655136
+
+-0.4833001744929688887627302318231007732586579925667420767092911497 +0.5641015670155646223733879799837443169432855337638213582553378190
+-0.6470889183313806476439784979725465604750285292906649332158905915 +0.8833620658316819503254189789968994245481044443433382545948438528
++0.9495591103622864735737804468916775971319894153057637661282509133 -0.9925718726770569531574673361482821957657676619729061725824375829
++0.1280772471342585841455757702545741213596517009855068302808317718 +0.7367849169793728090828557815253915193968538435853637656745096947
+-0.1946943926350927100029394214607870756382213566654573743676056718 -0.4893874648032131542015845245297658010198476013211905609661943722
+-0.8391269337210497321784330437702418478537689733296865638890089907 +0.2968295560090215175649434592421730978538366244911132195393865993
++0.09000979948494377602070534800332955914923353808674104151336312387 -0.05950544254826917027392412671755266764359119491142573560697157310
+-0.1766812336766545879148652249537685082960598655086779135604123172 -0.9001959946237991985407694646908538938511614716754221597894584785
+-0.1002499995910402071291914694552929590775602478191912580994509247 +0.8339727276781056935880882317152756624253846100151311187699223476
++0.8558312786548114618473704491843378278983698142481509704680004653 +0.09927611951028349706836561287170453188453277469146325245789741393
++0.5356506216935318567168964679980224448474954197740742721804425662 -0.9010966618467962776195985630489765296033085326873590007993041764
+-0.05251382922654688111844675415661855947948761360659425718759593363 -0.03402546949590694630838852685889140461998344631211554064761541770
++0.9518095182124288782767378820155949547911261560251647626870735792 -0.1072238711826665681196946075179093750504068815355356579338700491
++0.9956223852813107496522616247115213137215848581937907906567140918 -0.7738461366981573143244766356735795546461148137787305096716919509
++0.6741052796006089834676571454955036801632897076493615121596900136 -0.4683755527856115341522314517720222382387199829786648492284168944
+-0.8697750560716627155371707094260289644371901052310063829991901781 +0.4026316042949564813698451186792737954813344168410629981067357897
++0.5394620182747514803246426448045113583944092370821290584575219080 +0.4820652920917844894191158075706616269557743353776782706296754066
+-0.4274845026027779916855619203781095649893449575458629944853980527 -0.8855972698927589923645642757532871726201135247314709689691698920
+-0.8604697501072873707535504424154609782723273602355359333803551115 -0.7156208575877224242228261538275680342771612081145773076340934568
++0.3822062430356176188977280281604014506988427784943414973817258933 +0.3582921685466194167085015780426076023674951974615152763906935013
+-0.7335087736711041883089151876515694737975402817556229765975958245 +0.3457391248572388783148021694552194896745738544980993425461911399
+-0.8786687027770929787301562525828872003547410177701220950278899658 +0.1898550486285992974723363889123866840228257481772376043714392147
++0.1944979336074391420204691208780533563017707991268605634570366201 +0.9852816177267563236551365598470872320625004674736303938550582355
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.4599378495763905004468073213372537794551626106636974251929748981
++0.1841240265716411858721923885202834145897392121583597644960322461 -0.5127328752626999411976991951235014469906223150583665450713824243
++0.5314163276115420712219700899397644303297566254445792595831691010 -0.7250640076713630203873220403941855602772457792207574465107303569
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.3664640226911925145158998731631565496985709834578861810845300904
+-0.04982739811897050028189209963034074300557183166488389610036293982 -0.1829230519957059259014719836154323714201811952011572043450328550
+-0.2152831478765442996690076717147867376683641103330644151579049018 +0.7663404255404999759014695018263108592267510254660972366646582461
+-0.1430325904665435237882241441707630670064919508747748361914900932 +0.09188197797187069753401574606921227104069653565672117771844200543
+-0.5458569288127476004682590208265714990676611459841400026017844665 +0.2821632691197380233306201201106449234459933818835550260099127138
++0.1856688150172391527088040246433169286752829500750590071977203062 -0.6323485756724212499901059158566606197125267263836753395737464058
++0.8193143821859564924477154245099351963436429074028089074430038904 +0.5826799339815472061242376049396475927841898264843122763594437233
++0.4604487491339531156973853721884505256237012331451385915640611729 +0.4780419009203018977771033283484183138447577330198695208438205512
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.3481932956600344360656541747331071201253560203238428424671713627
+-0.2028782443808202039078700152556584967073846417006795171717789768 +0.5397235171115484827629368446540697824399082903070545700542569108
++0.7727562160593342436881229708062656539223995010850938445718232095 -0.3604330019853565800710332024409398333842069683260950231917555505
++0.2216455512897554102911455213296037106714896153079531893725412128 +0.02206784709309970739422213498537682033152669479939453958666843256
++0.8060520707732849845829519568044036159880831172244051400087891596 +0.5140805362361397989462654683141526251480917713148479507775943077
++0.2494984458565048492106180084187393465587010901621886528310783225 +0.2055577139879325158400716967563855292390274943424723909620681071
++0.6927204629305803758375801204652817551631393463953052744139099740 +0.9363489984466631642721154854894580355924578933635406952439843435
++0.3484206501444620766420233468327938525050794194268200530793896515 +0.08299387835566068842328307417217916064579439026011361630883571188
+-0.5365723013330725289094471599220332027885871668229904917249565862 -0.5788069098490179849437037644122782112025440082724326715621810820
+-0.4969838973904267472552603461634423875526049699439467087064029146 -0.1284152414207383422510874013777091904469859745260787451318868166
+-0.1099633225953045478540363356794430416477263111166654723490589437 +0.3581909722463856366585507576650255660017673781631691931226826954
+-0.6756547625687923165084584127259768184144567299620396875756298559 -0.3924037663196096599557804004767598592883885185542295651650374785
++0.8687355316920355914551191479618699998090617653378680974249892199 -0.5537740173099375841926071819120699791792948221606355167059473209
++0.6573707348942885034556657549189062350008259948442460481059842193 +0.1990678782106910330405021404858825331699408868365660838810733793
++0.3040922554314217243862762857092058777415182617569318991261352740 +0.1013221523378654305401931934133163415217102306126148126549592295
++0.6923315191547459490617708873077670147989473956854336908747033971 -0.1379989332550809405076321270761058929852977997812157331180551712
+-0.8796784447840898801814093263554195453289300559080999490503364787 -0.4280646281916533067383538633204007190213157857845158846353938390
+-0.02378306045101476542041128049120676361822587626846492046663605803 +0.9815447428409539970586429077948693211592926527131774107029769943
++0.9854996726419986830846511304498671064695985279263874167222764802 -0.8303962720135113227214966732662919586225776824245091417359622112
++0.6717005563662298476413580139956207272362245386339234470714331016 +0.9580392973613429212248785138234283544596344237305094264278070562
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.01729835930649802752008182884203580694088380135314997335090077117
+-0.3904035160770493684430115148009967524256991556076221372265894266 +0.4596508404774180030722894112596070153214639374373560827603986509
++0.3596214942327276879157632590476519168937540906266077357147819608 -0.8813547823357688475889079420398497662090407409141588876328133054
++0.7958628339830083470736213000945699871834494249238046750007408612 -0.5321998451095145204979746337839170120969213673758526734201468754
++0.5412530329369591795695895418300581875196694253995928145942436878 -0.3015151633091744041972988780702797813463840190624020071684468265
+-0.2613537732594101756765510813982454595302525696986533152069370387 +0.5914933615501783666509170083870890719001698646848042015078462849
++0.4358283240521827716981902176795884470008495588502897753142560240 -0.9399940476455643260457474100294825296078812016801219335394764518
+-0.5937465792299257034198201886287226952400923687140794966015317515 -0.8184778081659933933131791354201497055759306653408840252146035361
+-0.3218041479377133937935849601301732622610394503588237190352903562 +0.7059815878236578117912824621555669951732509824204298944710085733
+-0.7360914574746049921434644450737043073420684008447334807822853276 -0.3259963168582766089884461447443428784870439955864952956720837499
++0.5531873646948311172729843652306879823960014212266557902207414060 -0.7383806530948459052295265363488511266631211344950115933943382507
++0.01417576197421767893279369309359545621976513518858252000938611031 +0.1040839859462636518063861694542713580866090946680681841321895663
++0.6897588478092123244219967589255606032813281483291811335150355542 -0.09518139158306993867214001134240232847498358448536922715254275297
+-0.6996703139503628987183738269577949838863048093871175900433716284 +0.2355193759487134570705023443827182195655596085392665164217171538
+-0.1309677757443125377194229250386971011803561306992623123400631451 -0.4823623334449274945366401786995422786461571345950297494331625301
++0.09049503268981439002460219767349217513483951010643022102321620286 +0.7097261210315128308515298173000347109486249730310399771399644885
++0.7721031360269444536624854764846278079390436516442447307214583713 -0.6366824566996271409561780358182483346698719200747376587254469289
++0.7113282365127787106295924505560767722199840055537543517442585349 +0.4279116305749265768211341586998930266817833200595256634706499494
++0.7679535856628120283990827155162180966010981503917935490380557142 -0.5318773993078838113035136234042396356716929607153408172346511322
+-0.6127602430473631495393181955733023028663546816025211937039540524 +0.5229649121752240143301030141625804920280648444908191523961680142
+-0.5944056790460496081717996899055920305811666877696698395774078378 +0.8932451492305152702658728365777920970720242393893091123038855104
++0.9839367502424209997890558933686976016082869978582241397510153252 +0.3761429040748101353419941340862445843764537528009529667938348370
+-0.4548419343247805224460011391703079342763504118566706946966391853 +0.3918165319591657404686877552221819776743961261985672191676988215
+-0.8849845588398620212194475625021727518116463369860566764411889312 -0.2042772382936934363185959385490864818269303333738037039649249861
+-0.2496600323413886386258990085306122333313701779141184118995463959 -0.6769784139867637388403033614461138298215917891480509744092098857
++0.2013567579813494116381818105314838610969816486807952028421948124 +0.2689894511167983600811991852131288000217066200810955646831362788
+-0.8585801045716661137497618288810938649698205103567498949997938400 -0.02743374108251970702030916948959211033379700638990330340490019260
++0.7326702292582058588316598422918662773838658327971514003421703067 -0.1921042530528649959216431507436322410636316794679202728187190017
+-0.2697443704573465465233716116511309018200366900116819867580635278 -0.3506577581484600863274301844485080096358211939088267233117672238
+-0.6468087813680422377672655136982917947328505318460482424201962000 -0.5168867902768826601402199337281231344422000370370369961011724268
+-0.2812302577494115409480047067683469320314228801749259890701395474 +0.2359310157628380763898976242023819220099097044582837450022829112
+-0.02167413194230472805204979364706614220652157873015883116130884482 +0.6649369465695705382877183039244514683271315733049352342291759430
+-0.6808949558907041005466617267577471160247144934082880243741902340 -0.07889700649877864718736451167932862199984925756801259288055037165
+-0.9306530725185795934583927665790248017610038861531896668451002839 +0.3916833613361132396985962634375199901179036089043827031052082141
++0.3319152007540851906913026983763584438955853838764895977762668678 +0.5884271883607737601863357794930814951298245918739732318405675257
+-0.4414898031680223608932387792017485771255689761890070706015387399 +0.09356068629298800834552862326854075219370585208441003795148337720
++0.04675554236208552284539297942143061834219393972333359647545914081 -0.02115284303066654447866362357550138496217808311046069088258546802
+-0.8152568938325646993310760006867681539054279301843202148958871677 +0.2861989974535546201151069449275605104776561698281562120007034380
++0.3952163240756655529212705355453418848569049122249531536768131848 +0.3696032976657510775153683219990376992627118793259355754260389279
+-0.9395163144138835125672454933008856593503204403133472584898229717 -0.1979547976753022634219853582139208543435975505802370498693733610
+-0.08780353633292157461769946866167963633505729824902226238512671868 +0.3083446899788937685378398598409975806156302259318983691091049543
+-0.1743560068378512679152575299947443762504689480476570621749324843 +0.7985022045900065463138568014757973566061906222800223930361193930
++0.6018835924636782523215034400201993341434060856497418585329625279 -0.03359789469364269977052741073862432278013058502079350467189076616
++0.5094537464059880326374352490064905763350159638438638190213421193 +0.3058442945729926780852546709147784217827559526304144795568394663
+-0.6412882157453879879998117648467144628970706782597054160685555631 +0.3358400593421710405479769435498254915054120839136884648663994468
++0.9017103216368149546517732133490469846549850682301607701578308401 -0.9039848423428585874966891886870324176619669176784539909938797259
++0.9631270643127979384664069651403286361478505285019531813591892173 +0.1911026471907871222670648638721997611687960270694438402590606562
+-0.6210835173793688086670082589175993809833456274087668762475476635 -0.1957790019140422749738637241211029318937549429627172962981350538
+-0.8137281645240375388576750044830353268919925528507904843095256157 -0.5272881225050870895608016699337127231590587062478296918186178039
+-0.7041297500866612607234884784407130317305843364144413223065323821 +0.6129071885068196440536535007001388242376272222506544563955298481
+-0.1235721593345202217795554759876880268687368789792682195280803184 -0.5967807756968317036885884536399873191138620057026511679521139664
++0.01793996302825844948175557573252934185711456214972052895861572493 +0.1419214156196468247296664143491622047287377146146864573563748103
+-0.3411596862218241172328579047617234818967459872060847679144866809 -0.3729188860446455727916921218360834802060064982080269340892686238
+-0.7379746599220903325806827424480469595800618414934950958452657346 +0.1614019878111429153405767137561060063934090334621888908767692019
++0.6843546378904107483368305041075808036585650068151329599810630045 +0.9476883807866437391321623422763427075260612331384321984674894771
++0.4265099420399003863248167494626862205659560797404855195341684806 -0.5812085984652698309448734520345592458384199666670272990445789279
+-0.9874151891964456486571993218370826427302121071375833081581536189 -0.8944647168725158743127015168156629187563348324562331739109862487
++0.4601637140807105378191037234478805179877043129140064777542238544 -0.1552524721326386661677667149051442130102075136217846148098731893
+-0.4841039802362244364267157134690841461075259779700777041439742307 -0.1551015333312348134857357397110405699160690248571337588660866645
++0.9965877589863013394561112420396792373833365736836351278348301833 +0.5951517221158891262256492126860145706748276749589950859325852579
++0.1915677305233047765741909788297653137314715093312058543130169860 +0.9829412415600894142825230752065484917099314984928918779953478111
+-0.9100049476348622207723944867294612891098821253248738836563459568 -0.8217831349095154348021550924016190904379114842251511162594347544
++0.8085565025927605798160394591787637574375967583263627553971120289 -0.05378614434434340234140110009313857141850212637271811685684266058
+-0.8851479413535487385573817957243936843534909265401263726020814395 +0.7765920991329101818706844538821438944661658171524284770620731424
++0.6064591258881136876029163103297147737049475826316704311935105558 +0.8900053530193980702436491431309357148216062684226354739784800259
+-0.7125906556497681391201675092436355218810428000432951124150783383 +0.5107872300706422269049312673136350317459716042175924739655766132
+-0.7605582778547942408060351317015194879473019118917060721292547632 +0.6964076030497800556400919528138538257621676368889318223305483570
++0.9359455243018989598720894094889086512450300947660621306436953491 -0.8794820406683434623536332602575820466979455866473046510699853562
++0.6403329703003144866532882811013167888478814399097147096856286200 -0.5088504934523651849240294463009816391762085758520517970893764789
+-0.7566145378422368715122716757726615136162685098609876740055635889 +0.3960587272353248876425560623682940790877578103245000877968495354
++0.4983934648670891328811187892957709407528386913849427405222396790 +0.8318389711406526247874394730438282268449541087388908535617411625
+-0.4971948424110283155918942363898656650230845195141350175248779212 +0.2908404049848152844665629416898917596379961744476526001012413033
+-0.3682837387895926737476498418989480477365801929350913148252356807 -0.4522340776145610875172546689107679081944025832721818258192950840
++0.6148970507477253459184467315745337121338375212139515007860628315 +0.6095972306573801129076149451860582566334635214720401309924235692
+-0.9083524682273578446532722997799475788834527253595073048265657245 -0.4180135686862072384963371692047806871584008022240454862905880113
+-0.3916716877161613504785809028033398517645549846406356231576213868 -0.6024897896974237098767791140675234725440013290121244870008091708
+-0.5193518691808852117378350732261309854332184624171433727414006814 +0.6621371491171229540430976806077458797289688630727999690773500315
+-0.9750431258817692289559363598684739941265076062018304867776204819 -0.8457771644681230505711504040620172314868835514357550425928085999
++0.05005097085661604605086728229374112382053058454731767435671635371 +0.7013038389795794552120859066939979357125146065161378690564685433
++0.4399150750505159978489133507713340072340352057744402647976718275 +0.1512209641891157779812495583752231971937134497207692333662521138
++0.1872909367861505164718492831692222169018789408412172493435499423 +0.2121160135675378356336147517278253976774961829503343630754982816
++0.9419321039051109549245680082622391092246632631231828777233002149 +0.8664080418682770053223297307848733909297076103668229345504795516
+-0.4287041936652777153072881590344721321081952456510997660597381855 -0.3886446487612271900542887677005220681441299314309003851121823126
+-0.2333391111205556198207256592076331117879880842914267473885863455 -0.1541004845672387621662254141117793887633758814033058293878176585
++0.7889477067277564731712862630611699647549102063099584994888747696 -0.4758597711428631565151613488954610914310960939769445859848789908
+-0.2563747285446000361218237435955077669028092056157149416120292486 -0.3477149015282136156567500979542723238519525193539721305118135299
++0.8211574497098423675796354902233745259806437217163965161734702361 -0.1207118915970356445464002268728028226281865841291407245317118480
+-0.2430326281692574737943057410600918611450147916626606070615468027 -0.9716698796519464795207929551411677750792247894293615978326164796
+-0.5566744269539672218404388199827460990960984415899809143036909069 +0.7407628081577958569264201369815247495464692299604723617707308427
++0.4524110448637644360868388875231267640338311624103409145041788539 -0.6879838500064502516204262413283863819735391094656761580895493362
+-0.4077100331640054846709900852315956380002910175183742932154068317 -0.07970965821006235025846244339787791065967142683143998421176533420
++0.9925432694290908433525570320250227385826836114793383624485189244 +0.006430172175631879703148642535567186918045170271201264393808750403
+-0.6845441772530325736299180977635806745002567201737916085152286412 +0.2083342666915166641550993213107155690795626170792711728950869465
+-0.5689275448635581694575383584343021970227104177442089801706330228 -0.7239266725944848570240770261299741999431470777966830347563855606
++0.3985567814775143901221253743791327148945266133080683203695999962 +0.1811554626417623644417695580120648739794591833750428009959609236
++0.06961382826101090949578301124383292455559947536661707583968975184 -0.4224579142830287552438096616094483656207381020008556547601706595
++0.04307050119059237005387541827491059927895209375649378090223139587 +0.8808807771098681425874848342950846107817221625330297014958989806
++0.5849881776459916509815348468661649535409940486756497653761724118 -0.1482055705961444378761942010328656746545390947265295106518145725
++0.02943622593745917222898833754618856585348471594569686881397428726 +0.9310417509178274017816217156204950225530652535244104134208257707
++0.3572417013316431962026919347150511042636763596269956578845059238 -0.6237360420813325433518589781279354655656722767902598703246424333
++0.8246603472400295391578505724317567517180656867730457579866275623 +0.7053111280259947535566271569935281808413173199151336367168426184
++0.08267470722577286001217633724236129336011575576077446531397711074 +0.04584829659464327598328965885027063864839962341211067511387560624
++0.5296493544860877224747590127030477951987987258874100707895850711 +0.6175883916193550955345317822873087833892427409280462952531190039
++0.1781616718394205175709349645973564475788988241558791298588188050 +0.7632388444777586681197672536022553198042590515074317512385607052
+-0.8633908949968827943561744577901901026376268752722144571223670853 -0.3062766205588496333830992776381902656877005307701639460058766113
+-0.3459820993240706010475901311688197838023719669999227712290509004 -0.08609243408865237755932384394848005636404131802250447443795035149
+-0.8814262497135981437569523940906532685397798861799997656375266034 -0.2807356830968175545930699237444641738421613448464124995582552134
+-0.9722552720272006984678084914751283988556792015475269427349942943 +0.2837321230593817463718472179582219190137446015309067494691704194
++0.6486167889394565452584685154506739738504706411589692034776454683 +0.3720491667673426141634165397590867408837509492226418066203389945
++0.7237216114456588829885327945423834052953613010855527824331391861 +0.5034727256761569858261968852346041985209594654976885695211246705
++0.9153832161606877637775414865990581395464326012246760580785761313 -0.009144157885881301098328355126839269619793643603295722748734119405
+-0.5010512652356920074204032205934276172215285762480987760943959851 +0.1065537587030138189667752207309180295609992742561169141675922452
+-0.003517119711452846559277971844364606295296520854275366315952866112 +0.8818131080457396043599130856639715331916872717703033294662125972
+-0.7432644962454565902867854377146609433353697756825593784757725371 +0.06624822645413341132516485084647889334475333307506203596021112728
+-0.6678889143320625765336213759043802181180754155696893060399849702 +0.7663394138429891091825666214398391644784711739405820794627859597
+-0.6231432486376980435414857670687342821530306865222818413703487444 -0.3382164070726424953691775105027686437701674578246703648616422318
+-0.7612655580159597760389639032422118132475827999877015743017274080 -0.1776695900707155840157232674739104759822059092845778194076116860
++0.1046561870893663260798556882535941223232955552582338303672866205 -0.8687825525507285703505786959165265999400720188735789205667998460
+-0.4422178249719287625023613714462236578393297082084105686699745527 +0.4397670266261330579605514905384248140042371701814321761483126901
+-0.3006761386836519584160039426021947715604263308295216335254395417 -0.9454260790333157025842139080265642226283726853206829747367660514
+-0.3931472033430920383369653755030364057981520323323553764459192375 -0.7465823767914729627434676360632047402277460201564939599724706907
++0.8009564737468829284569870438621332728504682800502357253909429840 +0.7052311839367299404252687154584356510684116076707984251967217608
+-0.1173363847349279118426129136160276265546406000211794923295485560 -0.9318421444182012519218144225635532055509412510643228557339251923
++0.4299591565232924801870368761556079288133632606094048768501521181 -0.8576736801344055778734767703267144055670156679846967267789921797
++0.3519508427149724056038340065726224107858818936655812955385008590 -0.1478217007130774248533120506210730864183350228145110598453423272
++0.4719165407085054156880418423268675488422117760448059022673468457 +0.05462700407546087606204573313631507815053653778209100205570581568
+-0.1600709565700552484491336034747507816107856100797576115468140784 +0.4764939949078916828049744091777449963844237140493772774694134670
+-0.7196566232553047172113131790990428945643928116318893875786802199 +0.1379430475163161264083993351712499421955520010926032380399590362
++0.9506852903491360468879758484099667312771993016096956267658366287 -0.8722682133205163606935425963949380167279655987048248488709591882
+-0.3776736725704435658453332291251578463493585478972191163904289213 +0.5861661191160302037987499566402500945481179434497168046483013993
++0.6001953620324393368833490197603304801854572549372059847172328017 +0.9511301379253677641233866062643668434727271389575227661880319500
++0.6978878736648347125949172253483236996713754832649550025174381314 +0.8498807701046675501665482786715175792685237770973749501128663635
++0.8508443401291057488517795791511283359984797073308503806275388226 +0.2200701524645380439217809977013635429516188168408201756540561493
+-0.4669474695063991815703085816201270850746349019459750890255838246 +0.8249582071769471226053224078626229639026163855667344659101535089
+-0.4916857659539131984511014678316277462480514807356006060275370059 +0.2853979169219609315819428844710298570393316123206963597197416679
++0.6805454442564243054841615570704809357725921633306984108877804159 -0.7901437237059640768654777672299256924358549353429375282390724532
+-0.7429928693445994197394008924008488085983664860223161935727994358 -0.01319059827761145109140623820109980782066049990812106957773300345
+-0.6969676211949719236627008807329635886036631346596064918901094455 -0.9818515352623811994083416088821230334278672998037006218291757018
++0.7197019444966162425693701580554867509036572823057158142921206547 -0.2986968112238367336467309737480107580291411090682545589519707784
++0.7821091276993633157184444189269089852199610591029476119050859896 -0.4497944473916177090035246518111834405653865925248570759143022638
++0.8533226121539329221550195141712150337184702154268885269745819910 -0.3375268928219578247729609646877610913302791116287227548566986869
+-0.5271231904299831306010230073357821701271416210281300595416035220 +0.08447910082532307668034293733705482070969582105066084618494469007
+-0.04518836599707041257371263007133991513702551585551047967233360089 -0.9242547092849041171110993523487331454286928327494955848813983676
+-0.3994910205015023995978692651199523393500004114939614636352980640 +0.6200664642474932353937158491000482969268502306844124444742256848
++0.1151112248581587985459044273509734339372139569519498681662926204 +0.1507553501968200066386128118805905810930408596627068923557723147
++0.4120054991803597141675815179438163442823969621208991056428168406 +0.1946609300470609624656143909053119234175968015754388430118575634
++0.4343579826046095597725968699957767082823418268721181549420071456 -0.6724104397728753528249736601753778424915675018287970126738452258
++0.2535126428268633086086116718856542176680789611156801564801311848 -0.8298190184914018325583109283991127533150551871627485195109256466
++0.07575910820021246358816323232702289803823041246205070258897871070 -0.09637656063374071487176603711274413670195539183364576149839426524
+-0.009921455995466628736212379839332998874975285848956671613709936322 +0.1921303750182146799625028848243072474195502221033198843755816744
+-0.5891566693005274615768435832037723406013603962165946345013825592 -0.3313245923738876167543845272095967027448619842052843636060236113
++0.4725424296459514103640632185799575468737722475096114637473172301 -0.8270109097922122005628926277851881766634478216101265402671166740
+-0.3642689669126664223527375212471788979005234643229363317834063467 -0.5808455890746888598939156853853451484553266705763452713975401714
++0.9106160875739411428476569185959640646231793213239998804082355729 -0.3132519652463110597132927497909112236736519727066223517257847543
+-0.1554296096295892351142787706783742826880784898341993011418432069 -0.3032736987256567662515363486230511917639178142905279839607986837
+-0.8069065915498787556695276318086362565827819941733622970182376756 +0.4794909143538091757249048066304535006185821622877975365432772921
++0.3774149419137016419806042817145212836004227419492405559087274340 -0.2370445607197652660244851755730595498019032479581638250239983236
++0.2862571560348818269179471614749431512680830893414487690534246820 -0.6751828745646211116252364171431052124939317842709028917713106918
++0.9392006333865916821227548404291848184201007925131229813910957774 -0.4583835686171642870386219769514631254769222033920076351719168947
++0.5114205299580920868823613420213360686329180904621350249508347984 -0.9426684765788254198177276694134526032771608196465522220600586033
+-0.6408078680635244612899765081025913686282954450887306823350772997 +0.2355326695852541894966450291376880539406420201670515658854770807
++0.6103476918632637106424717122234807592708375161253117953076031400 -0.7227445403225025704714718386078060331302526750579642434551155256
+-0.1695324055840820458497589349479760035964663521113253737383164439 -0.8623013373283749693429116336858512292679857052180961899339745629
+-0.8353594742240205937097730115138661305557325449129426505768609534 -0.6768863933015310802924352525350942446125160410459856036007239942
++0.1821483418007667766250895141417107286953921543595289977783017637 -0.5508715594502515298007566134370526438165224982567071828333378330
+-0.4074526958925963909486488891837393063126910851657623153854908031 -0.05546079795188428795899108475362016774720916134974412584180223190
++0.5194123128321160939700776973599963366760031201335463428826305590 +0.2084095657323330533751436865384435047288523634451472082957267057
+-0.1339026726689501933617889040862807661257038358606191032725698017 -0.7925894721661233308601929810596611591595135658017971406446538342
++0.1617840119849052908674425797539541379830915417411164257796009655 +0.9430656790798702022501712286910571399359647989457196990713251004
+-0.5833399591688895541493678958036554117556929951798174740043291689 +0.9097769841197598976396570840231136822202736452349193866745722417
++0.2558611196916433369649336532000849479904305619298222327625863899 -0.04444385223059647041169367950420267663022819951133253336727752784
++0.9637184128969163713272727389388526394331293708405231601274766637 -0.9291242667362146311245322999420073129577195466036055585435294284
++0.02398516466411951663039478357357263297576765858214578984119980389 +0.6454046671163622732840153349001088489305028485505912003486878466
++0.7220807768185265925885711430037484304092954076856054861183001563 -0.9539721644987273212915610663325415352166458378082731730169762278
+-0.8314034062393001851412680462190559603040746972786212429324375224 -0.01991421728197180740305569149271238624441514900253401122749115665
+-0.2313683087056718682580625867623460795004227069874977160354372877 -0.5619439546097177536590038678550833341039549973038394887085824421
++0.5241531162028989758906123049906275766571616823241720374203214447 -0.7551817630936938970856845301335340553285882760648919042762997070
++0.09003216360057281587724105549690566269005814841108581287665281058 -0.7092799960374075519824556741304296625366216815409652776575338836
+-0.1599268816032428776743959117270259866309677355351818460136443291 +0.3353958236594048211905335673283951672360187431263938628716770472
++0.7126643265921692501928118835762400720628273345745039396768073268 -0.6234920765081232882777060290522594650586984128778547653542897937
++0.1443381463559750344148688262608847179704805274810841956785523095 +0.4066639098559085179827381271308248681993537784127137199791541547
+-0.9541149480810226451568227541620900387924893378859274527595762471 +0.6888541307023685367650429262183084795622817021078990347359040252
++0.3516772517804962317135771244694045300550581304302552629989927399 -0.9481555384963925669398887813323797957023517233065023977441949140
++0.8312645047002901343481040986077492354211106507977246573848547872 -0.5015201878413479062880009857359259777664018045030279852720799961
++0.8922074343575836687927424867109565448477559678636672119414443701 -0.3902806255136952749944832997477193870811137460255785136756231534
+-0.03914580715076807517564668371313115131680481962361916796431130169 +0.8940810562034766681184398526218603637384684031747669403831774166
++0.9746573852711840936336177201962708050687509298510135226623575906 +0.3152846617012448223595031355343062791396040757505681932291954468
+-0.7287905575728605025843722055111257091486772902084438557782657679 -0.5853667311693273438639541695373237953367925976152283125986823302
++0.02849594996466824865218850207780069267985584074611847663329993142 -0.7757383117914653521356301920620323335907639538542650052989437457
++0.6459433245400880395491408374407025292588521318149535734854910274 -0.9676464868621590557245466008199672143229865037214753172925098902
++0.8136628661132407079541934173897141567434892632439804419184181281 +0.2020175444026846223086416087109890252034759269753112616014229975
+-0.5672690776078439250283757912452916624289131865014778354746409640 +0.9064277604540295563896026366771339723399173361871754667197157453
+-0.9476387464140397458861421362921055215974651715794066883914951208 +0.9681800656680674114012455425323224895688631371805048427639374987
+-0.2605437240709855372272831411319884164143200014969561164796810212 -0.5591663153871051378814315971738268023901981852627985832650669801
+-0.3311597085631775241605389615954882776971235843100995205029515984 -0.5346922671555442801701178778989178021726664858422988356703295419
+-0.8695822150875121724691553338257829869250127182425918912387649806 +0.3444980967888391077559064295702343982928489643155416977949027925
++0.8891098289754707421060220890985710245132795198449297271458423909 +0.6524414684347604390145493651220801119897406951394031973514997493
++0.2895552325554255930167653346015931047558748269272406529926466973 +0.9715168045068471667241573333818081608264811442132849887750564015
++0.2650936900762128600362413578030729270793479332746334793752266553 +0.9687794345907238931874841127192189269947723546275081408414955839
++0.7046936151828971593710415948632896548808680079056988913118083777 +0.9467733684786570825255461585272606657451543590264383198128928848
+-0.2115570299364757676008017443811649086191736127455534555376144021 -0.02618228883496601931678275608208860073366138622952162543915707561
++0.1470216587412559156294994682432100810761459629584248289010138317 +0.9671911696030048940548597591647159026675278812801617138572690650
+-0.4329010361486256961244622956913108506550874170254014125575533479 +0.4107131341260156168231084622191124144554563015704133207217943032
+-0.1766818323431859044625743795499747752198631648846896440459670393 -0.9088718058760959815578271742818958527810978736439114187074688433
++0.3427075333057822059987675632859967887158938796610229803331114623 -0.2069705235502430514175436469293669014736129020159896754084396208
+-0.1833768865732711001295741826816961691797355582139228551235621230 -0.09324787514202935663617280536678688872109507965649393620383723464
++0.5665067551831146950685364521560101025985707475803564862178192914 +0.7231791994281621743616169158867211778865156578075884204423470036
++0.5846720091653589171386464934439494744713232525388330403763032709 +0.1413417198226440399596010624319277144096522160150910096002070448
++0.3128821017947787434710701629862425068710081298914976621641025408 +0.6452799778117300930006404525648135649823319112183097726128126942
++0.1943703959062877206669871517590249058034169064564194870074554031 +0.0001324820015653634717284558425511155851649249838995614346202311528
++0.8893705554674630659403991877841826994191514257022249874261157104 +0.9216400396148398763759619384277842703902375783923727574755583100
+-0.8883357910902242353575856676539666074648753053656660309143767467 +0.2772238250445638088649095519082079928420373270295130968271145263
+-0.4607165734661637817512681868591410520464620690313830851265222420 -0.3335320297983638714493052169571725991729933145599093589375351885
++0.2571290378683215613044136510821588749887474163677002652639520119 -0.8223396559738979985330093118714969171098500450056340502171755840
++0.05683348973511969001808746192505133291481235528637618587938493271 +0.3295139257043602881669836256790730139898530478212058331148436007
++0.8458238445504835463314748515393830432307810942061667936052115581 -0.06115391410157172904397577014749318977952322426125598310616404975
++0.2568190130746644331048317748223591322462097932104379543095780599 +0.6835432652195322618476866497709639400742538332195002129958009890
++0.9282397683744983930469496205745698232573096227549226254155622007 +0.3055040272347948974049471431252873703100415579188484798321870225
++0.6733680895626635922558736333908780380926273791887898430485173634 +0.1067148542806152268766219579914205419367991662898966895185277718
++0.6834258455476852992466772196651133096274086383123765308288566681 +0.5696355236701818321080167446286162913585391341865592298850528385
+-0.3197260966794518948885909003357003020869183279810950125249989182 -0.1851652251420485383291265723906336461567225200115585228412858690
+-0.3602154836971247653552601690662060499632143516459194629015046587 +0.7686244742165455818047562155636834637099404529583308548280756000
++0.5644944652643029946030943876077187355907298250270171876933333996 +0.1022528410665870649419040188498974557129158688870581145759491389
++0.3002450060649265466224439088480847866613297705716750391656367250 +0.1014925082684339575369865965795340106040626194671494947073602968
++0.9109171936013987677935840681404253773950900911474823029568083952 +0.7477572122122130969293060478764727194813113698034795628044078669
++0.9809865904559495207084689029816148884009367903151903920423149056 +0.6924758066100315017976722908193426687443332448546658005757320131
++0.6673430101175698152854688993768041548769019864465421762641808302 +0.8869096030987742843155704501495330562607059843606584083805784372
++0.1912403836532585581545915780169638266665110774534903895312903483 -0.6277817668843115776717458711900827590200690611889853496417444210
+-0.8390872225468263142545242699093560592768485203012323759548269441 -0.3632278302175982492864474133040773301741883293949963631186826484
+-0.1694425027392812196149909158729299355102867577367629176586906841 -0.1557912580843735901055404235392644598897459017832138736768762235
+-0.1109481979293641305323565532634133494943626968908239858539934786 -0.07090294932007688431310454541587571802424142414080071068706780452
+-0.7576390226829376962602306885924643215709630457357178698800775945 +0.3566363768267592142521717576496554660954494367940518749047616486
+-0.2384036559822549222513803512289385096334288445624862912807231185 -0.3948369313019872812140888255619478250324505703512774104330628123
++0.3322077770142086566449475410492734728431728270878221527000512398 +0.03684381966041500897252179440490349562403819803769631184871415197
++0.3008294101164568639831269327829387098511379992571638835271467486 -0.05154859459309463917825720647344894974734750371745190425401279697
+-0.8500127542413940364553721045188171752513697377512921485742321549 -0.8435590128709086310130659843844800559448177203714777452026030403
++0.8368368938909749223146178710811008588487209933709262501849117012 -0.8024603780394095722814012290244117513718151582143144131548046405
+-0.6301301812957352916599361333234055414853612961930455283065817178 -0.5615959170409364827735994949307740111003827840765869620701743491
++0.9291299159382365190501422959288431216663095157691743654943652200 -0.2406054361176550593781303682834887942459239594611868129424590433
+-0.2057454411726747632614076986736370443370299660132771686206360685 -0.6212205831758649268381491110562911525769878133038976629581697603
+-0.1506655683923674574544013920490541109453108644791859114657837843 -0.07920840309139023601400623896627027597078580436286665781364678459
++0.8300887071220306139363536768734752416692057466278345728554448043 -0.4958644774024293965601713590069760676547860865970839526801603944
++0.8244806963149490337769127166910316223379101498545059699144474846 +0.8457812705532037651943361856395398405818617902754170696792953775
+-0.3267801787861358921558326193709571898654303757814961069177939802 +0.7769788743855116391898937434945783850234219049758006055604900888
++0.3173522145518535642355402682590855477810669842087119833799882044 +0.8655403108892996457744329817867868130377386290200842227556867230
+-0.9157683658115979207506514703487531113998263500938211160185082296 -0.9903896023829894262623370446955619852277813455548337196436239387
+-0.5134442544464950511308392504791416236936576938651094919168340614 -0.2427292515737632300787075714334802069171056912511759669762253388
+-0.7129018571172519683293420596961998697718416105831222546361506794 -0.4383686834095238112060147239703516527268430966036125503860397859
++0.9065123083843027156086152486704570882336886865580199421650643667 +0.4143593663297325267283308533752108031294027450450076340781247811
+-0.2793634385919329761753480106077153213406385720130702294691355484 -0.4406008501445977427602946009959854627849669661417984420783974536
++0.9164978685669781253679917402797926874507921723240255331025472326 -0.04339897194340190113697037285018600399250984252888295488628982646
+-0.7596059702886165943031875281927001506068162489624554198112485991 -0.6825727430485707866433768880299313626336845788720891659144041176
++0.7396561092486294627586234874177829200642603190414086001487983221 -0.9836544531295822045599040261439968241547683663069193431894899359
++0.2718148178589837914007749073085756104697032416499157400657364344 +0.2876438281645285425730655962990780669007826113618675263630695465
++0.4662517483044007390427270839972516857434523020114609710559500148 +0.7167004517840280802298637408459812091174189069108959537557314548
++0.08808257115588047484358934167308625153926780195956135649522315482 +0.6091222782110755351870548874704204983344743368364405037360226689
++0.07657390220669434590596313316601208477726655511807687988961336808 +0.9206456968074599605371603716771919502968888964447352020254334121
++0.4588569896068761120165974962862286433176923282523892852244105839 -0.7067024110394786473523450986461408669678901375214176591774178219
+-0.6615298742890711325192770516946564063654133133292967525875541474 -0.2829873729538912632864157663252998282378399065706987979336717878
++0.07011733953074958640104399325017215014827304325156759173135366906 -0.8068289676858995323274646589113038118605335940808074727369815750
+-0.9612259440538002535765483137294916063381851202661518339189071839 -0.02195225609796448822304130610842924359927900199612652300434035728
++0.9171138429339400553744807769217606095680344268845843714152250596 +0.04099867485844977824847310830400585439341237169143167608628300336
+-0.9187643669939806209463756973588109095305506934347503023729389190 -0.02484528344398549289975649783047048190339171557221373974771059472
+-0.4415653525364425875595561926619571676937519758818885848285036367 +0.02004460614324631442983532902202671699440052125726278385092602256
+-0.2086520325624420487101916822135314045088175303036646863500495381 -0.4334991032807504111456870129662442858267073955670677030065158151
+-0.1511824375843169824185114172319147719223588913836399964007230083 -0.8090485409108219086426738601754674942099132589936084247235024465
+-0.7035924603583511535986984592864385797537640709172487432674768657 +0.7702473982792112751431727784483013730705905445741550518390174401
+-0.6564151567101526404248033266354854181628562195765596859557723591 +0.08099224571164392724194556398226297539910433905002632310829933371
++0.6965977875831549207460696210505433710177694513815592587963931164 -0.6554081747727620717115563732440227065500132670389646816380792417
++0.5816085290684877844083071838790011353935994102902484256340030157 +0.5965083817627354043235093863584247293441244587953261596154415842
+-0.5272537155512824066074255359659027189627420792613958690510029190 +0.6153202188043556099150697787707077146541426275901825191784917849
+-0.8587217878456442924783287669774302171560923546889427532593498197 +0.1083511905822452299980489630021882071334047023482997010782324110
++0.8026154977853840476009847583617913539728860956242379381174833460 -0.5466024683918677673831274503157034478213058238478594835604604567
++0.8316489546057848621322523310402149298559936201982941913906852864 +0.6308371666781125234332981395909252969437945627697990093152382635
+-0.6097628083165813974260954335449904988521230536577883358240508937 -0.3068593697734719521023797655977795079017376115904909119064658154
+-0.7453827739395389922953742392780783948094849228955462762695809318 -0.1274731976662049928218002779369784128195321016904377321379419807
+-0.1809554132180854707773280908184743372302489521523696413745651906 -0.7579681961888522156046669052958830062903139419229097178974709753
+-0.8150644675782343977339925655387466104832252738719676821788883516 +0.04347486465920891061132525596534032883117752517516583046426173878
++0.8917866574285656025686075793775106139378346795002297501283298878 +0.3803761127883415009914000556141121258964626601535813795970560280
++0.1101358891689796743272094664641471479081663952426245980291616029 +0.1588214415454649676947410271075716292321436748897210081310496938
+-0.05419673336890120775922638146599077291212376190352050517562870720 +0.4445339820216909868763772107344367073892289240126003364322113305
++0.8788147199714254107037333013127960617440138295766969973173354907 -0.2636181682011228267843312750666997489561411589077551457737542720
+-0.9270379263943661268097274055148115732381615337919171906603260360 -0.3662561158116567538351731606189158739144594225402489121633789907
++0.4642977843367946473083173399076729199459994296180290689057358231 -0.4750195341630368709257185984930202936031209831891572200536339181
++0.1101424766711395834493541735390025259293259452693930682212953338 +0.5702968300590371623215010357700771680278707901633987813382467587
++0.9804018990020609521055380413227891839510323211141337706692935583 -0.7751989966040316910850240215631670746410443924058002992435164760
++0.8144388485796060257725468016904833551056739055694392606072812336 +0.2430439628210958543741051027158155164813111036631839118240916656
+-0.8395517493960846429066650820934625099120153763823264316622178314 -0.8129330471026109910640079605080491864853917576235554502845579100
+-0.5356363024105526066730000892740728141483682520537699099980586020 -0.5112016525601911882581535634612065079447262571941998785313141412
++0.3785984554723058056848684987205281373405286509670642510688353225 -0.05567204545353434011212969983459123242339355501691674334085872991
++0.8125408356507693035783621684477489598336579370455636449932920399 -0.1311612511252216290434658409217926407801869060375692214992173376
+-0.7304988390989189945560089553959860009999748685520304348991029980 -0.6886967575822561458736136223315876883308062185334039893922242819
++0.7456261383135196385610840292806346156606897621955571769519287646 -0.3589308910258447911830678159789145521326850296016032385907829431
++0.7757376987729343002700728678244609761294630501410110238207420656 -0.8949182427738812785096657902947812658201060897357689342800357676
++0.4078040359990933213948732923927214812372340416337539086249054226 +0.8408372117748513073516578014861220278102732890706272668313394571
++0.1767712938446947695198229699328249449877999447752262239584762909 -0.3617641466717185036424731143745672078438578668491623941206172477
++0.07365715096199305303280147905505827004287730234420360693427261478 -0.1707591224381345773849936039601356741845102514912975277962867846
+-0.3108355387530528344022186566449990520542204513871372429842394977 -0.6404116033988140955954927920998412457693883566024595781405175706
+-0.9157841385420411790181903606309676436954041107787988394005532203 +0.7702591332911895498911520307150807633495639745675448181912230032
++0.5517970855559362574840981197851271127548171428450299159534222246 +0.01420292472867323077358404759172191099913490989922743045979027336
++0.8076059738124808816284579607205742577625775175934575040140126923 +0.03809816149740405204354832023539305193061953502346169299403152931
+-0.3623547609761457713662054674281991237079618589827581000231798627 +0.3575794629633809699138502541512993497931496249406607133107770615
++0.8183208109839758987990961359356649031888827382055407382873878803 +0.07318044373389284424707354618906369972394464342317961867893171637
+-0.8535325136050236145755622731382685357658674118927526952194103789 +0.3458948143528789425747121963775747655154876888076195078178459320
++0.7385965807078199198295561757281636178085738161163241745076529168 +0.4248289034764858073377259501311418060388422699743383603307137121
++0.4178732695594172450325633659542989992529347731253116371174433175 +0.1618452890578770009985194160536926405190426651324443897674608814
+-0.5340515573220288676539037563933896861133701709641430080525373334 +0.9941553263502155143342624770617600549960380922990743937314189505
+-0.4642629009871243127720569534731497065151730863379424324926815934 +0.9795407543281010250063724827390442491561656213047745912106810347
+-0.8697898736666791719966463521302103516597198677810465705462889386 +0.2151941812558321067191636335225433736282766875618458144056964135
++0.9260211067928626234987335196506123804866588031248091568668186807 +0.7055076542866087887647151838744520554251421921047503322426080808
+-0.008817333363577657304077859427800946074653041725554105998740790418 +0.2471624827381664631964560420000372293616786343304033510449036098
++0.5582339538069273279851977709472563742471538090477435724053193958 +0.1209573707110495975446893742859125585367937279928319351214079900
+-0.7255700875545188795082017268145707633365451965771130961377344798 +0.7791801554095804001521670922387734251043290640707810768995556096
+-0.9882699898882978270887601698779901692432742326870804476209571454 +0.6067355553824254085786497483292627819393339234239574246674787651
+-0.9276804865150421462892365252888320798428705497677187785005965023 +0.08868960574703028811072978792341160705960446814695260452659171585
+-0.7832811923001301276864916736742146403933964466320677660322633051 +0.3990903574516372004830722956321227205240740064093303142198609762
++0.9875308623632782097656312821453924896496525870736205800843638587 +0.1177647855448559690319850588505245653279954530978542689948498565
++0.1783373466436970660022454632463179035762888722766888416391448363 +0.9470171792133100956743834116445031478312191958184397979317863605
++0.7336545898457146349237975784794059749253087905334857489144998895 +0.4961922608072054064567252104852280791345647477699144174429778763
++0.9127856868366581467510500732005220443872380003084957447131950721 +0.1288751749149191327466410284804379033678422097957161712250061208
+-0.3632881183963366167884860409201422151102177606787650299072097307 +0.8362216532296167677580820566992307945516335806988169220305518213
+-0.3268576018334922472384377473775779415605488146060240031080037115 +0.8591549081409787066097348660336983424808256904630373948126594352
++0.9427149588672463047630742061537997891278684495348468159028173334 -0.7734062687704093417944765318841623377795108217674049693865731324
++0.7916571579983658653317798731563225080239623370784297265192438825 +0.3788105234983860205599569617545817672868431615677158512897587114
+-0.6817701452011630996907953818868671270735516339211681814255907609 -0.8389459343927788395661478245135132324463100476531078681487929963
+-0.5168940707242169951406978648595076294647040487113324969763690473 -0.4658678630239863547419377049366868754590205567934427509757736631
++0.4155311954965517114024103086773167213755429855677272377839721067 +0.7404658026994471771300230646883653343671374375867160005560186341
++0.6506707691016388017357516362760131941221566979795718699904936102 +0.08416333328385508532372543922906858750951963642005999474224349604
+-0.7043718208306549962960929614939365734224121070283816720729220425 +0.1071111734983457818249571150714459043528178055136462538226893435
+-0.9030673117697692613858834879354138789682350761417043644810908266 -0.7342394899012975316448638697661074900101116252043300223555677973
++0.5465706740090774853953336301894435415008351646460109707839721596 -0.8740721280807645675887504456681869370001918719840450669198366118
+-0.6814239608934778019209189605706175697331566277120687413401512713 +0.01542890285360182575661109653803294352995437375983938534365003550
++0.9205925082347564380336697132499017123825554431098646503055203834 -0.6424012720651912849690716071869841525200628702182656888157500792
+-0.5020782788038677346392099888475830183897864323626792080264544951 +0.09358906090141487857173245505047273965372618996012235998794973082
++0.1045062318771655437961420896781653537832869869453123103733053855 -0.4157555086907749029967011162538528247034033523567652507150679806
+-0.1600201060994392446745228713066083331646179396065484107159119337 -0.7561993148573999298651877947599753959574284281538345823047084148
+-0.1176882561544923620215084381200312622694313533614808151971725197 -0.3098850710274114099613659060821909226918121656383441208907262076
+-0.1898251716095867210440135081381899859506047209026635006620997810 +0.4007088432266679561343532173706167816818583530939278656878036565
++0.7858779951083861580332996484728804881745801231417586365625881696 -0.5030270327859967721144601195559801084016569474235724388790700196
+-0.2279832493810412940114966076664112325854082672090777285019621618 -0.1254932619600586620359704839037545292590043018507419019924191228
++0.07761160430503009576118799101543653660926181662195182427626478291 -0.06323882464511211805768255484016863194846075175797257027673248321
+-0.2055488181060608320954691371766551168555828485198254292077222517 +0.7740434143122501624495532596559356715083741305088641790548795433
+-0.8570653123756356936765798157651852007633450856266713907351356642 -0.2482021277292972472834215836041145037473112850099676356870938809
++0.8510470630599207981929699284163199387691742475697788917650312737 +0.8162267515026832377655518651953305496851073023820452649661508067
+-0.1656012361332616709224523200638076386717414816760750375488963700 +0.8607347919812265699605503036450866483439336702947305280102857957
++0.4313169396402067420747675191335695107540210953445957632944683466 -0.5309702165357808006454031369004539947884931659338609500364168253
+-0.6136943581151102724274558633917286896829715873222934810854627144 +0.4661209224855332076348639342730325115741866377387506053881956426
++0.6107089044121956416324813364187592386184059323011742030772237424 +0.5776821028606150660889123330772139524515008295266995560111951347
++0.4569955077979069087363694857841772836360708458051620753700613184 -0.1985327861957153995497521943434533143184162535591989207739341076
+-0.2056316517130173688144925128431576975079195367781834481815163780 +0.4502751578135112250642939063064803337350523220977614902264894702
+-0.3127653344142269367017311068934194736573539345353684494263561034 -0.3861909913249345135713417773890475082674654331716365206649915641
++0.5675769204970204695935245199626881958749158960158155816882247751 +0.1256076178879430003600629383895954690707756484016956829433063262
+-0.7973797882525385651192136516616674358654229933256541899442767797 +0.7983632414779313749722688346773275804836032987683379439224586498
++0.5012904467166158311205187729565579292182659743325041112386977484 -0.7513110288194537896176065141042873822182674733163696300012277185
+-0.2570017860782360774767408845442523659054818260225494146244853645 +0.3513338554774849091728965603494186070844797013423703892677707725
++0.8152856345265963021214702712184311864712144712337072499723510820 +0.9150826357437645081092258612842596130866237082371404116524470043
++0.3474550590975565404544821867969338696280672245517491821876495039 +0.8450034863839992679259832618289274526773250791866488855193562097
++0.7718119181978566336150728291679018907122826327418198982205731192 +0.8176217534700258331861586697237671669991978424442886627876569311
++0.04535880498283686865208322483522967139304884767842664817216330064 -0.7873051724773785442063946354790725441761112843111101313908674578
+-0.7174845876743344015633175484139120449777707133419695966520824564 +0.3123144335938061889798634016135758453254693350673745673249219293
+-0.8532961844667343672614407218622874059456622649181507984554557180 +0.3123382752374946459355172109808000578422096209527925309524401562
+-0.3551691762386405619967249318449133353395153150287271325435124081 -0.9339279171745365430363714981169257550181746029317075569967998069
+-0.3797572987358468877601704908647997438784227376119508300980299747 +0.8835095909713117555534563067826800979366672421472610981148599819
++0.3764932269744641381853168742044507381862031491302365412212635060 -0.9145382832736862644996651076050364336349696601749050300292335644
++0.2816632617692655097062060192076384166912647824219953750826131631 -0.7054841588026875984151961820480995248584413462900773894644588042
++0.6936970465516315197236088803729008972356138275937389314888615401 -0.8662872524309134416838642167750708159908847064208469863759294421
+-0.8093948466492362612217398058810377625062288216775489656468562411 -0.3836359426501921763558833151140651898515109214927471300275657461
++0.7179094192553983421088688870290454722724258927762520549683983736 -0.1278260677132988110181521346206121424185055134451848756290487815
+-0.8752125899339353908597128121427435294227530087554395150859455125 +0.3896591445799271126073683694840012598017290609984465027699115507
++0.04176278772058224232241432506737925045260833246510034386845030186 -0.2169790352812293235950849572206099343766245248789767934673854103
++0.9269329565460541008731323076781001715661419867914361439680533663 -0.08673337053652514571139855094509769497839445364765242053899839494
++0.7868192948478988386779315105006009612933033201432314519183555363 +0.7237304559904597655111721160440014138582277864081064985726190996
+-0.006266353716036539320572064746082526752743361256443337864258505608 -0.9101100777532639639399951766864095835176625543788013014417828461
++0.2266154233841305998807280483192876569901369827513556377738818721 +0.2535845975997746049529380990406226072259406357938539490056883921
++0.2746350702494963366663352365693945459844370045750631885709403566 +0.5165666173314337648990456980047523501883858730443013115629991856
+-0.5247772986387898164750425486144677116796659442569793354035835811 -0.2535452697988746543219528728662004668721885947933083310011115540
+-0.4928925951310793013273500011155592100819574396889780507999573189 -0.4730100565566169472612726222267783874117526978583519875316694858
+-0.3113637472666701974473222596908779747755145602641740095469526339 -0.5473367296587413374662820249018375077816587539984805440408239322
+-0.5748854355426279234162395955225246347221834110564955747956209638 +0.3215202098266535701060728201770767555125122615407289412313796675
+-0.2554460407289573319602333075606187389397146712378109702048311016 +0.7544398037410631813142479993292331128421556020691597319392063074
+-0.5765429128839939287156523310227195364489667524718802860187766530 +0.7284673342804755575372658689972694976008550133109934598777084984
++0.9094805878752663366484875502653563100058416506406189283398268678 +0.8849913650743222135964513416603417834335835575263880490539822202
++0.8848752416174802394989820330821347631944308988732361074957483326 +0.08348221147508551426758738238908217977029292167283727637068997271
+-0.2800064663747466167971611334477592148285678388000719119052505901 +0.7659084749611917908715407846485532381393506545684142220149633250
+-0.3524957419793069043802183938505947717728662986795036125951037387 -0.09829722671689280559755688104069292273710924774837047988183292013
+-0.9266175799130044754501565944451928082906704525569144780860061500 +0.4334396848244388050325772905366477567527807972517898092967554471
+-0.5330220313943443910835605702117655504592614398056913858309712345 -0.1619850568070582483841089266399021592715313336631722656975213986
+-0.7330266194736301185266620028746862947402855823289205835841036965 +0.4349171031872184435107875303762725428448810425179711113374576471
+-0.08901643770401430747538873378587416087951119772581637121305331682 +0.1101876227715326268181910428107908928742510896310057937736022178
++0.8550765251384289421250035837565358470833355010809526497352204912 +0.1181394186334906009817392723294169718708136032855625693965952704
+-0.6907357918123153055314910754893467338334399179189583430196498864 -0.6134422908763024336277822790941621173188833761811732225176844508
++0.8787770736433328745035234902871834306966611855454194152763085168 +0.0007890067586683029645658995781246274259549545755709170756716614389
+-0.01738793803090707722596079625349684366463055472987575653160098446 +0.8621685721501774340336878507812798156457075208867036508017308984
+-0.8437894361676828459420431516790179378543254071636108492466529010 -0.1446914881748871538708472303235022759812106179376682850074774928
+-0.8141497075382254027096074950311514491854968487203741238943799987 +0.6082285701388216806887698588158279983301316131012622081230628938
++0.03889316514893840261980283978604250703936072380623394289182754247 -0.8981964454040716021179979414444937045949294240210918479440155358
+-0.5493273108612277875600478109570404534520845332638624479667841502 +0.7957610970705983383774198498866337222153379652712218332556897743
++0.6715912488533200815290011024385797575217363717470920802742883653 +0.4764630132864417461427092221320396798665925045930460802941254158
+-0.8438919390970836161462370188424965610990320605153865447984219469 +0.3879032824784183836984858388916078878922320561223777487715249216
++0.7184582122882689810255427112660454958040291396946043511983687288 +0.2084742785159688912803040054025958607843731707939426295678231432
+-0.4086097264688666636790174928803728608266459573162410770584140364 -0.5370849136145857766832016025284203591767245675933810462579806945
+-0.5697919261032078557614020481060183849522111669616974872492012829 +0.9852486927087876811046293240607379681891885414515454522981870209
+-0.6278243966060881460501444931432866833291695231208083680886203722 -0.05192477203763046496027668533233683359132570623339473766668400373
++0.03368286177059315443832500997308649526629280623504246086916187170 +0.7021087516778923201248771621691136874048839606334956603017310654
+-0.7436883526680899648969850724114253803054818951808117927039564586 -0.1563550721050659408189565290561858466797697878960124361188030514
+-0.4515446035045963800470270932006012917142703741148728102920678819 -0.2520730975705812829792025313460028018468777911728700556952771970
+-0.4810931364819359747828351037417496237257328332185652823964021884 +0.1428665546767168655552972515041097045177846057686427482452948827
++0.4458845011005795413736316288478062406750213207171946521339936816 -0.3169115315380848427337656482992989847601630971895593704118767660
+-0.07022130270408117391201617422037495983519685200057324281521736371 -0.7763573854247385481333726174121536947179816391594079662846991673
+-0.9363332435815881306934514312012861106386014749526768950073553811 -0.4550939380895879743608707022499447699637690212429696553836882660
++0.5931834085557288286300206310139754784241341457686571795494994774 +0.03171050312422339964633762365913777252150477275344005739769984045
++0.7036190395840156286745266326175275923901923175942468576350074587 -0.7601861787495835458376534663559628565916199810752368523677813866
+-0.5793821363841516257942372216607612745507267978856920167262365904 -0.4498301761627085370588514291058822364987697838505239236586575744
++0.009045022679082836013363681378660810610692103525817615455038021560 +0.4553956078386715641620828832574728059520366462443413805590370021
+-0.2778968847485682179896478779214700059419569060048743113852325563 -0.5505238101494229914909374243597713086587574671165957322862558528
+-0.2784308881971247865302566270327586460636817633229294056506703495 +0.2128771819050895475651146712613125813405912433403078222376159371
++0.1546520626861422333359961640658948790503364483967590843600863470 -0.3697211153807034459774798654949240104717676519871977442358687943
+-0.6225775243116540313116281463349420309042753281761340281921133715 -0.7905830960574673690281528974570033626599709520757584362357793147
+-0.4711163590978376126454985059281824288897326557537760286424713720 -0.06319438794861427890855463712974064814534494698794553401744902818
++0.05019084624368743889926916934552108615492017653478974426758842368 -0.3032221928186056982599528257767852567203016207826395888868740134
++0.6461406780733109189385884425756901416390710262453176809391037054 +0.06913299207040699406988967520305111962596376246049150654778365922
+-0.3646945557234024586517840337629880176834748783187949036037901754 -0.6459792086309863543454477925147391240890211837146306328594841735
+-0.3370795553642254807046883165466968306962599317309657519831180634 -0.6166911805530306068114950212465258858294016100945779916942113186
++0.07406951035684034748316975863636120744360012351054481175945110032 -0.05005152138615149829887746581151946478598536551256758513918534733
+-0.07060713770177340715744598544748134178291677100256386910808243090 +0.3699606068522917432869560576673783955416192739909006108230910712
++0.09360709618916370956867688682300922265055482761303476467874635515 -0.03849062139455827787089647320771375830757066960057682157701107129
+-0.4903988627030185676892387805777880755902392098553657129246566032 +0.6051102321339199458418007316980788432274715206042473306140030102
++0.8668617192033373216803865611020212154378552305142050619982759533 +0.1890055332112199261368652417297323138965911719100348077368210955
+-0.1745567235833106956445457069963316833929324818668372064961096495 -0.7429627694705160711710831769890893663266703650006718465129166496
+-0.6495725409582065831276338775327045761031092852475255376332913976 -0.2881773955968282525448231113202318287303135554984326132180379967
++0.3132302317415336986457546693818300494005409790462961496623925972 -0.5741367386705916498790208311946695499384809274908973071826681350
+-0.08002014266656912107124326141465267585210492463107808149275462116 -0.3883483175423926591647152511485597563363722982818627015442922887
++0.8439760661050647193221008089223906976491469018983477783830651032 -0.9950709809633251064951619155577993645736891479661194980743774929
++0.2742491031513893827528343314344994279572977620848668278687664294 +0.2738567555330271184066712727129065151006786408653874580878539304
+-0.02731317148254747797517682815221303356852477238112794448774630271 -0.001422694755453935497513582160503657041376489891117095567148971977
++0.8474076414796548139557410486347838750741787558443005871442567576 +0.07916062717583492405300185529863771274673445058218097902809430331
+-0.05779005908514727153148268653835324462294291367795091759798861981 +0.6495170466723535019175035572031528735765687492405555522220696410
++0.6263509070486716842858384400904599373074897647536296406115669676 +0.4372941727184083001055312294508032504720724268917131779287582460
++0.9742953226314242461965632460638579799905807780876871234627553275 -0.6979794262588099230192471810808389089828660474448348709403968159
+-0.5412738282089598200095228242549815505925302427991012087392399282 -0.1565198226752727109957119834221395232407372494692688878886795213
+-0.2810841851319220937367807869615879057727320463374091858347990139 -0.06661956633666145016311845151412423025538267631523537771084764456
+-0.6332274216696186147542273193898355103863532218808631013492331016 +0.03910229256165985411726599116496996155547877628493628841003790459
++0.02172241435608649221235119486946747660849609106303200545112768013 +0.4509591545693795790835859147994686651245453193481577881466557711
++0.7184196840602424035733157087786269966875702807495568534158194777 +0.8289511915524095462982800756621680459478549333410156313534410313
++0.3749586907344833235687996618371211329945742347114437060445496025 +0.05416602856622033817789298603826762934776912960749066100474475959
++0.5197997067097932079572481275469253932045397138803211253153129772 +0.2479791145008400839480440531018355027637634526666332160164374966
++0.1001908957778599515703760968602291233036923939615286132670111686 -0.8216394032798344722021734150938541536244220598262535154801850176
++0.1982609831290281879535544386961448200899094658928947930993426901 +0.8523062542193653449824534687298948254093204264473136210307437816
++0.2265305308299656396847919737333043590525494945051651354564266382 -0.1967706726278172239982970289754525146796007368601274794675702693
++0.7906018990132069071786050772247164464130165003035494689544865899 -0.8327177074518266242777460060609588181143003976123607967436243772
++0.6124546368149888732224396347205514888588534382757197943350914313 -0.8425458680592769925459016368260429388696331280951694931742950007
+-0.2036417356829187550510823664309236059942206079488018356074124469 -0.8294501673712557314948364664017556451446180100863999674908126564
+-0.4438641124602506074890760872561035010575387638641217902217169658 +0.3008434422707221868920945084207741114280275894076710969522920024
+-0.5447672261425203273417086435093105975335032310084217017530290470 -0.5004892884738832065393744109801375443880375991614499720713797226
++0.4877743695516254187304790685268488336758168947119202326402657771 -0.8863863938681201151970207031126931887728555851413929599452538871
++0.3326494238536684877812162306671513312155429822231139301441247885 +0.4593004561205096573794806396294781449274524551502838644555914414
++0.5288035512647287264400603641207174184836483925130588246958035505 +0.1258334944983997169327720089094733517600325316267190859523409902
+-0.05640118305249958065859491687650402005035008328934427052170270651 +0.9435732246280545392792816407713924321446283102458086902449111170
+-0.9339602027658081848487965258726967589939079607563390689984129939 +0.2544445656895661789303399034074920380860153954527661027240406092
+-0.3212759575531287456939226418539215769220226916859681989419700560 +0.3129381145114083716564357685281208768237727420588261304907467036
+-0.1418273761530124142414318806991383724249955778125131615411614959 -0.9714619854673964692511086302740357181603106956858947904074717083
+-0.4264505073732180514731028302116498991019475563421457885360967122 +0.6983285398318492783909196510658672461137385343590733178862764302
+-0.3923419951379572363099277373060742200052172625687618481037698142 +0.9506382477880084249044943859372916086158947906325055702127611030
++0.8711561101780366371965222118006359089295680450882925107561352892 -0.6155482444735007499523441876605937740427013244142842362068798872
+-0.4467304300012012793076027789623627915431040635298455194234986428 +0.1957889864955875928999797314482627936894539690696874216641096046
+-0.2307052332975307401648420105809548829532849045676342380730437307 +0.07830807447877807203549642593695197737119511802687683670668883933
++0.6986593716253086507864036814802859528738405415349193484448192348 +0.9952201049901013749595466217976287317151914471163013580484107938
+-0.9881297466207630693750918682605017613031699244501296308233100941 -0.6554269007035416922128710943556422851101823018860152874730125849
+-0.6760661791650244249188462300591840173691864903003885411720888657 +0.3905267032540174023422876019162173828352260079384497874927036931
++0.4739376045463275401017721226048506342846991506758626675206797346 +0.1381830404898181936606664186085624674220610854504859517241093606
+-0.07231115199509153957529197477078330317517719228116128797380329585 -0.1138562473029636160216970368613903186519861039345118358831831419
+-0.2135268112097198247010681889001898755255288900766137207891430752 +0.1465398400354650674130673056010475804822598115775253244595175906
+-0.003917199824269020439593469952174519795117950159938847928888256440 +0.3105412961042193919526666163993309918653635321055926706961050893
+-0.4074397155278875973813395109079469465734104483931918973323186003 -0.2910196729957164249101107546934006391048663828968707822638643006
++0.6066576651382865740459746508693765522490832331025440239481867214 +0.5261254384244212007912686266627323446778006401415071316169085726
++0.5054494871102213639926772825334560876816388786177817611761657915 -0.7949098479606665178073183937555875550098635646234511168568079094
++0.8226583267458482637565255432456222691986173539474741807557700154 -0.9778292188541875097225839371259139114598025399963570291437186389
++0.9730166336949259260659399295334240422964809729308435599151328247 +0.7492905436720301613374173487980873251455390198509905574074651576
+-0.3641854575026222563078669476933564861036228536147606660764202030 -0.7249219412808839412727487340746210729689890746347710652892902803
+-0.4001542376557859551557248563046997931549614286245539273687375468 -0.3693118924484953047628958590284702376802136074004627118845808609
+-0.5991001696282898040123634868273777281536442446666818065487436690 -0.6457653414663912728036098345803521331784506216204531922676607304
+-0.8583780681190373783452031494167712583130326378561487627832196622 +0.2109419250758006282799611952722446660962243785197613141683905674
+-0.3045463752630304889449065225990597597721299636237444059518468086 -0.6146632387743954999404311635872977438799626856852557688433604739
++0.7886150417047268238377576739443317830511703278264640239600600345 +0.8242941549039475644290514162143760668283156901533081385337247390
+-0.5588043912338361844241544228067077162062321498757294327644573793 +0.6257871611800785286796412300195488269494032429066516972718828300
++0.9071330745977313051988105614460259168291466673224895548345358330 +0.3381334269121144672409864772090018441141512666905235823043416021
+-0.5243116831901749378885595705756835723840503890753765390640241880 -0.3672482058319415316928941908749320004803824902072658280139301761
++0.6581907342494117061956856142004712902056506998470355167826692893 +0.8546624998090833430448823995511777565991099876908108183233963223
++0.1974669756782317180727160357254418526609096592424426109684117699 +0.9898073892599122095800755940288039823846068544198553657139639835
+-0.01972112572276554306178203846081429764689884696412132525401824731 -0.5807495171716054934410295971513909126210260187128632154107443731
+-0.3943372514930171657629732037269730921596189301320479370982030610 +0.4643742271525598290476800373524639259691363758235213465215657843
+-0.8596972563284409333221353720093891317237347467906295445875608281 +0.6476590081234066126501771487402531553177783347449110416866389222
++0.2054557247504006267846823161008744108436686866387260670209192195 +0.4479463445239077805559544597852582926060149026209422938613879720
++0.9164793193765776053806704726303778876533969118110393675531419928 +0.7284363311894499994420540906129613410844144841293217419151345171
+-0.6145730810103541808333969921377717371467821795648928293281783767 +0.7394531955782238097943737918351144971340814481183678599237064550
++0.007095154334222720138793901658750269696036135112599827909026723408 +0.3982725193269298548603106533219325800144582624809367612078237723
++0.8623200152218083367220882180263569709602229105502792928185580311 -0.9004828985969864033774047290220732985898887350504411922679094819
++0.2328862533541289876695060577850480885078345462436653283599123436 -0.9908874966451550308748892815880535919123524298381831609083720400
+-0.8594243434084773575696832444002804697287780740482575549078989199 +0.1326957595283683744252008162522746368862063131182614565397222750
++0.4665227761410612503864559792071327777686034364978804464477715773 +0.8808720402495543729006569720339438533943797900199378519947123715
+-0.9811624944532105651955157652071808929067746331174047524578239984 -0.4803559698767908340060356292310096992327667780367214619463521309
+-0.5372721741325555621080856058022867645684999577425925732434683467 -0.6152320466537256562236217731874761084249530466484322451002140841
++0.9142689324243093913109361832104779693761718654772557241029242509 -0.3720645297124599674008319462069426692697241079266648869674797323
+-0.8519800093917999049786710873262630254438596819890789333402870548 +0.2449485913551213916578628015561234099625943966155858555175469208
+-0.8663463923987564465482638692819190364387064757346171016284231869 +0.6834406055735627997065546275726573819769365616421960601497494531
++0.2709558465428488894177444835034893857451398992362135202765939096 +0.2937298433173350078731822449266041274395671455462478043077619653
++0.8083674519889074596117164158478163589581003465847262190755456111 +0.7389237567290892944311648238930622796837863607624076881707343113
++0.08192318101143036468909245818104351795349752285255508370548377145 -0.5342382694119194855768510199865924586106101051452356879669825577
++0.4432662295285746068645760939682334332432727709335441542485014646 +0.2630292402119128612232558840510222700505439715078536424857332391
++0.7098458531193496043308156335940587627787235570183896188894276827 -0.1883085620831331349394997114040472630572906866277849135146279699
++0.9032298901921960006119686705979881366192290964459568515483982700 -0.4607211150452801015009938123931456480079963023792334782304686312
++0.4794254791268536633480562976950887435436025549286522438789030803 -0.2308867178130965585616675948340040797514484761885897117681346881
+-0.7746484154169456512809937246271660173202685744110036148882342333 -0.3774050948573022515287158378178647075004423945876162099858874171
+-0.2763771350523139054750111351929364757670962641805178507420343842 -0.6200319242183424601276645331905370931685037320049897843997329310
+-0.6737640502546376711965235263761153629368423334845050663282786384 -0.5339332077380044803069129465643480901522070774987025267113434054
++0.9860843557274707818224203215557433615103323795855487753603071846 -0.8409826413680936446070268250238344024593336579649307573556422999
+-0.09908250822208310979388125313393386625642518646689831540002743491 -0.9399574230691777989711927716133064995373890533164263168091905215
++0.4083364361722581165801901479594515422760935325739573558840448982 -0.6795190291123097230990661891851472952889539452701944120346761675
+-0.1987464128103913290537565707198845322065664181338633370605495606 +0.2499363422278515460318952435466306319311780487398975644383315953
+-0.5407738721582197458183352565621496660631978320791939263962860219 -0.4857982002443532352628729540784758818156719609866139389273910850
++0.3927066115442214638047153163113331662262162359392646773307752893 -0.7861347573182354771307246851551103980918332124499014151592696905
+-0.3547265721044417796948020637228927981006372674781249634536133803 +0.8935192161663973063830744247691953425464990167903932292484405890
++0.7443511718754498369053636558248957547288930096116725829118390452 +0.9903033661631036830100350864259064350270641689131337519701174861
+-0.6106514856175809946267252713465468241183844646996285763158471635 +0.8008162846904947226481502954556172483637434913230438326833696705
++0.9765239261833813284111571517754977297583489388043457576976222170 +0.4476464558714334825869344763249043340178998893717821001810472988
++0.7738274296309371782471493836581620439388102593378042753716890516 +0.4625811881178878436866017889348348613137891743384713466766357245
++0.6303435590127475728343988381089812280592884794559438601115730286 +0.6022876579032301831198185272215639014737623416293895048212418666
+-0.4840633718139391300830506517721753832091260846484462137715340380 +0.04816426311002316252327431022853818214167004150617311814726325493
++0.8525922176927925458770820230111251769664015980843161969462044384 +0.7190008508856783032101983122729775914051963373300030688704198354
+-0.08163044187898704046903120648457597371959955348165323805504010125 -0.5675059564705739481773708079392131933474449990673955733340896634
++0.4211480223456360833806669261665081502935228321732339446555554080 +0.4967380776494501055942208352113634151926049220717058763082383159
++0.1636579949610354489441057651722542939624135888641020127310796368 +0.09675547155028439977278999709296726800038162159076328998308510775
++0.1158996829838767780820446554770404024129821417414276676244486116 -0.1950954030789020002287508787340163745276057507746113032835586749
++0.6122743525100609786427539952903164332986527922843188026822436303 +0.5064961905336267456431115964174277594223817780893947948299959497
++0.8287184948673512642625509766623864745682445181955817748687592982 +0.1049094213993395357999854756560291644739169934564711641737759890
+-0.9776838203117432640468561992811674532088503638852841073034452293 +0.4767716916321263517098590298234286507385887358086186955635047586
++0.4475824486005748840610281907314246250638614806065401547533877687 -0.7469775080301109609457853271536361451501031773261387359428198877
+-0.2012889019039510414651830187674193045950194169108930931856542009 +0.9941936824178045224861508576354132249649173329439988992538281604
+-0.01171834366241198933438406373716581804955151297150743304159782864 -0.2878155444160508216221596357001129335550724592990011655702581479
++0.4922455338395964925166766918239575749296275172064692575993556194 +0.7506216504285834075028181639941065216901989186013113876401499331
+-0.05364567611959903567502330013213963546585099551575719307976293259 -0.6725268863661950549766588505105856526130660481656654993213471838
++0.2859039723670674295294361938847146749682776282795557426834523284 -0.7905247481921806106201642096415066275604354450905629496469428601
++0.8750329779299614706148239867721002941643109143868880399745229725 +0.007653782919407651715059902519285816791917752759413854257975481062
+-0.7722586575162211931712103266374485003179050625215461656404618225 -0.6392118860636064049215945928693174954288821801844770820372675176
++0.1401034745337237615620302020951018938757063985922213398050129090 +0.6036619164160354493524452057357372202648094204578132451840254901
++0.8390047845124423734044204882406751006849491027338704535253123886 -0.2788427515961278163117412183624046864146856132863855622756494211
+-0.3131244711658136124319194937374637201951191483185787516824163028 -0.8939416307707857992991402751199678620764383715960651592720417656
++0.5906431155148677342149308852685885638274033210013285902888289507 -0.6627415930085952669245043837340092337629613879308937362833488195
+-0.9162048078433982131383742722173468399551265719825246809663028450 +0.7377013495242951612574071980410264329173346447246424336708195477
++0.4438198023728849844308452858166958526884620742389769268237679581 +0.09082749098298462100404851006959432434149051680019917105508206373
++0.6601586762490308568348505588115261580494881196839526850118211037 -0.4157255868984570085872651750004314944961033687753942494940350598
+-0.9618853586098018371722211571527418635003319023500739295420333417 -0.7880647011830682776792507984303609061151069378929630195632585227
+-0.1292609718107532753146691377641856162241453138036350409973849233 -0.7831251951873768122082588982294140346137970587456476328872827590
++0.2813027204528153923329019336432992610341145263276842828170084429 -0.4892726252960221506179657990436782192547535189331027649955916197
++0.02901692607382806767360968742809799650944015215104495220771449394 -0.7338318586223471641268277374988905582321176020660527987006310182
++0.3041938498059602562920829742497990465452656988389381717366180348 -0.6194985916531193962813764116740013132370463691586343795078230822
+-0.8416332863784354708625199574482551667809708135793159735459802674 -0.8304673987931185468195324413097728807512369435133477362674026256
+-0.3149500081266670190500312574505458081725795156829625594727778990 +0.8723562895013911145094808197213423766295015585671496437454697888
+-0.003275852688626340591683182725592289209533360992124403573787800845 +0.5424961093334446961939430552640067296352856888950604810813149367
+-0.8378625925962227631792682994265765481907889744535199746129185636 +0.2101302007375731036819378482894074173237779943506318536496997424
+-0.4342779984921702749034944690110939090155169682108203705245647346 +0.6752466901612651396144969800894089152166667607745175552209905155
+-0.9068313407149762968086567340954913610684595084886817903492351126 -0.4447618692636022966661951727241908544840387734267950523139722868
+-0.5878274041052291477943021502436561002773261803924218942833270832 +0.1689007519792581693767261477894209580945034249598693124210259605
++0.7976934088261920073242997664284179394988305733935216816478972594 -0.2046828325023073658070934003092130951091661223792466603984762908
++0.3072993380346806450796644618533558809298372285335849801472800055 -0.02562705610649813358869290640574052503424042864970714378894862142
+-0.3158899277774763040436693675498339368716705701915489772738691617 +0.3233695232792567839814772381192634507468653346884188651640794318
++0.4666714471594296105907779829907728877151358508508298995416084212 +0.3430057720872452241166811081965604185898310393359518819614774220
+-0.8392523157365762982920248338178402207864299927730430032011993670 -0.1717312019662116747393586686814994914949612653155480132301116483
++0.3724656798429113456573796032664972786754306954066217858782865155 -0.4099990050665678734183206838980053775894980088407473257227603723
++0.7833206787384097305592819931133370072071003949491040665893856821 +0.4050689743889891917601832782534392064759536205800137985130454108
+-0.7544051316606455187663010577509845083171139981413787259246099009 -0.9391505835614834261935332106899600483115888706664888403800892828
++0.3363836481324219723370186210692794125850649784394352985597901553 -0.2290563472738500220410955638700776414567962122784851806736568563
+-0.6491840008149435654312968884792746101712975654905192131468895032 -0.06668962645498993437220760246533008719219210208254717312689900878
+-0.5376568533061764969177810125554299187960447693632897302426453216 -0.2418045037492360266503279412860257294022431378511749688426851284
++0.3436505628709939568617544614844578999694824109632610235366179258 -0.1287707281245502414943145155587478219699918117742874687927002331
+-0.9878395889167084950186530859519776075387863865636110539086573895 +0.9524347845029255040114246994065193753508646424437396187104561924
++0.2314306995279594008644153922190752850317480341450266921892543850 -0.5102159334023001963294295366601641362002466218752541958020754687
++0.8865073285770955099860020924501486556125845788147491503154690747 -0.3686570083686324784561996526005790572208279066591355318089377027
++0.9964078756487818306982678918396703581497863065837502553775568638 +0.6067719527885146357599114547331822595092133894014652276628991422
+-0.1327340387426539333160769890953460166634179046951612739896832303 +0.5278043944198021435941767246559643094708414303661503273086717275
++0.1516135436026911837076485354625099431713490636151252380398422077 +0.04442287806056859564983467726523556638516502099495443303424563830
+-0.6794254217136540815383429489211152521219412790709340904663043984 -0.5641827801641751443246873874681192229321660411365951394577684386
+-0.8608338971722177289009152884317389810381974752382902396992736197 -0.4507807239667383091838266354206909998220721972626482166704368333
+-0.8579601284570283198168880475663448240213020365272821075300399251 +0.6310869486131937678999906132157638358388257129046406581898346535
++0.8642621396528582742546522275938696917350964149850345375415910969 +0.03667926915780190834419992055750180152162852077756788488067045336
++0.9793589839033901948731783645080578582463688236077166539472268901 +0.08229012211650744349946422351092512442484614781746891288262123418
++0.9683660064401229939001661515228452132613132290247913394628566994 -0.6409683996981881466179021942898772931261078343441772994310768775
++0.9871325644646234051116914095144895949244082254772823408822757459 +0.03177066454393884836762966500990606641629507955643812162766134156
++0.7429408357918861651391940854314483777231519683391271617922207998 -0.5902928626823002009166713307778935637806998701583349862477336544
+-0.6679971490414301274552666497306612376613754110623070491783068932 +0.8526909509699002601261548505937613900724559330201123657339277591
+-0.2222054162805692664553590963524746378422134405027779312108432929 +0.9014188462113774482470526251604832075551529375382830480863748791
++0.2825286514059141882920658191340775973641769752737899181429072621 +0.5046324717703154767995903774539217299310381627047702499234932700
+-0.8641655578339237157426364564226402388621743753891534760458972311 +0.5983442181771116557735623538275403473669039894677980856106345910
+-0.9996084107935015679473594078714884074981488464073778279217385790 -0.9251217167915367784533975126341704884350170821334862146575078427
++0.6918702869983347579958468231672430091995168889418395643526262834 -0.2301967439783781747971967357037050722800855755259275132600865815
+-0.9376354253015494471896434810153189325665084438405669131018104586 -0.08676440580615318966278379262266005361297871698045348591213836400
++0.4924687906770157503064991069141120219191665852506741133594520199 -0.8935960581723676384724674556724692045314959926515624412537565228
+-0.7528019931350588413939154566388023308331979635236679471693177896 +0.3850148887845380271122341461691038976830091673237691795394545019
++0.6977106568122303299097295004137729206078400517066513083779044291 -0.6824699854656228458133883324246430839513564044841279261257959822
+-0.9241816059668043365862855436852035390363373632288175077727370967 -0.4846310693455137545589072060085040069727221014810802501711000888
++0.5191919026143328960366321977745092648338330203592978236081348129 +0.6269679800997591398737548182345341384427783095019307574869438974
++0.6714084342259733896142403819832445282754246581821439681178412078 -0.9617322722365173039606898498026930748290719336259004664026775655
+-0.3305661727568643970967579496852928159892749092036565327744186388 +0.4769028350374986419183801376115314660281064785633072317342892101
+-0.9004094513551951169051621458619598995816695783221496309703950609 +0.6908655650293480751197525607116035625938472076685998449805519566
+-0.9884847412191905817622272610251608563747945077452623649671510335 -0.6871962431122364386883549402006991554845536548222023026906579650
++0.8297590431974834390160620549937730525352694881027721814298674934 +0.7569672854639823071055550185134008556314489683060429389796276432
+-0.2609452664773769489135290033372776145152097963873696107291657849 +0.09757750163881316619423905340662797763813695471384783362753408666
+-0.3951818418178703493034052559225176300190976118265294520872713497 -0.6544579281685610833805573440156441171830843758369097275500695534
+-0.4205393286734249298736520308575155093951794910953125656434538838 +0.7503749834011998916175452265871859758095512251974014549645704520
++0.05443728213987669453050764608083824248316758211754927414048785268 -0.3542251119251805037780350575386903109408773567702183508872887658
+-0.6146453888431441977579264187991304908673042553348506918953110581 +0.8081129152922069599107939415392598353907298396371017579656911069
+-0.7563078968082354624200473875899165193618716500707274646443978808 -0.4791802455595348520080628284743354448146065999587141876600350465
++0.09396735259632912882662399404023686834860630896601823063552973929 +0.2416267989634575771063665495031874361721576265683084820701109145
+-0.5785656457034163940108434599486778925179861427139603882087606858 +0.01281784034482568805240504074471236128460554572445381531942730062
++0.03957899544097907583965796242273333021337860785083816690457151443 -0.4153353708551297475934263582565544110889617181980642069002887219
+-0.8523897650942072388808518940380192479382746023303926709202228227 -0.08928684859859080465071737561099358938438247977584066354644303206
+-0.07832784865185524359112370175488914434099640145831082963347294260 -0.7963796960813316030948350998324185551418471827411620835090371062
++0.6033167859658457194486961001342941735744068154496164938059859501 -0.4237771818470224377744756909077169828310468834152676915676280933
+-0.3586026685282925549652109446290082081072664311191650680624687117 -0.3698543959348254466422746969047962948122462833887029533220449442
+-0.1022768096029592458455381062000780279188050363478560222801108958 +0.1245772278609527216383362667918768620925532199334814527442597479
++0.8294682959773017741218920869469493367635666889096531886515534716 -0.5023308590705952384374614794483649114354066170314719828510141316
++0.2439910403168467755961516475103100677957670811159700079381010653 +0.4874258161375476978890869679376358554419093382662466772721945909
+-0.6217436439651384803300734137423667977560295277969228092600510878 -0.7607642051740391630773671002569026747690130098536975312827945644
+-0.4555149377465992268639969728371691262215382223593256475914395574 +0.2952907463815526568008913294496191134209834779627525086121890409
+-0.3638121656089442802844698751087347999906808525959787225726673495 -0.9037220458655722457251029350985464151743376161305833340444003734
++0.08022634781470307543831149021588896288336888891859159188614295157 +0.2334887638490749836995908405778931930109883175521554217263673126
+-0.3442492480706474446280159530436383963980497643713948380702723602 +0.7052742267190828693702924975252178397671967077351888792380422598
++0.7731435513750314635297578456626328452295898224889367523690353904 -0.6513372557405282522953766193526301524550119649747560264333684145
+-0.8066018250843343819679233406902709051909675387567362077697223646 +0.5639163269358215780809970479409655370373375811600519505626930955
++0.6498496955876471932216884562708997543204996823603089491219376678 +0.4357100057193110080310624946208161502387091488217368467115192815
++0.1642905711773671334665778070841332282088323895041996317816766814 +0.4638806490013001364489599100049968501233709680838968988728977002
+-0.4518494760071388063906173756614064107276944654373102185018585977 +0.2412717465049930411808043601700591312448155999785259037935562244
+-0.9844987906209126811310473648289719482037695495421754529715646006 +0.3448475685134935622889395666985863244165945295499075364098073702
+-0.6862637852309942369330177604164877864573475794822016327133076690 +0.2876686974558703229256399252291268026858631689160112952998748673
+-0.4753695156132390969461568813093716281405845709725218384460712431 -0.7101876880233249401378632080314951377527951928785823748934243579
++0.6556099024117094888056949870591826089394312227646540750168521309 +0.9846790269594921015679664851895659381135520747693279181141530675
+-0.6080521800564137609237437916037781526823806391293867985443226801 +0.3437415497229453058182543210740750079264464661929284954704972557
+-0.07321134672111011808388258675460374818656780673570195420048014019 -0.2696752569877026851783138411210108769343190918830956887006105190
++0.8884544237779923905868256068860494057150693464894071066550039493 +0.9762472675677452363776594368226782659116274038356842840601154104
+-0.8354897195734111780068198561837673077169847832110436146953999212 +0.08444045456393168862890152364933543497264331886653339924486726204
++0.1896995674958023935839174980322220379530103420320344001246792964 -0.8892569885685908800128434749765966851817865565234169745882835514
++0.7156441808215881403448442063593792131902759984326841936686872424 -0.8139929625037975495573422403603514067054302728983432447034538929
+-0.8421913219903778026902017651605922300271071155283113389911103057 -0.8675749673419429743170527077261688790319140912549435673961609591
++0.5143856875534824565378222075822768838973165471074914221146249537 +0.6843830414461456101679804215978472222575001145093677869683676623
+-0.9085106045944224577834248408304889618324419212648761341182940048 +0.1779840223994948489480170002458554907319590504068196412127380306
++0.1490964832693746980567218590257837834356289516139096586207694171 +0.1837923063151417653030164977226187468546528026134651436111295556
+-0.6533071204065437867348628824043457513023406779543663479731285027 +0.1619655413605997157712070499002136038021621864175955474643786667
++0.2589807129282846863190912997106752238855054803532441648210855276 +0.8744369489019333682654205519631083436723747556888218389624504338
+-0.5271138651419218022479534356690600389529298477310942773491339837 +0.4721640568194454917706048286987564832528015155827906612270979812
+-0.1196937413617940965411274610059650995185123109435955751314866664 -0.6912645942071141197998488506357646935979614457544342460572840063
+-0.5906276157747267452890097085607812150766085943725793971349352161 -0.6772101989746073667849549423558149727939294573378038513868058474
++0.9512474782975162982677561838668759755171776738883301392493992342 -0.3370357679748189539795551739918428431406967417353329657720376751
+-0.2585173836652346672012366614981640522011558252359692008464201827 -0.06470793138987882176144119846269373808956913465110544023258043543
++0.7524677433111812677624154358601882415953170885621945514823934717 +0.8616299627595559470204560841350796854813518201543588427915764793
++0.007453434967834908162912548875213581989444052811981129593774874339 -0.9091870715231940893836896886001484822485866140737507478452319136
++0.7024443905669303463325044999633524679292030510648808694652482144 +0.7602248608214484016503167590393116718773993206116850236807660703
++0.6106130060934301223265972559359941935828860808582178521600687689 +0.7425923588293952722758931822211873470745140253250700028120596275
++0.1231870173638568907727920838441539340012116028226779971441342773 +0.4663055129931981177425970816921514467871696133977840051191387663
+-0.1170516315450676456572605810356433736658383171876884602766708347 -0.6023033280717583985531549577047234172610890084891662334038119199
++0.2379797449298319474236531372730651577119969114593543972996184914 +0.5115616122523378614667301065610282521132432626838790615828577247
++0.04370148341573901145774807336854657018472602856035430580322484601 -0.6405003502027897628659038126835170305067922712251106110812535288
+-0.01566823635122952039094015583015458940797919213007079339305198311 +0.1317186301040589077957462360054493819409806662756071328691307507
++0.4492410143872176596850637170953881938575382076365915189809344711 -0.1012094893644717630697375700616463770207470439997998880009962587
+-0.6585592493830587345638673165535959781595035622455918843124435087 +0.05728147814920202298612745147970576845154095688937006741718281168
+-0.5444085272080392258191197590500321857185674913140620444083228958 +0.5169222483080420313816860068871066883270231706793363764978173569
++0.2626598519861605182484353725321079345286314106027470449537646385 +0.4287783977466281113592274223869723182276227897297915091322778932
++0.1376877378972272155729752353482066269049185939455101441339815693 +0.3891312542285811453712297099307183791186361594285588259461379107
+-0.4006520844525121330244486700355445948137705338803507925144414887 -0.3048164617475336741928527749031293454073332253419265684157848846
++0.08187311850883778757260063595415584588170542069096467766500950588 -0.3642092916299107867352333944676846615482067810558788070162528277
++0.9752391076391505122735918291390393444711089786801290853210824038 +0.1636860825935633886857175008340704889345051214365873328486518656
+-0.3212233362207097908208338883029696979756133137518721105877588565 +0.03789212084002503099385757249087042265941968544074173858777252896
++0.5092639397663682383837026485562440892473560288009820563671444933 +0.004973416841620217743188960676013936494324555313762715071654500191
+-0.9571379854001650517501024933554614772600734829289247917367756493 +0.1740481288211142701207823479017319529239738325178487631115260915
++0.9579502281429485110215155578987438072018283869571111430893435551 +0.7978623342672545250369918264460650188188173004379738486964930391
++0.3116411197945126357426362801452345353189409007169370813457229298 +0.7870707273116368519977890513909270754701254086817336921723069287
++0.2484690374248004683657335128660389207658914051458060123112784396 +0.5660336779044103500095923824830957380527991164684092341951403688
+-0.2403660132684514567917017973919081346210503357988971554421714242 -0.7823943909681880688534066993809891289957217637078825583096694751
+-0.02986334821072979924224111997913925489081104546097247260975607194 -0.3267591541311052699359389828356174536601097685277351084664748149
++0.5977941490131509497666546060166199756407694477860275134227129505 +0.3822646057476583612880102334625015515651009744048277053519817861
++0.5145115831024917350771487623634444529741726046272463842307467712 -0.1720187912348928977652009342593430587253522321806846658852999564
+-0.7541553021228906536629213394846582989904144710061232966318795443 -0.2200525442710471741776197042646079519126841493300376433922861194
++0.7215762228889012669141339870935883519063070343940349153354454459 -0.07417333743056490972061644259430332616347136134467550756064953948
+-0.3757236072892213223759673623545904150820876477587753267821153705 +0.3697521846594059970821934023821270078704167344268514145728094670
++0.8864064018561367367355324494712486320859803052580392598955795870 -0.5433828886190735220544532725500418017665972287314477755337971760
++0.4057019665186648592183688760924469834594142722897462461494035496 -0.5948152183874675415081990666409701403415416107081863501751221993
+-0.3284277009657261944551439092589604980107747815322980776576085825 +0.5699763110842705775149176573743943869893143030891880651304169897
+-0.1777090344048752749868466524587491971848025402228041103900027514 +0.7937266785913721124285127641442297158186724727274316087374929283
++0.7025976419353913069965590229613118351129290432212715559282810098 +0.7361130064980812052493386835975281242170957742018108409565034329
++0.3990016476245110843441767494987687694349242069283992238432221596 -0.02852670696824137861325713802106376053677546592307843516217942217
++0.3522709802937692057034311857540090052484305021670363804665177075 -0.6758336856781841111510084417637120793110922175299155850484818312
++0.6096844813075936531458411576391258658725446389952314976494357776 -0.5992939750486243025145066578107823707138091677070771798301783853
+-0.4549769991327555564253844700669738447513018849545614196904514137 -0.8693052849147107842614608159927647862236078759679846945694566197
++0.9699905592272083477620210980908355812396449180212971060144950085 +0.5136075050769252394075211965064403805841666988916276541657963480
++0.7498232594481433855584036311186800022691030339499672238685843473 +0.3494612715256450541147472941653301741727394633673057040082439309
+-0.08124130795517090131865875331800862391840778776587451797446618149 -0.3564667839374961578332509544773885989721408244896589145385042921
+-0.09608706390583456918004750266897051008736997259681691100079702620 -0.7506394581244069510725073294876310526476548732226471094390955342
+-0.5451927647116297262326583980470264138959459348620324728883459141 +0.7024748323628892198859563423153485299413187720072528836786285624
++0.8138649538996382349722837036147514066724946600810522362707622419 -0.6488577226867548789108559822961538257012679507770463672164587841
+-0.9018403921117378936802781754521301934139934044453768436394590943 -0.4793257965311253964451096987933100384733837762788907605069477066
++0.3323218555553240311260400216534485073169253622482884577923238363 +0.09210424210921737739928688898028248938873071082214134464949772044
+-0.7200684774603297918875338542123878593140667304342330332159602576 +0.4516764197996716708980077448043522136492418719493202578355273253
+-0.02147961864887678528738957408023612168444237053929164356826981822 +0.8972371498538728783384496896105739452115553396810585360663150505
++0.5254410558460859605087208173100905614171277200826824289213165419 +0.4779625167609378578542916245838954497751363562049921688069743291
+-0.5249878506388901472711579370102540928769837177979577663672379389 -0.5492966179776885597570278282342254350239836170393900734753302612
++0.5805934135960616521845017309786436466437346159859903276506130233 +0.8011480064179104544364531086455502678113213654156364929860523205
++0.4108150684088852998686733919545657392411926766770777777434045282 -0.02125615397427463498855592526056024239710371865677150736180065245
+-0.3441749701647517477889510233603120937668261799325819146170898937 -0.6925880154582237003812094190386330067369273157891509039081304996
++0.4606212594814430218118465286853643990316522819951705528199959195 -0.005757748380581076571974173834723394815480903827848392373662682434
+-0.6677323105521650119681003048917889833758906781477621751672096581 +0.1963040581856853281739668695803545107143834205462335775114261861
+-0.7218154524979247604553644963494122676763226491036820436746768133 +0.9586935499630812568239862006076614720311331063205754272861474356
+-0.08677847959311221967673968929014363704659954185573439280425805990 +0.2735134639533134112101218091328197208245993375094736394851161111
+-0.1162626639637333266228071663736609088361388919438879190762081927 -0.4522682714086131770678445480505844878058823670458254453188929487
++0.03274719788121083841144977470346545977395349469623216732733634841 -0.6010075182432731886215916919260432618434761966120188439931580014
+-0.6698237693339085919901027803019699057313615574070964514240769928 +0.9829108746809619421226564488948153809025625275841030192997021900
+-0.3983027464023792902660409298411153556965778110241386434583873687 +0.6252723587577963187855378745394518826391460063571753329595772835
++0.1458638411143874921434364272961719617992984163054373216031041553 +0.9414663393784400240354362858398438654770756380651133758405518187
++0.3615685859214923600758423868663452073069284731781755564707775459 +0.2902438862715822559907069413474576311814141404341149546262203687
+-0.7426549681496496864935726783036103464805027722297231928075561102 -0.2481620493380227604568622484678254897429290826790458912900962438
+-0.7684547660681665066519515554733654436448393642017706465245375186 +0.005509564837145416827167440709920330545306052438497407663540318121
++0.4458807741099861526177247771025494665820255592246066435566207648 +0.6801040885236562306037379838799010614641191476103960711523741459
++0.3985566738857450435051359965750125351685476804564258720752876964 -0.3038447259498361380919007365905509668657076555707774299942744079
+-0.2174549546747868154169543892908084467015810892894924116151543348 +0.2251446386140275953846941037849691841081587270162071493783218093
+-0.1343548927096384947198371844463249261084445176993169652813594255 +0.2432519645582841536743590972868190421524604933994281841880709905
++0.1852175416481633972409369103417702230894995364414738802035725357 -0.9684204800522023088044461783827137206111017587034032096473388512
++0.005172797816632007280598823316568992300651834729652523723869275114 +0.5265572567596400357386928094270325136694819924044832300602448850
++0.3903666610258509892634735735047308300250403568162514376305044435 +0.07543257316434833083683349554265844450577746709327493627728047930
+-0.8338754075241486479086633477945877914531212580308062491411496161 -0.6841418745697998440035869409306334762377887725399826729571363729
++0.9847519439196839847214964401341029639624640911172288944197443621 +0.9361546081497799538857336936998798662078935873152944806836159911
+-0.6938477689490435789374980639756215337149150918466472657060994131 +0.1176934028764121630521675150266310497299583263122854959518398560
+-0.1913079077139120099096772633142294225126821843059502310007984547 -0.2901396396349551407491636987733354990803948313415800698519157037
+-0.6463862057713601285734282272154419712784254507858418032612428110 -0.2420406782976103591119631877725473842287500328174709102341302030
++0.3827413613342640231652503472879078021424394585972829272328681104 -0.2845913702587622039307672806868243827052469631594272823344850809
+-0.7720727472864134929959291632086941618438820822136574072028080816 +0.3242001824709885721991509924035975328414181405504826459692719070
+-0.9990561012320254273797384718605153699422951092251275740070161952 +0.1440843992546531581478933528678059169231317287198583149376770170
+-0.05673453008754950631927284903780550602200891995748822809908372908 -0.004523979131658411711607108716039313061778607537146195032344651079
+-0.7953526631375207473973935672161373786589466594986701111277564482 +0.5601315503614309041386883201926452069931401121675043324955486149
+-0.2504551465835887632060924159923293764112237727458078357294223108 +0.3182739065740706472860616416930202692103175676652484315943937264
+-0.4184080482860242370284660832395590539701823250090284783416406620 +0.7197044552936411810149666013636976790362557970124515302009171827
++0.4627023914663900838116145359154475820528077271388401807481594188 +0.8881451219032838632847585588849347925657553768941587663041105797
+-0.9778541501693169375385988125771891870771302850159179165932180271 +0.7945352547543394657759009701433645274414383449055556477240227847
+-0.6176977705983222379679597772002642591215510705962786127767690952 -0.2568022180718470963062281499798022703043719150686446919100828647
+-0.7541605226957988014908091549921751556524059465395174795048280547 -0.5185969834707553595939111761271423409953367044423582595292447728
+-0.1253235895127937928416118627091859968820485598057931356340900519 +0.3341194884797743993166300894276249878689873939562748783936160400
+-0.4187104369303610544925298251218699802587106413082815802235640076 -0.001849995647887524888289267278947798399198557167283540354092867814
+-0.6422645834248161180981306371913293914715780430590361996931403270 +0.8084035476754417333140292476187229375706903311466145199899328623
+-0.7157336868929923060690058655020407030459354695577846075047088545 +0.9588969978301138454626427108613759241594430065945038292009193835
++0.6744567026101178112623880708847480864912523409387769550153255080 +0.3335272632369391469143554412159896281798007054612542115954060003
++0.9684795236552485996383537120932404726037512006334180858124873702 -0.9818969849416121469637447294546143678457036796795167435046770201
+-0.9364479987247586564267417005885206163400558318164035469189463548 +0.9545240136083989558789630054700974472646533412720697963628228835
+-0.4725527711350699472125218431374656002115592959658867245652296612 -0.2503671796876826087506691502164943671763654149855479416144368539
+-0.5623226095453870369737212532437716556558003329623573147896780539 -0.9341045263748835438126570675537050276134191954806398908782139256
++0.6833494333970390945851345559669690436120905354950143433137210547 +0.04122264705374183057982683440407982364794512544879608159639959217
+-0.4970065305795287266242254709139657981059135202258178150278338814 +0.6829447670749286741050243389233336846007427347210473199468944098
+-0.8365192429273594561843462788788615100781580396259325379294717739 +0.3255834652509341654070878601184697292749325446426594668267749165
+-0.3252225194471257008753413701908571595368179590991062801693037256 +0.4096064264809847401496452325318252425995410521174082753316772817
+-0.6706101550145821024931531452723694481078020194592345583367982326 -0.5018373235564881465307337645988447552080704518821052059001251083
++0.9338381906303263731050021307994290132395866766867230545424335603 -0.4230169113432065116210119290180362227362375562770438823384874609
+-0.03551040283907854841082533333557868811617492251695756619678198462 -0.07701623434146033696989234197197003643345429981603899016094274022
+-0.5692613436333678550460523108523458631150385379297184173761581304 -0.6671663129729369353179896203589306162556758986177252815544957073
+-0.6363307073075527209394469163730940591751156936270557608676600723 -0.1319386127793465918173375830672674825112486814029120850689255702
+-0.4085908952208837261831869077267270379549759076959904334842310961 +0.4514463238039752547042633716464387887591528482461656018144454250
++0.7300916173166646121592320041656905807338704426451979820849115241 +0.6591861864091136323672618027141860505944880804939207287851471828
+-0.001383372764599846106738356863937115678648437689000099723461837086 +0.5839317997571466151761800570928445331301524873332333706747571300
+-0.4777567385457321995351536662662648285058677482460016331360745385 +0.1211756212407652536195255794754989119231248286079002334561437683
+-0.1948330061967239431823175756756826607091943555542911070423987994 +0.2908246116544672846301576039302533907951809562353030487278945928
++0.8459710208321990958775051952334276595720116143915933968673357192 -0.05151320566389240540206023329990403974393856686000373537787630671
++0.6035682379636567548550688236410906509336931607022509463445925614 -0.6212611311425929815711581794597103189258884517399634362231812415
++0.3345059467096545054215769577936193613915366469519794818172132859 -0.6598353041846604245469513259659343273404920967477917412420872847
+-0.07667425439564145607101535969424721636092278932236997554927225037 -0.2748351413478963863900213452768375453110109232385535079152291405
+-0.4636172268361160720545798584411346764175855811798465874861547810 -0.9103398318094424895397399995075254146292647551495568362913582635
++0.1804278237744440381430309435895397955575873092635332985172711154 -0.6939433572132313487297036164355860317262901565382698968273718935
+-0.02252217472447147430417959341668363763071277651553525973484567039 -0.009399656082732856821717908666946050325630908836562094390728804207
++0.7501013915358726015119991716079777953558342589570629821437705197 -0.2694012477183658080344286737228220796600589917413679640578098192
+-0.7871400621970839566465938957310461940711201701430985082043945502 -0.2620534223700353174356133878677061403607891362475981734136765213
+-0.8151009004932257635659144525098860694888983374172709801351488110 -0.4147738486235880978279946891982389095623712679629269601043520687
+-0.1686213462656900022656329498466718798824813012517022157941484313 -0.8072757045423499795881729940875020684821023063361273374416925528
+-0.06313967597639198900381462843243109023663888159588330858774026117 -0.3821645550393111014786853886636096352343582783497999441931929186
++0.5726166900593667226677583335398103942743907152723495487813430139 -0.4972960290571643173533290360722853691888921203540917803780702692
++0.6258604194737129856199495492933383664795032355582888427775124459 -0.6272373806525957952123393750103497579750008787745996242812658267
++0.2712449131844571979750590354811209555227623988669955594208125657 -0.06976917754143163526817191201015519629089664782557231692522866423
++0.6134058161573621731734197478725144201633628025773585632852272489 -0.2780524320662694329672787898061148235377554940484748036244643684
++0.5278989115962966203372785753827399861302284751273929887507126329 -0.4269502072587566775756919720080924236431428223929508444878580212
++0.4120506415803016771334319087538670308193728429535410489266885161 -0.6520269773217004067010140388452691275517392848817612830214835713
++0.3545576081530893721298388549248502297730179531579546710726862788 +0.5236884699701169111896032126233630312335424133151535041129067789
++0.9954080102248826632557698397884240124609718895723927601777380499 -0.06510569073944934785775180369661547121893333322241548916090941304
++0.8772865295885211052933189491505995439826084904697856702586933050 +0.1412234302000932882236294675511148614367812801490514777600747419
+-0.1729582755759392122304422895087558193404264121887563063778951356 -0.9099259929412519237910042448217626474541533322735552626330128162
++0.1762668389658963968962456080988213348661449619145333641202307191 -0.4017298802687642770219590007611431620806317121823906670021306241
++0.1627471475602144975348073285777323748185127599370078689268949577 -0.3736284904560192252905988865709713053232385880658105230814455255
+-0.7643173297589358708829460838166575906722628803947798199199892918 +0.4316440472962346404628517869680626030257474846749014120224312326
+-0.9483965851770196106903073158919092222066419153939605413720684238 -0.9387617970933591148623785846675500285564913486900322964357566994
+-0.4110620648461661976040812962350232509055935504737445633507550000 +0.5097233911812621045870387192986343096519914822989635265504193027
+-0.3916247393905563070329929201293916235502844853649152216175431002 -0.6786946784188743264984266331175576009520803600244368381037307820
+-0.1692968550760303048659412472462158621894331623355288012456478502 +0.6506220778383390902810519806534866542242964953734490326821550957
++0.7939708466508500149635028098461967945381902597647140226048707733 -0.6691314012401686296701701861186257577150500833481790494194176010
++0.1755359202379921866069215868439830278095556184633912262229245804 -0.3607578164500788389478850728658420049496382532164142257989131575
+-0.2058860363049366819482401982172892014693921998279485163968466177 +0.5137832937257079622122021058688634291387072026308232446612213957
++0.2559787616604292818916512520106511162736504164763801635619180878 -0.9109828734636252566682149292174815461989826369968764639973403650
++0.1276708600748879334947561016681847262811830975924911095919544508 -0.2928539463386447502644704496725275821638972570852098477364205102
++0.8760436753090542847847135932217121401527053160560084831960143593 -0.2022584053519768581037028031029434740910574469522607586942834044
++0.07351698801837884840350528581184895847574439119624698642085424494 +0.2539581835192701181693571426557726231955304518525654521323868953
+-0.3039496890780872600154134361379205841668603387773376739391879981 -0.6842499813377630538937312156953494007121460437420316928598055588
+-0.3907346338213221479806245911718328382900706209181763616721575594 +0.7095975818879953787555549714486289540665192180900310502117957585
+-0.4388940823989610336759726471781391531278685673540721007319100110 -0.2574396763539353302113435527681491751597317659580955689409294683
++0.5825626412257374534228754073010703282797138907243105547408114499 +0.1084723699010345226908040418556596513481172443959065170244079365
+-0.6822025478392511825665891340014210548424097859019063003298929114 +0.6878275433421087646017125722719871028429683962861172999175496354
++0.1545185080993607592672497799365112139383088433518173333061566559 -0.8789474924054543686455524361817485086841841768022097714043107389
+-0.4143669554567358180204045828576984362759995052100693730217120812 -0.09309855258454397478839227325460435036116481834954358054695825032
++0.4753177789592309918230775580385921417863787358258761083730464393 -0.07449211507454094111131585942450987495374853189001234193679284220
++0.3381112107962121322618268829368716348475620132240222907038939887 +0.1707613596386845395811706020582614423128553679132749206581108962
+-0.9358096238962393427505781408693047651496562497418868348861861035 -0.5902472240470540472505024820474940235722950728364526809333969815
+-0.08535245274454884668189804324981279737218996224284012980894287651 -0.4274688653557973204294343461271838971074248894806827678845393032
+-0.7102354155198365907516134110899809885611419503815361240641323568 -0.6927672796364462259946960383490716630530887261998800149117110070
++0.9406474081275973498975356771926002702836768966349619838574684753 -0.4283988226939923687382725618590923008436397427073072537233525156
+-0.2000685096329297319258072334148781412585948790410411642646256195 +0.8088664484292956063504925039661844340281534661673383932666091703
+-0.1948085218544742821796599695605371957131897781266723768851470405 +0.02921056551622053493886615114737107483480399922185422096708056434
++0.8712220301755093291187034874511681480503967332965384772732747763 +0.7709060492627032372691628594088004763816603494098921192050780283
++0.6950851294718433169140442698032957893608035244855573671523954496 -0.5382684664777266435471839282798938911985062502948289975060936813
+-0.7561270158629112582486936216468418439220012331093998629766642010 -0.2062210557429699661996861390341284196145194364027035261602430674
+-0.6835396969376186207049708864069753092830556523340365862178601449 +0.8754952663803193532160060639762067663283402162680161839585835375
++0.9991878451915680045557057812923681076515646015963600921542788243 -0.9206173606968779544768774879052264577766137743646453858538447364
++0.6960715586734440378780565521179708081273104398001698196866525692 -0.3912669158280922308346004808125786603155417601042445540016306279
+-0.4327429101489054081764622566841741493387409268553307848985075370 +0.04863270721947285118454925156341896447277278914760118454915618036
++0.1872243339861613523644413949146884094588238480876418909173774861 -0.8777799025492996348652305828296742404277886951277847721079697005
++0.4026624438323956524976399774636652834874029788263541240750887990 +0.5399567455650497210694891846810397387418941909497049218407996733
+-0.3491360089641523322913350877949129728365038941158799742781646969 -0.4058285435372514792126856483458541795336355333382136821430247118
++0.6819675433960509672083191115738041818053676494660618551111563709 +0.3235522086271667225028017540825955598622261688331890864345311142
+-0.1823381334073534785245030674706286318834159248301753692560100612 +0.3653797101208254959115340937844253304925015874728864434959338857
+-0.6385995787092894271293723815100593363051897165493146410149913737 -0.1005788182559487011460524715957644465093902191535898180674481819
++0.6916342281018036398984236976791263254344928960212594937230288978 +0.9553957718795576265021323415556959321567266460707058329406755748
++0.6500621886249875850766751691108345859655690343722040658873192849 -0.7975576797861018725687955248456680104136409702267819880193353171
+-0.4348318526254175826972960081432612508244854062543938298206690434 +0.8021451225366385245818551725925567489267392633548994752032036445
++0.7456657873285777360172081160009154104941498607808325586093127197 -0.8089630264800288192763356792350261271936669849438243145021335023
+-0.5895812562236644842763425265025353569278839415810786451424337353 +0.1425068599291859634879267259618383058565113833354536759136240156
++0.7337844832681618069448688606606437307219983067331818101002026825 +0.9000889427012277833058272501199804724694541536395833684647817130
+-0.2844670779170792126800784688398491934944633405537328381090907841 +0.8825785922210718821378135630485664692587783019522047991382486847
++0.3427993283602618500252314660534064478569829258605557092349536627 +0.7881242671589294840667604089565227547136667575091313952989030338
++0.5106185172529091476614544522165302352166517844065644266201756413 +0.5417541139449671286981484435048281547077623874841617239259419891
++0.4856173606007132392408155440134806804977686799901896296217865378 -0.6775925815727551747337013693288867438917638842065921181239742709
+-0.2263671187335048284610994617354351929389049781424965316819369999 -0.5684699255428585076750538972721562822397120367120381846416301071
++0.4146212958335274623278671624097620523062195099641464230045078964 +0.9815719238079111155039473075821567248852262987107874584260238522
++0.2580172605548675827290234893704744905592907659497024523955378101 +0.7714927765369652965271514521782367972392286042801005604428737149
+-0.6087056175665957055918320432990819374336656475674530956207253005 -0.5440153818602923388780050807085310644091588288802586104937655101
+-0.8366054247097585161540775208898495411890462422998642722088007066 +0.3615362504374140576322136076471042020994039119087777128939684147
+-0.1378349259598228180461032166025966771602005088520766411489315250 +0.9864709200330656999293149718340896111018623010738547600627754512
+-0.7528699368161971489890713573053204682662330485091242459663481999 -0.5474934617159983766349812573862333201737368517204059175807434494
++0.9340751534308924398705797216582841894605412566213542945138196716 +0.2075674324612603217146992019203821355335872154789081374195840520
++0.5742645545689954506293320636914375707050933690551415200841920390 +0.7812896879478870925229920958217899596796171084921617649311918288
+-0.4990435237200477105373352757983399851892927275135825052152492483 -0.2179590208852060907815242018538950450882537962532161950305637493
+-0.5788635431909007734940310044141719475985224797147376719548923445 +0.03407233882018928193493979299641310720050567052415738191757214448
++0.6307600498067333167763910521978077360220889790285830844882853084 +0.7125490085080891902510883645860803194412481599961334464815528812
+-0.4014040813213097025365283078522427676254307924957866525396810814 +0.1152665052692803747907638004669423088982562038560142067504600565
++0.4610011535171245502984210415152447483516976002309699030847778858 +0.6706320045349718830858063271813439535798135219285955630704868527
+-0.9598712514044812421926074307158169071261326319486214135628310751 -0.9790918241511943451266156806352553583834402001180632246628393855
++0.03297507778679327566136523769691558089258387118395727900760854437 +0.6626916116926436353778261944587216363139599817274558156972185754
+-0.4478144324181501526487508470803436796663672506907329977023916744 -0.6832484932857144187175278218975575322637020154431620055570089939
+-0.03784958598688075901169266487429862409650536609863979187248762614 -0.9236274013131187051182055975637081122430370259936586299487685935
++0.7172172553976201342087941433376237277837330259391388339674897056 +0.4329459881917791170914767834614638221684448405991830376009866144
++0.1341935476168806197658068994509459570361343697473296061012848517 +0.1780949520221442836546034512173505843826125025895442344620407042
++0.8063824890450920329896533677634120385719152293076412441511895267 -0.7864644041352208857664302762008351771845428428182366900470307243
+-0.8679891914951790505885383634871248274035087573890845642505234422 +0.3967750783874298386592500378159226415363884589330257183087776766
+-0.3426337630231737829860061402455325002495616429829300496241394354 +0.4021511691862428991629608877596781701386452656373405333659182861
+-0.9481588649129939009976602290412980740818684483094249699678164212 -0.6739578845837284607675768893014561843826417979414189937305296217
+-0.2468702574678295161158155415586739476964258088410461931443734306 +0.2673512829165806947461074367768913473252179351011458848102365433
+-0.1146174810304291059699248102425343100105366662034712171707784062 -0.1606151077232962704440013400194148673471012708803757039892481759
++0.2283297622158289340060135259128868026073694002294612687340003795 -0.6516293194467803511408513659273630873368195956334006753250057806
+-0.2718944337460881196573673881752552829173470240069493659862352829 +0.1581641963055018584136693398873282732538353655632162705609612626
++0.6421696775864062219741378623856224373382184359901387171857038018 -0.4472264014319921353485756897030187137936617609527739285873356223
+-0.6389803245001939674891437338685009037868390389892571357557309793 +0.5198204628986982814187902203047813542743127181315784005030814671
+-0.7556179778156452619018039591263991011950908799795076441783613051 -0.5345687751584304985811639387710255103798417033330064045171565220
+-0.2580715301246062724484885517142629841524988678101550643060884983 -0.09613747288139703405265655669093816154555616256226782885393272045
+-0.3872364535425728912921990568047940609852084750726579602553629346 +0.1091046599551409739277848234420950381061747971632363350285084927
+-0.7927809974155702691556285149188004966121663582345561182236807536 -0.3638434189951487662185131418025189739242272714456236161967495552
++0.02862566723071006537340570190617812163536850346858065719330520575 +0.8657894125430720452561421655409028876728862458063989687748887178
++0.8058745718080974945514004702154373689648850822838208818716712414 -0.1832419982466050083468693863348554613373765564781373608451017215
++0.4099119627688388538769984420238129284792268230077586654685167992 +0.4341616468998303229342553904262908539354993862680803157439486164
+-0.8826419555488829504077066182866730673335050894428325807226465764 +0.3634087813280718687038524335661999155640560188027757078012062042
++0.8406180336262964510174047914967286521428419772200521811591938538 -0.2301861492140440508461105411288243530882879879903314036671155558
+-0.4509367572950843562551880399534939388875078691544577952763694340 +0.2594469888551248575826659292808600078973511590352196943677607189
++0.6620955836916596824212397663417980730035844600002163574797281392 -0.4591607272269888298797300394333871930588206140187563693373540969
++0.09931563449449074074031181644069996206561013557911091480285233095 +0.3677504513638840739359300731832416972710900860035325054674785162
+-0.6390907754627097699275236205094854160516702573615680850365051915 +0.6023293224413611655840423015797228640546092079879254742034407409
+-0.6388666965766126015615967040725665212506297573909617791277211475 -0.02131391900572017474355333926266309217332203087014903620849329842
++0.6087849938136308182412384404226124150960376576525111594939953377 -0.9420073517542883403287769552502058311120701713949873717305656807
++0.8706797982238148080363881584917936840101259781785059135877540270 +0.8334885569357025459647792535398345265282595453482258499031154216
++0.04278245471227159846832542204898964777693633220563225458193492098 -0.5737404714928255451956541386387982134535422852664824410171144724
++0.2569538948127883301494102848449453487250302047768055402790274973 +0.3839491485986286760294491931482796188029101100166706102789409238
++0.3437003552522383085689520582964325593149609775075667682579222428 -0.8644859824192852059524021901164745512726842707767838820767355852
+-0.3218959502583203105446746192775897778845750520500685752508368899 +0.2613535090477896910701690167696572424601085252915465562281769652
+-0.8759520196520207354253875993553174962243840546621836810552229329 -0.04732605962010743724027782177441742480031865092105039014828372572
++0.3695311789866940300113392000173568635794411080368248420486051257 -0.8087363993991457711188380498572989507055658767150675645788340123
++0.1949294588334673301930135554724819965935557947240381098751857774 -0.9598449754784094274908844634784768172655506247537059019718181000
++0.8327203309031350498038333519107538479272342828592238378770924929 +0.4284538371082803913611454695133204006026708809808730387697137872
+-0.3867736800309982460174767560960745555693216907304804515443525325 -0.8855350281180001005398659034270839360083648220108055883276537966
++0.3116959364329371631043166149865940101034639300958892851164822571 +0.2552585399715026851118311430103186332148081107221089094257417458
+-0.6344389850964027197090400018047413877547525732579247607188115939 -0.3665418523820922968605149071723118694416948426555570888589900074
+-0.9859792403369194374101181021751879155430818773451107383536702769 -0.5351140503747485670285985106948047934759619381902481279198102607
+-0.2988779477894864273115298013571570477714461831633655661691128096 +0.06768040228254496419232744476574825370363970800773114467051673533
++0.6969130489701374579144496827671972093540950499666693372619717336 -0.9613219902793502634540337469146944860583219793581040204870692295
++0.9538684673269454382682004061133669424312443860394343514530091686 +0.8194254869206434147123772727832536777942235823925601516645914075
++0.6571064274068579576145871735027597380172755435464815449044760207 -0.5137158718380063957656741746876364500313586405879210341796163590
++0.8948083174389717363132891262865381126942487858457690321386032713 -0.09360828723402708566175673609674392165694186440598056035341673031
+-0.3666554779067070541307883937658891733790267361996150668604800832 -0.8432646639663945903481971418243165495003893134453190393133685605
++0.3003809721642328231475581761782696031186793066000435245606638715 -0.4990893675698827460603263158840168225280606232079803139608292550
++0.5683164824516389166397449426867864421791228614931009665807349503 -0.4576309621253367863731161376586273985378295934432100156779126809
+-0.3617780451940083476334098905078810616412122142339454641158910899 +0.6236982769424663778348657511615995934619204277466436642889359819
+-0.8762520352781975382306441345695031506018599776585168056575780130 -0.3074191699285001905189557391609687038765431134119883220566139043
+-0.9149951631626462781986877452029941763769145573200913307939646647 +0.3080953882650616038805212512456195142005924670785310885533905785
++0.7980936345728580788983395625952905333391865363688832991541279836 -0.9239596574429580324775182077746673312399690239008685041133347607
+-0.4345640967580088681688823809160115367270791113095117485047473101 -0.4541591329889031673531127895438285977300499751514114925077000037
++0.2806726917100181766590524566575735198041671844833126034015982943 +0.1946452208802947256459703988116668454416673631457615633266416753
++0.9886442669162063771587942444861953097162341285231229911790757677 +0.5864861881514781951353247522640089957284623388526680148235215092
+-0.5407668735995421230876882505889671613743270176303406373401158307 -0.9088684813129077122425942049602776170393592277710635613655163778
+-0.9661599367900293411988347594202761971391515155829902805880345948 -0.7674132751867637789084495793111394660243975857745308826053108946
++0.4527612743944490491078701770325283220182782523040192607074738515 +0.5666369518896313588930148374991022187486299995547336584718344106
+-0.4403723954717156300398669608484104669667863109459731879914962121 -0.9803729316871519308198702944088950976890407806772660314475791918
+-0.2689722396417616874292948984223352443158442995705723688305290778 +0.1104845061420917740288601192711286154881767041528561297792488666
++0.8553982026789018215607096745600369864604738003503035060351207821 -0.7949664410405772283064648554147937827392395976187793697735520969
++0.3262536679087418635318429806053466323919442159475721732267143898 -0.1129535202408497801257054402246635656808526643870618346798652765
+-0.9869949403144471510949130612151902059070782241470367330151451369 -0.9846941424469566448575331482959583880425615131811389677133134068
++0.9958236385275781126573144185857571677091658970162008833157311346 -0.05719680201418705196606469011725982350103202733675906208176615931
+-0.6665960500638005674036651414219506162171157852051050237602670409 -0.4902429513149137815102558152319575955160495715783740859068248035
+-0.9553350971491526486773428621871443527918661440128477714574153242 +0.4052429573106405421776260817825263774827277375662809794531723347
+-0.07935632250235258159855692970937683747449485800098387036910117561 -0.3607915084251382273626634508942018762648179567378172215541829901
+-0.9610690736702824303758380293926774684327690145291948041029808949 +0.7906717788420571816737531912366128617411493718310474183736906888
+-0.2927839622196178599656026082499690152245368043389294166040513801 -0.1568281297997031891540632664068415554975453155553181949250014478
+-0.4915390297352905437970801284262144929978031293094695511535590410 -0.7421572611629950093457845850648127208919138057099712125379544453
++0.1629547757370244179126879520510440518091698527617023705879738745 +0.5780558596097807683207454547236395488133827522713817667069284054
++0.05653416666354357132984944706270086858040031933040278740096907499 +0.4362198120213396662424110900000121682435967091260073538314188091
++0.6308921779447044784475646457793683838809254371564012458215545506 +0.04327562406805076265748701150473886600938331238441018322905893326
+-0.4345571265338803304901574752486287910158971999780589556527554556 +0.8886850925637305199975319767549146272262007284929868685444835086
++0.2744614498129195644278595176215625707002796888714048071306120005 +0.3202908275802437978430238486633989290864556278031872354537394329
++0.9462745414165145062091900137500005105717154649991007069448208601 +0.07448474083649170858761481762607857605708626222100711242933006984
+-0.8842780848886000137538202841488505116007575831951417195166818495 -0.9030117096188487121290796909448128017398817098930589824165159976
++0.4895089734173998976892231119342452295703520064229356243351797868 -0.07607292061145102829438068545785411922356534628859690430477631854
+-0.8015666268827453757745295045038410309194334927690170360827758513 +0.05138583168435245710326350842273724833346557931996626776646982429
++0.08924086551220194261727996666379476791624346388324173884747638972 +0.5008130293195627023346731072068022401790621514159764910946980204
++0.5531344085474110087060548347131946108975524201603311588598152487 -0.08308258995831932775431468049895825358595323998759329880279321264
+-0.2726482022070987666824807493724186232426776075571902653183759167 -0.1969023249187990966104077737613575497243007563168379887429472728
+-0.2331190321888440555823894801021203470961345019996925149236496708 -0.3794426872470523932298313681504478419070171038186861124396979647
++0.6887376914026015928562802078420345845484724885753275194586894515 -0.1633983103516085979757498686949820629128164591076667356421684973
+-0.5670143177465921484512846331884370438355780676526109586127728543 +0.03583466965447968204809108779531626054342845502546526010545650468
++0.9801198492324806976103860712732338332717730296465385214787557692 -0.7559999027060877830729560829417110091027658486861606807490628210
+-0.4068605760807354779609302896224247587758632334696648077747840890 +0.1650709595875675062189264374358464621422258437650001348730724430
+-0.03446921494516039315412398153288788724684106035814076442922915679 +0.6037319818982703903440745426215761977333426022358603443182651231
+-0.7870082391945100619360361264498403541957919699399015690283593653 +0.5234096555130512398971737565214787548727109500561831842254384509
+
+-6.730719788800004165080710627590675163131117386713234659561158 +2.036970739395243262671943823116075102482918552545622141484145
+-17.30347966312537194143546187333038510943314735747945761670999 +23.69796083470282328841855351910041871999717091167844077821762
+-16.066303491264118285142444294699770462562541532625575567628633 +7.031496815290111233773880705730191887200904173611168101284764
++15.925003364125834725036263749609674611677607326231289053140278 +4.572453041114456467445198462514065370717764960327613362005298
++17.575177145850136998353340015074203101158037293855169580755939 -16.209644219415152271473845343017410529444519991976186088003291
+-8.630676730334848381221591461047652284437081664236009057004962 +10.226471431279008188038936196349930568611443777151494593031283
+-1.393095177474587560005831013822293265620281224576954817807446 -20.832558173980722986201864229596098646576771302682398407226965
++1.593342449470148401132043460116473804490352809869704115403596 -14.305282949037080884881989706436484814173033254873410530781609
+-5.499466552339828160575046900159927282470268557931879969834189 +14.410305431131442524870020855881902062152811571331829150150186
+-11.538116599086931542460548379498257143924888413305214112873672 -14.513368570832725947180952388605655819991877848201401421284743
+
diff --git a/tests/data/nfft_adjoint_1d_10_1.txt b/tests/data/nfft_adjoint_1d_10_1.txt
new file mode 100644
index 0000000..6f0ef6c
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_10_1.txt
@@ -0,0 +1,21 @@
+1
+
+10
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+-0.392652893001349696808766093811931749200495021760460723164189276 0.214807442975030256136995435339870973401473966736193895779046616
+-0.034503759012416860648242153308374302130251391086680603718318656 -0.446237630140952267176607641766873669682467764253906310263245869
+0.421006800218000317375659472844987110599157761301935363843780375 0.151894062128843657337950253778947088725033103876223922251974545
+-0.311463987477590560224336215441587312309546657006950815055720277 0.321416733298625197356169781655370936380441036696912772247051941
+-0.165057267325380014265279708166908031987921655146543985851044333 -0.4160223917565955826045141408940833175120288034523920317861101067
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+-0.202354476845875930808658798568958263636760332076331409887687493 0.3992132232782778337207028024233596615076121224158181657708900775
+-0.280814526420215643112074116453909111645732155050451321599926904 -0.34851360617799451933861285419775410610520155913818822846508501
+0.433117421380154858296610495096985163687615179769727587155405558 -0.112817690265337484855977261213010121538961863017476658612638309
+-0.075105278587362632557972659383203122957758037255183085829933029 0.441222992451792903044672577207324009669420578781682272592554939
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+
diff --git a/tests/data/nfft_adjoint_1d_10_10.txt b/tests/data/nfft_adjoint_1d_10_10.txt
new file mode 100644
index 0000000..77bb2ca
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_10_10.txt
@@ -0,0 +1,39 @@
+1
+
+10
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+-0.59730960869164371470605802394759726248797236651926297914443196 0.1362715028154381904705722239540294041833409476756756853738527
+0.99775096062059170675082943166954961890456208798534864731763498 -0.55894437554497416160815311945074551339769527288366322204184611
+-0.21293383719709571349608520778050459395039037365180174165536909 0.35954741044301057410717771315650192305397080453757539797376116
+-2.89848365614425734303040370205502283699833072175060685797247159 1.15086385831356780913805094660939742792066959429935014771704431
+-5.28892888163661505596494035576025076445865161495562354502989616 -1.49125314911634926047083396779988151934864279833917122560328832
+-1.347896216355931774679958699258750407129349908487712609591584342 -0.896167205915888173511139880815283371468417833967393658163450822
+-2.46784435788210702932894576558958114784226764068357911384813342 1.54794007127658575510648163699975503254266419404035588544994945
+-1.73671760314858069350940210045993898834173129777061103621495857 0.39860490255330974937530092941121688216850979815151656072112399
+-2.61480393326662313484066606044895983864913284340323977492778371 -1.8267713048170686067220803877578892558198463282147176838828842
+0.86062149851041407411803735165663584404682018044494941425256193 -3.79017922695436726931718456118903847378765693303207430421122488
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.4413098759704276115157486122940138778382450314554048934666388869
+0.7051415661084367709201814372310498119360160763950294411494790334 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.9186285185242277638228379667640336837252479527413557249796864599 -0.4763986698707299918532811013155870587476071700798709986377725737
+0.6059166146272276531659924142280879090009660941492851068272418515 0.2184244610344805776516307003112049282480936070481769173095132673
+-0.95114225448595864485771668441096849436578004346293095519883533 0.5284655557490481515292532588784919125603831832265742904204270183
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.07838835742104840389052756169146943544000206230123216084325830017
+0.1817134261437800570794256414315250650163873891461146114574620382 -0.3158305122954834491361879876118745635891842225287967281157858672
+-0.8768399197753272524248224977827836246291177209791567885209025379 0.3458309153991207858067077092337332970573207566667458110876416196
+-0.2027179913470305147020813461378369947382030993314951020253012762 -0.01097686940732606761440422015891875954490441842087149586770120005
+0.1375057760993413749724126299163162462121619232755876011030820512 0.2626555858903124974165091427737336367005240661151773835219310271
+
diff --git a/tests/data/nfft_adjoint_1d_10_20.txt b/tests/data/nfft_adjoint_1d_10_20.txt
new file mode 100644
index 0000000..0ab8420
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_10_20.txt
@@ -0,0 +1,59 @@
+1
+
+10
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+1.3884973968458859445327056582221970070690083066217069075070819 -0.924266305420565368011178431950149251237069827934565280015799
+-4.08344776962705085774354283148691606236632608779877374668775806 1.03006479236387952769757188932565974461905444537113837758164862
+-4.03714516484806486031564410567717332960118723901951396300256101 -4.97999264648962537097419782628773013244040174190049527499663887
+3.13725924075051360777947254587866910690850593372559359109020617 1.03450697355860722732534178131976121978484007855947740336866949
+-2.09344959297728161042984138949422824115576934924608778927398709 -0.5433608515415868821758911787703382517960901168184645201884799
+-1.313831422727774651555845755917101990528470330521651169614664193 -0.69273620291038926726455982040262810773021395371128338842658488
+4.46247925192920379128984933017002274344111856699113027289940454 -2.92680562073515463017929952084299710114908302714395039648034042
+2.28019593958683590589347160777337838750351835626244282921064656 2.47097640117186122061951061416433323388834787884534844353537938
+-1.38646623155880274322369326605354635139126671692883092232623714 -1.76645341671227927683299839212594311311578625548995433559468724
+2.13721643206641988358010398383864107421754257597336377240100232 4.25765722027329582591515902715198479261058829720614093564336599
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.5356506216935318567168964679980224448474954197740742721804425662
+-0.9286394390238346619050912089405834508747965422378917835718069263 -0.05251382922654688111844675415661855947948761360659425718759593363
+-0.4763986698707299918532811013155870587476071700798709986377725737 0.9518095182124288782767378820155949547911261560251647626870735792
+0.2184244610344805776516307003112049282480936070481769173095132673 0.9956223852813107496522616247115213137215848581937907906567140918
+0.5284655557490481515292532588784919125603831832265742904204270183 0.6741052796006089834676571454955036801632897076493615121596900136
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.8697750560716627155371707094260289644371901052310063829991901781
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.539462018274751480324642644804511358394409237082129058457521908
+0.3458309153991207858067077092337332970573207566667458110876416196 -0.4274845026027779916855619203781095649893449575458629944853980527
+-0.01097686940732606761440422015891875954490441842087149586770120005 -0.8604697501072873707535504424154609782723273602355359333803551115
+0.2626555858903124974165091427737336367005240661151773835219310271 0.3822062430356176188977280281604014506988427784943414973817258933
+-0.4833001744929688887627302318231007732586579925667420767092911497 -0.7335087736711041883089151876515694737975402817556229765975958245
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.8786687027770929787301562525828872003547410177701220950278899658
+0.9495591103622864735737804468916775971319894153057637661282509133 0.1944979336074391420204691208780533563017707991268605634570366201
+0.1280772471342585841455757702545741213596517009855068302808317718 -0.6717069716036456017860348911350501039034020263227184271420653514
+-0.1946943926350927100029394214607870756382213566654573743676056718 0.1841240265716411858721923885202834145897392121583597644960322461
+-0.8391269337210497321784330437702418478537689733296865638890089907 0.531416327611542071221970089939764430329756625444579259583169101
+0.09000979948494377602070534800332955914923353808674104151336312387 -0.7793598342770851820561551396646691186537674923197586552161425487
+-0.1766812336766545879148652249537685082960598655086779135604123172 -0.04982739811897050028189209963034074300557183166488389610036293982
+-0.1002499995910402071291914694552929590775602478191912580994509247 -0.2152831478765442996690076717147867376683641103330644151579049018
+0.8558312786548114618473704491843378278983698142481509704680004653 -0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfft_adjoint_1d_10_50.txt b/tests/data/nfft_adjoint_1d_10_50.txt
new file mode 100644
index 0000000..b9536c8
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_10_50.txt
@@ -0,0 +1,119 @@
+1
+
+10
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+-4.1713031026198041103932451933753239672100307080341727161805141 4.4239467844685439324952988701872557893606485419988798239262564
+-8.4667518535341252619211104309966607357415077423650400564341697 -1.9233146504203605606741268946633222177425442337965386781043399
+0.6259621675874933673444312813580006484010258592489058302064387 3.9445153442558393327076956885704152259127341074306183066892585
+-2.943501804227451275952118721741355922049081388609045333201719 -4.9170872093175204454154778416048306281616109319182914758801062
+5.15077009768509856344210072878742796067503349122393717288006787 0.24935064896680262612148448787504010882022338843560304683760395
+1.35122275672905157987939776353521245082875968075595465317817761 -4.79530968124209425485052145966292630285889974485326287728490672
+5.76398780377696975911715985588439376885600817595220828277145736 3.94404658565281636560032986859666956753707501207359611055962932
+4.4041240196161894666545756381301378163895722267307318706020219 -2.7483740159406334807968093785167715842150273786804630701545328
+0.693978625173045631016332704883474090295279821112336709071499 1.9948181035440419453430408653481795461951049449069916440494305
+0.4511087313274987220231750038341257767399512507750514718055001 3.701671064428727533604009679478108428069787991591387260684837
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.7721031360269444536624854764846278079390436516442447307214583713
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.7113282365127787106295924505560767722199840055537543517442585349
+0.1944979336074391420204691208780533563017707991268605634570366201 0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.6127602430473631495393181955733023028663546816025211937039540524
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.5944056790460496081717996899055920305811666877696698395774078378
+0.531416327611542071221970089939764430329756625444579259583169101 0.9839367502424209997890558933686976016082869978582241397510153252
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.4548419343247805224460011391703079342763504118566706946966391853
+-0.04982739811897050028189209963034074300557183166488389610036293982 -0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.2496600323413886386258990085306122333313701779141184118995463959
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.2013567579813494116381818105314838610969816486807952028421948124
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.85858010457166611374976182888109386496982051035674989499979384
+0.1856688150172391527088040246433169286752829500750590071977203062 0.7326702292582058588316598422918662773838658327971514003421703067
+0.8193143821859564924477154245099351963436429074028089074430038904 -0.2697443704573465465233716116511309018200366900116819867580635278
+0.4604487491339531156973853721884505256237012331451385915640611729 -0.6468087813680422377672655136982917947328505318460482424201962
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.2812302577494115409480047067683469320314228801749259890701395474
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.02167413194230472805204979364706614220652157873015883116130884482
+0.7727562160593342436881229708062656539223995010850938445718232095 -0.680894955890704100546661726757747116024714493408288024374190234
+0.2216455512897554102911455213296037106714896153079531893725412128 -0.9306530725185795934583927665790248017610038861531896668451002839
+0.8060520707732849845829519568044036159880831172244051400087891596 0.3319152007540851906913026983763584438955853838764895977762668678
+0.2494984458565048492106180084187393465587010901621886528310783225 -0.4414898031680223608932387792017485771255689761890070706015387399
+0.692720462930580375837580120465281755163139346395305274413909974 0.04675554236208552284539297942143061834219393972333359647545914081
+0.3484206501444620766420233468327938525050794194268200530793896515 -0.8152568938325646993310760006867681539054279301843202148958871677
+-0.5365723013330725289094471599220332027885871668229904917249565862 0.3952163240756655529212705355453418848569049122249531536768131848
+-0.4969838973904267472552603461634423875526049699439467087064029146 -0.9395163144138835125672454933008856593503204403133472584898229717
+-0.1099633225953045478540363356794430416477263111166654723490589437 -0.08780353633292157461769946866167963633505729824902226238512671868
+-0.6756547625687923165084584127259768184144567299620396875756298559 -0.1743560068378512679152575299947443762504689480476570621749324843
+0.8687355316920355914551191479618699998090617653378680974249892199 0.6018835924636782523215034400201993341434060856497418585329625279
+0.6573707348942885034556657549189062350008259948442460481059842193 0.5094537464059880326374352490064905763350159638438638190213421193
+0.304092255431421724386276285709205877741518261756931899126135274 -0.6412882157453879879998117648467144628970706782597054160685555631
+0.6923315191547459490617708873077670147989473956854336908747033971 0.9017103216368149546517732133490469846549850682301607701578308401
+-0.8796784447840898801814093263554195453289300559080999490503364787 0.9631270643127979384664069651403286361478505285019531813591892173
+-0.02378306045101476542041128049120676361822587626846492046663605803 -0.6210835173793688086670082589175993809833456274087668762475476635
+0.9854996726419986830846511304498671064695985279263874167222764802 -0.8137281645240375388576750044830353268919925528507904843095256157
+0.6717005563662298476413580139956207272362245386339234470714331016 -0.7041297500866612607234884784407130317305843364144413223065323821
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.1235721593345202217795554759876880268687368789792682195280803184
+-0.3904035160770493684430115148009967524256991556076221372265894266 0.01793996302825844948175557573252934185711456214972052895861572493
+0.3596214942327276879157632590476519168937540906266077357147819608 -0.3411596862218241172328579047617234818967459872060847679144866809
+0.7958628339830083470736213000945699871834494249238046750007408612 -0.7379746599220903325806827424480469595800618414934950958452657346
+0.5412530329369591795695895418300581875196694253995928145942436878 0.6843546378904107483368305041075808036585650068151329599810630045
+-0.2613537732594101756765510813982454595302525696986533152069370387 0.4265099420399003863248167494626862205659560797404855195341684806
+0.435828324052182771698190217679588447000849558850289775314256024 -0.9874151891964456486571993218370826427302121071375833081581536189
+-0.5937465792299257034198201886287226952400923687140794966015317515 0.4601637140807105378191037234478805179877043129140064777542238544
+-0.3218041479377133937935849601301732622610394503588237190352903562 -0.4841039802362244364267157134690841461075259779700777041439742307
+-0.7360914574746049921434644450737043073420684008447334807822853276 0.9965877589863013394561112420396792373833365736836351278348301833
+0.553187364694831117272984365230687982396001421226655790220741406 0.191567730523304776574190978829765313731471509331205854313016986
+0.01417576197421767893279369309359545621976513518858252000938611031 -0.9100049476348622207723944867294612891098821253248738836563459568
+0.6897588478092123244219967589255606032813281483291811335150355542 0.8085565025927605798160394591787637574375967583263627553971120289
+-0.6996703139503628987183738269577949838863048093871175900433716284 -0.8851479413535487385573817957243936843534909265401263726020814395
+-0.1309677757443125377194229250386971011803561306992623123400631451 0.6064591258881136876029163103297147737049475826316704311935105558
+0.09049503268981439002460219767349217513483951010643022102321620286 -0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfft_adjoint_1d_1_1.txt b/tests/data/nfft_adjoint_1d_1_1.txt
new file mode 100644
index 0000000..32a4278
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_1_1.txt
@@ -0,0 +1,12 @@
+1
+
+1
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+
diff --git a/tests/data/nfft_adjoint_1d_1_10.txt b/tests/data/nfft_adjoint_1d_1_10.txt
new file mode 100644
index 0000000..3341ea8
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_1_10.txt
@@ -0,0 +1,30 @@
+1
+
+1
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+-1.347896216355931774679958699258750407129349908487712609591584342 -0.896167205915888173511139880815283371468417833967393658163450822
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.4413098759704276115157486122940138778382450314554048934666388869
+0.7051415661084367709201814372310498119360160763950294411494790334 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.9186285185242277638228379667640336837252479527413557249796864599 -0.4763986698707299918532811013155870587476071700798709986377725737
+0.6059166146272276531659924142280879090009660941492851068272418515 0.2184244610344805776516307003112049282480936070481769173095132673
+-0.95114225448595864485771668441096849436578004346293095519883533 0.5284655557490481515292532588784919125603831832265742904204270183
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.07838835742104840389052756169146943544000206230123216084325830017
+0.1817134261437800570794256414315250650163873891461146114574620382 -0.3158305122954834491361879876118745635891842225287967281157858672
+-0.8768399197753272524248224977827836246291177209791567885209025379 0.3458309153991207858067077092337332970573207566667458110876416196
+-0.2027179913470305147020813461378369947382030993314951020253012762 -0.01097686940732606761440422015891875954490441842087149586770120005
+0.1375057760993413749724126299163162462121619232755876011030820512 0.2626555858903124974165091427737336367005240661151773835219310271
+
diff --git a/tests/data/nfft_adjoint_1d_1_20.txt b/tests/data/nfft_adjoint_1d_1_20.txt
new file mode 100644
index 0000000..e5d6dae
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_1_20.txt
@@ -0,0 +1,50 @@
+1
+
+1
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+-1.313831422727774651555845755917101990528470330521651169614664193 -0.69273620291038926726455982040262810773021395371128338842658488
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.5356506216935318567168964679980224448474954197740742721804425662
+-0.9286394390238346619050912089405834508747965422378917835718069263 -0.05251382922654688111844675415661855947948761360659425718759593363
+-0.4763986698707299918532811013155870587476071700798709986377725737 0.9518095182124288782767378820155949547911261560251647626870735792
+0.2184244610344805776516307003112049282480936070481769173095132673 0.9956223852813107496522616247115213137215848581937907906567140918
+0.5284655557490481515292532588784919125603831832265742904204270183 0.6741052796006089834676571454955036801632897076493615121596900136
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.8697750560716627155371707094260289644371901052310063829991901781
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.539462018274751480324642644804511358394409237082129058457521908
+0.3458309153991207858067077092337332970573207566667458110876416196 -0.4274845026027779916855619203781095649893449575458629944853980527
+-0.01097686940732606761440422015891875954490441842087149586770120005 -0.8604697501072873707535504424154609782723273602355359333803551115
+0.2626555858903124974165091427737336367005240661151773835219310271 0.3822062430356176188977280281604014506988427784943414973817258933
+-0.4833001744929688887627302318231007732586579925667420767092911497 -0.7335087736711041883089151876515694737975402817556229765975958245
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.8786687027770929787301562525828872003547410177701220950278899658
+0.9495591103622864735737804468916775971319894153057637661282509133 0.1944979336074391420204691208780533563017707991268605634570366201
+0.1280772471342585841455757702545741213596517009855068302808317718 -0.6717069716036456017860348911350501039034020263227184271420653514
+-0.1946943926350927100029394214607870756382213566654573743676056718 0.1841240265716411858721923885202834145897392121583597644960322461
+-0.8391269337210497321784330437702418478537689733296865638890089907 0.531416327611542071221970089939764430329756625444579259583169101
+0.09000979948494377602070534800332955914923353808674104151336312387 -0.7793598342770851820561551396646691186537674923197586552161425487
+-0.1766812336766545879148652249537685082960598655086779135604123172 -0.04982739811897050028189209963034074300557183166488389610036293982
+-0.1002499995910402071291914694552929590775602478191912580994509247 -0.2152831478765442996690076717147867376683641103330644151579049018
+0.8558312786548114618473704491843378278983698142481509704680004653 -0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfft_adjoint_1d_1_50.txt b/tests/data/nfft_adjoint_1d_1_50.txt
new file mode 100644
index 0000000..d24152b
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_1_50.txt
@@ -0,0 +1,110 @@
+1
+
+1
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+1.35122275672905157987939776353521245082875968075595465317817761 -4.79530968124209425485052145966292630285889974485326287728490672
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.7721031360269444536624854764846278079390436516442447307214583713
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.7113282365127787106295924505560767722199840055537543517442585349
+0.1944979336074391420204691208780533563017707991268605634570366201 0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.6127602430473631495393181955733023028663546816025211937039540524
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.5944056790460496081717996899055920305811666877696698395774078378
+0.531416327611542071221970089939764430329756625444579259583169101 0.9839367502424209997890558933686976016082869978582241397510153252
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.4548419343247805224460011391703079342763504118566706946966391853
+-0.04982739811897050028189209963034074300557183166488389610036293982 -0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.2496600323413886386258990085306122333313701779141184118995463959
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.2013567579813494116381818105314838610969816486807952028421948124
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.85858010457166611374976182888109386496982051035674989499979384
+0.1856688150172391527088040246433169286752829500750590071977203062 0.7326702292582058588316598422918662773838658327971514003421703067
+0.8193143821859564924477154245099351963436429074028089074430038904 -0.2697443704573465465233716116511309018200366900116819867580635278
+0.4604487491339531156973853721884505256237012331451385915640611729 -0.6468087813680422377672655136982917947328505318460482424201962
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.2812302577494115409480047067683469320314228801749259890701395474
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.02167413194230472805204979364706614220652157873015883116130884482
+0.7727562160593342436881229708062656539223995010850938445718232095 -0.680894955890704100546661726757747116024714493408288024374190234
+0.2216455512897554102911455213296037106714896153079531893725412128 -0.9306530725185795934583927665790248017610038861531896668451002839
+0.8060520707732849845829519568044036159880831172244051400087891596 0.3319152007540851906913026983763584438955853838764895977762668678
+0.2494984458565048492106180084187393465587010901621886528310783225 -0.4414898031680223608932387792017485771255689761890070706015387399
+0.692720462930580375837580120465281755163139346395305274413909974 0.04675554236208552284539297942143061834219393972333359647545914081
+0.3484206501444620766420233468327938525050794194268200530793896515 -0.8152568938325646993310760006867681539054279301843202148958871677
+-0.5365723013330725289094471599220332027885871668229904917249565862 0.3952163240756655529212705355453418848569049122249531536768131848
+-0.4969838973904267472552603461634423875526049699439467087064029146 -0.9395163144138835125672454933008856593503204403133472584898229717
+-0.1099633225953045478540363356794430416477263111166654723490589437 -0.08780353633292157461769946866167963633505729824902226238512671868
+-0.6756547625687923165084584127259768184144567299620396875756298559 -0.1743560068378512679152575299947443762504689480476570621749324843
+0.8687355316920355914551191479618699998090617653378680974249892199 0.6018835924636782523215034400201993341434060856497418585329625279
+0.6573707348942885034556657549189062350008259948442460481059842193 0.5094537464059880326374352490064905763350159638438638190213421193
+0.304092255431421724386276285709205877741518261756931899126135274 -0.6412882157453879879998117648467144628970706782597054160685555631
+0.6923315191547459490617708873077670147989473956854336908747033971 0.9017103216368149546517732133490469846549850682301607701578308401
+-0.8796784447840898801814093263554195453289300559080999490503364787 0.9631270643127979384664069651403286361478505285019531813591892173
+-0.02378306045101476542041128049120676361822587626846492046663605803 -0.6210835173793688086670082589175993809833456274087668762475476635
+0.9854996726419986830846511304498671064695985279263874167222764802 -0.8137281645240375388576750044830353268919925528507904843095256157
+0.6717005563662298476413580139956207272362245386339234470714331016 -0.7041297500866612607234884784407130317305843364144413223065323821
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.1235721593345202217795554759876880268687368789792682195280803184
+-0.3904035160770493684430115148009967524256991556076221372265894266 0.01793996302825844948175557573252934185711456214972052895861572493
+0.3596214942327276879157632590476519168937540906266077357147819608 -0.3411596862218241172328579047617234818967459872060847679144866809
+0.7958628339830083470736213000945699871834494249238046750007408612 -0.7379746599220903325806827424480469595800618414934950958452657346
+0.5412530329369591795695895418300581875196694253995928145942436878 0.6843546378904107483368305041075808036585650068151329599810630045
+-0.2613537732594101756765510813982454595302525696986533152069370387 0.4265099420399003863248167494626862205659560797404855195341684806
+0.435828324052182771698190217679588447000849558850289775314256024 -0.9874151891964456486571993218370826427302121071375833081581536189
+-0.5937465792299257034198201886287226952400923687140794966015317515 0.4601637140807105378191037234478805179877043129140064777542238544
+-0.3218041479377133937935849601301732622610394503588237190352903562 -0.4841039802362244364267157134690841461075259779700777041439742307
+-0.7360914574746049921434644450737043073420684008447334807822853276 0.9965877589863013394561112420396792373833365736836351278348301833
+0.553187364694831117272984365230687982396001421226655790220741406 0.191567730523304776574190978829765313731471509331205854313016986
+0.01417576197421767893279369309359545621976513518858252000938611031 -0.9100049476348622207723944867294612891098821253248738836563459568
+0.6897588478092123244219967589255606032813281483291811335150355542 0.8085565025927605798160394591787637574375967583263627553971120289
+-0.6996703139503628987183738269577949838863048093871175900433716284 -0.8851479413535487385573817957243936843534909265401263726020814395
+-0.1309677757443125377194229250386971011803561306992623123400631451 0.6064591258881136876029163103297147737049475826316704311935105558
+0.09049503268981439002460219767349217513483951010643022102321620286 -0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfft_adjoint_1d_20_1.txt b/tests/data/nfft_adjoint_1d_20_1.txt
new file mode 100644
index 0000000..f14eb83
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_20_1.txt
@@ -0,0 +1,31 @@
+1
+
+20
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+0.223901839093624082020220094910897224252800352343788718111576597 -0.387539028215601944118855633302408421327306667186723350041825696
+0.261317882742887084515160511873711836617194760268618278046332333 0.363361384985492047424543981722400290461527715580812742101430706
+-0.43864316622487936446378769209923164706648340566398473680796548 0.088942142227478983784178962452058776439775759987887887319959016
+0.099142774076629160406752218743164350114804074041674683316620088 -0.436450732944957623633784451798434011628407372869902243324665864
+0.357171318002241563465034971680113815747279485009039550764146292 0.269716854379443407997752437701525755155089437615445360536760592
+-0.392652893001349696808766093811931749200495021760460723164189276 0.214807442975030256136995435339870973401473966736193895779046616
+-0.034503759012416860648242153308374302130251391086680603718318656 -0.446237630140952267176607641766873669682467764253906310263245869
+0.421006800218000317375659472844987110599157761301935363843780375 0.151894062128843657337950253778947088725033103876223922251974545
+-0.311463987477590560224336215441587312309546657006950815055720277 0.321416733298625197356169781655370936380441036696912772247051941
+-0.165057267325380014265279708166908031987921655146543985851044333 -0.4160223917565955826045141408940833175120288034523920317861101067
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+-0.202354476845875930808658798568958263636760332076331409887687493 0.3992132232782778337207028024233596615076121224158181657708900775
+-0.280814526420215643112074116453909111645732155050451321599926904 -0.34851360617799451933861285419775410610520155913818822846508501
+0.433117421380154858296610495096985163687615179769727587155405558 -0.112817690265337484855977261213010121538961863017476658612638309
+-0.075105278587362632557972659383203122957758037255183085829933029 0.441222992451792903044672577207324009669420578781682272592554939
+-0.371398693870481960518979520889286493494401992559660764866039407 -0.249762971897557854270037123041657091668426431050398813941957257
+0.38030692640200296574538350676318489806251096305501511983585833 -0.23597706174639464011506103459831187626696031192364610844325625
+0.05887659153457633002956049217725998260638216357783710331957629 0.443680153837278261330151848800382764551668360240400293704844334
+-0.428689521846263247457218821004467102696921551972320765241225656 -0.128622804350637740827643732174102539757511679296777099519618612
+0.293404530148572504782658125478946443831128374467031126208224543 -0.3379827120254757307744504283516424662394234754959039938697431
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+
diff --git a/tests/data/nfft_adjoint_1d_20_10.txt b/tests/data/nfft_adjoint_1d_20_10.txt
new file mode 100644
index 0000000..5b1e984
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_20_10.txt
@@ -0,0 +1,49 @@
+1
+
+20
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+-3.24079878390133414417639340255285623177453281281474547170284763 -2.68678682272632160823304375842533398132192060662665460986549117
+-1.21218799966580258949025750280809481935665597708714187901091804 -2.19467408072240303365768220738261473300060349225388275505559354
+-1.58711939902206445787018667374792100046106558751832784948944958 1.03027558777798025732412403664273121463020418086323089020474585
+-2.28736891827490710329231083343454188499742318324248373953587784 0.73453567461037596419326953341110286807463827294635977249490638
+-0.49344429560766912876923692049938251139188538093857157470556716 1.12485673176401493178704839005447076111487132527965927906297653
+-0.59730960869164371470605802394759726248797236651926297914443196 0.1362715028154381904705722239540294041833409476756756853738527
+0.99775096062059170675082943166954961890456208798534864731763498 -0.55894437554497416160815311945074551339769527288366322204184611
+-0.21293383719709571349608520778050459395039037365180174165536909 0.35954741044301057410717771315650192305397080453757539797376116
+-2.89848365614425734303040370205502283699833072175060685797247159 1.15086385831356780913805094660939742792066959429935014771704431
+-5.28892888163661505596494035576025076445865161495562354502989616 -1.49125314911634926047083396779988151934864279833917122560328832
+-1.347896216355931774679958699258750407129349908487712609591584342 -0.896167205915888173511139880815283371468417833967393658163450822
+-2.46784435788210702932894576558958114784226764068357911384813342 1.54794007127658575510648163699975503254266419404035588544994945
+-1.73671760314858069350940210045993898834173129777061103621495857 0.39860490255330974937530092941121688216850979815151656072112399
+-2.61480393326662313484066606044895983864913284340323977492778371 -1.8267713048170686067220803877578892558198463282147176838828842
+0.86062149851041407411803735165663584404682018044494941425256193 -3.79017922695436726931718456118903847378765693303207430421122488
+-1.23378341730823355725550822929543236437997416479239312985192022 -2.08067946636917609775929638575718891958770783191719802547898319
+-0.00077948465808503988253623539063492893783409072610247778110671 -3.25789225391915665971335048675702536688571541089354303070971278
+-2.01544369407673410562746501191453529126322329170528097871555523 0.92825490179261566544566951315585878226300224975767616263215557
+-2.45893858597776210426510686842589032241291059523227561205668738 -1.78595433930110787217113367042626601621663087677007563269457984
+0.59360965420316005263594208779622993455047009012314096695575477 -0.39656378101974584605701152559505790185413226823071024187344663
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.4413098759704276115157486122940138778382450314554048934666388869
+0.7051415661084367709201814372310498119360160763950294411494790334 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.9186285185242277638228379667640336837252479527413557249796864599 -0.4763986698707299918532811013155870587476071700798709986377725737
+0.6059166146272276531659924142280879090009660941492851068272418515 0.2184244610344805776516307003112049282480936070481769173095132673
+-0.95114225448595864485771668441096849436578004346293095519883533 0.5284655557490481515292532588784919125603831832265742904204270183
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.07838835742104840389052756169146943544000206230123216084325830017
+0.1817134261437800570794256414315250650163873891461146114574620382 -0.3158305122954834491361879876118745635891842225287967281157858672
+-0.8768399197753272524248224977827836246291177209791567885209025379 0.3458309153991207858067077092337332970573207566667458110876416196
+-0.2027179913470305147020813461378369947382030993314951020253012762 -0.01097686940732606761440422015891875954490441842087149586770120005
+0.1375057760993413749724126299163162462121619232755876011030820512 0.2626555858903124974165091427737336367005240661151773835219310271
+
diff --git a/tests/data/nfft_adjoint_1d_20_20.txt b/tests/data/nfft_adjoint_1d_20_20.txt
new file mode 100644
index 0000000..25379f6
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_20_20.txt
@@ -0,0 +1,69 @@
+1
+
+20
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+-1.616283097237170208259631257874200126282521297610276056914778 0.8659363315164116861948795142364998981581543628755855607709877
+-1.6695322035513604596206383199038343521032943566759881179608807 3.1918833790230002456708564856308986013521813321410698368548211
+-0.2497168940706635699423102953717309559243015811846664985236278 0.5397559971510198085655154900161280652325534400967056427433692
+1.8481626200202074735180502359769277154406388205121283212026568 1.964837039916485393504457317298007916261808689130411137442808
+-3.883142442882462957795141832839908871157844715007021042451423 1.9719737033988820411201132693536854754921630252266747175551049
+1.3884973968458859445327056582221970070690083066217069075070819 -0.924266305420565368011178431950149251237069827934565280015799
+-4.08344776962705085774354283148691606236632608779877374668775806 1.03006479236387952769757188932565974461905444537113837758164862
+-4.03714516484806486031564410567717332960118723901951396300256101 -4.97999264648962537097419782628773013244040174190049527499663887
+3.13725924075051360777947254587866910690850593372559359109020617 1.03450697355860722732534178131976121978484007855947740336866949
+-2.09344959297728161042984138949422824115576934924608778927398709 -0.5433608515415868821758911787703382517960901168184645201884799
+-1.313831422727774651555845755917101990528470330521651169614664193 -0.69273620291038926726455982040262810773021395371128338842658488
+4.46247925192920379128984933017002274344111856699113027289940454 -2.92680562073515463017929952084299710114908302714395039648034042
+2.28019593958683590589347160777337838750351835626244282921064656 2.47097640117186122061951061416433323388834787884534844353537938
+-1.38646623155880274322369326605354635139126671692883092232623714 -1.76645341671227927683299839212594311311578625548995433559468724
+2.13721643206641988358010398383864107421754257597336377240100232 4.25765722027329582591515902715198479261058829720614093564336599
+-3.1831870712256462522810714645682381900000948034636998032252991 0.3218135290760048076683079560553585252290885273136503210172424
+-2.9436029277941726378931604188904091104092318862524649289035518 2.8324083180894571916992957450952706302799348239467298315874652
+0.1758524264296839302913080572777697004153525735989753044159064 0.7350454206680941062503461811905754249423344354705815686113527
+-1.655114229993356215350190499611804548428771944958912270605586 1.9664566021343476385266679882633447115025153125325138336670647
+-4.0893771812641663205379618170233900102291911254719063119756487 -2.0792099093079311349967615727051279503115071647670799631421955
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.5356506216935318567168964679980224448474954197740742721804425662
+-0.9286394390238346619050912089405834508747965422378917835718069263 -0.05251382922654688111844675415661855947948761360659425718759593363
+-0.4763986698707299918532811013155870587476071700798709986377725737 0.9518095182124288782767378820155949547911261560251647626870735792
+0.2184244610344805776516307003112049282480936070481769173095132673 0.9956223852813107496522616247115213137215848581937907906567140918
+0.5284655557490481515292532588784919125603831832265742904204270183 0.6741052796006089834676571454955036801632897076493615121596900136
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.8697750560716627155371707094260289644371901052310063829991901781
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.539462018274751480324642644804511358394409237082129058457521908
+0.3458309153991207858067077092337332970573207566667458110876416196 -0.4274845026027779916855619203781095649893449575458629944853980527
+-0.01097686940732606761440422015891875954490441842087149586770120005 -0.8604697501072873707535504424154609782723273602355359333803551115
+0.2626555858903124974165091427737336367005240661151773835219310271 0.3822062430356176188977280281604014506988427784943414973817258933
+-0.4833001744929688887627302318231007732586579925667420767092911497 -0.7335087736711041883089151876515694737975402817556229765975958245
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.8786687027770929787301562525828872003547410177701220950278899658
+0.9495591103622864735737804468916775971319894153057637661282509133 0.1944979336074391420204691208780533563017707991268605634570366201
+0.1280772471342585841455757702545741213596517009855068302808317718 -0.6717069716036456017860348911350501039034020263227184271420653514
+-0.1946943926350927100029394214607870756382213566654573743676056718 0.1841240265716411858721923885202834145897392121583597644960322461
+-0.8391269337210497321784330437702418478537689733296865638890089907 0.531416327611542071221970089939764430329756625444579259583169101
+0.09000979948494377602070534800332955914923353808674104151336312387 -0.7793598342770851820561551396646691186537674923197586552161425487
+-0.1766812336766545879148652249537685082960598655086779135604123172 -0.04982739811897050028189209963034074300557183166488389610036293982
+-0.1002499995910402071291914694552929590775602478191912580994509247 -0.2152831478765442996690076717147867376683641103330644151579049018
+0.8558312786548114618473704491843378278983698142481509704680004653 -0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfft_adjoint_1d_20_50.txt b/tests/data/nfft_adjoint_1d_20_50.txt
new file mode 100644
index 0000000..6f0f390
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_20_50.txt
@@ -0,0 +1,129 @@
+1
+
+20
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+3.7279022710180124855256125410883505477014745415189308581921421 -1.8924936872068612688696522184194611108414295856502359660520507
+-0.202424279896532864892253807982977045796328136973342869264844 -3.4323100265217119697743294706326731455044190042781595849122969
+-2.4681849171040787853620562354426904674560091484157505347193703 4.1712837581279072915511294182048535915506821577128131954293588
+4.9007519144592147466141089860616953179397788971751724774874946 3.1136206071736511722852586383970612315618389289251918382026401
+-1.2485259060830606060168420174953754882737564300285570140410889 0.8566620273460068033894646682369308178060273058680358146265939
+-4.1713031026198041103932451933753239672100307080341727161805141 4.4239467844685439324952988701872557893606485419988798239262564
+-8.4667518535341252619211104309966607357415077423650400564341697 -1.9233146504203605606741268946633222177425442337965386781043399
+0.6259621675874933673444312813580006484010258592489058302064387 3.9445153442558393327076956885704152259127341074306183066892585
+-2.943501804227451275952118721741355922049081388609045333201719 -4.9170872093175204454154778416048306281616109319182914758801062
+5.15077009768509856344210072878742796067503349122393717288006787 0.24935064896680262612148448787504010882022338843560304683760395
+1.35122275672905157987939776353521245082875968075595465317817761 -4.79530968124209425485052145966292630285889974485326287728490672
+5.76398780377696975911715985588439376885600817595220828277145736 3.94404658565281636560032986859666956753707501207359611055962932
+4.4041240196161894666545756381301378163895722267307318706020219 -2.7483740159406334807968093785167715842150273786804630701545328
+0.693978625173045631016332704883474090295279821112336709071499 1.9948181035440419453430408653481795461951049449069916440494305
+0.4511087313274987220231750038341257767399512507750514718055001 3.701671064428727533604009679478108428069787991591387260684837
+2.1571692368690099534686827326955346801245078768533825875954935 9.1240557360274829055955646708567248754140314123724504368815467
+0.7888609005475601053876314681560201183727421566322199707423845 5.8996432799460162976289810943602709219584350040773132182192831
+1.6029133091135085671175629838266011018684020557922974168791408 2.7833810618145334814279128853015944505121158532732487667600277
+-2.4750950496616146890393067806499362461848897971548320585453938 9.0622202011070191502563469298170644974526796653367402852422789
+-3.1957677887076246541688879415276026316673632936746635282327956 1.6455807452109295925444832634489730716532383807218240639108291
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.7721031360269444536624854764846278079390436516442447307214583713
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.7113282365127787106295924505560767722199840055537543517442585349
+0.1944979336074391420204691208780533563017707991268605634570366201 0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.6127602430473631495393181955733023028663546816025211937039540524
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.5944056790460496081717996899055920305811666877696698395774078378
+0.531416327611542071221970089939764430329756625444579259583169101 0.9839367502424209997890558933686976016082869978582241397510153252
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.4548419343247805224460011391703079342763504118566706946966391853
+-0.04982739811897050028189209963034074300557183166488389610036293982 -0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.2496600323413886386258990085306122333313701779141184118995463959
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.2013567579813494116381818105314838610969816486807952028421948124
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.85858010457166611374976182888109386496982051035674989499979384
+0.1856688150172391527088040246433169286752829500750590071977203062 0.7326702292582058588316598422918662773838658327971514003421703067
+0.8193143821859564924477154245099351963436429074028089074430038904 -0.2697443704573465465233716116511309018200366900116819867580635278
+0.4604487491339531156973853721884505256237012331451385915640611729 -0.6468087813680422377672655136982917947328505318460482424201962
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.2812302577494115409480047067683469320314228801749259890701395474
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.02167413194230472805204979364706614220652157873015883116130884482
+0.7727562160593342436881229708062656539223995010850938445718232095 -0.680894955890704100546661726757747116024714493408288024374190234
+0.2216455512897554102911455213296037106714896153079531893725412128 -0.9306530725185795934583927665790248017610038861531896668451002839
+0.8060520707732849845829519568044036159880831172244051400087891596 0.3319152007540851906913026983763584438955853838764895977762668678
+0.2494984458565048492106180084187393465587010901621886528310783225 -0.4414898031680223608932387792017485771255689761890070706015387399
+0.692720462930580375837580120465281755163139346395305274413909974 0.04675554236208552284539297942143061834219393972333359647545914081
+0.3484206501444620766420233468327938525050794194268200530793896515 -0.8152568938325646993310760006867681539054279301843202148958871677
+-0.5365723013330725289094471599220332027885871668229904917249565862 0.3952163240756655529212705355453418848569049122249531536768131848
+-0.4969838973904267472552603461634423875526049699439467087064029146 -0.9395163144138835125672454933008856593503204403133472584898229717
+-0.1099633225953045478540363356794430416477263111166654723490589437 -0.08780353633292157461769946866167963633505729824902226238512671868
+-0.6756547625687923165084584127259768184144567299620396875756298559 -0.1743560068378512679152575299947443762504689480476570621749324843
+0.8687355316920355914551191479618699998090617653378680974249892199 0.6018835924636782523215034400201993341434060856497418585329625279
+0.6573707348942885034556657549189062350008259948442460481059842193 0.5094537464059880326374352490064905763350159638438638190213421193
+0.304092255431421724386276285709205877741518261756931899126135274 -0.6412882157453879879998117648467144628970706782597054160685555631
+0.6923315191547459490617708873077670147989473956854336908747033971 0.9017103216368149546517732133490469846549850682301607701578308401
+-0.8796784447840898801814093263554195453289300559080999490503364787 0.9631270643127979384664069651403286361478505285019531813591892173
+-0.02378306045101476542041128049120676361822587626846492046663605803 -0.6210835173793688086670082589175993809833456274087668762475476635
+0.9854996726419986830846511304498671064695985279263874167222764802 -0.8137281645240375388576750044830353268919925528507904843095256157
+0.6717005563662298476413580139956207272362245386339234470714331016 -0.7041297500866612607234884784407130317305843364144413223065323821
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.1235721593345202217795554759876880268687368789792682195280803184
+-0.3904035160770493684430115148009967524256991556076221372265894266 0.01793996302825844948175557573252934185711456214972052895861572493
+0.3596214942327276879157632590476519168937540906266077357147819608 -0.3411596862218241172328579047617234818967459872060847679144866809
+0.7958628339830083470736213000945699871834494249238046750007408612 -0.7379746599220903325806827424480469595800618414934950958452657346
+0.5412530329369591795695895418300581875196694253995928145942436878 0.6843546378904107483368305041075808036585650068151329599810630045
+-0.2613537732594101756765510813982454595302525696986533152069370387 0.4265099420399003863248167494626862205659560797404855195341684806
+0.435828324052182771698190217679588447000849558850289775314256024 -0.9874151891964456486571993218370826427302121071375833081581536189
+-0.5937465792299257034198201886287226952400923687140794966015317515 0.4601637140807105378191037234478805179877043129140064777542238544
+-0.3218041479377133937935849601301732622610394503588237190352903562 -0.4841039802362244364267157134690841461075259779700777041439742307
+-0.7360914574746049921434644450737043073420684008447334807822853276 0.9965877589863013394561112420396792373833365736836351278348301833
+0.553187364694831117272984365230687982396001421226655790220741406 0.191567730523304776574190978829765313731471509331205854313016986
+0.01417576197421767893279369309359545621976513518858252000938611031 -0.9100049476348622207723944867294612891098821253248738836563459568
+0.6897588478092123244219967589255606032813281483291811335150355542 0.8085565025927605798160394591787637574375967583263627553971120289
+-0.6996703139503628987183738269577949838863048093871175900433716284 -0.8851479413535487385573817957243936843534909265401263726020814395
+-0.1309677757443125377194229250386971011803561306992623123400631451 0.6064591258881136876029163103297147737049475826316704311935105558
+0.09049503268981439002460219767349217513483951010643022102321620286 -0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfft_adjoint_1d_2_1.txt b/tests/data/nfft_adjoint_1d_2_1.txt
new file mode 100644
index 0000000..a3c9df4
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_2_1.txt
@@ -0,0 +1,13 @@
+1
+
+2
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+-0.165057267325380014265279708166908031987921655146543985851044333 -0.4160223917565955826045141408940833175120288034523920317861101067
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+
diff --git a/tests/data/nfft_adjoint_1d_2_10.txt b/tests/data/nfft_adjoint_1d_2_10.txt
new file mode 100644
index 0000000..45167d5
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_2_10.txt
@@ -0,0 +1,31 @@
+1
+
+2
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+-5.28892888163661505596494035576025076445865161495562354502989616 -1.49125314911634926047083396779988151934864279833917122560328832
+-1.347896216355931774679958699258750407129349908487712609591584342 -0.896167205915888173511139880815283371468417833967393658163450822
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.4413098759704276115157486122940138778382450314554048934666388869
+0.7051415661084367709201814372310498119360160763950294411494790334 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.9186285185242277638228379667640336837252479527413557249796864599 -0.4763986698707299918532811013155870587476071700798709986377725737
+0.6059166146272276531659924142280879090009660941492851068272418515 0.2184244610344805776516307003112049282480936070481769173095132673
+-0.95114225448595864485771668441096849436578004346293095519883533 0.5284655557490481515292532588784919125603831832265742904204270183
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.07838835742104840389052756169146943544000206230123216084325830017
+0.1817134261437800570794256414315250650163873891461146114574620382 -0.3158305122954834491361879876118745635891842225287967281157858672
+-0.8768399197753272524248224977827836246291177209791567885209025379 0.3458309153991207858067077092337332970573207566667458110876416196
+-0.2027179913470305147020813461378369947382030993314951020253012762 -0.01097686940732606761440422015891875954490441842087149586770120005
+0.1375057760993413749724126299163162462121619232755876011030820512 0.2626555858903124974165091427737336367005240661151773835219310271
+
diff --git a/tests/data/nfft_adjoint_1d_2_20.txt b/tests/data/nfft_adjoint_1d_2_20.txt
new file mode 100644
index 0000000..ab19c2f
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_2_20.txt
@@ -0,0 +1,51 @@
+1
+
+2
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+-2.09344959297728161042984138949422824115576934924608778927398709 -0.5433608515415868821758911787703382517960901168184645201884799
+-1.313831422727774651555845755917101990528470330521651169614664193 -0.69273620291038926726455982040262810773021395371128338842658488
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.5356506216935318567168964679980224448474954197740742721804425662
+-0.9286394390238346619050912089405834508747965422378917835718069263 -0.05251382922654688111844675415661855947948761360659425718759593363
+-0.4763986698707299918532811013155870587476071700798709986377725737 0.9518095182124288782767378820155949547911261560251647626870735792
+0.2184244610344805776516307003112049282480936070481769173095132673 0.9956223852813107496522616247115213137215848581937907906567140918
+0.5284655557490481515292532588784919125603831832265742904204270183 0.6741052796006089834676571454955036801632897076493615121596900136
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.8697750560716627155371707094260289644371901052310063829991901781
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.539462018274751480324642644804511358394409237082129058457521908
+0.3458309153991207858067077092337332970573207566667458110876416196 -0.4274845026027779916855619203781095649893449575458629944853980527
+-0.01097686940732606761440422015891875954490441842087149586770120005 -0.8604697501072873707535504424154609782723273602355359333803551115
+0.2626555858903124974165091427737336367005240661151773835219310271 0.3822062430356176188977280281604014506988427784943414973817258933
+-0.4833001744929688887627302318231007732586579925667420767092911497 -0.7335087736711041883089151876515694737975402817556229765975958245
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.8786687027770929787301562525828872003547410177701220950278899658
+0.9495591103622864735737804468916775971319894153057637661282509133 0.1944979336074391420204691208780533563017707991268605634570366201
+0.1280772471342585841455757702545741213596517009855068302808317718 -0.6717069716036456017860348911350501039034020263227184271420653514
+-0.1946943926350927100029394214607870756382213566654573743676056718 0.1841240265716411858721923885202834145897392121583597644960322461
+-0.8391269337210497321784330437702418478537689733296865638890089907 0.531416327611542071221970089939764430329756625444579259583169101
+0.09000979948494377602070534800332955914923353808674104151336312387 -0.7793598342770851820561551396646691186537674923197586552161425487
+-0.1766812336766545879148652249537685082960598655086779135604123172 -0.04982739811897050028189209963034074300557183166488389610036293982
+-0.1002499995910402071291914694552929590775602478191912580994509247 -0.2152831478765442996690076717147867376683641103330644151579049018
+0.8558312786548114618473704491843378278983698142481509704680004653 -0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfft_adjoint_1d_2_50.txt b/tests/data/nfft_adjoint_1d_2_50.txt
new file mode 100644
index 0000000..63f5d7b
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_2_50.txt
@@ -0,0 +1,111 @@
+1
+
+2
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+5.15077009768509856344210072878742796067503349122393717288006787 0.24935064896680262612148448787504010882022338843560304683760395
+1.35122275672905157987939776353521245082875968075595465317817761 -4.79530968124209425485052145966292630285889974485326287728490672
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.7721031360269444536624854764846278079390436516442447307214583713
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.7113282365127787106295924505560767722199840055537543517442585349
+0.1944979336074391420204691208780533563017707991268605634570366201 0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.6127602430473631495393181955733023028663546816025211937039540524
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.5944056790460496081717996899055920305811666877696698395774078378
+0.531416327611542071221970089939764430329756625444579259583169101 0.9839367502424209997890558933686976016082869978582241397510153252
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.4548419343247805224460011391703079342763504118566706946966391853
+-0.04982739811897050028189209963034074300557183166488389610036293982 -0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.2496600323413886386258990085306122333313701779141184118995463959
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.2013567579813494116381818105314838610969816486807952028421948124
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.85858010457166611374976182888109386496982051035674989499979384
+0.1856688150172391527088040246433169286752829500750590071977203062 0.7326702292582058588316598422918662773838658327971514003421703067
+0.8193143821859564924477154245099351963436429074028089074430038904 -0.2697443704573465465233716116511309018200366900116819867580635278
+0.4604487491339531156973853721884505256237012331451385915640611729 -0.6468087813680422377672655136982917947328505318460482424201962
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.2812302577494115409480047067683469320314228801749259890701395474
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.02167413194230472805204979364706614220652157873015883116130884482
+0.7727562160593342436881229708062656539223995010850938445718232095 -0.680894955890704100546661726757747116024714493408288024374190234
+0.2216455512897554102911455213296037106714896153079531893725412128 -0.9306530725185795934583927665790248017610038861531896668451002839
+0.8060520707732849845829519568044036159880831172244051400087891596 0.3319152007540851906913026983763584438955853838764895977762668678
+0.2494984458565048492106180084187393465587010901621886528310783225 -0.4414898031680223608932387792017485771255689761890070706015387399
+0.692720462930580375837580120465281755163139346395305274413909974 0.04675554236208552284539297942143061834219393972333359647545914081
+0.3484206501444620766420233468327938525050794194268200530793896515 -0.8152568938325646993310760006867681539054279301843202148958871677
+-0.5365723013330725289094471599220332027885871668229904917249565862 0.3952163240756655529212705355453418848569049122249531536768131848
+-0.4969838973904267472552603461634423875526049699439467087064029146 -0.9395163144138835125672454933008856593503204403133472584898229717
+-0.1099633225953045478540363356794430416477263111166654723490589437 -0.08780353633292157461769946866167963633505729824902226238512671868
+-0.6756547625687923165084584127259768184144567299620396875756298559 -0.1743560068378512679152575299947443762504689480476570621749324843
+0.8687355316920355914551191479618699998090617653378680974249892199 0.6018835924636782523215034400201993341434060856497418585329625279
+0.6573707348942885034556657549189062350008259948442460481059842193 0.5094537464059880326374352490064905763350159638438638190213421193
+0.304092255431421724386276285709205877741518261756931899126135274 -0.6412882157453879879998117648467144628970706782597054160685555631
+0.6923315191547459490617708873077670147989473956854336908747033971 0.9017103216368149546517732133490469846549850682301607701578308401
+-0.8796784447840898801814093263554195453289300559080999490503364787 0.9631270643127979384664069651403286361478505285019531813591892173
+-0.02378306045101476542041128049120676361822587626846492046663605803 -0.6210835173793688086670082589175993809833456274087668762475476635
+0.9854996726419986830846511304498671064695985279263874167222764802 -0.8137281645240375388576750044830353268919925528507904843095256157
+0.6717005563662298476413580139956207272362245386339234470714331016 -0.7041297500866612607234884784407130317305843364144413223065323821
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.1235721593345202217795554759876880268687368789792682195280803184
+-0.3904035160770493684430115148009967524256991556076221372265894266 0.01793996302825844948175557573252934185711456214972052895861572493
+0.3596214942327276879157632590476519168937540906266077357147819608 -0.3411596862218241172328579047617234818967459872060847679144866809
+0.7958628339830083470736213000945699871834494249238046750007408612 -0.7379746599220903325806827424480469595800618414934950958452657346
+0.5412530329369591795695895418300581875196694253995928145942436878 0.6843546378904107483368305041075808036585650068151329599810630045
+-0.2613537732594101756765510813982454595302525696986533152069370387 0.4265099420399003863248167494626862205659560797404855195341684806
+0.435828324052182771698190217679588447000849558850289775314256024 -0.9874151891964456486571993218370826427302121071375833081581536189
+-0.5937465792299257034198201886287226952400923687140794966015317515 0.4601637140807105378191037234478805179877043129140064777542238544
+-0.3218041479377133937935849601301732622610394503588237190352903562 -0.4841039802362244364267157134690841461075259779700777041439742307
+-0.7360914574746049921434644450737043073420684008447334807822853276 0.9965877589863013394561112420396792373833365736836351278348301833
+0.553187364694831117272984365230687982396001421226655790220741406 0.191567730523304776574190978829765313731471509331205854313016986
+0.01417576197421767893279369309359545621976513518858252000938611031 -0.9100049476348622207723944867294612891098821253248738836563459568
+0.6897588478092123244219967589255606032813281483291811335150355542 0.8085565025927605798160394591787637574375967583263627553971120289
+-0.6996703139503628987183738269577949838863048093871175900433716284 -0.8851479413535487385573817957243936843534909265401263726020814395
+-0.1309677757443125377194229250386971011803561306992623123400631451 0.6064591258881136876029163103297147737049475826316704311935105558
+0.09049503268981439002460219767349217513483951010643022102321620286 -0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfft_adjoint_1d_4_1.txt b/tests/data/nfft_adjoint_1d_4_1.txt
new file mode 100644
index 0000000..48fe1b3
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_4_1.txt
@@ -0,0 +1,15 @@
+1
+
+4
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+-0.311463987477590560224336215441587312309546657006950815055720277 0.321416733298625197356169781655370936380441036696912772247051941
+-0.165057267325380014265279708166908031987921655146543985851044333 -0.4160223917565955826045141408940833175120288034523920317861101067
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+-0.202354476845875930808658798568958263636760332076331409887687493 0.3992132232782778337207028024233596615076121224158181657708900775
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+
diff --git a/tests/data/nfft_adjoint_1d_4_10.txt b/tests/data/nfft_adjoint_1d_4_10.txt
new file mode 100644
index 0000000..575bea8
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_4_10.txt
@@ -0,0 +1,33 @@
+1
+
+4
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+-2.89848365614425734303040370205502283699833072175060685797247159 1.15086385831356780913805094660939742792066959429935014771704431
+-5.28892888163661505596494035576025076445865161495562354502989616 -1.49125314911634926047083396779988151934864279833917122560328832
+-1.347896216355931774679958699258750407129349908487712609591584342 -0.896167205915888173511139880815283371468417833967393658163450822
+-2.46784435788210702932894576558958114784226764068357911384813342 1.54794007127658575510648163699975503254266419404035588544994945
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.4413098759704276115157486122940138778382450314554048934666388869
+0.7051415661084367709201814372310498119360160763950294411494790334 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.9186285185242277638228379667640336837252479527413557249796864599 -0.4763986698707299918532811013155870587476071700798709986377725737
+0.6059166146272276531659924142280879090009660941492851068272418515 0.2184244610344805776516307003112049282480936070481769173095132673
+-0.95114225448595864485771668441096849436578004346293095519883533 0.5284655557490481515292532588784919125603831832265742904204270183
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.07838835742104840389052756169146943544000206230123216084325830017
+0.1817134261437800570794256414315250650163873891461146114574620382 -0.3158305122954834491361879876118745635891842225287967281157858672
+-0.8768399197753272524248224977827836246291177209791567885209025379 0.3458309153991207858067077092337332970573207566667458110876416196
+-0.2027179913470305147020813461378369947382030993314951020253012762 -0.01097686940732606761440422015891875954490441842087149586770120005
+0.1375057760993413749724126299163162462121619232755876011030820512 0.2626555858903124974165091427737336367005240661151773835219310271
+
diff --git a/tests/data/nfft_adjoint_1d_4_20.txt b/tests/data/nfft_adjoint_1d_4_20.txt
new file mode 100644
index 0000000..6026546
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_4_20.txt
@@ -0,0 +1,53 @@
+1
+
+4
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+3.13725924075051360777947254587866910690850593372559359109020617 1.03450697355860722732534178131976121978484007855947740336866949
+-2.09344959297728161042984138949422824115576934924608778927398709 -0.5433608515415868821758911787703382517960901168184645201884799
+-1.313831422727774651555845755917101990528470330521651169614664193 -0.69273620291038926726455982040262810773021395371128338842658488
+4.46247925192920379128984933017002274344111856699113027289940454 -2.92680562073515463017929952084299710114908302714395039648034042
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.5356506216935318567168964679980224448474954197740742721804425662
+-0.9286394390238346619050912089405834508747965422378917835718069263 -0.05251382922654688111844675415661855947948761360659425718759593363
+-0.4763986698707299918532811013155870587476071700798709986377725737 0.9518095182124288782767378820155949547911261560251647626870735792
+0.2184244610344805776516307003112049282480936070481769173095132673 0.9956223852813107496522616247115213137215848581937907906567140918
+0.5284655557490481515292532588784919125603831832265742904204270183 0.6741052796006089834676571454955036801632897076493615121596900136
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.8697750560716627155371707094260289644371901052310063829991901781
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.539462018274751480324642644804511358394409237082129058457521908
+0.3458309153991207858067077092337332970573207566667458110876416196 -0.4274845026027779916855619203781095649893449575458629944853980527
+-0.01097686940732606761440422015891875954490441842087149586770120005 -0.8604697501072873707535504424154609782723273602355359333803551115
+0.2626555858903124974165091427737336367005240661151773835219310271 0.3822062430356176188977280281604014506988427784943414973817258933
+-0.4833001744929688887627302318231007732586579925667420767092911497 -0.7335087736711041883089151876515694737975402817556229765975958245
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.8786687027770929787301562525828872003547410177701220950278899658
+0.9495591103622864735737804468916775971319894153057637661282509133 0.1944979336074391420204691208780533563017707991268605634570366201
+0.1280772471342585841455757702545741213596517009855068302808317718 -0.6717069716036456017860348911350501039034020263227184271420653514
+-0.1946943926350927100029394214607870756382213566654573743676056718 0.1841240265716411858721923885202834145897392121583597644960322461
+-0.8391269337210497321784330437702418478537689733296865638890089907 0.531416327611542071221970089939764430329756625444579259583169101
+0.09000979948494377602070534800332955914923353808674104151336312387 -0.7793598342770851820561551396646691186537674923197586552161425487
+-0.1766812336766545879148652249537685082960598655086779135604123172 -0.04982739811897050028189209963034074300557183166488389610036293982
+-0.1002499995910402071291914694552929590775602478191912580994509247 -0.2152831478765442996690076717147867376683641103330644151579049018
+0.8558312786548114618473704491843378278983698142481509704680004653 -0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfft_adjoint_1d_4_50.txt b/tests/data/nfft_adjoint_1d_4_50.txt
new file mode 100644
index 0000000..8545886
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_4_50.txt
@@ -0,0 +1,113 @@
+1
+
+4
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+-2.943501804227451275952118721741355922049081388609045333201719 -4.9170872093175204454154778416048306281616109319182914758801062
+5.15077009768509856344210072878742796067503349122393717288006787 0.24935064896680262612148448787504010882022338843560304683760395
+1.35122275672905157987939776353521245082875968075595465317817761 -4.79530968124209425485052145966292630285889974485326287728490672
+5.76398780377696975911715985588439376885600817595220828277145736 3.94404658565281636560032986859666956753707501207359611055962932
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.7721031360269444536624854764846278079390436516442447307214583713
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.7113282365127787106295924505560767722199840055537543517442585349
+0.1944979336074391420204691208780533563017707991268605634570366201 0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.6127602430473631495393181955733023028663546816025211937039540524
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.5944056790460496081717996899055920305811666877696698395774078378
+0.531416327611542071221970089939764430329756625444579259583169101 0.9839367502424209997890558933686976016082869978582241397510153252
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.4548419343247805224460011391703079342763504118566706946966391853
+-0.04982739811897050028189209963034074300557183166488389610036293982 -0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.2496600323413886386258990085306122333313701779141184118995463959
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.2013567579813494116381818105314838610969816486807952028421948124
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.85858010457166611374976182888109386496982051035674989499979384
+0.1856688150172391527088040246433169286752829500750590071977203062 0.7326702292582058588316598422918662773838658327971514003421703067
+0.8193143821859564924477154245099351963436429074028089074430038904 -0.2697443704573465465233716116511309018200366900116819867580635278
+0.4604487491339531156973853721884505256237012331451385915640611729 -0.6468087813680422377672655136982917947328505318460482424201962
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.2812302577494115409480047067683469320314228801749259890701395474
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.02167413194230472805204979364706614220652157873015883116130884482
+0.7727562160593342436881229708062656539223995010850938445718232095 -0.680894955890704100546661726757747116024714493408288024374190234
+0.2216455512897554102911455213296037106714896153079531893725412128 -0.9306530725185795934583927665790248017610038861531896668451002839
+0.8060520707732849845829519568044036159880831172244051400087891596 0.3319152007540851906913026983763584438955853838764895977762668678
+0.2494984458565048492106180084187393465587010901621886528310783225 -0.4414898031680223608932387792017485771255689761890070706015387399
+0.692720462930580375837580120465281755163139346395305274413909974 0.04675554236208552284539297942143061834219393972333359647545914081
+0.3484206501444620766420233468327938525050794194268200530793896515 -0.8152568938325646993310760006867681539054279301843202148958871677
+-0.5365723013330725289094471599220332027885871668229904917249565862 0.3952163240756655529212705355453418848569049122249531536768131848
+-0.4969838973904267472552603461634423875526049699439467087064029146 -0.9395163144138835125672454933008856593503204403133472584898229717
+-0.1099633225953045478540363356794430416477263111166654723490589437 -0.08780353633292157461769946866167963633505729824902226238512671868
+-0.6756547625687923165084584127259768184144567299620396875756298559 -0.1743560068378512679152575299947443762504689480476570621749324843
+0.8687355316920355914551191479618699998090617653378680974249892199 0.6018835924636782523215034400201993341434060856497418585329625279
+0.6573707348942885034556657549189062350008259948442460481059842193 0.5094537464059880326374352490064905763350159638438638190213421193
+0.304092255431421724386276285709205877741518261756931899126135274 -0.6412882157453879879998117648467144628970706782597054160685555631
+0.6923315191547459490617708873077670147989473956854336908747033971 0.9017103216368149546517732133490469846549850682301607701578308401
+-0.8796784447840898801814093263554195453289300559080999490503364787 0.9631270643127979384664069651403286361478505285019531813591892173
+-0.02378306045101476542041128049120676361822587626846492046663605803 -0.6210835173793688086670082589175993809833456274087668762475476635
+0.9854996726419986830846511304498671064695985279263874167222764802 -0.8137281645240375388576750044830353268919925528507904843095256157
+0.6717005563662298476413580139956207272362245386339234470714331016 -0.7041297500866612607234884784407130317305843364144413223065323821
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.1235721593345202217795554759876880268687368789792682195280803184
+-0.3904035160770493684430115148009967524256991556076221372265894266 0.01793996302825844948175557573252934185711456214972052895861572493
+0.3596214942327276879157632590476519168937540906266077357147819608 -0.3411596862218241172328579047617234818967459872060847679144866809
+0.7958628339830083470736213000945699871834494249238046750007408612 -0.7379746599220903325806827424480469595800618414934950958452657346
+0.5412530329369591795695895418300581875196694253995928145942436878 0.6843546378904107483368305041075808036585650068151329599810630045
+-0.2613537732594101756765510813982454595302525696986533152069370387 0.4265099420399003863248167494626862205659560797404855195341684806
+0.435828324052182771698190217679588447000849558850289775314256024 -0.9874151891964456486571993218370826427302121071375833081581536189
+-0.5937465792299257034198201886287226952400923687140794966015317515 0.4601637140807105378191037234478805179877043129140064777542238544
+-0.3218041479377133937935849601301732622610394503588237190352903562 -0.4841039802362244364267157134690841461075259779700777041439742307
+-0.7360914574746049921434644450737043073420684008447334807822853276 0.9965877589863013394561112420396792373833365736836351278348301833
+0.553187364694831117272984365230687982396001421226655790220741406 0.191567730523304776574190978829765313731471509331205854313016986
+0.01417576197421767893279369309359545621976513518858252000938611031 -0.9100049476348622207723944867294612891098821253248738836563459568
+0.6897588478092123244219967589255606032813281483291811335150355542 0.8085565025927605798160394591787637574375967583263627553971120289
+-0.6996703139503628987183738269577949838863048093871175900433716284 -0.8851479413535487385573817957243936843534909265401263726020814395
+-0.1309677757443125377194229250386971011803561306992623123400631451 0.6064591258881136876029163103297147737049475826316704311935105558
+0.09049503268981439002460219767349217513483951010643022102321620286 -0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfft_adjoint_1d_50_1.txt b/tests/data/nfft_adjoint_1d_50_1.txt
new file mode 100644
index 0000000..df1acdf
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_50_1.txt
@@ -0,0 +1,61 @@
+1
+
+50
+
+1
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+
+0.40188150920409637904937889154814551053120282321949449749320713 0.19700199110577041683375091169195897228423185861040983788090016
+-0.34473015403037590460502168370498018877347482774125740610681775 0.28544640975495479597206081016339554053424177516432804022016786
+-0.1185950765971034071881198570595062907486560423662573631389308 -0.431571245273277474393434222825212965462246626821265115828805255
+0.442187181740769229734146340849468082792102650422983762418281822 0.06920280517404025412224975228971470530070220028175964203722486
+-0.24477792050034456394203517000335059922400808104356415919075854 0.37470295111638398398518951050655617972608100347243114574404181
+-0.24103778106086627963176530232658800825409766184403240608380295 -0.37711976882822536818163663254353436393072896818451713599422935
+0.442853813548625706795545809466879977261462192304329065637633491 -0.06479993646014868910950177939978038192632928483478940220521814
+-0.12288302928848936028306016337656451100454103664506948910378773 0.430369949058579733819163563830173363030934320704901970868125892
+-0.34187310562944146179624059210827725457766865588138669654689161 -0.28886209787211788117344399034188868762634698654676213788421399
+0.403821645669301796086177538765261415580738366198837000843366077 -0.19299380930158645637661961806966396327962322786623026030613406
+0.01002748065675181566973899582362727278086295471450893319520941 0.447457239936375057002302704487031448783231669301788552115824871
+-0.41206185671575566965725132375394592781766680300922065299436015 -0.17470992581923985573315684440952015216712571008934461526948537
+0.328589643600195290197542995595407176354037544424680617446293799 -0.303887114005343911058193314108155834069821149010473606834885704
+0.1420390959017992063902994104571615234561033739754901331770041 0.424433065600690136596542041541890471955392217370564848151740941
+-0.445312095344865419754003704514469071691509387517539141181373824 -0.044896210077975833576032544429327468560495572515921954455167472
+0.223901839093624082020220094910897224252800352343788718111576597 -0.387539028215601944118855633302408421327306667186723350041825696
+0.261317882742887084515160511873711836617194760268618278046332333 0.363361384985492047424543981722400290461527715580812742101430706
+-0.43864316622487936446378769209923164706648340566398473680796548 0.088942142227478983784178962452058776439775759987887887319959016
+0.099142774076629160406752218743164350114804074041674683316620088 -0.436450732944957623633784451798434011628407372869902243324665864
+0.357171318002241563465034971680113815747279485009039550764146292 0.269716854379443407997752437701525755155089437615445360536760592
+-0.392652893001349696808766093811931749200495021760460723164189276 0.214807442975030256136995435339870973401473966736193895779046616
+-0.034503759012416860648242153308374302130251391086680603718318656 -0.446237630140952267176607641766873669682467764253906310263245869
+0.421006800218000317375659472844987110599157761301935363843780375 0.151894062128843657337950253778947088725033103876223922251974545
+-0.311463987477590560224336215441587312309546657006950815055720277 0.321416733298625197356169781655370936380441036696912772247051941
+-0.165057267325380014265279708166908031987921655146543985851044333 -0.4160223917565955826045141408940833175120288034523920317861101067
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+-0.202354476845875930808658798568958263636760332076331409887687493 0.3992132232782778337207028024233596615076121224158181657708900775
+-0.280814526420215643112074116453909111645732155050451321599926904 -0.34851360617799451933861285419775410610520155913818822846508501
+0.433117421380154858296610495096985163687615179769727587155405558 -0.112817690265337484855977261213010121538961863017476658612638309
+-0.075105278587362632557972659383203122957758037255183085829933029 0.441222992451792903044672577207324009669420578781682272592554939
+-0.371398693870481960518979520889286493494401992559660764866039407 -0.249762971897557854270037123041657091668426431050398813941957257
+0.38030692640200296574538350676318489806251096305501511983585833 -0.23597706174639464011506103459831187626696031192364610844325625
+0.05887659153457633002956049217725998260638216357783710331957629 0.443680153837278261330151848800382764551668360240400293704844334
+-0.428689521846263247457218821004467102696921551972320765241225656 -0.128622804350637740827643732174102539757511679296777099519618612
+0.293404530148572504782658125478946443831128374467031126208224543 -0.3379827120254757307744504283516424662394234754959039938697431
+0.187580580012308912644214225181788023636001753770415251804222006 0.406364439809939598883854861545751639381459035935878012040970534
+-0.447551281503997173132276387574964411893203250326273493912649384 0.004047513302032111329407330793821961983683353491701487429332917
+0.1802004349748040345694734579602522000357885784213383248637618 -0.4096905358617546487486425969208582019982228203770255375812645
+0.299469259141246402500737579193768554067418525120309761687681562 0.332620947580264789678835411961593402240596260210577081408997088
+-0.426293145768265764283582279728335622981364128569042371908015444 0.13635499921453692618166808856127195072214736216938741486905183
+0.05084260971506435328892692194797692092657032961566616874736879 -0.444672419852144521206587683264860427142844897958979785871557708
+0.384512578091725633350764695197188402572726786836957588992514714 0.22906027422723226440810604477034479082567098683931615528010461
+-0.36682076035437464039458713295846528803397425720253332095362415 0.25643919691193602530440422438067733279302207650320958513727093
+-0.08307290595379316745007826610335905260433080836126401042777739 -0.439792478603480080892120954742767862931598082579668648777884685
+0.435086988007533884827895238139770304765228436003444998138974293 0.10496592211919216277194205442621461554086725221462232632797816
+-0.27446541573162358686348422986273665162058516131429301363872318 0.35353538367052778035701037743270984464424688912212657836853003
+-0.20954150674465675968166327834256448053991152803194475635641434 -0.39548816529825417108716806348574686237177795409482605951065922
+0.446658840747636080421639159275883579898011667362134912573913175 -0.02853790324775314752187129342577955881788910816813251513743309
+-0.15750613358628861709681416893510807554658285161271463065941023 0.418939553900677244115589080908702189952704838257436546252580457
+-0.3172261520903840444768395128464119766084424833679252513369047 -0.31573105702437443266597695058206494602069087848936381028566492
+
+0.4471019172896300480425609973334131570061388309850364774868901391 0.02045501150664698515444899608259832622778238194598181287024763486
+
diff --git a/tests/data/nfft_adjoint_1d_50_10.txt b/tests/data/nfft_adjoint_1d_50_10.txt
new file mode 100644
index 0000000..f44e7df
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_50_10.txt
@@ -0,0 +1,79 @@
+1
+
+50
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+
+-1.4945845937334637726172790824031571543382648859678799595169822 2.0145540771817053788033181335450909649298766656409759093583357
+-3.3539787411870045781893472814864516560222064291824303327695317 1.0821611306979633222391726862929278755458823924166674311712605
+-3.5052417205762599813947006661015456071310012207991649700413386 0.1601240038508827570733075712885504060124365774587777457268913
+1.097251670129498043585897451159190828221471183494169905136878 0.0329272083590794737740915057430712431953967132851383145402165
+0.4310381007931763444300317330471030048964319152623501950754087 4.1313596347361780466414997030612309520621343174290140936237116
+-0.6121592649699256299519261869281687053495693975881878933520839 0.555177679269087065119445876529108074510205304547832324575932
+0.5170533946251448896014380437211014605094998182713290955084201 0.2065319566490886276523952936317321717964693468223263048122888
+0.3702318245348467553132602925718641797496076904951534233727644 -0.6915325192783243894308199719380678295586277669209089895916919
+-0.3976505892242626045065619852431772252255476486713420542730073 1.9548862995237431699212064122965216919591670882135940976534763
+-2.5357760645036353097325552575111827661023330633664475220496019 1.9955690818388701026486957570489738045274001201927203752853342
+-2.4760266435056547946410880509207682194602156293151304594713788 3.4175559628838682329738255535331505402529102832216009790278843
+-3.3905367249678568629237741213022570505241529197971320363079072 1.7541770925397928620639276177893726121708840137461325439829474
+0.0385599661543045200906304466778447259980308324983865145164844 0.6517253651564661394592189155178790053478674888994842523127352
+-0.4117630195541797203919740442158833490351132167974835185517314 2.15997492872066868248276481115562991395064547810790892716204653
+-3.10184120930030120295067277629649554238759420992997881005503687 0.14722268032694454790586624179759703502710281630138939889991096
+-3.24079878390133414417639340255285623177453281281474547170284763 -2.68678682272632160823304375842533398132192060662665460986549117
+-1.21218799966580258949025750280809481935665597708714187901091804 -2.19467408072240303365768220738261473300060349225388275505559354
+-1.58711939902206445787018667374792100046106558751832784948944958 1.03027558777798025732412403664273121463020418086323089020474585
+-2.28736891827490710329231083343454188499742318324248373953587784 0.73453567461037596419326953341110286807463827294635977249490638
+-0.49344429560766912876923692049938251139188538093857157470556716 1.12485673176401493178704839005447076111487132527965927906297653
+-0.59730960869164371470605802394759726248797236651926297914443196 0.1362715028154381904705722239540294041833409476756756853738527
+0.99775096062059170675082943166954961890456208798534864731763498 -0.55894437554497416160815311945074551339769527288366322204184611
+-0.21293383719709571349608520778050459395039037365180174165536909 0.35954741044301057410717771315650192305397080453757539797376116
+-2.89848365614425734303040370205502283699833072175060685797247159 1.15086385831356780913805094660939742792066959429935014771704431
+-5.28892888163661505596494035576025076445865161495562354502989616 -1.49125314911634926047083396779988151934864279833917122560328832
+-1.347896216355931774679958699258750407129349908487712609591584342 -0.896167205915888173511139880815283371468417833967393658163450822
+-2.46784435788210702932894576558958114784226764068357911384813342 1.54794007127658575510648163699975503254266419404035588544994945
+-1.73671760314858069350940210045993898834173129777061103621495857 0.39860490255330974937530092941121688216850979815151656072112399
+-2.61480393326662313484066606044895983864913284340323977492778371 -1.8267713048170686067220803877578892558198463282147176838828842
+0.86062149851041407411803735165663584404682018044494941425256193 -3.79017922695436726931718456118903847378765693303207430421122488
+-1.23378341730823355725550822929543236437997416479239312985192022 -2.08067946636917609775929638575718891958770783191719802547898319
+-0.00077948465808503988253623539063492893783409072610247778110671 -3.25789225391915665971335048675702536688571541089354303070971278
+-2.01544369407673410562746501191453529126322329170528097871555523 0.92825490179261566544566951315585878226300224975767616263215557
+-2.45893858597776210426510686842589032241291059523227561205668738 -1.78595433930110787217113367042626601621663087677007563269457984
+0.59360965420316005263594208779622993455047009012314096695575477 -0.39656378101974584605701152559505790185413226823071024187344663
+1.71566898977589509704029938867160050764306919197851353177400543 0.60597433841692657741475107623569245225816299942178545357427218
+-1.09512084057370068413464032387473918078047082773050852504518423 1.42263399285674819081079608776994810544162746440982400684111479
+-1.8466025666068070918363355950584419752504882432476262683827373 -3.28201358064922014882118785746390547493674921353674253779333
+-1.1351626617472330068005913952623531153922703194655089799368007 -2.5220011578417470935643716901452169303198197699697154672529863
+-1.551470378880560943021712935110396192216665629976007889412182 -2.7893868770241402472657278309582715826043556754741989635600366
+-2.2029261491275330616200379418475602220876381246351669048612882 -0.2623205875319696321399127782077241990897232083304557228134617
+-2.0740468429775336005255331763887023211331016960277100090564601 -2.2669261475425622483550822394593098286765575097726167523632101
+0.0739596827617413173054710927907514254285252050054598784395161 -0.8504888044929247664739128967302682092823056104786444980061736
+0.5317783374207954688256341899419504158453111205635087171103503 -3.9623049787369517043652030959103909604309144343681000272327187
+4.4797267500506184728146765782283290684080108650362113594297659 -2.0787673412371763676543511214184076297325309631759774534594436
+0.0030870366025527263887232331831199462672592873045484943595877 -0.7790600747020000175740513785819868234791892755397521511685979
+-0.665748424551227728189752614010094545421766849188522115204885 -3.3686412172554349420741936560117872429135708522849522294350034
+0.3954330021475975931435899714050229312367051140575675859832465 -2.4555661201377720812263162367196147429143791852914501471225919
+1.0361357431764401716859626744313889866739023044245505969984877 0.2509406359928225725007437202937764179967621521276589750378446
+-0.3384933495093637107073438215596386110415870324241786345976101 1.5139545786654818431887732952167433827802142389419184796624125
+
+0.6316345452201721830125859283102821997036574445025868003866206636 -0.4413098759704276115157486122940138778382450314554048934666388869
+0.7051415661084367709201814372310498119360160763950294411494790334 -0.9286394390238346619050912089405834508747965422378917835718069263
+-0.9186285185242277638228379667640336837252479527413557249796864599 -0.4763986698707299918532811013155870587476071700798709986377725737
+0.6059166146272276531659924142280879090009660941492851068272418515 0.2184244610344805776516307003112049282480936070481769173095132673
+-0.95114225448595864485771668441096849436578004346293095519883533 0.5284655557490481515292532588784919125603831832265742904204270183
+-0.6604794604223456380230982552803888415401900194413775997907443762 -0.07838835742104840389052756169146943544000206230123216084325830017
+0.1817134261437800570794256414315250650163873891461146114574620382 -0.3158305122954834491361879876118745635891842225287967281157858672
+-0.8768399197753272524248224977827836246291177209791567885209025379 0.3458309153991207858067077092337332970573207566667458110876416196
+-0.2027179913470305147020813461378369947382030993314951020253012762 -0.01097686940732606761440422015891875954490441842087149586770120005
+0.1375057760993413749724126299163162462121619232755876011030820512 0.2626555858903124974165091427737336367005240661151773835219310271
+
diff --git a/tests/data/nfft_adjoint_1d_50_20.txt b/tests/data/nfft_adjoint_1d_50_20.txt
new file mode 100644
index 0000000..40add40
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_50_20.txt
@@ -0,0 +1,99 @@
+1
+
+50
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+
+-0.7988400996303522192350273065897709166525277334307200707767428 -0.6390478244646834090800394374255106696150520640798131991050748
+0.9736344834830684586585882723152446813687632990263879060383139 5.4123371520352036927656389808359939277552839642587381634402026
+-1.6911167104088219659117147948846441050743439010375128124495162 0.4778891051215858655835425106547783918501726421123282663558655
+1.9233996763848327941104841284974965603763211292284482343712215 -0.2195030731541048420436063439449201332511359526141703272684476
+-1.6984744862543043602411289975304910351453682579331112946641457 -0.2129912935451265456700278859677578648408185499442220652788571
+2.2453710309331962586465793519611071924481426145624640804250752 -1.0966118433560779577767945808381459946817152089855126645026377
+-0.9800631769092628871633269173021556079415136025583580066232326 0.0379852803314371225444940274615166665194184977228053813847864
+-3.9374340145281309675371278562026630102210144147897078784041557 1.1942091088547006094900194419079784139769471496272383113192819
+1.0494146360963046921287897193325248618143927037317975796812993 0.4008846914695887452425194655360410197043636171947786936089673
+-1.5865017565583239152962031744935721579674533397127495784495899 -0.2289671654984766288731753056828266791499840607019349682711533
+2.7074486213316296383768747173984129491745598725551136217562387 2.5885311079527376284369403608022220256728746103937436694547921
+-1.389837281897406909257350314858607326391871966248008852629528 1.0562085128200584637118336608928176039622099718399977490217206
+2.1260369482260698906268409042061327301335712774936958721813494 -2.7662514462177576240613144929665227466350382852735736295360799
+-1.6668928732102986531859690146156578845756970063298699228327243 -0.2403454206025479023087626196330401004303255011003031031065959
+2.7512802793302246861557433369410568933127950200136228540293841 0.0806341706146757925370086795849927623576581685623278944839946
+-1.616283097237170208259631257874200126282521297610276056914778 0.8659363315164116861948795142364998981581543628755855607709877
+-1.6695322035513604596206383199038343521032943566759881179608807 3.1918833790230002456708564856308986013521813321410698368548211
+-0.2497168940706635699423102953717309559243015811846664985236278 0.5397559971510198085655154900161280652325534400967056427433692
+1.8481626200202074735180502359769277154406388205121283212026568 1.964837039916485393504457317298007916261808689130411137442808
+-3.883142442882462957795141832839908871157844715007021042451423 1.9719737033988820411201132693536854754921630252266747175551049
+1.3884973968458859445327056582221970070690083066217069075070819 -0.924266305420565368011178431950149251237069827934565280015799
+-4.08344776962705085774354283148691606236632608779877374668775806 1.03006479236387952769757188932565974461905444537113837758164862
+-4.03714516484806486031564410567717332960118723901951396300256101 -4.97999264648962537097419782628773013244040174190049527499663887
+3.13725924075051360777947254587866910690850593372559359109020617 1.03450697355860722732534178131976121978484007855947740336866949
+-2.09344959297728161042984138949422824115576934924608778927398709 -0.5433608515415868821758911787703382517960901168184645201884799
+-1.313831422727774651555845755917101990528470330521651169614664193 -0.69273620291038926726455982040262810773021395371128338842658488
+4.46247925192920379128984933017002274344111856699113027289940454 -2.92680562073515463017929952084299710114908302714395039648034042
+2.28019593958683590589347160777337838750351835626244282921064656 2.47097640117186122061951061416433323388834787884534844353537938
+-1.38646623155880274322369326605354635139126671692883092232623714 -1.76645341671227927683299839212594311311578625548995433559468724
+2.13721643206641988358010398383864107421754257597336377240100232 4.25765722027329582591515902715198479261058829720614093564336599
+-3.1831870712256462522810714645682381900000948034636998032252991 0.3218135290760048076683079560553585252290885273136503210172424
+-2.9436029277941726378931604188904091104092318862524649289035518 2.8324083180894571916992957450952706302799348239467298315874652
+0.1758524264296839302913080572777697004153525735989753044159064 0.7350454206680941062503461811905754249423344354705815686113527
+-1.655114229993356215350190499611804548428771944958912270605586 1.9664566021343476385266679882633447115025153125325138336670647
+-4.0893771812641663205379618170233900102291911254719063119756487 -2.0792099093079311349967615727051279503115071647670799631421955
+-0.9566793586973980559746715660555563210219386387378057839610529 -3.824339909848006102547282837117742807168810609139739640580235
+1.5325931870425625505394107298169212420226902233135792673089094 -4.3306837924394458619460986305107771446463591774855904365044923
+-2.5293987300930507202138172790812550225948359794216416601587272 -0.8489002303265543523303664696309724314601647051416355736371145
+0.3694683032865156731727154712508756577959940374469359705121544 -0.3708464732937309150706426377890297523461653294103116921050465
+1.3059389342570522596415862450267841502634645747605178216802196 -2.6372063158058909757062261435486427716466248283503462067554901
+2.2567498132341069024564339631442919972923639945418285980579531 3.2549880271692226762203605319976551787741384078366960600337815
+1.9201048585398685663598859361806733099243824253522869588650585 0.5887880282984660295821990869431836038301085893292184303698184
+2.2139984266956054162593449010747597904364836570752703545296553 1.6956213841617607358501482394267865816284310539556718741541628
+-1.6149898908139904789406702240435698975175518569644252469031599 -0.508438091335247205603210944509548508449570134610302591905671
+-2.4640641930040769235244991591370185625915567654307709680923689 2.3158242860799980206330677341033677526800103278075533561955944
+-1.9859392628265678256537370881475526536074245615755101259988928 -4.9885532978612781710799223379276390846852688655142558793856381
+-0.7623187820154721410603232354231249156342939884669610359987265 2.844062852066878386608545005572411893267254699368787524559722
+-4.739754719544686859199966470958002388189031395349338305489094 2.2463792689352841631421951131432963211223503783374400135320526
+-0.8352890856390665086693207419324820408316373263012877633712537 -6.6351789644935379742916162557934084806535718729143646831679877
+4.0101746031470778924394676273541374363778743713139710840776082 0.7836184103935320154076768825361154339250192161674144246963282
+
+-0.4413098759704276115157486122940138778382450314554048934666388869 0.5356506216935318567168964679980224448474954197740742721804425662
+-0.9286394390238346619050912089405834508747965422378917835718069263 -0.05251382922654688111844675415661855947948761360659425718759593363
+-0.4763986698707299918532811013155870587476071700798709986377725737 0.9518095182124288782767378820155949547911261560251647626870735792
+0.2184244610344805776516307003112049282480936070481769173095132673 0.9956223852813107496522616247115213137215848581937907906567140918
+0.5284655557490481515292532588784919125603831832265742904204270183 0.6741052796006089834676571454955036801632897076493615121596900136
+-0.07838835742104840389052756169146943544000206230123216084325830017 -0.8697750560716627155371707094260289644371901052310063829991901781
+-0.3158305122954834491361879876118745635891842225287967281157858672 0.539462018274751480324642644804511358394409237082129058457521908
+0.3458309153991207858067077092337332970573207566667458110876416196 -0.4274845026027779916855619203781095649893449575458629944853980527
+-0.01097686940732606761440422015891875954490441842087149586770120005 -0.8604697501072873707535504424154609782723273602355359333803551115
+0.2626555858903124974165091427737336367005240661151773835219310271 0.3822062430356176188977280281604014506988427784943414973817258933
+-0.4833001744929688887627302318231007732586579925667420767092911497 -0.7335087736711041883089151876515694737975402817556229765975958245
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.8786687027770929787301562525828872003547410177701220950278899658
+0.9495591103622864735737804468916775971319894153057637661282509133 0.1944979336074391420204691208780533563017707991268605634570366201
+0.1280772471342585841455757702545741213596517009855068302808317718 -0.6717069716036456017860348911350501039034020263227184271420653514
+-0.1946943926350927100029394214607870756382213566654573743676056718 0.1841240265716411858721923885202834145897392121583597644960322461
+-0.8391269337210497321784330437702418478537689733296865638890089907 0.531416327611542071221970089939764430329756625444579259583169101
+0.09000979948494377602070534800332955914923353808674104151336312387 -0.7793598342770851820561551396646691186537674923197586552161425487
+-0.1766812336766545879148652249537685082960598655086779135604123172 -0.04982739811897050028189209963034074300557183166488389610036293982
+-0.1002499995910402071291914694552929590775602478191912580994509247 -0.2152831478765442996690076717147867376683641103330644151579049018
+0.8558312786548114618473704491843378278983698142481509704680004653 -0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfft_adjoint_1d_50_50.txt b/tests/data/nfft_adjoint_1d_50_50.txt
new file mode 100644
index 0000000..a3d22fe
--- /dev/null
+++ b/tests/data/nfft_adjoint_1d_50_50.txt
@@ -0,0 +1,159 @@
+1
+
+50
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.3914347841983986584093169466825129403698312444687581041683071856
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.3158172726100860915062929641551410998518287222512934001933103318
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.3029583073136138265829962071140439545004830470746425534136209257
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.3302397302111728190115491276401944207700950097206887998953721881
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.06875288804967068748620631495815812310608096163779380055154102558
+-0.2206549379852138057578743061470069389191225157277024467333194435
+-0.4643197195119173309525456044702917254373982711189458917859034631
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.1092122305172402888258153501556024641240468035240884586547566337
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.1729154576995603929033538546168666485286603783333729055438208098
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.1313277929451562487082545713868668183502620330575886917609655136
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.3235444591656903238219892489862732802375142646453324666079452958
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.4279156393274057309236852245921689139491849071240754852340002326
+0.2678253108467659283584482339990112224237477098870371360902212831
+-0.02625691461327344055922337707830927973974380680329712859379796682
+0.4759047591062144391383689410077974773955630780125823813435367896
+0.4978111926406553748261308123557606568607924290968953953283570459
+0.3370526398003044917338285727477518400816448538246807560798450068
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.269731009137375740162321322402255679197204618541064529228760954
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.4302348750536436853767752212077304891361636801177679666901775557
+0.1911031215178088094488640140802007253494213892471707486908629466
+
+5.90687404206603430182025560223062565211336688464677430710149 -3.768446417920009781951712421321322538241562581598060802246457
+7.125567001764469133544509092690333414192385104254496069880035 0.354513400482010554002990280381827147444289483157235882967991
+8.759242663827276836681462649953432819948958871556291366745053 -1.68958149301855689996909600673281940868180690646397202152062
+-2.056019269412014224778318299108747354900165164970521008576565 2.63366740023434118361910049597044723047546926212953973137135
+-2.44316671004174496882640589075475586100630614387532610148697 -1.264423958103090741946674053640481106447748324805449248725508
+2.094221827050354219315853041788461399919908071098247180568987 6.344458129441931436860307027168620223938699068331884318046815
+5.5523119873546708248804878969807515225097736716307589248515192 -3.467021827507838123071138838911742841629512442347988104332427
+3.1950496589369516112740812192319859505638250843769669914534927 0.987822773180926505568272424680939613776551800225353079220965
+1.7623235359281585947284099302612009868615141167522359355177911 -1.3251576485948759016650615713915964866771613237544750931026099
+3.3803789382043589246028614109624983721644812718200714584103952 1.2355480543927527032245972661924490733365280779108586705716062
+9.0703399128646612102910909438208283496263061405184648130492996 -6.8429124932816300997708723470438044738363620112136738717141002
+3.8146354188823574565361243797685098058215374133537019456924935 5.9978816777396571594101820122251538983792329266982289741185096
+-1.0496266252847481624984508383392281021508419514704640490317477 -4.8881567435395312421025539233124898882949307087117647849000954
+3.7900041913409732201197281001934453844019979974739892151355047 1.451484472788568179076634275694377373929859162818098518245463
+8.3154328706266147241900274421431289866503110476160795464864485 -3.4724492737074514449540315736998240962661640744575511537593409
+3.7279022710180124855256125410883505477014745415189308581921421 -1.8924936872068612688696522184194611108414295856502359660520507
+-0.202424279896532864892253807982977045796328136973342869264844 -3.4323100265217119697743294706326731455044190042781595849122969
+-2.4681849171040787853620562354426904674560091484157505347193703 4.1712837581279072915511294182048535915506821577128131954293588
+4.9007519144592147466141089860616953179397788971751724774874946 3.1136206071736511722852586383970612315618389289251918382026401
+-1.2485259060830606060168420174953754882737564300285570140410889 0.8566620273460068033894646682369308178060273058680358146265939
+-4.1713031026198041103932451933753239672100307080341727161805141 4.4239467844685439324952988701872557893606485419988798239262564
+-8.4667518535341252619211104309966607357415077423650400564341697 -1.9233146504203605606741268946633222177425442337965386781043399
+0.6259621675874933673444312813580006484010258592489058302064387 3.9445153442558393327076956885704152259127341074306183066892585
+-2.943501804227451275952118721741355922049081388609045333201719 -4.9170872093175204454154778416048306281616109319182914758801062
+5.15077009768509856344210072878742796067503349122393717288006787 0.24935064896680262612148448787504010882022338843560304683760395
+1.35122275672905157987939776353521245082875968075595465317817761 -4.79530968124209425485052145966292630285889974485326287728490672
+5.76398780377696975911715985588439376885600817595220828277145736 3.94404658565281636560032986859666956753707501207359611055962932
+4.4041240196161894666545756381301378163895722267307318706020219 -2.7483740159406334807968093785167715842150273786804630701545328
+0.693978625173045631016332704883474090295279821112336709071499 1.9948181035440419453430408653481795461951049449069916440494305
+0.4511087313274987220231750038341257767399512507750514718055001 3.701671064428727533604009679478108428069787991591387260684837
+2.1571692368690099534686827326955346801245078768533825875954935 9.1240557360274829055955646708567248754140314123724504368815467
+0.7888609005475601053876314681560201183727421566322199707423845 5.8996432799460162976289810943602709219584350040773132182192831
+1.6029133091135085671175629838266011018684020557922974168791408 2.7833810618145334814279128853015944505121158532732487667600277
+-2.4750950496616146890393067806499362461848897971548320585453938 9.0622202011070191502563469298170644974526796653367402852422789
+-3.1957677887076246541688879415276026316673632936746635282327956 1.6455807452109295925444832634489730716532383807218240639108291
+-10.2572854417062185022224956722788294789989762487164310680216259 -3.5520487897282580821647506185234032795493779977894960669074458
+7.9389504689055508629954072324829530359654511197664437138995107 -5.5900803550634021882818644647558103496363066658023019257825749
+-5.2983363673401093901835405123181610763428762217317230023844427 6.6920340379042056852339979105953162767720578644206351199822055
+5.6009355954668999937222239972524486023756915159210806816710078 -1.4132733751638390410921185634092396405746476568962651826661062
+0.157965771597105810063199881145401202191151260910681939723641 -0.6520041727646947425940935286221934040825453160026428029816522
+1.7647304040604769170886360860295254161963069529381688315040197 -3.554989234562123076842311353422083574178747058503017919464235
+-6.8916812070859780234753969044669425889314383307412409810590379 0.3591767742983798752484773917775178954265251440348828195855533
+1.9376573916658449743192054978750857529892886709716240653994851 6.2008542750346906766586314331060120134541166608659075035525908
+0.2280331160736538387321144998156544204287346270605149653020643 5.489153095722730997057525415568403282231513261554609618113204
+-3.4830233647743014112999674692122816360035645526075036525550108 -3.31144990317596394574688103464134959499016304483777704756309
+0.877357328917339578705757628070022040951114000595352476937531 -1.392975057431377980665061903380816611647027433683321669663216
+3.161115924018053203852013577075264999081851499938140748085258 -0.580392076714674884704555527455885961507875350341771100132121
+4.463499177746046089726662014733500224703688836547875021572318 2.987209047894386435465601343794561626745039171958519152478968
+0.511029922917975649563076091259913757758305572014257826442485 -6.289324690257294343921445332866904282547575990467884381355067
+-5.006676002536815437507143807348110031893163609696695408147464 3.825651441535838025340063134190786593609552384660335753412082
+
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.7721031360269444536624854764846278079390436516442447307214583713
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.7113282365127787106295924505560767722199840055537543517442585349
+0.1944979336074391420204691208780533563017707991268605634570366201 0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.6127602430473631495393181955733023028663546816025211937039540524
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.5944056790460496081717996899055920305811666877696698395774078378
+0.531416327611542071221970089939764430329756625444579259583169101 0.9839367502424209997890558933686976016082869978582241397510153252
+-0.7793598342770851820561551396646691186537674923197586552161425487 -0.4548419343247805224460011391703079342763504118566706946966391853
+-0.04982739811897050028189209963034074300557183166488389610036293982 -0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2152831478765442996690076717147867376683641103330644151579049018 -0.2496600323413886386258990085306122333313701779141184118995463959
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.2013567579813494116381818105314838610969816486807952028421948124
+-0.5458569288127476004682590208265714990676611459841400026017844665 -0.85858010457166611374976182888109386496982051035674989499979384
+0.1856688150172391527088040246433169286752829500750590071977203062 0.7326702292582058588316598422918662773838658327971514003421703067
+0.8193143821859564924477154245099351963436429074028089074430038904 -0.2697443704573465465233716116511309018200366900116819867580635278
+0.4604487491339531156973853721884505256237012331451385915640611729 -0.6468087813680422377672655136982917947328505318460482424201962
+-0.8606535828683120015533980099014960687963233985081987928030018579 -0.2812302577494115409480047067683469320314228801749259890701395474
+-0.2028782443808202039078700152556584967073846417006795171717789768 -0.02167413194230472805204979364706614220652157873015883116130884482
+0.7727562160593342436881229708062656539223995010850938445718232095 -0.680894955890704100546661726757747116024714493408288024374190234
+0.2216455512897554102911455213296037106714896153079531893725412128 -0.9306530725185795934583927665790248017610038861531896668451002839
+0.8060520707732849845829519568044036159880831172244051400087891596 0.3319152007540851906913026983763584438955853838764895977762668678
+0.2494984458565048492106180084187393465587010901621886528310783225 -0.4414898031680223608932387792017485771255689761890070706015387399
+0.692720462930580375837580120465281755163139346395305274413909974 0.04675554236208552284539297942143061834219393972333359647545914081
+0.3484206501444620766420233468327938525050794194268200530793896515 -0.8152568938325646993310760006867681539054279301843202148958871677
+-0.5365723013330725289094471599220332027885871668229904917249565862 0.3952163240756655529212705355453418848569049122249531536768131848
+-0.4969838973904267472552603461634423875526049699439467087064029146 -0.9395163144138835125672454933008856593503204403133472584898229717
+-0.1099633225953045478540363356794430416477263111166654723490589437 -0.08780353633292157461769946866167963633505729824902226238512671868
+-0.6756547625687923165084584127259768184144567299620396875756298559 -0.1743560068378512679152575299947443762504689480476570621749324843
+0.8687355316920355914551191479618699998090617653378680974249892199 0.6018835924636782523215034400201993341434060856497418585329625279
+0.6573707348942885034556657549189062350008259948442460481059842193 0.5094537464059880326374352490064905763350159638438638190213421193
+0.304092255431421724386276285709205877741518261756931899126135274 -0.6412882157453879879998117648467144628970706782597054160685555631
+0.6923315191547459490617708873077670147989473956854336908747033971 0.9017103216368149546517732133490469846549850682301607701578308401
+-0.8796784447840898801814093263554195453289300559080999490503364787 0.9631270643127979384664069651403286361478505285019531813591892173
+-0.02378306045101476542041128049120676361822587626846492046663605803 -0.6210835173793688086670082589175993809833456274087668762475476635
+0.9854996726419986830846511304498671064695985279263874167222764802 -0.8137281645240375388576750044830353268919925528507904843095256157
+0.6717005563662298476413580139956207272362245386339234470714331016 -0.7041297500866612607234884784407130317305843364144413223065323821
+-0.8378043093573693797427988998204722223522674424680899644391943176 -0.1235721593345202217795554759876880268687368789792682195280803184
+-0.3904035160770493684430115148009967524256991556076221372265894266 0.01793996302825844948175557573252934185711456214972052895861572493
+0.3596214942327276879157632590476519168937540906266077357147819608 -0.3411596862218241172328579047617234818967459872060847679144866809
+0.7958628339830083470736213000945699871834494249238046750007408612 -0.7379746599220903325806827424480469595800618414934950958452657346
+0.5412530329369591795695895418300581875196694253995928145942436878 0.6843546378904107483368305041075808036585650068151329599810630045
+-0.2613537732594101756765510813982454595302525696986533152069370387 0.4265099420399003863248167494626862205659560797404855195341684806
+0.435828324052182771698190217679588447000849558850289775314256024 -0.9874151891964456486571993218370826427302121071375833081581536189
+-0.5937465792299257034198201886287226952400923687140794966015317515 0.4601637140807105378191037234478805179877043129140064777542238544
+-0.3218041479377133937935849601301732622610394503588237190352903562 -0.4841039802362244364267157134690841461075259779700777041439742307
+-0.7360914574746049921434644450737043073420684008447334807822853276 0.9965877589863013394561112420396792373833365736836351278348301833
+0.553187364694831117272984365230687982396001421226655790220741406 0.191567730523304776574190978829765313731471509331205854313016986
+0.01417576197421767893279369309359545621976513518858252000938611031 -0.9100049476348622207723944867294612891098821253248738836563459568
+0.6897588478092123244219967589255606032813281483291811335150355542 0.8085565025927605798160394591787637574375967583263627553971120289
+-0.6996703139503628987183738269577949838863048093871175900433716284 -0.8851479413535487385573817957243936843534909265401263726020814395
+-0.1309677757443125377194229250386971011803561306992623123400631451 0.6064591258881136876029163103297147737049475826316704311935105558
+0.09049503268981439002460219767349217513483951010643022102321620286 -0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfft_adjoint_2d_10_10_20.txt b/tests/data/nfft_adjoint_2d_10_10_20.txt
new file mode 100644
index 0000000..3612757
--- /dev/null
+++ b/tests/data/nfft_adjoint_2d_10_10_20.txt
@@ -0,0 +1,170 @@
+2
+
+10
+10
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+-0.2206549379852138057578743061470069389191225157277024467333194435
+0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4643197195119173309525456044702917254373982711189458917859034631
+0.01022750575332349257722449804129916311389119097299090643512381743
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.4700775714463633978511207403685111986859425845978719788126486235
+0.1092122305172402888258153501556024641240468035240884586547566337
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.2642327778745240757646266294392459562801915916132871452102135091
+0.01032012051955487309722047463966310173477870581273801739268254951
+-0.03919417871052420194526378084573471772000103115061608042162915008
+0.4969744253080455744694825346756894506554753184704475582968873208
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.1729154576995603929033538546168666485286603783333729055438208098
+0.3914347841983986584093169466825129403698312444687581041683071856
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.1313277929451562487082545713868668183502620330575886917609655136
+0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2416500872464844443813651159115503866293289962833710383546455749
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.3029583073136138265829962071140439545004830470746425534136209257
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.0908567130718900285397128207157625325081936945730573057287310191
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.1013589956735152573510406730689184973691015496657475510126506381
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.06875288804967068748620631495815812310608096163779380055154102558
+0.4279156393274057309236852245921689139491849071240754852340002326
+
+-1.7115526911754630411289863303787442256202896535539107206246467 1.157463749571202330102875034346738185769801102586201288947922
+0.273079045215218790856297727404249318223036517268547682332831 1.4591247250231522622602522850035455116421873799856937667403336
+-3.4948245802959375080091629983953340987603536886178499498297276 -7.0052078249945726960645042123814438334535660904576585423090147
+-1.4055819516979986786114691967109229793570071687691762510527685 -0.4156032176044614728846242651490509337919051888522072470120269
+-0.1893850050116626053595883438687538687428939969717548043042184 -1.2177667105070493454349490840137385405673011973908605482696255
+-0.3227247947975979136506948174532223662028515133381826727703173 -1.5454863231455024382596236076233788716975256791095185259301658
+-0.9765461123621366087114699258001488213938127059063367139575901 0.4514195179658447745811863398809106568714792025469309265716599
+0.8561294765516660185649896302020328387886038372575558538121666 2.4494681973495376279684890995526080893002826719030481590740116
+-1.1222549453995530468647920155195853073319480005277605539550044 6.2877243109122844009431432161499736997306168869286199709208064
+0.3231574748920481490276161746996480981499534726326499798822119 2.6282211114252295796023006770489505214622446009914733586742535
+1.2296807537190168080020503512905773220462894474657780688289785 -1.5600032139333852847346760166748309655187287477989747143376638
+2.1556788902636052027675540744330236973511861820723943753474529 -1.3428507309470056806933221444458723000830318866410593748876354
+1.4522174080274047807404675405299506015567750900786076428777024 -4.6375539819631297620263672308049276060102785915903771492150218
+1.6317973600587997038248628694044304056784872172570725122589786 -3.2175795015791785302471736103335341500050423282121026214862422
+0.5849486782270526930921615668495606074700149662020443796075888 2.9931670713724536615043676846106551462838241674353855326295581
+3.65058042069366532232098883918451534618108419047016780466802681 3.439003548639643996977911547634966715454009460953644212833535
+0.2589502858298171641636282740703202933528630877237636182802856 -3.1209652699577617582677735925080471175101618690969009012300521
+-2.9477174798207952425380477367581022689448738244540530795665002 -2.4747743196888849330316817262420169105287533957613053850551086
+-0.4319492107418523887106542772463272917889535551780993798729223 0.4826067017131033090613871143247527071274027322812753953709434
+-3.6033071455645955007177788297920824200710797370482918644510454 -2.528773063928012669658141568620656068329858061950998345448573
+4.6632260175508221709714140339680980831477002560416718700814833 0.5285023205648595730851863799535908124819112761979004212164226
+-1.0445696509953643732269472438340006462016095347363129097899989 3.0205768216174796540600008298727506535434347862238617825239219
+-0.6609637209681878262894586501138854622269850980230506108464313 0.1180394830807214022357182558090270031147504380976567008216049
+-0.908307343909891062870639609606120932622832720012323462536223 -1.9423029370951286821182205966310555683108317419337716214689606
+-1.08982945631808992571445185098452318340680891036130792770172202 -2.13192020431984053125728333046706531852647188484247444015148477
+-0.05526106364352997696967729739696646330969993544892626116886122 1.33173119729863414795415289923025633285694807800250059594538452
+-2.41361790714352964253720219400597042220494551203287923371706428 0.1069631147868402024119954798552258649509729091734999477915759
+0.8969328667250956162656362501261022794365866052872075774841243 -0.5568618710587608412514870300086848067840318082730332409137413
+-1.0762376496437810108968021270516509914861166720061867343725576 5.1316338162827296684049169039208377447803224726154016886054878
+4.5311207731110689033445112286498388696687627216756689359220702 7.160060369430722114881793844622848215089261442585379213624079
+-1.8285934411619200309360111709569701576250274881103117166079478 -2.7264197045178176713212946701406514493020103553657051797007544
+1.9126385830070210192058632982030331772038814053164868121082388 -4.2629621713841500605734959383872285925470252718302519867922201
+-0.8513893892827149926158061854787760070958348327319061902060623 -6.24367476304408268768883999416592262483863212516896459862883012
+-3.08570590236679546728860518229338131390421125570468170134764476 -1.00454893648024582886786329342099052894618814518593986056692423
+2.88630038396052746843755861990238936703134339154635129619396849 1.95353462506729132106153881278998306146436258317669165586529952
+2.20911002766390023478336121294686474701830039758920879903260058 3.00963449071485495395652815929271366523034703978029728430950934
+-1.44603706616275879217770124049680841223231460999486825917896381 3.61705584179809538194690892397058035060689522430341012317187191
+-2.58183927601454557848490197592559038392608116132815359354728503 -1.36850717085436055384225358347556654006436624598785167918007985
+-3.5985257000929028291485804106704853095775321064148049789835499 0.8209347790239406165920928185526609868488778417234470207506648
+-3.1862406454769550762158343543090106170615287986593461362982141 0.6010149509083395312485510583983423554938015592747029860489054
+2.5551479940009619995723836125195241524808806822767143320961253 0.9305532960633982587375113977507279872792038944029045017994353
+4.76717058809797008900517868813212138574871162523322440767381601 2.4483580396902482656229821589426143394095494579645611798638473
+5.01736852080464538671888217971345076954596881746939686107090003 1.53323987098656986968297788763556393791018046983835139380868949
+-0.606011657200912654443687071741821164521285319544410805189171 1.03065137914045695003284374655082321554661130876139052013359202
+-3.23406908365170769986156591359478643798503265743830485463940048 -0.68150175458898467892488240593515620690386549885982433407215036
+0.98337144770175491989681876976692424485796106546309430039462684 3.32074710822963827734902660588925057734220781591738824736420321
+-2.73626090349028121522651959420096834610099472865529216587173608 -3.02306700368849094783658777700754071878525015958448019941956816
+-4.55384372383975008368905934295478329493623107577534342390798626 2.03908207116871700324717599603031989578340310074015850430995582
+-0.08143871965152999816914314362549080662748138216687174846845905 1.59521443923437396672993159418908735754023270556604444143094149
+3.6917191774138371238337121822077879048338258056759351032689967 2.920377840684673587953626157719051301760919279130803682355602
+-2.35236369260250657952468151006872188485862839445700839596223334 1.3363679334562420561699838163242296325089066408036579394638907
+-3.26761364740202329586921301637053893446841883377623462743783844 -3.19160526990806980050565219762489311923225318826777869573687595
+-1.73297796426411549364670984255447811582076733915210373492367025 0.24923564206134765226469096288820079787291701971481006353474508
+-3.98157309789713064393639352485686740640374619137224255768163479 1.04295522497818428251294695055868664128671082052718284724476207
+-3.97720195960948726598394897077877881955366106339358931628522631 2.76356116649739144239689940944855910416872833466044261538163519
+-0.69273620291038926726455982040262810773021395371128338842658488 3.65049234461408652300844952142191819782712823381059172308151541
+-0.13516689833903513538280503600052450610328949593926531897013826 3.29799739965861933835887636461699218446793350528235118820266617
+-2.42793515502395853222842900687469738634636879430220956790698598 0.00163156799813816828743131499168561690883475392078759062114488
+-7.2463520897188969558084777135251485758766696455448311814501183 0.02037950480508067159985362065980435338410363428214680157261829
+-0.6036569340078630371505369062054992003995970130946152351971314 2.29128766361333783260149740966396101163999088913210889993007942
+-1.7085118938021733196272739166760788201965818047898261033781903 1.110726748337471581187460890352171108774727065084585192485874
+1.3819453599518382222710819219270855681564019105004343662614705 0.2804109843673077640145536130666997330832317132786178283694123
+3.92376522201214833736287486896103789066626487191371994922003842 -2.86604784495719085155360459199104152759219055451595810301886477
+-3.50900949439465230499569843826282386926884564329213886903963488 2.11101531984156800005602202892559153515446731313870819918506678
+-0.92675817264592972841922330769771880946626457716027450505813354 -0.59047936391757089791101244004385654959671940713149972381758831
+-4.45353791997849643225200946938025959780313420942550921706344715 -3.23518173667684712437066411377500040725468010031982981480918842
+-1.17556422392001924851973680156247726642537880941466761347127904 -4.30875550665074397354074471860289611713162069443650723385602489
+-1.80328666948564245679306046820062848002894995641756964308602945 -0.92988989828037341641260253520914052296217839192518384997766149
+-1.0815401855292237460328725855210308053022414959790888948383311 -1.72370566797823588845729870217928004415299247257746011522274994
+2.07702117060126394287011161445258425705677457854939652888146482 -0.2919047789338719775657355064582123817422158531361173903346083
+-1.7502886327191605381306020465948409568775555556581838263248603 3.5966064096089645234082753748319454743961471645810962707950505
+-0.5359747461348899033751044446543769879170186480127082357476591 -1.1456511304771583303964729815267085847720306193712931218331773
+-0.439494707875216677479167986258243339041954709830674746217231 -1.237863774791592822641455626783035733583285800969737595515028
+-1.15769761711851996781857200763648642065532877580146756067056525 -1.30665047023645753108905061669369059815370200132583687597656323
+-3.68801690990846996560331086097094664642543649559777332731991234 3.93480064646706638234569467015670396587532592009648356061776089
+1.29637334706656821316149118253722970665488755981561704787144829 3.86669779187853265584252909739800438463533461724344804618906895
+3.31138078947929027537648408094180327880040508220896905912896683 -1.45617625459428313289439982521791658150784824039852519590171525
+-1.01119674839743893167321559338345202528731204187618412303751718 2.45382379122024415284075737628892359784152261010219003879426218
+-2.3053961787644992225975149077627897332489906849395505661450801 3.95304301196556700966885435400052156313632007235623149067557035
+-1.8202516156798813319277601587389630524000279786176142695392509 0.2733743489949979565381751709225705979988251319434378340740368
+-0.6322840487533044920874315723578923889614800108940131852382761 2.4960959092126438880466908043659719794586565544536027326666821
+-2.1613414845082695344783173128114330772577467297444423171426574 0.6645745274561587908139570905769151538104440519447674173936918
+0.2457686743697992912663935916498926616081095401948801046430962 1.9525214751621022224036072600972643657094115655768043019478806
+-1.8226234157793654634503611349743056786775626674411096763101985 -1.0514429502084603588596890417803907475146022568055213423146605
+-3.06668578236228911453943664662530054362522786406625825084319715 1.1171896914210158113785130970151720007545314458719461911386251
+-6.69118499955837467083751892101670678224648806194152334942246489 -1.31894773599062796913779794039337064535297244408818244473093934
+-3.01433218879278086304004811266531920826656612504980036486732596 -4.43036055079177512036983222030565515060982833883522322916627615
+-1.8074784449549465682686508240230650720908236949126660081273147 -4.1308498264563881581235618615361624617553390114494887659479086
+-3.9477697397805474635806486701645138584498470939910913048667499 -3.0535499888316812611985012618975960972443009405324390606132304
+0.5202953557814469481323670718219880250738099511648465723568781 1.8692307935411714622272522020593286461226296193248828391507921
+-1.2615424927183205557664120440218754516864196912478398450346628 -0.2073841217959362286268590174668245849980148031263866123399021
+1.9491447341634351446285310253467712202466003846678728362636494 0.3128844045507168921078720572517666234209522300308793218592663
+-2.829210565813333564621641426414491050558298086215528873330744 -5.5170243450275225650157319537207767924020255602725831401543205
+-3.6254029532526109063187576479095893590544476038745203073229655 -4.9221383043262558906904746546393322173869836168460778788407868
+0.8074363934580335400570361493240788056901217567234364032367863 -1.4574131711292631931725643937733932231299469514013259761516908
+1.6371415919435100312917420772931291910485585521071115085569878 -2.7816606530538267443457352676905904211298592028184933062552254
+3.4580195515160021033530202487458362910416915292398726537478162 -3.4031572946007399704063347581571936884975916881959419127171544
+3.6206839659434818294473885486350648501376537950799399568196914 -2.9037998807224052509669332070028059964947836723567712122800998
+1.8141897458651774467279854364786597043815122307302161368854846 0.6375373344101538469645118375451834754052273557068256662150747
+-1.1262384149285996431894708030226127720480115176465223269931067 2.1787421699904782344384646187922368588066895614546307431166592
+
+0.5356506216935318567168964679980224448474954197740742721804425662 -0.5458569288127476004682590208265714990676611459841400026017844665
+-0.05251382922654688111844675415661855947948761360659425718759593363 0.1856688150172391527088040246433169286752829500750590071977203062
+0.9518095182124288782767378820155949547911261560251647626870735792 0.8193143821859564924477154245099351963436429074028089074430038904
+0.9956223852813107496522616247115213137215848581937907906567140918 0.4604487491339531156973853721884505256237012331451385915640611729
+0.6741052796006089834676571454955036801632897076493615121596900136 -0.8606535828683120015533980099014960687963233985081987928030018579
+-0.8697750560716627155371707094260289644371901052310063829991901781 -0.2028782443808202039078700152556584967073846417006795171717789768
+0.539462018274751480324642644804511358394409237082129058457521908 0.7727562160593342436881229708062656539223995010850938445718232095
+-0.4274845026027779916855619203781095649893449575458629944853980527 0.2216455512897554102911455213296037106714896153079531893725412128
+-0.8604697501072873707535504424154609782723273602355359333803551115 0.8060520707732849845829519568044036159880831172244051400087891596
+0.3822062430356176188977280281604014506988427784943414973817258933 0.2494984458565048492106180084187393465587010901621886528310783225
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.692720462930580375837580120465281755163139346395305274413909974
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.3484206501444620766420233468327938525050794194268200530793896515
+0.1944979336074391420204691208780533563017707991268605634570366201 -0.5365723013330725289094471599220332027885871668229904917249565862
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.4969838973904267472552603461634423875526049699439467087064029146
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.1099633225953045478540363356794430416477263111166654723490589437
+0.531416327611542071221970089939764430329756625444579259583169101 -0.6756547625687923165084584127259768184144567299620396875756298559
+-0.7793598342770851820561551396646691186537674923197586552161425487 0.8687355316920355914551191479618699998090617653378680974249892199
+-0.04982739811897050028189209963034074300557183166488389610036293982 0.6573707348942885034556657549189062350008259948442460481059842193
+-0.2152831478765442996690076717147867376683641103330644151579049018 0.304092255431421724386276285709205877741518261756931899126135274
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.6923315191547459490617708873077670147989473956854336908747033971
+
diff --git a/tests/data/nfft_adjoint_2d_10_10_50.txt b/tests/data/nfft_adjoint_2d_10_10_50.txt
new file mode 100644
index 0000000..d59d2b2
--- /dev/null
+++ b/tests/data/nfft_adjoint_2d_10_10_50.txt
@@ -0,0 +1,260 @@
+2
+
+10
+10
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+-0.3667543868355520941544575938257847368987701408778114882987979123
+0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4393343513885464893650781262914436001773705088850610475139449829
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.09724896680371957101023456043902667815088539956343028172851831004
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.3358534858018228008930174455675250519517010131613592135710326757
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.09206201328582059293609619426014170729486960607917988224801612305
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.2657081638057710356109850449698822151648783127222896297915845505
+0.4969744253080455744694825346756894506554753184704475582968873208
+-0.3896799171385425910280775698323345593268837461598793276080712743
+0.07714972696698667716678650997245420808817430827447314113682745907
+-0.02491369905948525014094604981517037150278591583244194805018146991
+0.3914347841983986584093169466825129403698312444687581041683071856
+-0.1076415739382721498345038358573933688341820551665322075789524509
+0.4098351732528003809102269734570294879975455702584035273166455779
+-0.07151629523327176189411207208538153350324597543738741809574504658
+0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2729284644063738002341295104132857495338305729920700013008922333
+0.3525707830542183854600907186155249059680080381975147205747395167
+0.09283440750861957635440201232165846433764147503752950359886015311
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.4096571910929782462238577122549675981718214537014044537215019452
+0.3029583073136138265829962071140439545004830470746425534136209257
+0.2302243745669765578486926860942252628118506165725692957820305864
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.430326791434156000776699004950748034398161699254099396401500929
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.1014391221904101019539350076278292483536923208503397585858894884
+0.0908567130718900285397128207157625325081936945730573057287310191
+0.3863781080296671218440614854031328269611997505425469222859116048
+-0.4384199598876636262124112488913918123145588604895783942604512689
+0.1108227756448777051455727606648018553357448076539765946862706064
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.4030260353866424922914759784022018079940415586122025700043945798
+0.06875288804967068748620631495815812310608096163779380055154102558
+0.1247492229282524246053090042093696732793505450810943264155391612
+-0.2206549379852138057578743061470069389191225157277024467333194435
+0.346360231465290187918790060232640877581569673197652637206954987
+-0.4643197195119173309525456044702917254373982711189458917859034631
+0.1742103250722310383210116734163969262525397097134100265396948258
+-0.2381993349353649959266405506577935293738035850399354993188862868
+-0.2682861506665362644547235799610166013942935834114952458624782931
+0.1092122305172402888258153501556024641240468035240884586547566337
+-0.2484919486952133736276301730817211937763024849719733543532014573
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.05498166129765227392701816783972152082386315555833273617452947187
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.337827381284396158254229206362988409207228364981019843787814928
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.4343677658460177957275595739809349999045308826689340487124946099
+0.1729154576995603929033538546168666485286603783333729055438208098
+0.3286853674471442517278328774594531175004129974221230240529921097
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.152046127715710862193138142854602938870759130878465949563067637
+0.1313277929451562487082545713868668183502620330575886917609655136
+0.3461657595773729745308854436538835073994736978427168454373516985
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.4398392223920449400907046631777097726644650279540499745251682393
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.01189153022550738271020564024560338180911293813423246023331802902
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.4927498363209993415423255652249335532347992639631937083611382401
+0.06403862356712929207278788512728706067982585049275341514041588589
+0.3358502781831149238206790069978103636181122693169617235357165508
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4189021546786846898713994499102361111761337212340449822195971588
+-0.4195634668605248660892165218851209239268844866648432819445044954
+-0.1952017580385246842215057574004983762128495778038110686132947133
+0.04500489974247188801035267400166477957461676904337052075668156194
+0.1798107471163638439578816295238259584468770453133038678573909804
+-0.0883406168383272939574326124768842541480299327543389567802061586
+0.3979314169915041735368106500472849935917247124619023375003704306
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.2706265164684795897847947709150290937598347126997964072971218439
+0.4279156393274057309236852245921689139491849071240754852340002326
+-0.1306768866297050878382755406991227297651262848493266576034685194
+0.2678253108467659283584482339990112224237477098870371360902212831
+0.217914162026091385849095108839794223500424779425144887657128012
+-0.02625691461327344055922337707830927973974380680329712859379796682
+-0.2968732896149628517099100943143613476200461843570397483007658758
+0.4759047591062144391383689410077974773955630780125823813435367896
+-0.1609020739688566968967924800650866311305197251794118595176451781
+0.4978111926406553748261308123557606568607924290968953953283570459
+-0.3680457287373024960717322225368521536710342004223667403911426638
+0.3370526398003044917338285727477518400816448538246807560798450068
+0.276593682347415558636492182615343991198000710613327895110370703
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.007087880987108839466396846546797728109882567594291260004693055154
+0.269731009137375740162321322402255679197204618541064529228760954
+0.3448794239046061622109983794627803016406640741645905667575177771
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.3498351569751814493591869134788974919431524046935587950216858142
+-0.4302348750536436853767752212077304891361636801177679666901775557
+-0.06548388787215626885971146251934855059017806534963115617003157257
+0.1911031215178088094488640140802007253494213892471707486908629466
+0.04524751634490719501230109883674608756741975505321511051160810143
+
+-6.4608744686383887438561957238600517088653472036722314026006522 4.6961993337009269553920937576401583820421685799266139250569598
+6.3078298219097506789125176132825554613035372599772772919452569 -0.9950602750995064746201203109002483376100510259224576855146047
+-2.6195325919059371488466457065334335173881687129133570606693649 -0.9889612364991775421471314420297572968746611730788171413990941
+3.577712371817730723923227832822667783299906969863397139593835 -1.3601415499296891355432263484645376198416899811134574974435472
+6.9496490450898112270203880589025285278922928049272640258820334 -2.2622559160976132058418857072858896539778252413131088319914674
+10.9924487483533112692270481824649417757542065874367612350678829 -2.4617644616976418222396294211200038949024633411925640832337682
+1.4606323100571924155657301200759981485852120161904445460986176 -2.9685043332064137209356260257896181818319088422901901483705382
+-3.1235013932541411110533288124878680529808698825332593671491108 -2.9126154085119350992050277641140772316058875725975147199137032
+-1.270233127842326360553206934311261970202419775883968322823334 0.4765847948464714690435421350620954409803971777649160660432351
+2.7545762410837285024412321202395985927313912992387965866885902 1.4118976294635059030373577424453986059038781258530090659063431
+-8.4030259518253682759630102956862977686308157487242238434916841 2.1598893160599993274400583787571910412045124403574009016179601
+6.6184707156972537901007323111059773557888578264775065557398571 -10.7882863438551850524679090037555347219090506900859398500798865
+4.068022898636496502215835301547828784931363866390612675628113 -2.4047017202871294321943483205642431796872895781670462411556563
+-3.1526552582517143195431733160047909625455726920571703787569948 1.72244222485945385272772763426003406573995593308345732099505
+3.1310689262023047520116059895614739461632592468539775064954721 0.2727574498251428917494210003015159633330988988918977699087904
+-1.4960784563952536532513703748053980451147515112665396646447224 3.9099681064256600627170497965781315343941946603565126651210602
+-2.5347545639482615220446871924843369772622442238896762736398078 3.9604368050787691706846755853959319207075689750041906345866144
+-3.9015034297510758571550770250670382822946039235305454588553971 -2.7835275806709171409585950352481761939624101987410673928424859
+2.9551980505908917601513364241972570840820441981795444993813 -2.4626716344465069010098843411017558722921474101414746215612661
+3.4849882076648812530863979549385048360540878594438334791768461 2.611117193034885627572502330028100612470538869242820085061184
+-3.105236809970358852135634538835850680364281067865917062045219 -3.7310812820841888487988097984346599329610426009721392734893476
+0.8904513341711976564656520853997184012380088015951931330011228 -2.6488096101889017917344094169791054583461663275320297065506345
+-0.3388704604116214849814372995296292979556110074471156531584387 3.0978651896903349656266905211722066962254948313957093410927145
+-4.9225321691415802856646718810381952894901354956776792795619512 -1.1757881594970097561234158762370836700352111729997283741086221
+4.4699364420123426970363433197542343008156715038803589455758631 -3.9708103193527619474503983162106051127512282878839893983448819
+2.7028476545753199128283569928681825925188790401964855755697728 0.8014315473838958881098165886246098506105105756068061766990961
+5.22910806534000562774493007781127839153852084050656098357753 2.6719155456893619186320435980921876644016310266741980831597146
+2.7920080498062171327295304398034149372399876546401395258572519 2.5639886708175471173426653159520404301205558349991764418730828
+2.3583163742200654414483553316440442493463713163218126925079977 5.2012542997819617128484884305791776669269863301179843674050108
+8.318095943725714042466215783969322602912952958639402431092961 2.0514482629059555327663142672843397823511995072143031298748192
+-3.225619749803778043972148765827008040960116341001952237356436 -2.5097397757584089713458613263348646816773448213155196036831687
+2.8450263579502948894784068536152378252083284541341424419985297 3.8501252208493512773851426944271471870349685957745802598080288
+6.6602756789059361450511320006617074734263614420785267291219533 3.6689374953405411198552873875547169249477892637924083724926199
+0.2794264469575887906748201340473782633963893740216177661689015 1.8183896619531425786687932390094200155009631935086081375064918
+4.9566075740256159298095917237621178071141621271664400066815922 7.2213513398625162107655694147519468752565959063305064365904706
+-1.6206755280810762450831167082804842245341838066852266206854256 5.0027441383839234081238740412289684577388038442971304280676822
+6.1075566529714280296910310222278200926583244391481836064199137 -1.6292998776515256023875961347698896883583386762484777527386054
+-7.9181874043793432774207887953871677233612734421379452450402339 1.8250404120465920220417893704435105916488801654419165580571612
+-4.3723798370731582120337152081401753596041770692321508566374326 -3.298434782046257451526425291469848364341949664371718609418901
+5.4192062563816354397731485512751207652071109983162846565293781 -6.8932393988105967009816799449967877983069763483723471514731276
+-4.9583305548207474025767096128382545707437377702826112124672308 -1.3056862633337856904648640852761495389704038870195362932207069
+3.041555587406730136912314684347835470744714699448593814431531 0.3678174104411518409346479323367584098579191364070805690335896
+-1.5676684139678970010808179592179292368054946226864748338146097 -1.7948522986541170853216818014085825724505554656886302706745306
+-0.3378105885253626434970351247468788408842175969294394089836889 -0.5751731223953160846631623464249563850635469949401123102049236
+-5.9387148368493912824402112057628769097385209541679536904097616 1.1466625741290617253209097801083774928604116749950744844181638
+-1.52196825007167813916546474486442407697388254815575281389844015 4.4325644497623223937557364961173923851584099541356729367474869
+-1.7034026008868291476123086617532129676512307347387902169832313 4.2837269656620749691402497925370178672385746510222632862665847
+-5.0550623426609613812782019464670281499794813269603645588993806 2.9231379321827260091114391286176520424093627799504163954652766
+-3.6081415886120998735024016047584866086730393231167670321131073 -4.1162049027973579219864302515192819432373986235414427084829425
+13.6362583749257462850551863589536803480749189479913335418164927 2.9756951103495065413288932750529651779896877157388081277812671
+-8.7170249073491419042106791724869955291466359904533603036948711 3.6883096141751329043513959008806488901080000067898033419508115
+2.0222924808236083419059240743246591126419848176703581839112951 -7.3132147240290126498566328041436678870664889346648070335498414
+0.8728741207158331790158355475399019533558982370803125839991594 2.0241354688720483342793932245429363006870210148382801698390175
+-1.2927194089336657263284585415034146710147430409603341242853653 4.9834700759099257643592900638496443303880847054306456880463593
+-3.69940146699489871894586868275814925113864211076485439986458278 -1.89647105971174089267865701017489076980844594337875762839589795
+-4.79530968124209425485052145966292630285889974485326287728490672 -1.4087044711349932529598820180194966136049504557421709517369435
+-6.29123478217779538497062145343635012904186787322768711661601677 -2.43698930387018085860042210474246611936938774909746872184523829
+0.2087893251750190331489334206278639169824517468681967130260748 -1.3536590732538610007777518429651058034886028211541329832421501
+3.2483449150767204519476329242128516600979734370826904820550161 -6.5399983976224334212973549364477792170479733108579987027731768
+-6.9956441205087571615466752701978625551399840958199391586816885 3.9088231373880739806473423474256237940243228281150724387173064
+-6.0071700290869504805243202020148397243602105173035846861918714 -3.3421834512547591527639141468206501860748336266043762756790148
+0.2017998469433513253340497968352052229422370288904313862998544 -11.7158198427217554440157343501649989106321248767653280747007271
+0.5723190286882742663698478568897304295583690789353196159563581 3.5553411099743677934084420089684267454715962054227630466595189
+4.4566276495533968553644545092700921140535845858644019089116993 5.7144476407172941868814796519557448262710005811834011765545303
+1.2998100035134607463956800708258376000993664410846565504346658 -0.8127780260555050979752564421100062752179159682731469319621509
+5.71536548469129713088727910133613375333118094866495197129567342 3.81934674367045119808067736902042657697743526940740182685609741
+1.7910693593688416584669777168668289748444927394047768535338104 4.632874637389625180931600406613718615119945692461945581085383
+-2.9319907414124193725777380458650952782584111184250393122534256 4.5123347109911473703926360577661050392827702400801855386506007
+-0.8836375977254058860867380855335243285150877783769472280954466 2.9743561556595404122281381202152693964999872424598596437959102
+-1.8207595764512624984981352317364436740687045758383193619234452 -8.897587382606369694257927199254406892893533321674406377344474
+2.6790231788783744842183228789479879870897095817288019813411188 -6.3859752582946713050428539412303790884557343312905430544818844
+2.4764669662704193487278058653996559736467926356918773070195021 -4.1028776737053229638833404921982131542551906762951953307895858
+4.0099052801528481785016392638418615942259397890271106531492674 -0.3325895668971449642034307506263781680032253461068493231029118
+-1.2464770935343237282025666669582933895525945951733070849393716 -2.427288831159071858197831034971018017602027014575510533857281
+-1.1377337725080819689798399157504040062915639240846866155233505 -6.3263959850181809524025376242306994365706242901662248928669326
+-6.0447856971770776811291705118411179878424545039135279253492135 -2.3448816854597173344828203186425252806998497710426467757360587
+3.1435487944121057042371483493406615695084708605109135313889742 0.7539204478435333040879386874743962129909578905363042618781042
+-6.268133411460957159566774942263770075928321176453830751903205 -2.0748180675366570075295280352343154814399779530957541771300679
+2.2071322197902714413123647772901385838283595143257862839497242 -2.4601421150067196419972208337755376832630442442959324440385748
+5.1907235497467307290590665609547856693474522576787706901140134 -2.3374580597506844565852193883289066879157880896883554395695574
+-1.1867868980440834316437288535160698274457621777388618487411223 -5.0163124336287304917821879531762108073729522615628992782961318
+-7.2013032429704793847411122412693999258099634548753142964557585 -2.8227915659829470430978027983761304035542975246929385689700111
+-1.5273309557555682683258021768513230446206783948158524497545148 -3.963818923475885699115569218098608000377977577765403818720581
+4.4163659466890042011234795949611433407771075529225651369697114 -3.6357936846625804284898873639633525351582080114825286883564951
+2.0270996684718551739687379687105154631259485418350023209763127 7.4363007718462311904797624867640659897067464961853672610327451
+3.2364857932245613652223795610504121795889600121411243751689161 0.7334150897983436244379151650991364087162566137433752978340358
+-7.0023561735936336533975603858018671899356619014071431776836824 0.7631078362170642112843967641733811504383031732390008154342333
+-0.3523739996882535656844347104794077630063468711647741370077655 7.2954428584925927077293439462837045056935115058973154274178512
+-1.7606408186194958126739177877744770157911177348875245787207321 -0.060343349695770756134893265366745143306355255447093591235262
+-4.2597595687275977939486026557715810948760984793080354063616499 3.9252314816044713021197164895742447532773381778354168642689117
+4.8611023905718789086590560481195383668869232831152107590907008 0.9730455114579035857473081661332435916582849955254295633208575
+1.5315585396899640482816276736647622919735272537330635273023664 -6.7252954220905359846978481263749014079047666735709865931804119
+2.8689056270368878809774225544997752968480423228079280651689561 -4.1753122822000828351428531088901604154363347240412609226349696
+2.4326713152251395297059260876063084038982444392187627522325838 4.2641322644491295178629265483087639838455930943408776166020628
+-3.289163648969469891001399555859968691862367185506206061600137 5.5121401344726092099320580818913307428033575042764763819389704
+3.2744348704036206261812531596201842554419952690613882472252196 -5.0078924784359639212272356382526549780872643327835788631186097
+0.6961823340599250530450530464923258181649425587733020105954346 -6.4722304575275788922601504570068033193132737689336039672587704
+5.2695666762817309468254658583674715447166467170696362376724275 9.3334337282503369145972034653902439390038534944004370489892718
+0.9529966205602271930706622677813663606730655040437246656334263 -1.345768757520865488007892331668603852901864777254468663328025
+-4.6127522322688001835935536419622561209845092179983236002062989 -5.2857518721108482200438943129644477028980252027750202051949198
+
+0.7721031360269444536624854764846278079390436516442447307214583713 -0.7605582778547942408060351317015194879473019118917060721292547632
+0.7113282365127787106295924505560767722199840055537543517442585349 0.9359455243018989598720894094889086512450300947660621306436953491
+0.7679535856628120283990827155162180966010981503917935490380557142 0.64033297030031448665328828110131678884788143990971470968562862
+-0.6127602430473631495393181955733023028663546816025211937039540524 -0.7566145378422368715122716757726615136162685098609876740055635889
+-0.5944056790460496081717996899055920305811666877696698395774078378 0.498393464867089132881118789295770940752838691384942740522239679
+0.9839367502424209997890558933686976016082869978582241397510153252 -0.4971948424110283155918942363898656650230845195141350175248779212
+-0.4548419343247805224460011391703079342763504118566706946966391853 -0.3682837387895926737476498418989480477365801929350913148252356807
+-0.8849845588398620212194475625021727518116463369860566764411889312 0.6148970507477253459184467315745337121338375212139515007860628315
+-0.2496600323413886386258990085306122333313701779141184118995463959 -0.9083524682273578446532722997799475788834527253595073048265657245
+0.2013567579813494116381818105314838610969816486807952028421948124 -0.3916716877161613504785809028033398517645549846406356231576213868
+-0.85858010457166611374976182888109386496982051035674989499979384 -0.5193518691808852117378350732261309854332184624171433727414006814
+0.7326702292582058588316598422918662773838658327971514003421703067 -0.9750431258817692289559363598684739941265076062018304867776204819
+-0.2697443704573465465233716116511309018200366900116819867580635278 0.05005097085661604605086728229374112382053058454731767435671635371
+-0.6468087813680422377672655136982917947328505318460482424201962 0.4399150750505159978489133507713340072340352057744402647976718275
+-0.2812302577494115409480047067683469320314228801749259890701395474 0.1872909367861505164718492831692222169018789408412172493435499423
+-0.02167413194230472805204979364706614220652157873015883116130884482 0.9419321039051109549245680082622391092246632631231828777233002149
+-0.680894955890704100546661726757747116024714493408288024374190234 -0.4287041936652777153072881590344721321081952456510997660597381855
+-0.9306530725185795934583927665790248017610038861531896668451002839 -0.2333391111205556198207256592076331117879880842914267473885863455
+0.3319152007540851906913026983763584438955853838764895977762668678 0.7889477067277564731712862630611699647549102063099584994888747696
+-0.4414898031680223608932387792017485771255689761890070706015387399 -0.2563747285446000361218237435955077669028092056157149416120292486
+0.04675554236208552284539297942143061834219393972333359647545914081 0.8211574497098423675796354902233745259806437217163965161734702361
+-0.8152568938325646993310760006867681539054279301843202148958871677 -0.2430326281692574737943057410600918611450147916626606070615468027
+0.3952163240756655529212705355453418848569049122249531536768131848 -0.5566744269539672218404388199827460990960984415899809143036909069
+-0.9395163144138835125672454933008856593503204403133472584898229717 0.4524110448637644360868388875231267640338311624103409145041788539
+-0.08780353633292157461769946866167963633505729824902226238512671868 -0.4077100331640054846709900852315956380002910175183742932154068317
+-0.1743560068378512679152575299947443762504689480476570621749324843 0.9925432694290908433525570320250227385826836114793383624485189244
+0.6018835924636782523215034400201993341434060856497418585329625279 -0.6845441772530325736299180977635806745002567201737916085152286412
+0.5094537464059880326374352490064905763350159638438638190213421193 -0.5689275448635581694575383584343021970227104177442089801706330228
+-0.6412882157453879879998117648467144628970706782597054160685555631 0.3985567814775143901221253743791327148945266133080683203695999962
+0.9017103216368149546517732133490469846549850682301607701578308401 0.06961382826101090949578301124383292455559947536661707583968975184
+0.9631270643127979384664069651403286361478505285019531813591892173 0.04307050119059237005387541827491059927895209375649378090223139587
+-0.6210835173793688086670082589175993809833456274087668762475476635 0.5849881776459916509815348468661649535409940486756497653761724118
+-0.8137281645240375388576750044830353268919925528507904843095256157 0.02943622593745917222898833754618856585348471594569686881397428726
+-0.7041297500866612607234884784407130317305843364144413223065323821 0.3572417013316431962026919347150511042636763596269956578845059238
+-0.1235721593345202217795554759876880268687368789792682195280803184 0.8246603472400295391578505724317567517180656867730457579866275623
+0.01793996302825844948175557573252934185711456214972052895861572493 0.08267470722577286001217633724236129336011575576077446531397711074
+-0.3411596862218241172328579047617234818967459872060847679144866809 0.5296493544860877224747590127030477951987987258874100707895850711
+-0.7379746599220903325806827424480469595800618414934950958452657346 0.178161671839420517570934964597356447578898824155879129858818805
+0.6843546378904107483368305041075808036585650068151329599810630045 -0.8633908949968827943561744577901901026376268752722144571223670853
+0.4265099420399003863248167494626862205659560797404855195341684806 -0.3459820993240706010475901311688197838023719669999227712290509004
+-0.9874151891964456486571993218370826427302121071375833081581536189 -0.8814262497135981437569523940906532685397798861799997656375266034
+0.4601637140807105378191037234478805179877043129140064777542238544 -0.9722552720272006984678084914751283988556792015475269427349942943
+-0.4841039802362244364267157134690841461075259779700777041439742307 0.6486167889394565452584685154506739738504706411589692034776454683
+0.9965877589863013394561112420396792373833365736836351278348301833 0.7237216114456588829885327945423834052953613010855527824331391861
+0.191567730523304776574190978829765313731471509331205854313016986 0.9153832161606877637775414865990581395464326012246760580785761313
+-0.9100049476348622207723944867294612891098821253248738836563459568 -0.5010512652356920074204032205934276172215285762480987760943959851
+0.8085565025927605798160394591787637574375967583263627553971120289 -0.003517119711452846559277971844364606295296520854275366315952866112
+-0.8851479413535487385573817957243936843534909265401263726020814395 -0.7432644962454565902867854377146609433353697756825593784757725371
+0.6064591258881136876029163103297147737049475826316704311935105558 -0.6678889143320625765336213759043802181180754155696893060399849702
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.6231432486376980435414857670687342821530306865222818413703487444
+
diff --git a/tests/data/nfft_adjoint_2d_10_20_20.txt b/tests/data/nfft_adjoint_2d_10_20_20.txt
new file mode 100644
index 0000000..350314b
--- /dev/null
+++ b/tests/data/nfft_adjoint_2d_10_20_20.txt
@@ -0,0 +1,270 @@
+2
+
+10
+20
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+-0.2206549379852138057578743061470069389191225157277024467333194435
+0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4643197195119173309525456044702917254373982711189458917859034631
+0.01022750575332349257722449804129916311389119097299090643512381743
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.4700775714463633978511207403685111986859425845978719788126486235
+0.1092122305172402888258153501556024641240468035240884586547566337
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.2642327778745240757646266294392459562801915916132871452102135091
+0.01032012051955487309722047463966310173477870581273801739268254951
+-0.03919417871052420194526378084573471772000103115061608042162915008
+0.4969744253080455744694825346756894506554753184704475582968873208
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.1729154576995603929033538546168666485286603783333729055438208098
+0.3914347841983986584093169466825129403698312444687581041683071856
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.1313277929451562487082545713868668183502620330575886917609655136
+0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2416500872464844443813651159115503866293289962833710383546455749
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.3029583073136138265829962071140439545004830470746425534136209257
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.0908567130718900285397128207157625325081936945730573057287310191
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.1013589956735152573510406730689184973691015496657475510126506381
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.06875288804967068748620631495815812310608096163779380055154102558
+0.4279156393274057309236852245921689139491849071240754852340002326
+
+-5.1274677449930708425969343466178361599134652361791647908924618 0.3229102885699982480666651196217564568044622778860990672810378
+-0.446448091721822026291899974381382315989154142906235975127267 2.6158245391670119191862747643082338465728395625841582899886267
+0.1648670256752413006721775173500409277853676124751518710076355 -1.7618934396183001265471941466153810928120851979083524993050373
+-0.6604332188071715782556979063707928804277430127156396793831372 -6.1997823249711762467332482844892510410396416809330524260592231
+-1.5211809935735048407294276797240443944209132345609733601906732 -1.2984771561332262800249197851705124943305082093711049576154477
+-1.7115526911754630411289863303787442256202896535539107206246467 1.157463749571202330102875034346738185769801102586201288947922
+0.273079045215218790856297727404249318223036517268547682332831 1.4591247250231522622602522850035455116421873799856937667403336
+-3.4948245802959375080091629983953340987603536886178499498297276 -7.0052078249945726960645042123814438334535660904576585423090147
+-1.4055819516979986786114691967109229793570071687691762510527685 -0.4156032176044614728846242651490509337919051888522072470120269
+-0.1893850050116626053595883438687538687428939969717548043042184 -1.2177667105070493454349490840137385405673011973908605482696255
+-0.3227247947975979136506948174532223662028515133381826727703173 -1.5454863231455024382596236076233788716975256791095185259301658
+-0.9765461123621366087114699258001488213938127059063367139575901 0.4514195179658447745811863398809106568714792025469309265716599
+0.8561294765516660185649896302020328387886038372575558538121666 2.4494681973495376279684890995526080893002826719030481590740116
+-1.1222549453995530468647920155195853073319480005277605539550044 6.2877243109122844009431432161499736997306168869286199709208064
+0.3231574748920481490276161746996480981499534726326499798822119 2.6282211114252295796023006770489505214622446009914733586742535
+1.3737524919400322883855040246985092964933973580906522816024874 1.6404375773008799717533002323946442475243716148384076607999784
+-0.6873664031695142088544390976762698092966009518436478129313274 1.1433866475242885209455568493931003064607116542811425986982147
+-5.2317209348200494896341126932659540225316883935033650962162661 3.5463123661457158789120797185478943467023507519892109223481231
+-2.6396644781026714300276207214309199921639699507677747802004326 2.9886809593002365890267767405230976182024382210315684569122577
+-1.6964016767414871649610746295146446763839941150044856906061511 -1.7044230849135602663809490680132183944095069613704716453803278
+-0.4085878953594119078916776579430261462890078361999444349308867 -3.6274709186058956616429930405640373406460633139460400065392221
+1.913613970019526374293740230583638428732648847681690072325858 -0.5526330568632728560093959853199138330789938008568094922406504
+-0.9551023716050504980254955738828194952653667790652887116168998 -2.2435892859014229604860516513291473864590622937278460493516511
+0.0484815908026825796791000738200156373504675972089230155409882 -2.2888564718878269472110297479035849231891845407429535185075026
+-0.3322716860213565708947503401643065964909983218024919713716675 -5.6011008782467780434092205931911896151862365386562496597670767
+1.2296807537190168080020503512905773220462894474657780688289785 -1.5600032139333852847346760166748309655187287477989747143376638
+2.1556788902636052027675540744330236973511861820723943753474529 -1.3428507309470056806933221444458723000830318866410593748876354
+1.4522174080274047807404675405299506015567750900786076428777024 -4.6375539819631297620263672308049276060102785915903771492150218
+1.6317973600587997038248628694044304056784872172570725122589786 -3.2175795015791785302471736103335341500050423282121026214862422
+0.5849486782270526930921615668495606074700149662020443796075888 2.9931670713724536615043676846106551462838241674353855326295581
+3.65058042069366532232098883918451534618108419047016780466802681 3.439003548639643996977911547634966715454009460953644212833535
+0.2589502858298171641636282740703202933528630877237636182802856 -3.1209652699577617582677735925080471175101618690969009012300521
+-2.9477174798207952425380477367581022689448738244540530795665002 -2.4747743196888849330316817262420169105287533957613053850551086
+-0.4319492107418523887106542772463272917889535551780993798729223 0.4826067017131033090613871143247527071274027322812753953709434
+-3.6033071455645955007177788297920824200710797370482918644510454 -2.528773063928012669658141568620656068329858061950998345448573
+0.7201266178268493590336410020812256585414239513486118293711847 -1.0874332562562189570153954284791135114499776666712321432378137
+-1.1245081778247243281176264840624875708205830080058270081677926 -0.686367560113520391813908924726547504384130120168541525299356
+1.4557521532832252364170296588773536706162742275434482506507957 4.1129915269981944863865776861841200610935219743962443611038691
+-0.3743530327691428917838239313352192354879312306814122453265085 2.1810638911230694418431251067548557764880389768564615633968761
+3.187450919297110599737271220420547621147363887996525885312409 -1.8629774336632688939304359619201162604169863392501876162892259
+-2.8402571762454707114668688321354351822872540094388221207186611 -0.2116184792738200296213375052383629874538383153493991676740796
+0.9672824675729782627785663937997807706669020112069895655589075 -0.5037113611342992346542021046650048761065607831147305492410923
+3.6686825755532015558756778404111837440476588992927386852373632 -0.1077621984779701925372733955276377530296552869860296690738741
+2.9489094186104070900781718127904964061038002209689328671475008 -2.7423308037578195124791224285372610817679148141190602721628689
+-0.839181092785494615590873448537033822052389453835084186402101 1.3674854539872467328488365020898723708277516346039174401936395
+4.6632260175508221709714140339680980831477002560416718700814833 0.5285023205648595730851863799535908124819112761979004212164226
+-1.0445696509953643732269472438340006462016095347363129097899989 3.0205768216174796540600008298727506535434347862238617825239219
+-0.6609637209681878262894586501138854622269850980230506108464313 0.1180394830807214022357182558090270031147504380976567008216049
+-0.908307343909891062870639609606120932622832720012323462536223 -1.9423029370951286821182205966310555683108317419337716214689606
+-1.08982945631808992571445185098452318340680891036130792770172202 -2.13192020431984053125728333046706531852647188484247444015148477
+-0.05526106364352997696967729739696646330969993544892626116886122 1.33173119729863414795415289923025633285694807800250059594538452
+-2.41361790714352964253720219400597042220494551203287923371706428 0.1069631147868402024119954798552258649509729091734999477915759
+0.8969328667250956162656362501261022794365866052872075774841243 -0.5568618710587608412514870300086848067840318082730332409137413
+-1.0762376496437810108968021270516509914861166720061867343725576 5.1316338162827296684049169039208377447803224726154016886054878
+4.5311207731110689033445112286498388696687627216756689359220702 7.160060369430722114881793844622848215089261442585379213624079
+1.8524634193004627178356787755077537657055550490458396025741435 1.9730449624369553454669103097498164905184171539935828750168849
+-0.8816338629535827054484529844877581027096121156187627608364857 1.6354378036286660143602960087138105332115837201352879195093899
+-0.9521443079062342916322979154491031332222018309945639387972313 4.5934590586788389833335700158130236062473449452846667197863514
+-2.8746626135998388440907424869829279367800419409213766207567617 4.2436713299011361993285025229436440641099923438833131648228745
+0.5372326660922030866225989016969837088463387229215052528194216 1.9514668088464617683022746214496246165058690172703977886611044
+0.5809791269159792057054810838352372604900220627923189469935444 -2.966528117151415676099178726107230005308857546764472765289194
+0.161722427022343526838948827117492895020762200470876439276967 -1.2143030346502582490612639559317655691274010085607525898785332
+2.6286450379560851515499752646869885110602905279177902256647438 -3.4853640297749414147516114702846435175352370771746439524763105
+-1.6434043119091891224351149784946040436125044847473668932938887 -0.7628923933866484345647807629728097272500963045241555244835828
+-4.1138042994833682556128885675003712543843429132456253309619886 -3.6716004871053834181943593197106337286881235971492266108361685
+-1.8285934411619200309360111709569701576250274881103117166079478 -2.7264197045178176713212946701406514493020103553657051797007544
+1.9126385830070210192058632982030331772038814053164868121082388 -4.2629621713841500605734959383872285925470252718302519867922201
+-0.8513893892827149926158061854787760070958348327319061902060623 -6.24367476304408268768883999416592262483863212516896459862883012
+-3.08570590236679546728860518229338131390421125570468170134764476 -1.00454893648024582886786329342099052894618814518593986056692423
+2.88630038396052746843755861990238936703134339154635129619396849 1.95353462506729132106153881278998306146436258317669165586529952
+2.20911002766390023478336121294686474701830039758920879903260058 3.00963449071485495395652815929271366523034703978029728430950934
+-1.44603706616275879217770124049680841223231460999486825917896381 3.61705584179809538194690892397058035060689522430341012317187191
+-2.58183927601454557848490197592559038392608116132815359354728503 -1.36850717085436055384225358347556654006436624598785167918007985
+-3.5985257000929028291485804106704853095775321064148049789835499 0.8209347790239406165920928185526609868488778417234470207506648
+-3.1862406454769550762158343543090106170615287986593461362982141 0.6010149509083395312485510583983423554938015592747029860489054
+-4.0482367638427708348563305112653515485979991821127173056744495 3.5099460430347482650563266506261868658400756251376714062527128
+-2.8200870598750779559405467900696228045092775717691738227196801 -1.3851420648773997742530540887810533698144883262719653525871652
+-2.2332107611931298829991124144969989413435692405770025876435073 1.6803933215763041533305462630398401685129008950964585853495441
+-1.4221552842144879946192198883488496157202986924347163692993208 2.9345906787500284376128234274245987759803737808710401626239617
+-0.9730220520571533780590242878608866302437830681894650167230547 -2.2998967991892451474204716158893690102036186435873600660590117
+-3.8551378134969345338990110510953490247636685694282169384357843 0.0483321222470002808174244388383333152998258140108309034881086
+2.1525799362310958216465248435604160950911337181471471283085018 -0.8808770745694091705647866879276110207601505694313674953190082
+4.5127931831077297195487399310043849990423912668187914301349816 -5.5312190543061429899668559065492260271456432883889439031156749
+6.2329090453883735846635586918307330532710387778561408434199311 -2.2050283946459087525814139408058544436202966224384649533796051
+1.1846491012601041102378617852670573681467636090957702454536582 -2.9613240282554340975118394757362468437942091974973784860882968
+2.5551479940009619995723836125195241524808806822767143320961253 0.9305532960633982587375113977507279872792038944029045017994353
+4.76717058809797008900517868813212138574871162523322440767381601 2.4483580396902482656229821589426143394095494579645611798638473
+5.01736852080464538671888217971345076954596881746939686107090003 1.53323987098656986968297788763556393791018046983835139380868949
+-0.606011657200912654443687071741821164521285319544410805189171 1.03065137914045695003284374655082321554661130876139052013359202
+-3.23406908365170769986156591359478643798503265743830485463940048 -0.68150175458898467892488240593515620690386549885982433407215036
+0.98337144770175491989681876976692424485796106546309430039462684 3.32074710822963827734902660588925057734220781591738824736420321
+-2.73626090349028121522651959420096834610099472865529216587173608 -3.02306700368849094783658777700754071878525015958448019941956816
+-4.55384372383975008368905934295478329493623107577534342390798626 2.03908207116871700324717599603031989578340310074015850430995582
+-0.08143871965152999816914314362549080662748138216687174846845905 1.59521443923437396672993159418908735754023270556604444143094149
+3.6917191774138371238337121822077879048338258056759351032689967 2.920377840684673587953626157719051301760919279130803682355602
+-0.0573932355543326361572814286527348252366279359438229134408018 2.1938034807534178950019837871178012715271712993895693474817069
+-2.5804435091827358828566405216905486983440549791409190466093942 -0.9070713918352427555131724827005383760342972977715668435172334
+-1.8299580318644704497997275944514175983329398867903823355417832 0.0547045659033960879293883826251545602427893032052102179637405
+1.3720483594303479025104231011106727385042794986764587073231177 -0.4752999041042586887727389931903806827354464832441315545614873
+2.6590081428483040920037281302061308860825530615090656522566146 -1.0528499602851150112668351311899971516567401705615694303625996
+4.9815125269081510353078870386053073649172752162516362746210267 -2.5478032230146642417718590145183035814215150990188936913434102
+-0.9664715109287710544794782115946968378298541336729385355442805 -0.1922042158505259283836219152600376741271900828840877399112618
+5.0358247496558758762401017317443418730487906402604104055901483 1.244229893135672182885765406169073555849077153808216588847646
+1.6063363424489629887692284130078835592209324062308139293100155 1.3117158853668888217299621800204948465552899585977294139950223
+-2.0654294891222356540603839713553140775331287038960004616102652 3.2404669576154493363694716788670529609331634685698616533337994
+-2.35236369260250657952468151006872188485862839445700839596223334 1.3363679334562420561699838163242296325089066408036579394638907
+-3.26761364740202329586921301637053893446841883377623462743783844 -3.19160526990806980050565219762489311923225318826777869573687595
+-1.73297796426411549364670984255447811582076733915210373492367025 0.24923564206134765226469096288820079787291701971481006353474508
+-3.98157309789713064393639352485686740640374619137224255768163479 1.04295522497818428251294695055868664128671082052718284724476207
+-3.97720195960948726598394897077877881955366106339358931628522631 2.76356116649739144239689940944855910416872833466044261538163519
+-0.69273620291038926726455982040262810773021395371128338842658488 3.65049234461408652300844952142191819782712823381059172308151541
+-0.13516689833903513538280503600052450610328949593926531897013826 3.29799739965861933835887636461699218446793350528235118820266617
+-2.42793515502395853222842900687469738634636879430220956790698598 0.00163156799813816828743131499168561690883475392078759062114488
+-7.2463520897188969558084777135251485758766696455448311814501183 0.02037950480508067159985362065980435338410363428214680157261829
+-0.6036569340078630371505369062054992003995970130946152351971314 2.29128766361333783260149740966396101163999088913210889993007942
+-0.15848756719517578047217244915369425587355412113728628862332802 0.00176290387352476551645362700637585162998466658511529031334551
+-3.6075992292566625189589848736691152145288359388725089003498477 -1.6107690981355383508990415308862608007587538021372135365312102
+0.5719627249865804191566380056408073287504122758614878622333265 0.4594851091065595939185929052234455485699606023008161968993209
+2.0141438596559105195633715921297924544435423246442816321769289 -0.040914464143869888952161324600985604716700910114995249059341
+4.6631171520468432830579750799351966484703114249349998931110881 3.7009192533809486125062481310193758145021365008198160197833207
+2.3293300592672493106631141275005931987950583060639989713482469 0.9222909626260533902089662653449667817410938895950827174679113
+0.7998102428150235322757300701349747705868087372606203685886226 1.2720058614340700417603227652784544620047445082410932201447571
+1.1830074725537409484354102623254601121505866477496278543377341 -3.3946554395831848657462082077561339254710948581291926178837314
+0.1234300876985112060831064809263119170785848572005422923680116 -3.4945573008404173599327427715298286687059042913133091976513446
+-1.2629388518999484647533372589147567942614760517156973902870913 -2.2250982462142919395189246045988094182775102226285323217606741
+-1.7085118938021733196272739166760788201965818047898261033781903 1.110726748337471581187460890352171108774727065084585192485874
+1.3819453599518382222710819219270855681564019105004343662614705 0.2804109843673077640145536130666997330832317132786178283694123
+3.92376522201214833736287486896103789066626487191371994922003842 -2.86604784495719085155360459199104152759219055451595810301886477
+-3.50900949439465230499569843826282386926884564329213886903963488 2.11101531984156800005602202892559153515446731313870819918506678
+-0.92675817264592972841922330769771880946626457716027450505813354 -0.59047936391757089791101244004385654959671940713149972381758831
+-4.45353791997849643225200946938025959780313420942550921706344715 -3.23518173667684712437066411377500040725468010031982981480918842
+-1.17556422392001924851973680156247726642537880941466761347127904 -4.30875550665074397354074471860289611713162069443650723385602489
+-1.80328666948564245679306046820062848002894995641756964308602945 -0.92988989828037341641260253520914052296217839192518384997766149
+-1.0815401855292237460328725855210308053022414959790888948383311 -1.72370566797823588845729870217928004415299247257746011522274994
+2.07702117060126394287011161445258425705677457854939652888146482 -0.2919047789338719775657355064582123817422158531361173903346083
+1.3919281534278288846657836309735579139404724662599476618086018 1.4100351013173992133629353516409119694389594473987035619368572
+0.9474775619746724300235144118550245799960720273455381363637268 -0.3343778604584314877096209662052700837219737963212885251439662
+-5.8839504378235285460032396034247103508191135917463238735498783 -1.1404231602286174786619084688685512698913411424852474221143076
+-0.0158256998683288775571205656606347010103776081833067163321579 0.615556469994927080358351957985233311397796465666522807671188
+1.5991798191596206265873826577951245992372458952078634342244074 -0.8455444843523804449349215132961444794363822943593640247005209
+-0.0793446403260796596545053635618736151397394165435406272779254 0.89835154199520568326453547606461585301420501827049462043145
+2.3909083106133858056736033387625747139374932083375324941152808 3.2515577807483232266996683677174147717762981121822338322062001
+2.7190984062776309769021272937808128117494762079413254809523747 2.2244789086114959757231644726758175000256790457292728909015932
+0.8776072954048903409742430756098218939103574859607852219755551 1.1336835921129419308091374983520821799065289893804824488187397
+1.5094447524160457011225009934110594620319204878901131354615099 0.3209596224272065574893748378560962613075512503475861838552512
+-1.7502886327191605381306020465948409568775555556581838263248603 3.5966064096089645234082753748319454743961471645810962707950505
+-0.5359747461348899033751044446543769879170186480127082357476591 -1.1456511304771583303964729815267085847720306193712931218331773
+-0.439494707875216677479167986258243339041954709830674746217231 -1.237863774791592822641455626783035733583285800969737595515028
+-1.15769761711851996781857200763648642065532877580146756067056525 -1.30665047023645753108905061669369059815370200132583687597656323
+-3.68801690990846996560331086097094664642543649559777332731991234 3.93480064646706638234569467015670396587532592009648356061776089
+1.29637334706656821316149118253722970665488755981561704787144829 3.86669779187853265584252909739800438463533461724344804618906895
+3.31138078947929027537648408094180327880040508220896905912896683 -1.45617625459428313289439982521791658150784824039852519590171525
+-1.01119674839743893167321559338345202528731204187618412303751718 2.45382379122024415284075737628892359784152261010219003879426218
+-2.3053961787644992225975149077627897332489906849395505661450801 3.95304301196556700966885435400052156313632007235623149067557035
+-1.8202516156798813319277601587389630524000279786176142695392509 0.2733743489949979565381751709225705979988251319434378340740368
+-1.5170218204564321108419520820804790639467370881689732203705685 -0.5917001497377356536020713688722278512144444721084783359720108
+0.1040691944458124514751351110027265215981471016620559937650589 -1.7747481768693763983568422477017575369540075407577322019898131
+0.5337444320034929870110175671424977706492801767012532982303035 0.134822006705461273279248774455538315483664211550759600796198
+4.6028454571636114256452545935774393995500397271860017470851273 -4.3607030700723019282765822704798985364583556525359971893395424
+5.0624173291725590691720150125085659856786381209541119245465134 0.7334956652443975619620695307300119929744274707675549202511669
+1.3502462805776516432633482323655064783745325035689061376378719 -2.2915663963823636397136764649467342235880606552247837790239619
+-0.7980969025199952604174205644130990240101024546468935999798237 1.2141848474313251441977946302817959293481147292956065970564577
+0.346041499505655389125527229753014040258820393947576990361462 2.2681144347895991552614443398461415535414771473794167271708413
+-1.8467927843203874331755413229633239909102552189919949768354029 -3.8702986216717616688464776559720685695455141856710932450429135
+-3.8003550431623690029450547696344266999231382495338234842851972 -2.9827470595262811386170396439220338814260902162796244978208138
+-0.6322840487533044920874315723578923889614800108940131852382761 2.4960959092126438880466908043659719794586565544536027326666821
+-2.1613414845082695344783173128114330772577467297444423171426574 0.6645745274561587908139570905769151538104440519447674173936918
+0.2457686743697992912663935916498926616081095401948801046430962 1.9525214751621022224036072600972643657094115655768043019478806
+-1.8226234157793654634503611349743056786775626674411096763101985 -1.0514429502084603588596890417803907475146022568055213423146605
+-3.06668578236228911453943664662530054362522786406625825084319715 1.1171896914210158113785130970151720007545314458719461911386251
+-6.69118499955837467083751892101670678224648806194152334942246489 -1.31894773599062796913779794039337064535297244408818244473093934
+-3.01433218879278086304004811266531920826656612504980036486732596 -4.43036055079177512036983222030565515060982833883522322916627615
+-1.8074784449549465682686508240230650720908236949126660081273147 -4.1308498264563881581235618615361624617553390114494887659479086
+-3.9477697397805474635806486701645138584498470939910913048667499 -3.0535499888316812611985012618975960972443009405324390606132304
+0.5202953557814469481323670718219880250738099511648465723568781 1.8692307935411714622272522020593286461226296193248828391507921
+3.0816303794380062059064758455243164509997567255931219604784413 -6.4469912398006682262993880863902649486017121745357140587674562
+0.2133716787180563635927380847652008281946145674267333404140126 -1.173251273000236751661155695082572619711607351529114614847605
+-2.7259279938283204627595764699168889848030942022523199588119786 2.2526700748017624111801444195226581705913624410081577376683254
+-0.9780621516244425710685340862304671603646209790604423205373262 4.5222351361207468617728097736054863761713587210133629886355787
+1.7657151803584065558696215321465061164027182609556053407469379 2.5235009384881078288709879303149884465346960072462739295570948
+1.825351148238873374162847746403429139305968733163243674444235 1.1043144566021513413078814875317532397936440959298498046740606
+2.0204565510205649691999489975741599953774307931276385577011525 1.1879853430682404135176895602065011399855369092681442123154046
+2.3454189767522679588378748420149889579202796260004055198819136 4.1478873754557380045290124681689307581809136191992954657243384
+-2.0721935593019849826368721881024805482291792630459798111960181 1.7543061083701583090848239370183386939380003370585178882766199
+2.2350370625989434263505034961631805311504617600997075602593956 -0.3090753950794003669834536450938341124963530196086976196739335
+-1.2615424927183205557664120440218754516864196912478398450346628 -0.2073841217959362286268590174668245849980148031263866123399021
+1.9491447341634351446285310253467712202466003846678728362636494 0.3128844045507168921078720572517666234209522300308793218592663
+-2.829210565813333564621641426414491050558298086215528873330744 -5.5170243450275225650157319537207767924020255602725831401543205
+-3.6254029532526109063187576479095893590544476038745203073229655 -4.9221383043262558906904746546393322173869836168460778788407868
+0.8074363934580335400570361493240788056901217567234364032367863 -1.4574131711292631931725643937733932231299469514013259761516908
+1.6371415919435100312917420772931291910485585521071115085569878 -2.7816606530538267443457352676905904211298592028184933062552254
+3.4580195515160021033530202487458362910416915292398726537478162 -3.4031572946007399704063347581571936884975916881959419127171544
+3.6206839659434818294473885486350648501376537950799399568196914 -2.9037998807224052509669332070028059964947836723567712122800998
+1.8141897458651774467279854364786597043815122307302161368854846 0.6375373344101538469645118375451834754052273557068256662150747
+-1.1262384149285996431894708030226127720480115176465223269931067 2.1787421699904782344384646187922368588066895614546307431166592
+-0.7765420386565614491847204259617788979622171196867369870714842 1.3539134188156183797613252602983156597631277233107149547880235
+4.9024216376026397418441559096586771545854654193578644831361448 -1.5335187458371777820005327245595685699179473619991934570300455
+0.0840645778059716864681355587332581563214225133675946465287017 -0.8595375996980727394827280441323686530842241338122195400041888
+2.0214293602044406348537032328630138128741434045985004437056054 1.5660012069538600216295773497525743630747150089905725186428973
+2.8984984342781063119976692498022429862559031175252225825116696 -0.4216522792032871331874554778065581310187042155786532995439052
+
+0.5356506216935318567168964679980224448474954197740742721804425662 -0.5458569288127476004682590208265714990676611459841400026017844665
+-0.05251382922654688111844675415661855947948761360659425718759593363 0.1856688150172391527088040246433169286752829500750590071977203062
+0.9518095182124288782767378820155949547911261560251647626870735792 0.8193143821859564924477154245099351963436429074028089074430038904
+0.9956223852813107496522616247115213137215848581937907906567140918 0.4604487491339531156973853721884505256237012331451385915640611729
+0.6741052796006089834676571454955036801632897076493615121596900136 -0.8606535828683120015533980099014960687963233985081987928030018579
+-0.8697750560716627155371707094260289644371901052310063829991901781 -0.2028782443808202039078700152556584967073846417006795171717789768
+0.539462018274751480324642644804511358394409237082129058457521908 0.7727562160593342436881229708062656539223995010850938445718232095
+-0.4274845026027779916855619203781095649893449575458629944853980527 0.2216455512897554102911455213296037106714896153079531893725412128
+-0.8604697501072873707535504424154609782723273602355359333803551115 0.8060520707732849845829519568044036159880831172244051400087891596
+0.3822062430356176188977280281604014506988427784943414973817258933 0.2494984458565048492106180084187393465587010901621886528310783225
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.692720462930580375837580120465281755163139346395305274413909974
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.3484206501444620766420233468327938525050794194268200530793896515
+0.1944979336074391420204691208780533563017707991268605634570366201 -0.5365723013330725289094471599220332027885871668229904917249565862
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.4969838973904267472552603461634423875526049699439467087064029146
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.1099633225953045478540363356794430416477263111166654723490589437
+0.531416327611542071221970089939764430329756625444579259583169101 -0.6756547625687923165084584127259768184144567299620396875756298559
+-0.7793598342770851820561551396646691186537674923197586552161425487 0.8687355316920355914551191479618699998090617653378680974249892199
+-0.04982739811897050028189209963034074300557183166488389610036293982 0.6573707348942885034556657549189062350008259948442460481059842193
+-0.2152831478765442996690076717147867376683641103330644151579049018 0.304092255431421724386276285709205877741518261756931899126135274
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.6923315191547459490617708873077670147989473956854336908747033971
+
diff --git a/tests/data/nfft_adjoint_2d_10_20_50.txt b/tests/data/nfft_adjoint_2d_10_20_50.txt
new file mode 100644
index 0000000..3ca0e50
--- /dev/null
+++ b/tests/data/nfft_adjoint_2d_10_20_50.txt
@@ -0,0 +1,360 @@
+2
+
+10
+20
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+-0.3667543868355520941544575938257847368987701408778114882987979123
+0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4393343513885464893650781262914436001773705088850610475139449829
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.09724896680371957101023456043902667815088539956343028172851831004
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.3358534858018228008930174455675250519517010131613592135710326757
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.09206201328582059293609619426014170729486960607917988224801612305
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.2657081638057710356109850449698822151648783127222896297915845505
+0.4969744253080455744694825346756894506554753184704475582968873208
+-0.3896799171385425910280775698323345593268837461598793276080712743
+0.07714972696698667716678650997245420808817430827447314113682745907
+-0.02491369905948525014094604981517037150278591583244194805018146991
+0.3914347841983986584093169466825129403698312444687581041683071856
+-0.1076415739382721498345038358573933688341820551665322075789524509
+0.4098351732528003809102269734570294879975455702584035273166455779
+-0.07151629523327176189411207208538153350324597543738741809574504658
+0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2729284644063738002341295104132857495338305729920700013008922333
+0.3525707830542183854600907186155249059680080381975147205747395167
+0.09283440750861957635440201232165846433764147503752950359886015311
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.4096571910929782462238577122549675981718214537014044537215019452
+0.3029583073136138265829962071140439545004830470746425534136209257
+0.2302243745669765578486926860942252628118506165725692957820305864
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.430326791434156000776699004950748034398161699254099396401500929
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.1014391221904101019539350076278292483536923208503397585858894884
+0.0908567130718900285397128207157625325081936945730573057287310191
+0.3863781080296671218440614854031328269611997505425469222859116048
+-0.4384199598876636262124112488913918123145588604895783942604512689
+0.1108227756448777051455727606648018553357448076539765946862706064
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.4030260353866424922914759784022018079940415586122025700043945798
+0.06875288804967068748620631495815812310608096163779380055154102558
+0.1247492229282524246053090042093696732793505450810943264155391612
+-0.2206549379852138057578743061470069389191225157277024467333194435
+0.346360231465290187918790060232640877581569673197652637206954987
+-0.4643197195119173309525456044702917254373982711189458917859034631
+0.1742103250722310383210116734163969262525397097134100265396948258
+-0.2381993349353649959266405506577935293738035850399354993188862868
+-0.2682861506665362644547235799610166013942935834114952458624782931
+0.1092122305172402888258153501556024641240468035240884586547566337
+-0.2484919486952133736276301730817211937763024849719733543532014573
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.05498166129765227392701816783972152082386315555833273617452947187
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.337827381284396158254229206362988409207228364981019843787814928
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.4343677658460177957275595739809349999045308826689340487124946099
+0.1729154576995603929033538546168666485286603783333729055438208098
+0.3286853674471442517278328774594531175004129974221230240529921097
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.152046127715710862193138142854602938870759130878465949563067637
+0.1313277929451562487082545713868668183502620330575886917609655136
+0.3461657595773729745308854436538835073994736978427168454373516985
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.4398392223920449400907046631777097726644650279540499745251682393
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.01189153022550738271020564024560338180911293813423246023331802902
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.4927498363209993415423255652249335532347992639631937083611382401
+0.06403862356712929207278788512728706067982585049275341514041588589
+0.3358502781831149238206790069978103636181122693169617235357165508
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4189021546786846898713994499102361111761337212340449822195971588
+-0.4195634668605248660892165218851209239268844866648432819445044954
+-0.1952017580385246842215057574004983762128495778038110686132947133
+0.04500489974247188801035267400166477957461676904337052075668156194
+0.1798107471163638439578816295238259584468770453133038678573909804
+-0.0883406168383272939574326124768842541480299327543389567802061586
+0.3979314169915041735368106500472849935917247124619023375003704306
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.2706265164684795897847947709150290937598347126997964072971218439
+0.4279156393274057309236852245921689139491849071240754852340002326
+-0.1306768866297050878382755406991227297651262848493266576034685194
+0.2678253108467659283584482339990112224237477098870371360902212831
+0.217914162026091385849095108839794223500424779425144887657128012
+-0.02625691461327344055922337707830927973974380680329712859379796682
+-0.2968732896149628517099100943143613476200461843570397483007658758
+0.4759047591062144391383689410077974773955630780125823813435367896
+-0.1609020739688566968967924800650866311305197251794118595176451781
+0.4978111926406553748261308123557606568607924290968953953283570459
+-0.3680457287373024960717322225368521536710342004223667403911426638
+0.3370526398003044917338285727477518400816448538246807560798450068
+0.276593682347415558636492182615343991198000710613327895110370703
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.007087880987108839466396846546797728109882567594291260004693055154
+0.269731009137375740162321322402255679197204618541064529228760954
+0.3448794239046061622109983794627803016406640741645905667575177771
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.3498351569751814493591869134788974919431524046935587950216858142
+-0.4302348750536436853767752212077304891361636801177679666901775557
+-0.06548388787215626885971146251934855059017806534963115617003157257
+0.1911031215178088094488640140802007253494213892471707486908629466
+0.04524751634490719501230109883674608756741975505321511051160810143
+
+6.1745185318475178921502529718986833049527706271578676244808125 0.6686980693920925354381514010447175335935308269969067351602186
+-2.0286421754710812006261026936568022701025286912266749150038471 2.4569175294042436946355753285038874412674106042952732918094119
+-5.0441204456078525931823175586276192797653950399911016760699284 6.2745725990724074549243705596307528223393910102746874433858246
+1.468615749440534345405632214223549006131718966470722013206853 -2.6874415463762970093362797488587706378011221255932139879976559
+-7.7993844666894376472161373126254113725953331011472352574669792 0.9388236908422964775911414936780932242127208582031608539872598
+-6.4608744686383887438561957238600517088653472036722314026006522 4.6961993337009269553920937576401583820421685799266139250569598
+6.3078298219097506789125176132825554613035372599772772919452569 -0.9950602750995064746201203109002483376100510259224576855146047
+-2.6195325919059371488466457065334335173881687129133570606693649 -0.9889612364991775421471314420297572968746611730788171413990941
+3.577712371817730723923227832822667783299906969863397139593835 -1.3601415499296891355432263484645376198416899811134574974435472
+6.9496490450898112270203880589025285278922928049272640258820334 -2.2622559160976132058418857072858896539778252413131088319914674
+10.9924487483533112692270481824649417757542065874367612350678829 -2.4617644616976418222396294211200038949024633411925640832337682
+1.4606323100571924155657301200759981485852120161904445460986176 -2.9685043332064137209356260257896181818319088422901901483705382
+-3.1235013932541411110533288124878680529808698825332593671491108 -2.9126154085119350992050277641140772316058875725975147199137032
+-1.270233127842326360553206934311261970202419775883968322823334 0.4765847948464714690435421350620954409803971777649160660432351
+2.7545762410837285024412321202395985927313912992387965866885902 1.4118976294635059030373577424453986059038781258530090659063431
+0.2459866493477013217837939573575945893533845001507969479825629 -7.3895322762512126709269333138074823544414765071695099207592903
+-5.1849052741209456552031809249978053999881741821667348536527424 6.9673516051335114474032731082133682965923897226956037738701101
+7.6551849513950339698733107329842531473213586953651974836041445 -8.3664748364949855636806885425570025644811789080010354042747849
+6.2044357092502213238716515628045749436776848620891087933532364 -9.8689795639255573662266552039061377268040499939031114770500721
+-2.0717155318546357888121154549492769760611496399238394823672772 -1.8123419142424752739565290395027287300046584398894176764398704
+0.5415531443113996564430096238759728040038236939534086542516064 3.6684676659942250559711816769511778769315282665868098183547933
+-2.7082321925837749193830012898883050816933224417108936100184277 5.4383193622174547374352894079937966535928353615853038063912012
+-1.6182001717697705426150695405385987433080584281590809777609353 2.0836479957106518613220391594112453786832640332034049789304942
+3.8105177112587532665692556726627341304238704501165321631211418 1.6045176649641336233375674087332334874034606352261888258334386
+-2.2453166297139643024122070644590210192469911399866633343696886 1.3307877135033217907369176559833720549620255452950969561362424
+-8.4030259518253682759630102956862977686308157487242238434916841 2.1598893160599993274400583787571910412045124403574009016179601
+6.6184707156972537901007323111059773557888578264775065557398571 -10.7882863438551850524679090037555347219090506900859398500798865
+4.068022898636496502215835301547828784931363866390612675628113 -2.4047017202871294321943483205642431796872895781670462411556563
+-3.1526552582517143195431733160047909625455726920571703787569948 1.72244222485945385272772763426003406573995593308345732099505
+3.1310689262023047520116059895614739461632592468539775064954721 0.2727574498251428917494210003015159633330988988918977699087904
+-1.4960784563952536532513703748053980451147515112665396646447224 3.9099681064256600627170497965781315343941946603565126651210602
+-2.5347545639482615220446871924843369772622442238896762736398078 3.9604368050787691706846755853959319207075689750041906345866144
+-3.9015034297510758571550770250670382822946039235305454588553971 -2.7835275806709171409585950352481761939624101987410673928424859
+2.9551980505908917601513364241972570840820441981795444993813 -2.4626716344465069010098843411017558722921474101414746215612661
+3.4849882076648812530863979549385048360540878594438334791768461 2.611117193034885627572502330028100612470538869242820085061184
+0.2963316208681251998654133772644291063198147511005356675882457 -3.0658973192594520539212663038778702521680106810381290528177259
+-4.9147494908757131059208628342107261290934144971520870515197041 3.992800706552228481608829477217356009866798893818959534851681
+2.4499272544312633652173058403454784976810908971557744947845072 0.8781735326863100804792859253719361687907378981453971154390357
+4.0351496913018572439362704575490778908341357628756403599226662 0.3372999548308942411002168325365562687113120871281115039661745
+-0.1328315208993425195032523706196394555949165704839461537300438 7.5633066617340546723893241731536329146110982764706175809482192
+-2.1617437127569680279767145951943759076144960366626791507375392 -2.3597421686368165233827495829504928937001549945665924110080672
+-6.0994537914495113571543728417353107444864147106179750136852641 1.6402053058454714918746964721484728207928903328967569046118181
+7.0357051319643435743151795314050392057704932256535785006524802 1.0087393232505091122505443386247065143386877970507987593258259
+-0.4289770497817978004701634991574718376557487599426865312408468 -0.9653512791662263155748580772983794140938851954105124624415034
+-3.2746660152498648429127386178865811447499638067354933909387979 9.9588727126639506241700601212110088482796126421076982955735182
+-3.105236809970358852135634538835850680364281067865917062045219 -3.7310812820841888487988097984346599329610426009721392734893476
+0.8904513341711976564656520853997184012380088015951931330011228 -2.6488096101889017917344094169791054583461663275320297065506345
+-0.3388704604116214849814372995296292979556110074471156531584387 3.0978651896903349656266905211722066962254948313957093410927145
+-4.9225321691415802856646718810381952894901354956776792795619512 -1.1757881594970097561234158762370836700352111729997283741086221
+4.4699364420123426970363433197542343008156715038803589455758631 -3.9708103193527619474503983162106051127512282878839893983448819
+2.7028476545753199128283569928681825925188790401964855755697728 0.8014315473838958881098165886246098506105105756068061766990961
+5.22910806534000562774493007781127839153852084050656098357753 2.6719155456893619186320435980921876644016310266741980831597146
+2.7920080498062171327295304398034149372399876546401395258572519 2.5639886708175471173426653159520404301205558349991764418730828
+2.3583163742200654414483553316440442493463713163218126925079977 5.2012542997819617128484884305791776669269863301179843674050108
+8.318095943725714042466215783969322602912952958639402431092961 2.0514482629059555327663142672843397823511995072143031298748192
+-1.9778765231507881665565070274766505234268403987254293376518033 2.4339759303293246280554736026703363704487747435195231702107331
+6.3694868236921884543824633954002293332834338727892022119176634 2.4679756272963298560340043844638678963933240962442197224731061
+-4.9788710072129331855044245358722955575667253979687462785510501 -3.2194485045971016752347345170094745947634365679665783204966545
+-5.1306668713199363990968252668477402571575512642289491025814445 -2.8113155755839488810502406845137994071519916230307469119096159
+-5.2317236509830053352436237863241166736261951024488546752792145 1.1277327224089421021278010359684573180571841518776301955878863
+3.055430604142530768321388114265555194675037356305459984739753 -3.2696405817380983058080799231036235505482858210071611401667761
+-7.6221929400683725559573309908397820757083219175261045890257393 3.1700522285500286247672075048164446921507826303298602516116836
+2.4769511242206378680220142035485527497483548330825523053331586 2.2818390131330936750290927500355693161064122164483918836989417
+-1.993328139819421712650473431625419319710631716140610929607854 -0.5928831873522594536055100648660474317631687632873272199322966
+-9.2815913193177604747004092398895417845686289763824343038009155 2.0662957067399215937395680911784306032034174947285930912064805
+-3.225619749803778043972148765827008040960116341001952237356436 -2.5097397757584089713458613263348646816773448213155196036831687
+2.8450263579502948894784068536152378252083284541341424419985297 3.8501252208493512773851426944271471870349685957745802598080288
+6.6602756789059361450511320006617074734263614420785267291219533 3.6689374953405411198552873875547169249477892637924083724926199
+0.2794264469575887906748201340473782633963893740216177661689015 1.8183896619531425786687932390094200155009631935086081375064918
+4.9566075740256159298095917237621178071141621271664400066815922 7.2213513398625162107655694147519468752565959063305064365904706
+-1.6206755280810762450831167082804842245341838066852266206854256 5.0027441383839234081238740412289684577388038442971304280676822
+6.1075566529714280296910310222278200926583244391481836064199137 -1.6292998776515256023875961347698896883583386762484777527386054
+-7.9181874043793432774207887953871677233612734421379452450402339 1.8250404120465920220417893704435105916488801654419165580571612
+-4.3723798370731582120337152081401753596041770692321508566374326 -3.298434782046257451526425291469848364341949664371718609418901
+5.4192062563816354397731485512751207652071109983162846565293781 -6.8932393988105967009816799449967877983069763483723471514731276
+-5.9432974431611138018792795530845714862353949425747061651580884 12.4839124848145317748054671351498619978764645885461640013298634
+-1.7256406435721797189101063799398320051953989892917966426528685 0.9570508745840796270748441269694414511361080550014107201777193
+-5.0489608493715925068511849343399548714413712638601668437505571 0.3724475112595094251640044282351270840806470183601265397387466
+3.7813911763511251366524891364688134098250431883550500786057651 1.7363501064616860860539425797635919205801814361741028702029859
+10.0307341236501038588923844280396334403309872575383707972152476 -4.1621381395080491092053229241050008238722722136831066314144732
+-0.0552209903320708248446180486464650869875680973521007728606281 1.7601429741711670879650889746372174140515919431134593728977406
+-2.3146013182677131202649072998689639406025992145920558534414571 -2.2104094435294538697310308337591424030882934005919641709081701
+-2.3931535505649599685306355728874878750994582836720162432201853 -2.5256079598879469841399049860884693986631402740945409926057385
+9.6035912734654359090114574747555826189983670458442577997076671 1.6796220471891517821528045073209272814992377283437990317368323
+4.4460009053394803030305977407039753394727146985557829417741502 -3.4161795961505445883184471666240538411841339581864954709276228
+-4.9583305548207474025767096128382545707437377702826112124672308 -1.3056862633337856904648640852761495389704038870195362932207069
+3.041555587406730136912314684347835470744714699448593814431531 0.3678174104411518409346479323367584098579191364070805690335896
+-1.5676684139678970010808179592179292368054946226864748338146097 -1.7948522986541170853216818014085825724505554656886302706745306
+-0.3378105885253626434970351247468788408842175969294394089836889 -0.5751731223953160846631623464249563850635469949401123102049236
+-5.9387148368493912824402112057628769097385209541679536904097616 1.1466625741290617253209097801083774928604116749950744844181638
+-1.52196825007167813916546474486442407697388254815575281389844015 4.4325644497623223937557364961173923851584099541356729367474869
+-1.7034026008868291476123086617532129676512307347387902169832313 4.2837269656620749691402497925370178672385746510222632862665847
+-5.0550623426609613812782019464670281499794813269603645588993806 2.9231379321827260091114391286176520424093627799504163954652766
+-3.6081415886120998735024016047584866086730393231167670321131073 -4.1162049027973579219864302515192819432373986235414427084829425
+13.6362583749257462850551863589536803480749189479913335418164927 2.9756951103495065413288932750529651779896877157388081277812671
+2.3134587054038636975426536431667701746310275251412170490844405 4.8568180221458355648413064833525739291093627914581389624782139
+-2.7176200160403432931852307598660645457480145857524906487674853 -5.862452041585423503542017518591461381621594780691459357261241
+6.5377476280463974966714427055414967191835051199981929548501696 -4.5716834806445539668001183663229635425893920466052699751659997
+-0.1523847745015578181774323939667335916686919868941067569255464 -1.7155286821604776675415291364945677625024685628540876799598213
+1.2827800767413934087988990966294492883106638155312087656246666 4.5855193444239270244996246627103266444024524753176334060345528
+-9.6730872553547837023365261467756966846198644931456182077364293 -0.4900916388069759741182785853284239011030733892070558568688388
+-0.4191954613173777950285959972120041738997146257426089269117765 0.502080168741889942773331471772300405493846373055732937095213
+-5.0437230303106571976643735759165755262697676958912325539059485 -0.1940123430517096378681208082993917460159236703054592349607993
+-1.3795585051016976040118104883041599248962823560771281619909126 2.2003758239416713514420352339746167654047255513798467427321991
+-4.6116766100343307842957874646570692973383738157327719203576227 3.8987694203154263359920113470296631696171148336955359294754788
+-8.7170249073491419042106791724869955291466359904533603036948711 3.6883096141751329043513959008806488901080000067898033419508115
+2.0222924808236083419059240743246591126419848176703581839112951 -7.3132147240290126498566328041436678870664889346648070335498414
+0.8728741207158331790158355475399019533558982370803125839991594 2.0241354688720483342793932245429363006870210148382801698390175
+-1.2927194089336657263284585415034146710147430409603341242853653 4.9834700759099257643592900638496443303880847054306456880463593
+-3.69940146699489871894586868275814925113864211076485439986458278 -1.89647105971174089267865701017489076980844594337875762839589795
+-4.79530968124209425485052145966292630285889974485326287728490672 -1.4087044711349932529598820180194966136049504557421709517369435
+-6.29123478217779538497062145343635012904186787322768711661601677 -2.43698930387018085860042210474246611936938774909746872184523829
+0.2087893251750190331489334206278639169824517468681967130260748 -1.3536590732538610007777518429651058034886028211541329832421501
+3.2483449150767204519476329242128516600979734370826904820550161 -6.5399983976224334212973549364477792170479733108579987027731768
+-6.9956441205087571615466752701978625551399840958199391586816885 3.9088231373880739806473423474256237940243228281150724387173064
+-1.4012511871771897889790148400977887588304007879423383544872687 4.9009446810450794265561356960758649453122476647362103225677076
+-4.3417033060413587101904037626802056357491487697397120026710522 -0.2832484011556091035479673302628028880457963698856184713331436
+1.3555099850378502087222606700675902632105652964081153717430391 1.621882541795410574744673189160040257850727670699990558464755
+-3.6749227237655501961161429130771586813945653312873824004117109 -0.3657229305203894603344665825301674201139929181251061539667986
+1.1561950009836093444926128702931464910791616354981964127628858 4.3504201181112945480544523629242224890583054031675397928664417
+2.8495819757814421103590204636476345231735677990354123463060273 1.8606667715426462119771766641126232451303853604974825192647868
+-0.8633424230491995558733530932874832520702333468816813287439472 3.2432895210827103311780655728958372522666115608973071533385594
+0.726518258286674367857554060499100470504107152835792888739401 3.7567937752075961112531780975310281003610591014273711436903565
+-0.7347240168204696471983354457230099771653162337592224510378954 -5.2622537934221607753247271480657109336452958492424534043290621
+-3.5998113912035559469647086643161396695409525362577907276459425 1.2064131011561688806877534763604675557586019068172567531064619
+-6.0071700290869504805243202020148397243602105173035846861918714 -3.3421834512547591527639141468206501860748336266043762756790148
+0.2017998469433513253340497968352052229422370288904313862998544 -11.7158198427217554440157343501649989106321248767653280747007271
+0.5723190286882742663698478568897304295583690789353196159563581 3.5553411099743677934084420089684267454715962054227630466595189
+4.4566276495533968553644545092700921140535845858644019089116993 5.7144476407172941868814796519557448262710005811834011765545303
+1.2998100035134607463956800708258376000993664410846565504346658 -0.8127780260555050979752564421100062752179159682731469319621509
+5.71536548469129713088727910133613375333118094866495197129567342 3.81934674367045119808067736902042657697743526940740182685609741
+1.7910693593688416584669777168668289748444927394047768535338104 4.632874637389625180931600406613718615119945692461945581085383
+-2.9319907414124193725777380458650952782584111184250393122534256 4.5123347109911473703926360577661050392827702400801855386506007
+-0.8836375977254058860867380855335243285150877783769472280954466 2.9743561556595404122281381202152693964999872424598596437959102
+-1.8207595764512624984981352317364436740687045758383193619234452 -8.897587382606369694257927199254406892893533321674406377344474
+0.5283572871854619934474363415632185161196983547955901998537159 1.9290526617321124924827264373798853480678152668811666972969882
+3.6771037249992654999468698474119234915198978668559958542549998 7.8969418414637466627797275381334061014914193710600255719657685
+-0.3709384711687400797847118395413804993814945860305431059315675 -5.2868257741861045502529437200773510882021374731503243382989276
+1.1666686929002864443683982389662469194626490760860350498758178 -3.0995214338955887628337626080450890218640513046423968624433175
+7.0397553850797765552113994231553002549270599469293324612095082 10.3945158245941322350115430150508262929307784962951751326475624
+5.7594289646993146147830645037971231156955757266577973339284431 -5.7232237299336207452001433500363876899153145661966412191958858
+-9.2661467726398856265405223629239780794574824405577583250469461 -3.2748103581402371273722360557330675225415067501890401787707753
+-2.7347121532402993537193886928704186170755308474950762470184484 -4.0791673295909903327165840895516518290429050700792414620364028
+-1.8144057190837317137559945077016873672768240754016083095872361 -2.8255040365222788255944351189502705067541992178520511621486888
+-3.4803602722367723135808446828023390224315234868570993779274016 2.3293617765465232656331664903500448993423117818696593862953786
+2.6790231788783744842183228789479879870897095817288019813411188 -6.3859752582946713050428539412303790884557343312905430544818844
+2.4764669662704193487278058653996559736467926356918773070195021 -4.1028776737053229638833404921982131542551906762951953307895858
+4.0099052801528481785016392638418615942259397890271106531492674 -0.3325895668971449642034307506263781680032253461068493231029118
+-1.2464770935343237282025666669582933895525945951733070849393716 -2.427288831159071858197831034971018017602027014575510533857281
+-1.1377337725080819689798399157504040062915639240846866155233505 -6.3263959850181809524025376242306994365706242901662248928669326
+-6.0447856971770776811291705118411179878424545039135279253492135 -2.3448816854597173344828203186425252806998497710426467757360587
+3.1435487944121057042371483493406615695084708605109135313889742 0.7539204478435333040879386874743962129909578905363042618781042
+-6.268133411460957159566774942263770075928321176453830751903205 -2.0748180675366570075295280352343154814399779530957541771300679
+2.2071322197902714413123647772901385838283595143257862839497242 -2.4601421150067196419972208337755376832630442442959324440385748
+5.1907235497467307290590665609547856693474522576787706901140134 -2.3374580597506844565852193883289066879157880896883554395695574
+-1.249973832824100601718583058571382799622002321655166433001616 7.8006356943846800023462613433756610459131414335883288601440461
+-4.68764422394345945809978289627332610455892975560739623505756 1.6454763929784824421836531989596938516319896973539234625284152
+-4.0162311393271105740616199742596117070484631789088078547713254 -11.3924215981425939157501469958825649591276093856295507362558946
+3.7663506928635177260570166041625241493517589860454909058566147 -2.0811947536761750348643350447522455843388180551726198463194112
+-2.054937538032855556110278448388087566206567973632707468056114 1.1013820545352820863441569346363368130576060380147919021523263
+4.7743106555163266232871099017696120570015329118961821824802917 10.4052574285466347406556085902485080138201939292040692854834495
+-0.5581360542445042192981134819743467993887533764220308904922147 5.8173973388631117371100970904387962942951535366656124717612905
+4.7449580606040854491134519871229789488246215519510769129688693 -7.5618511165614153983598792404630237264180716944152654910476417
+1.3027062131310275734789845201371940323691788266446986073969279 6.2331003658249398663447544021053872986645467761421087765130919
+-2.9028622729924888211230690560142434410689840135020807014929164 0.4092901346268585322000728600662427948249914401493529418455171
+-1.1867868980440834316437288535160698274457621777388618487411223 -5.0163124336287304917821879531762108073729522615628992782961318
+-7.2013032429704793847411122412693999258099634548753142964557585 -2.8227915659829470430978027983761304035542975246929385689700111
+-1.5273309557555682683258021768513230446206783948158524497545148 -3.963818923475885699115569218098608000377977577765403818720581
+4.4163659466890042011234795949611433407771075529225651369697114 -3.6357936846625804284898873639633525351582080114825286883564951
+2.0270996684718551739687379687105154631259485418350023209763127 7.4363007718462311904797624867640659897067464961853672610327451
+3.2364857932245613652223795610504121795889600121411243751689161 0.7334150897983436244379151650991364087162566137433752978340358
+-7.0023561735936336533975603858018671899356619014071431776836824 0.7631078362170642112843967641733811504383031732390008154342333
+-0.3523739996882535656844347104794077630063468711647741370077655 7.2954428584925927077293439462837045056935115058973154274178512
+-1.7606408186194958126739177877744770157911177348875245787207321 -0.060343349695770756134893265366745143306355255447093591235262
+-4.2597595687275977939486026557715810948760984793080354063616499 3.9252314816044713021197164895742447532773381778354168642689117
+-6.5033771114708046508795341400113350466450171412467738591397978 7.7060195081919841425108618125888930334283640661806399229572165
+-7.4059070439067609164226946694770135299418606014256657794567 -0.2006692456659239459107150819536694484899634477801959735982563
+-1.8085523837284469959588554447680357479905134646941427223605527 -3.4493929966326978887186047181609889839006873676074895627087711
+-0.8926324376479473600070735607715622113991062311559289348417578 3.8349975102441188617381458824079791985754205865667100156735071
+-1.8684205097299531929128601222134753577124303415947837563110641 4.354319617725647516546128968631112498635299749296885176939407
+1.3724584842651600514789998681459565769269625729311299242906361 -3.2379421984694817285300153353117728923775546764364671420294425
+2.1094146544931557736490649947861993950911356792588227155645237 2.9503167686021887736850142386105694213848645837194987859904679
+5.9948669754201295623372837210725611874889560890202311869606266 -3.9146064669231671467051530634269286530535074230937764071779789
+4.1352583972922533447296289590269334788690061957500237193851543 -0.5708533405950067878634439823926401094766350221956643574888504
+-9.0648888222968166282367292117661535954641420865716387312638384 1.9236991228209977734133264338937395122107743011504961856448915
+4.8611023905718789086590560481195383668869232831152107590907008 0.9730455114579035857473081661332435916582849955254295633208575
+1.5315585396899640482816276736647622919735272537330635273023664 -6.7252954220905359846978481263749014079047666735709865931804119
+2.8689056270368878809774225544997752968480423228079280651689561 -4.1753122822000828351428531088901604154363347240412609226349696
+2.4326713152251395297059260876063084038982444392187627522325838 4.2641322644491295178629265483087639838455930943408776166020628
+-3.289163648969469891001399555859968691862367185506206061600137 5.5121401344726092099320580818913307428033575042764763819389704
+3.2744348704036206261812531596201842554419952690613882472252196 -5.0078924784359639212272356382526549780872643327835788631186097
+0.6961823340599250530450530464923258181649425587733020105954346 -6.4722304575275788922601504570068033193132737689336039672587704
+5.2695666762817309468254658583674715447166467170696362376724275 9.3334337282503369145972034653902439390038534944004370489892718
+0.9529966205602271930706622677813663606730655040437246656334263 -1.345768757520865488007892331668603852901864777254468663328025
+-4.6127522322688001835935536419622561209845092179983236002062989 -5.2857518721108482200438943129644477028980252027750202051949198
+-1.5459840845323575759255047846638653193263033446547952690759332 -3.8854547281957751601533243455028294912774354505237607277315348
+-5.2472773662855464884757867837726025765334293803957287466320199 1.0599682495677706776522650527930524268449439754762704434620982
+2.0354868135906231076514887533005776662782936338876431110558866 -8.1176060987045553082988353281411177041598781262515445261515047
+1.6543492687037102985270659578801957872656868712651893147608857 -1.898791499553590529812729171069939400869827689701002274201469
+1.9575240536656908003481540918927209287157841409287081702562376 -2.5041315671523857024437936022223629348844121754177958132695568
+
+0.7721031360269444536624854764846278079390436516442447307214583713 -0.7605582778547942408060351317015194879473019118917060721292547632
+0.7113282365127787106295924505560767722199840055537543517442585349 0.9359455243018989598720894094889086512450300947660621306436953491
+0.7679535856628120283990827155162180966010981503917935490380557142 0.64033297030031448665328828110131678884788143990971470968562862
+-0.6127602430473631495393181955733023028663546816025211937039540524 -0.7566145378422368715122716757726615136162685098609876740055635889
+-0.5944056790460496081717996899055920305811666877696698395774078378 0.498393464867089132881118789295770940752838691384942740522239679
+0.9839367502424209997890558933686976016082869978582241397510153252 -0.4971948424110283155918942363898656650230845195141350175248779212
+-0.4548419343247805224460011391703079342763504118566706946966391853 -0.3682837387895926737476498418989480477365801929350913148252356807
+-0.8849845588398620212194475625021727518116463369860566764411889312 0.6148970507477253459184467315745337121338375212139515007860628315
+-0.2496600323413886386258990085306122333313701779141184118995463959 -0.9083524682273578446532722997799475788834527253595073048265657245
+0.2013567579813494116381818105314838610969816486807952028421948124 -0.3916716877161613504785809028033398517645549846406356231576213868
+-0.85858010457166611374976182888109386496982051035674989499979384 -0.5193518691808852117378350732261309854332184624171433727414006814
+0.7326702292582058588316598422918662773838658327971514003421703067 -0.9750431258817692289559363598684739941265076062018304867776204819
+-0.2697443704573465465233716116511309018200366900116819867580635278 0.05005097085661604605086728229374112382053058454731767435671635371
+-0.6468087813680422377672655136982917947328505318460482424201962 0.4399150750505159978489133507713340072340352057744402647976718275
+-0.2812302577494115409480047067683469320314228801749259890701395474 0.1872909367861505164718492831692222169018789408412172493435499423
+-0.02167413194230472805204979364706614220652157873015883116130884482 0.9419321039051109549245680082622391092246632631231828777233002149
+-0.680894955890704100546661726757747116024714493408288024374190234 -0.4287041936652777153072881590344721321081952456510997660597381855
+-0.9306530725185795934583927665790248017610038861531896668451002839 -0.2333391111205556198207256592076331117879880842914267473885863455
+0.3319152007540851906913026983763584438955853838764895977762668678 0.7889477067277564731712862630611699647549102063099584994888747696
+-0.4414898031680223608932387792017485771255689761890070706015387399 -0.2563747285446000361218237435955077669028092056157149416120292486
+0.04675554236208552284539297942143061834219393972333359647545914081 0.8211574497098423675796354902233745259806437217163965161734702361
+-0.8152568938325646993310760006867681539054279301843202148958871677 -0.2430326281692574737943057410600918611450147916626606070615468027
+0.3952163240756655529212705355453418848569049122249531536768131848 -0.5566744269539672218404388199827460990960984415899809143036909069
+-0.9395163144138835125672454933008856593503204403133472584898229717 0.4524110448637644360868388875231267640338311624103409145041788539
+-0.08780353633292157461769946866167963633505729824902226238512671868 -0.4077100331640054846709900852315956380002910175183742932154068317
+-0.1743560068378512679152575299947443762504689480476570621749324843 0.9925432694290908433525570320250227385826836114793383624485189244
+0.6018835924636782523215034400201993341434060856497418585329625279 -0.6845441772530325736299180977635806745002567201737916085152286412
+0.5094537464059880326374352490064905763350159638438638190213421193 -0.5689275448635581694575383584343021970227104177442089801706330228
+-0.6412882157453879879998117648467144628970706782597054160685555631 0.3985567814775143901221253743791327148945266133080683203695999962
+0.9017103216368149546517732133490469846549850682301607701578308401 0.06961382826101090949578301124383292455559947536661707583968975184
+0.9631270643127979384664069651403286361478505285019531813591892173 0.04307050119059237005387541827491059927895209375649378090223139587
+-0.6210835173793688086670082589175993809833456274087668762475476635 0.5849881776459916509815348468661649535409940486756497653761724118
+-0.8137281645240375388576750044830353268919925528507904843095256157 0.02943622593745917222898833754618856585348471594569686881397428726
+-0.7041297500866612607234884784407130317305843364144413223065323821 0.3572417013316431962026919347150511042636763596269956578845059238
+-0.1235721593345202217795554759876880268687368789792682195280803184 0.8246603472400295391578505724317567517180656867730457579866275623
+0.01793996302825844948175557573252934185711456214972052895861572493 0.08267470722577286001217633724236129336011575576077446531397711074
+-0.3411596862218241172328579047617234818967459872060847679144866809 0.5296493544860877224747590127030477951987987258874100707895850711
+-0.7379746599220903325806827424480469595800618414934950958452657346 0.178161671839420517570934964597356447578898824155879129858818805
+0.6843546378904107483368305041075808036585650068151329599810630045 -0.8633908949968827943561744577901901026376268752722144571223670853
+0.4265099420399003863248167494626862205659560797404855195341684806 -0.3459820993240706010475901311688197838023719669999227712290509004
+-0.9874151891964456486571993218370826427302121071375833081581536189 -0.8814262497135981437569523940906532685397798861799997656375266034
+0.4601637140807105378191037234478805179877043129140064777542238544 -0.9722552720272006984678084914751283988556792015475269427349942943
+-0.4841039802362244364267157134690841461075259779700777041439742307 0.6486167889394565452584685154506739738504706411589692034776454683
+0.9965877589863013394561112420396792373833365736836351278348301833 0.7237216114456588829885327945423834052953613010855527824331391861
+0.191567730523304776574190978829765313731471509331205854313016986 0.9153832161606877637775414865990581395464326012246760580785761313
+-0.9100049476348622207723944867294612891098821253248738836563459568 -0.5010512652356920074204032205934276172215285762480987760943959851
+0.8085565025927605798160394591787637574375967583263627553971120289 -0.003517119711452846559277971844364606295296520854275366315952866112
+-0.8851479413535487385573817957243936843534909265401263726020814395 -0.7432644962454565902867854377146609433353697756825593784757725371
+0.6064591258881136876029163103297147737049475826316704311935105558 -0.6678889143320625765336213759043802181180754155696893060399849702
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.6231432486376980435414857670687342821530306865222818413703487444
+
diff --git a/tests/data/nfft_adjoint_2d_20_10_20.txt b/tests/data/nfft_adjoint_2d_20_10_20.txt
new file mode 100644
index 0000000..54010e8
--- /dev/null
+++ b/tests/data/nfft_adjoint_2d_20_10_20.txt
@@ -0,0 +1,270 @@
+2
+
+20
+10
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+-0.2206549379852138057578743061470069389191225157277024467333194435
+0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4643197195119173309525456044702917254373982711189458917859034631
+0.01022750575332349257722449804129916311389119097299090643512381743
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.4700775714463633978511207403685111986859425845978719788126486235
+0.1092122305172402888258153501556024641240468035240884586547566337
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.2642327778745240757646266294392459562801915916132871452102135091
+0.01032012051955487309722047463966310173477870581273801739268254951
+-0.03919417871052420194526378084573471772000103115061608042162915008
+0.4969744253080455744694825346756894506554753184704475582968873208
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.1729154576995603929033538546168666485286603783333729055438208098
+0.3914347841983986584093169466825129403698312444687581041683071856
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.1313277929451562487082545713868668183502620330575886917609655136
+0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2416500872464844443813651159115503866293289962833710383546455749
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.3029583073136138265829962071140439545004830470746425534136209257
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.0908567130718900285397128207157625325081936945730573057287310191
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.1013589956735152573510406730689184973691015496657475510126506381
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.06875288804967068748620631495815812310608096163779380055154102558
+0.4279156393274057309236852245921689139491849071240754852340002326
+
+-0.906451543123341917602994399822116358860664626498882881123147 1.5308960356664138498520939264327520033929932387832141470496868
+2.0516721363509437426196368089683392403127401809647886023522163 0.6617057254242762907723938222349637659352435406824273726479348
+-2.6566497019730380495671303203478249631266921259416044722501422 0.8557920356357727217495643567104299534884129488793580463128687
+-6.2697987477497495358750074896761780517004975870434669912063035 -0.516336705017754131423352262108813517981631189851317031932961
+-4.4268446694062924714933701340450647744985554279679362907111376 3.1878631557844026666559754947607401251588207312127261083344624
+-2.5853972281656714104961562275640822094641868336386689250040653 2.9166387352424112346182678454236824757235246312704499375472005
+-4.5987883390280361673012124401936655049398916538318371657521614 -2.158211666476463605314003535572431966297267518404994280547875
+-6.8544617220450247171366269490574688524702233626773208732650214 0.6221150906349855667297413386392622797254786312687269889935937
+-0.9785044128208328371282156432964103889866751446023023399478242 -1.4581484099404763506506394318618491030513504901897059074983323
+-3.1114923833813319381663851491358218738027281099161497052949344 2.519333216100445764599691643405183303730508894651528702612535
+-2.0952983544309349839316235064862767925394578522102058238552545 -2.8247728618915645262442187898564177214212029281034375285845269
+-1.3393302095920943541109796846229738013512953101751468467871399 -1.1666292343964340266476426011779106998856365904197673962253499
+-3.3145637960675614518150547448356832238325345083264812310789521 1.9953374817883023781439447882592422012430137960228961344704764
+-2.8915460426911360788703309984754463420896187995719496283976503 -2.1820695826694946128622990126143542440278135514545910768301692
+-2.5177518484575551092069379944739052855150509438591465422911654 -1.094588113044228207784751114563600413528552671996937986473921
+1.8658095253996058474045225419042399301019145534325482019044436 -2.5660241656040917026018458779325757975561947371045394577529002
+0.8027727694988384096696730943566968828973600763382686711493268 -0.6389600170474703706748469809430002932928345972345777356051453
+-0.3347955986587849542074264278374827193059347449783900632188643 -1.5896056683377077432935948197954620108473636412375900287189035
+1.9091508744522716260726756647516665213930393144680315711325592 1.3496266141733985494092535456620838165401953257602038876468097
+5.078294155306986942429305434965452645201115951276364321361728 1.9954829109393835475867696043598033152019445829438974686023729
+-0.7814004880419167090186496138468761713298460237895831476101603 1.9827100919933170993399068193948205535566656822315566542537256
+4.2363764003359605370288116440438324903412013753905851732263677 -0.4892110198011484348695881644934402914401616066378836272177612
+-0.5516405407594323507287219523631057594622089294413174865097481 -1.1498669421369684718288731135038438035228332540431036948701915
+-4.5838471586822699673737053486320302470908534677235973279130026 3.5234346353585255162605997485639368036044350459827844257785449
+0.0923259254384955081165707848209463179439169433609568188939952 2.4548270492755573488965557400803406723283111920244224997801418
+-0.664960631213289848724927045408808387560127387949896127800981 -0.0737012639859870028707767063286442638787272102252415334246941
+1.9034941514467399120769921614570720099992414903484937650265475 2.7099404971333868543334618305299942432195045153495424480078793
+-4.2691524521000060391811650504356816922744312635395817795315974 0.0727690696631192331661199928983132543735546151270349634913986
+-2.0244150153637572717276579228494748181594990502805870085815966 0.7734294511481005647601190799853358724299068594200235637427978
+-1.3960280393268928741481073961623121109030350409499978805882101 1.1761263983304728525706246298194807260191127737730365132330679
+-5.6005654623612828949695199902247282831075136939071592287334183 0.4340774108969037352088271583677856584410211690578254248213093
+-1.4039721668680764872039939356655068396116967790505889373789115 0.6648024586488715883242367957166093680109108554522165494573955
+-3.1246273130340718098098095773438290720484876579602362808210274 -1.8272872592845984425847661666104677570849610504120320552710971
+-3.4448556746331683881715020252301009935551423898551743449364981 -1.9653811887031838243298848728202816534237363574145790128684752
+-6.6222527541186691209475762028025295100611805105859111114463383 -0.7063530961703523196046972147761116210428240638696113852074274
+1.1614630165519883413053781199949060797114715373342005012879321 -3.3441296281968023648846186495771659536021198057350234890839284
+-0.9694535459694832953302692261521006498649725401905444379924293 -3.0781315530477661586297467191771971308051503860760499263535092
+-2.8825758249952028913935196395817587600935371578430390800652285 0.9640187328803782657698292842848778529399716655409344698565873
+0.43672216610389611308320858191406210524208611179865563273013 1.0863057626423763761977336315907983446395945415571726936438084
+2.0849562382651866057299271949668017915338233654524787221776101 -2.6911044018986663786972227604527493356365051478566643610460006
+1.8059404292523719322993073101719666826089869968558982857286602 0.2212303239070979792026136338449909671563154568522243902108079
+-1.2852421806541442655074451370797647778943192995410850914270911 -2.9252707933602927575675230629721034202267028802831861401504287
+0.6305164512567144035878394905322963862058991238527308826609215 -1.554264531776185939894988797140911120521657607240962584828802
+1.2083736704429150339110416921725026225355648071113211282798932 -1.8651734231849472707125606911891188716227109061013048372964453
+-0.52613365242331128918394818115936384384483736825241976570426 1.6410953979816096759303846582278142840070710301187538036534467
+2.8705790620328280732331034220448255271074074161767621150506892 -1.9157928109817790231850465872913043421714925731665719426111245
+4.4210752662210028585929871349765428163177047375372269847708942 -1.4738558982898079847878683021947260649097390826459908581967251
+1.3903476494084776420216246394565009222943192608815055222360604 -3.0508889999970526286337819047501452497497511589216776377096186
+-1.6796899982190662781343844341591571113240188310894512090237867 0.3518791554475204690119218778324972998728039433174394850915579
+1.3236861861329936050501606459683837089764525312869242489927135 0.2516269296682466858213869708347602827976965133693756235417735
+-1.7115526911754630411289863303787442256202896535539107206246467 1.157463749571202330102875034346738185769801102586201288947922
+0.273079045215218790856297727404249318223036517268547682332831 1.4591247250231522622602522850035455116421873799856937667403336
+-3.4948245802959375080091629983953340987603536886178499498297276 -7.0052078249945726960645042123814438334535660904576585423090147
+-1.4055819516979986786114691967109229793570071687691762510527685 -0.4156032176044614728846242651490509337919051888522072470120269
+-0.1893850050116626053595883438687538687428939969717548043042184 -1.2177667105070493454349490840137385405673011973908605482696255
+-0.3227247947975979136506948174532223662028515133381826727703173 -1.5454863231455024382596236076233788716975256791095185259301658
+-0.9765461123621366087114699258001488213938127059063367139575901 0.4514195179658447745811863398809106568714792025469309265716599
+0.8561294765516660185649896302020328387886038372575558538121666 2.4494681973495376279684890995526080893002826719030481590740116
+-1.1222549453995530468647920155195853073319480005277605539550044 6.2877243109122844009431432161499736997306168869286199709208064
+0.3231574748920481490276161746996480981499534726326499798822119 2.6282211114252295796023006770489505214622446009914733586742535
+1.2296807537190168080020503512905773220462894474657780688289785 -1.5600032139333852847346760166748309655187287477989747143376638
+2.1556788902636052027675540744330236973511861820723943753474529 -1.3428507309470056806933221444458723000830318866410593748876354
+1.4522174080274047807404675405299506015567750900786076428777024 -4.6375539819631297620263672308049276060102785915903771492150218
+1.6317973600587997038248628694044304056784872172570725122589786 -3.2175795015791785302471736103335341500050423282121026214862422
+0.5849486782270526930921615668495606074700149662020443796075888 2.9931670713724536615043676846106551462838241674353855326295581
+3.65058042069366532232098883918451534618108419047016780466802681 3.439003548639643996977911547634966715454009460953644212833535
+0.2589502858298171641636282740703202933528630877237636182802856 -3.1209652699577617582677735925080471175101618690969009012300521
+-2.9477174798207952425380477367581022689448738244540530795665002 -2.4747743196888849330316817262420169105287533957613053850551086
+-0.4319492107418523887106542772463272917889535551780993798729223 0.4826067017131033090613871143247527071274027322812753953709434
+-3.6033071455645955007177788297920824200710797370482918644510454 -2.528773063928012669658141568620656068329858061950998345448573
+4.6632260175508221709714140339680980831477002560416718700814833 0.5285023205648595730851863799535908124819112761979004212164226
+-1.0445696509953643732269472438340006462016095347363129097899989 3.0205768216174796540600008298727506535434347862238617825239219
+-0.6609637209681878262894586501138854622269850980230506108464313 0.1180394830807214022357182558090270031147504380976567008216049
+-0.908307343909891062870639609606120932622832720012323462536223 -1.9423029370951286821182205966310555683108317419337716214689606
+-1.08982945631808992571445185098452318340680891036130792770172202 -2.13192020431984053125728333046706531852647188484247444015148477
+-0.05526106364352997696967729739696646330969993544892626116886122 1.33173119729863414795415289923025633285694807800250059594538452
+-2.41361790714352964253720219400597042220494551203287923371706428 0.1069631147868402024119954798552258649509729091734999477915759
+0.8969328667250956162656362501261022794365866052872075774841243 -0.5568618710587608412514870300086848067840318082730332409137413
+-1.0762376496437810108968021270516509914861166720061867343725576 5.1316338162827296684049169039208377447803224726154016886054878
+4.5311207731110689033445112286498388696687627216756689359220702 7.160060369430722114881793844622848215089261442585379213624079
+-1.8285934411619200309360111709569701576250274881103117166079478 -2.7264197045178176713212946701406514493020103553657051797007544
+1.9126385830070210192058632982030331772038814053164868121082388 -4.2629621713841500605734959383872285925470252718302519867922201
+-0.8513893892827149926158061854787760070958348327319061902060623 -6.24367476304408268768883999416592262483863212516896459862883012
+-3.08570590236679546728860518229338131390421125570468170134764476 -1.00454893648024582886786329342099052894618814518593986056692423
+2.88630038396052746843755861990238936703134339154635129619396849 1.95353462506729132106153881278998306146436258317669165586529952
+2.20911002766390023478336121294686474701830039758920879903260058 3.00963449071485495395652815929271366523034703978029728430950934
+-1.44603706616275879217770124049680841223231460999486825917896381 3.61705584179809538194690892397058035060689522430341012317187191
+-2.58183927601454557848490197592559038392608116132815359354728503 -1.36850717085436055384225358347556654006436624598785167918007985
+-3.5985257000929028291485804106704853095775321064148049789835499 0.8209347790239406165920928185526609868488778417234470207506648
+-3.1862406454769550762158343543090106170615287986593461362982141 0.6010149509083395312485510583983423554938015592747029860489054
+2.5551479940009619995723836125195241524808806822767143320961253 0.9305532960633982587375113977507279872792038944029045017994353
+4.76717058809797008900517868813212138574871162523322440767381601 2.4483580396902482656229821589426143394095494579645611798638473
+5.01736852080464538671888217971345076954596881746939686107090003 1.53323987098656986968297788763556393791018046983835139380868949
+-0.606011657200912654443687071741821164521285319544410805189171 1.03065137914045695003284374655082321554661130876139052013359202
+-3.23406908365170769986156591359478643798503265743830485463940048 -0.68150175458898467892488240593515620690386549885982433407215036
+0.98337144770175491989681876976692424485796106546309430039462684 3.32074710822963827734902660588925057734220781591738824736420321
+-2.73626090349028121522651959420096834610099472865529216587173608 -3.02306700368849094783658777700754071878525015958448019941956816
+-4.55384372383975008368905934295478329493623107577534342390798626 2.03908207116871700324717599603031989578340310074015850430995582
+-0.08143871965152999816914314362549080662748138216687174846845905 1.59521443923437396672993159418908735754023270556604444143094149
+3.6917191774138371238337121822077879048338258056759351032689967 2.920377840684673587953626157719051301760919279130803682355602
+-2.35236369260250657952468151006872188485862839445700839596223334 1.3363679334562420561699838163242296325089066408036579394638907
+-3.26761364740202329586921301637053893446841883377623462743783844 -3.19160526990806980050565219762489311923225318826777869573687595
+-1.73297796426411549364670984255447811582076733915210373492367025 0.24923564206134765226469096288820079787291701971481006353474508
+-3.98157309789713064393639352485686740640374619137224255768163479 1.04295522497818428251294695055868664128671082052718284724476207
+-3.97720195960948726598394897077877881955366106339358931628522631 2.76356116649739144239689940944855910416872833466044261538163519
+-0.69273620291038926726455982040262810773021395371128338842658488 3.65049234461408652300844952142191819782712823381059172308151541
+-0.13516689833903513538280503600052450610328949593926531897013826 3.29799739965861933835887636461699218446793350528235118820266617
+-2.42793515502395853222842900687469738634636879430220956790698598 0.00163156799813816828743131499168561690883475392078759062114488
+-7.2463520897188969558084777135251485758766696455448311814501183 0.02037950480508067159985362065980435338410363428214680157261829
+-0.6036569340078630371505369062054992003995970130946152351971314 2.29128766361333783260149740966396101163999088913210889993007942
+-1.7085118938021733196272739166760788201965818047898261033781903 1.110726748337471581187460890352171108774727065084585192485874
+1.3819453599518382222710819219270855681564019105004343662614705 0.2804109843673077640145536130666997330832317132786178283694123
+3.92376522201214833736287486896103789066626487191371994922003842 -2.86604784495719085155360459199104152759219055451595810301886477
+-3.50900949439465230499569843826282386926884564329213886903963488 2.11101531984156800005602202892559153515446731313870819918506678
+-0.92675817264592972841922330769771880946626457716027450505813354 -0.59047936391757089791101244004385654959671940713149972381758831
+-4.45353791997849643225200946938025959780313420942550921706344715 -3.23518173667684712437066411377500040725468010031982981480918842
+-1.17556422392001924851973680156247726642537880941466761347127904 -4.30875550665074397354074471860289611713162069443650723385602489
+-1.80328666948564245679306046820062848002894995641756964308602945 -0.92988989828037341641260253520914052296217839192518384997766149
+-1.0815401855292237460328725855210308053022414959790888948383311 -1.72370566797823588845729870217928004415299247257746011522274994
+2.07702117060126394287011161445258425705677457854939652888146482 -0.2919047789338719775657355064582123817422158531361173903346083
+-1.7502886327191605381306020465948409568775555556581838263248603 3.5966064096089645234082753748319454743961471645810962707950505
+-0.5359747461348899033751044446543769879170186480127082357476591 -1.1456511304771583303964729815267085847720306193712931218331773
+-0.439494707875216677479167986258243339041954709830674746217231 -1.237863774791592822641455626783035733583285800969737595515028
+-1.15769761711851996781857200763648642065532877580146756067056525 -1.30665047023645753108905061669369059815370200132583687597656323
+-3.68801690990846996560331086097094664642543649559777332731991234 3.93480064646706638234569467015670396587532592009648356061776089
+1.29637334706656821316149118253722970665488755981561704787144829 3.86669779187853265584252909739800438463533461724344804618906895
+3.31138078947929027537648408094180327880040508220896905912896683 -1.45617625459428313289439982521791658150784824039852519590171525
+-1.01119674839743893167321559338345202528731204187618412303751718 2.45382379122024415284075737628892359784152261010219003879426218
+-2.3053961787644992225975149077627897332489906849395505661450801 3.95304301196556700966885435400052156313632007235623149067557035
+-1.8202516156798813319277601587389630524000279786176142695392509 0.2733743489949979565381751709225705979988251319434378340740368
+-0.6322840487533044920874315723578923889614800108940131852382761 2.4960959092126438880466908043659719794586565544536027326666821
+-2.1613414845082695344783173128114330772577467297444423171426574 0.6645745274561587908139570905769151538104440519447674173936918
+0.2457686743697992912663935916498926616081095401948801046430962 1.9525214751621022224036072600972643657094115655768043019478806
+-1.8226234157793654634503611349743056786775626674411096763101985 -1.0514429502084603588596890417803907475146022568055213423146605
+-3.06668578236228911453943664662530054362522786406625825084319715 1.1171896914210158113785130970151720007545314458719461911386251
+-6.69118499955837467083751892101670678224648806194152334942246489 -1.31894773599062796913779794039337064535297244408818244473093934
+-3.01433218879278086304004811266531920826656612504980036486732596 -4.43036055079177512036983222030565515060982833883522322916627615
+-1.8074784449549465682686508240230650720908236949126660081273147 -4.1308498264563881581235618615361624617553390114494887659479086
+-3.9477697397805474635806486701645138584498470939910913048667499 -3.0535499888316812611985012618975960972443009405324390606132304
+0.5202953557814469481323670718219880250738099511648465723568781 1.8692307935411714622272522020593286461226296193248828391507921
+-1.2615424927183205557664120440218754516864196912478398450346628 -0.2073841217959362286268590174668245849980148031263866123399021
+1.9491447341634351446285310253467712202466003846678728362636494 0.3128844045507168921078720572517666234209522300308793218592663
+-2.829210565813333564621641426414491050558298086215528873330744 -5.5170243450275225650157319537207767924020255602725831401543205
+-3.6254029532526109063187576479095893590544476038745203073229655 -4.9221383043262558906904746546393322173869836168460778788407868
+0.8074363934580335400570361493240788056901217567234364032367863 -1.4574131711292631931725643937733932231299469514013259761516908
+1.6371415919435100312917420772931291910485585521071115085569878 -2.7816606530538267443457352676905904211298592028184933062552254
+3.4580195515160021033530202487458362910416915292398726537478162 -3.4031572946007399704063347581571936884975916881959419127171544
+3.6206839659434818294473885486350648501376537950799399568196914 -2.9037998807224052509669332070028059964947836723567712122800998
+1.8141897458651774467279854364786597043815122307302161368854846 0.6375373344101538469645118375451834754052273557068256662150747
+-1.1262384149285996431894708030226127720480115176465223269931067 2.1787421699904782344384646187922368588066895614546307431166592
+-1.9174199372233700427833908601310279466292758980078644529734834 -0.6698422048819525269146039118055352411667856976645395221400454
+1.8852473617279721749182043658859802799095803712749049528477325 0.413962733178673767621159233733120019163560662077916854849767
+0.8666039214757618765437760815825966044944555071487116605307252 1.2567801730622824347280331666794139549998123421376110715605666
+0.2131751253763288285132511019300016508913165636723009005230828 -3.4536685414970957453718640032978849060598410729131553290687627
+-0.4319585224885683810650902790219374341482629665254449845529061 -0.1330314624340764484661899288076960493658463421741914162705075
+-0.2797279815469626466921756584415683598051297872827322862282394 3.0261981449260297585541535151670563253715774309758881848022152
+0.8359480459125776332787053715203838134379779166958141608747964 -1.3284550022824160395699200854739974115491130659519440138071551
+-5.019613284589170051402912740940688150340720543167424026113704 -0.1592959624701441915151732915965299466958901684125747103320489
+1.7806220188702161066464751047184986183171097017004853579546306 1.6672611874443126163040780825748194976632167110705146636329088
+-0.5454379131531490643271892397665546913551281483645921266603814 2.1681698658660527199494958072639045099022830368464088735998779
+1.622686043368817729221501353967138321878431842306234255282803 -2.8268644274297497553287879193035593132651920270281509009900457
+2.9928515792854477487406001725352230033955333574815670407342914 -2.0244469687565909336400982395734866254839746395965121597583345
+-1.1566254241018904563635667116446391126468717443481524656121326 -2.076739637173289830525336094780634724993943523864982293769029
+-2.5899668236966528827274880910057074400838964629078873175566034 -5.1372881881002881296906528944417124073018196909645303966007995
+-1.7966395118467484182767028306681623481776560588641168667354833 -3.0506620197324322858150354948546480264715598652368961545320471
+1.9338029594555111595863055924041305786646904329966424340918809 -2.8553323260700693430870280012408041029201054019211280561589958
+1.1715614179902192455611216078042139414158150441284070866132479 -0.530566793579238761948199811077069516461799089936402338320302
+0.0531931680522241575130923918895043234623803364682551820713475 -4.7619798858757056675368480233827672026241425400320733196837106
+-3.8531311898299967690638182517164542645331563779238910811693765 -1.940898797774262460861146045735091663704996598479531505546636
+-1.167270119233940737147926485697810940285471514519568473017493 4.65699832270437508395838147059809725520861520519666496009637
+-2.5134976099166332402509771976421912256905165217619373241107522 -1.7436113303408505331328753657159387331846215418501096192530783
+2.9970441038284690870822090996876516136591992130819855419969551 0.7278876251995242264922192627585898037317417016958853044594563
+3.0021247472854727975149889683804362670066411524896777472826634 -0.9695076149794000575597639414220952875868899156900091677364339
+-1.2893154727647360804301261922555684377822128368212159899076873 -2.3288490452905588684232309050590274461229356397403404358443189
+0.6995125470659544401907775816269365868110944614934122320731065 -0.1331617642453643274557007872660065221009655977890148631875901
+1.5384194440325911584494253784936772614926715872667922047662285 -1.6718194346062788216578764708780079385768335588218704722971779
+1.9213997145687557252931664282562214822098896293499904595999006 3.1845810257008719273144779130961977672553931443702358681923068
+-2.0592100187756853819293039195535097626654831288224600724408094 0.3072748412220004785099525353411583140431158291692175397918493
+1.3825121172011356591806833477516949860161233519219525495127326 0.8385090273667126715255834507097143251825865610086578768984838
+1.5081869872032830043809740620467761873635719693455875906844795 0.4351568354335946743535032301364199523372864611855352983708261
+-1.4657229638883358540954830744675346866548382929082748058505517 -1.5304570568964749683434400905136789260180017918803213608960857
+1.3429415687973409793593611498285917413661109563483234380599156 -2.7133248115934769951864457453050524984512572173834361221078472
+-0.8441687938467300963296015132945212860342582549183406167224156 -3.5730136101285305293580187386785173015335791272133527375037644
+0.7358440139220769449736493046765108455047241914549470358116322 -2.2036392658895836135411813028695591945910100847145587111102648
+-4.2717775370275705358062013957058337903834946811353480554694752 -2.1363377146740083817890738658658720901703042997564211594972139
+3.1711732304986572958171105236882811642951961405791156042114149 1.3316960719367056425371034979114293286257431535490042386572641
+3.0197786435099128898459183937295286983487564913307078168459932 -0.745173050774031796502600693109299163023612370760267342328495
+-3.0386207598822913921363394616813329945186710239518641296423806 0.4747360806855077180484957767146466938941641788026160311743713
+-4.1053873621372566374861564685866421054105770216739549347693922 2.0191041585820768612820295451785682599085070689972296698601998
+-2.9109926928364557239150241584981715861045311164674974516875985 2.744188331812119271961133957861789424830275208890011279290853
+1.5064161273591698172862557520678739180347296421072314253322767 -0.3017030323007792462403743225970105965507285654227952839380041
+3.1825324712997326970142958395538744959039426318311945655244019 -0.9236732465281035877859878262756839807406782258774238092811962
+4.5143998256693750265365225681791096364485439680053220980764714 -1.7734512119167369984237608865233346012988040211371571228635032
+3.12152759870714372956862581658815329721952416914533040236169 -1.2186938316581967788065765994778802014900431179136258926948383
+-1.2017886592338003938125368823298857926761021636342382611421737 1.9656342479736986992694190154450753414769205973666416709159972
+-0.7531360556845367367304276289784692790612403860585583281918181 -0.1461791878912858416845223808130201394302979683086212637381322
+-0.7493455310534769756616019377890118933570967527281996269378758 3.5688270499821767169449264024610612081066471681884953023429926
+-1.2554002448022359722944502290842007440908488897028440452808877 0.8700265404179843736035943384393383132807754603235995346847925
+-4.1440428247080236091246377230582417548009591482504183354973578 1.0156956492698971760728616942557873563789501307091465623439102
+-1.0496162236989265777123860885192577486556038103151414448907232 0.6854443720303419543251778121390036938846194100024416605928064
+
+0.5356506216935318567168964679980224448474954197740742721804425662 -0.5458569288127476004682590208265714990676611459841400026017844665
+-0.05251382922654688111844675415661855947948761360659425718759593363 0.1856688150172391527088040246433169286752829500750590071977203062
+0.9518095182124288782767378820155949547911261560251647626870735792 0.8193143821859564924477154245099351963436429074028089074430038904
+0.9956223852813107496522616247115213137215848581937907906567140918 0.4604487491339531156973853721884505256237012331451385915640611729
+0.6741052796006089834676571454955036801632897076493615121596900136 -0.8606535828683120015533980099014960687963233985081987928030018579
+-0.8697750560716627155371707094260289644371901052310063829991901781 -0.2028782443808202039078700152556584967073846417006795171717789768
+0.539462018274751480324642644804511358394409237082129058457521908 0.7727562160593342436881229708062656539223995010850938445718232095
+-0.4274845026027779916855619203781095649893449575458629944853980527 0.2216455512897554102911455213296037106714896153079531893725412128
+-0.8604697501072873707535504424154609782723273602355359333803551115 0.8060520707732849845829519568044036159880831172244051400087891596
+0.3822062430356176188977280281604014506988427784943414973817258933 0.2494984458565048492106180084187393465587010901621886528310783225
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.692720462930580375837580120465281755163139346395305274413909974
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.3484206501444620766420233468327938525050794194268200530793896515
+0.1944979336074391420204691208780533563017707991268605634570366201 -0.5365723013330725289094471599220332027885871668229904917249565862
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.4969838973904267472552603461634423875526049699439467087064029146
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.1099633225953045478540363356794430416477263111166654723490589437
+0.531416327611542071221970089939764430329756625444579259583169101 -0.6756547625687923165084584127259768184144567299620396875756298559
+-0.7793598342770851820561551396646691186537674923197586552161425487 0.8687355316920355914551191479618699998090617653378680974249892199
+-0.04982739811897050028189209963034074300557183166488389610036293982 0.6573707348942885034556657549189062350008259948442460481059842193
+-0.2152831478765442996690076717147867376683641103330644151579049018 0.304092255431421724386276285709205877741518261756931899126135274
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.6923315191547459490617708873077670147989473956854336908747033971
+
diff --git a/tests/data/nfft_adjoint_2d_20_10_50.txt b/tests/data/nfft_adjoint_2d_20_10_50.txt
new file mode 100644
index 0000000..3a3facf
--- /dev/null
+++ b/tests/data/nfft_adjoint_2d_20_10_50.txt
@@ -0,0 +1,360 @@
+2
+
+20
+10
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+-0.3667543868355520941544575938257847368987701408778114882987979123
+0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4393343513885464893650781262914436001773705088850610475139449829
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.09724896680371957101023456043902667815088539956343028172851831004
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.3358534858018228008930174455675250519517010131613592135710326757
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.09206201328582059293609619426014170729486960607917988224801612305
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.2657081638057710356109850449698822151648783127222896297915845505
+0.4969744253080455744694825346756894506554753184704475582968873208
+-0.3896799171385425910280775698323345593268837461598793276080712743
+0.07714972696698667716678650997245420808817430827447314113682745907
+-0.02491369905948525014094604981517037150278591583244194805018146991
+0.3914347841983986584093169466825129403698312444687581041683071856
+-0.1076415739382721498345038358573933688341820551665322075789524509
+0.4098351732528003809102269734570294879975455702584035273166455779
+-0.07151629523327176189411207208538153350324597543738741809574504658
+0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2729284644063738002341295104132857495338305729920700013008922333
+0.3525707830542183854600907186155249059680080381975147205747395167
+0.09283440750861957635440201232165846433764147503752950359886015311
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.4096571910929782462238577122549675981718214537014044537215019452
+0.3029583073136138265829962071140439545004830470746425534136209257
+0.2302243745669765578486926860942252628118506165725692957820305864
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.430326791434156000776699004950748034398161699254099396401500929
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.1014391221904101019539350076278292483536923208503397585858894884
+0.0908567130718900285397128207157625325081936945730573057287310191
+0.3863781080296671218440614854031328269611997505425469222859116048
+-0.4384199598876636262124112488913918123145588604895783942604512689
+0.1108227756448777051455727606648018553357448076539765946862706064
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.4030260353866424922914759784022018079940415586122025700043945798
+0.06875288804967068748620631495815812310608096163779380055154102558
+0.1247492229282524246053090042093696732793505450810943264155391612
+-0.2206549379852138057578743061470069389191225157277024467333194435
+0.346360231465290187918790060232640877581569673197652637206954987
+-0.4643197195119173309525456044702917254373982711189458917859034631
+0.1742103250722310383210116734163969262525397097134100265396948258
+-0.2381993349353649959266405506577935293738035850399354993188862868
+-0.2682861506665362644547235799610166013942935834114952458624782931
+0.1092122305172402888258153501556024641240468035240884586547566337
+-0.2484919486952133736276301730817211937763024849719733543532014573
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.05498166129765227392701816783972152082386315555833273617452947187
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.337827381284396158254229206362988409207228364981019843787814928
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.4343677658460177957275595739809349999045308826689340487124946099
+0.1729154576995603929033538546168666485286603783333729055438208098
+0.3286853674471442517278328774594531175004129974221230240529921097
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.152046127715710862193138142854602938870759130878465949563067637
+0.1313277929451562487082545713868668183502620330575886917609655136
+0.3461657595773729745308854436538835073994736978427168454373516985
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.4398392223920449400907046631777097726644650279540499745251682393
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.01189153022550738271020564024560338180911293813423246023331802902
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.4927498363209993415423255652249335532347992639631937083611382401
+0.06403862356712929207278788512728706067982585049275341514041588589
+0.3358502781831149238206790069978103636181122693169617235357165508
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4189021546786846898713994499102361111761337212340449822195971588
+-0.4195634668605248660892165218851209239268844866648432819445044954
+-0.1952017580385246842215057574004983762128495778038110686132947133
+0.04500489974247188801035267400166477957461676904337052075668156194
+0.1798107471163638439578816295238259584468770453133038678573909804
+-0.0883406168383272939574326124768842541480299327543389567802061586
+0.3979314169915041735368106500472849935917247124619023375003704306
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.2706265164684795897847947709150290937598347126997964072971218439
+0.4279156393274057309236852245921689139491849071240754852340002326
+-0.1306768866297050878382755406991227297651262848493266576034685194
+0.2678253108467659283584482339990112224237477098870371360902212831
+0.217914162026091385849095108839794223500424779425144887657128012
+-0.02625691461327344055922337707830927973974380680329712859379796682
+-0.2968732896149628517099100943143613476200461843570397483007658758
+0.4759047591062144391383689410077974773955630780125823813435367896
+-0.1609020739688566968967924800650866311305197251794118595176451781
+0.4978111926406553748261308123557606568607924290968953953283570459
+-0.3680457287373024960717322225368521536710342004223667403911426638
+0.3370526398003044917338285727477518400816448538246807560798450068
+0.276593682347415558636492182615343991198000710613327895110370703
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.007087880987108839466396846546797728109882567594291260004693055154
+0.269731009137375740162321322402255679197204618541064529228760954
+0.3448794239046061622109983794627803016406640741645905667575177771
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.3498351569751814493591869134788974919431524046935587950216858142
+-0.4302348750536436853767752212077304891361636801177679666901775557
+-0.06548388787215626885971146251934855059017806534963115617003157257
+0.1911031215178088094488640140802007253494213892471707486908629466
+0.04524751634490719501230109883674608756741975505321511051160810143
+
+-8.1538297649735316572838940475204899623650077017402045558007235 1.0446138153932922221906444073329562273328233506989505153813679
+-0.3926043308291172396167449122446295135169550408138554457248172 2.9551088357604681000523902805583426453324038357855988298415071
+4.6507552328133746319521909786528798549036011809119566213865851 -0.7952196320415786070582710853402634862825388408320617405506388
+-1.5562733533021015814411995689838026651573844706979111334685378 -8.5735477952563739602835819767739628850913847018566930874519525
+0.9542348737684861189724488638669534884378985782105695836347886 -4.8963177083860589970441166120901285523777148521915334974328422
+-0.5371446602991768521330107198586877472406073657633286463115097 -4.0554750119271739608584686501119853883905399831069345875014018
+0.2272248412059979737198907945360388156098581080179768862572771 -0.9826159152702370839503869889398247093641970556346398004137823
+-0.2232485438837420180166373427622037214835806599481254889226621 2.8070566385632490434576352830011298074828056019911654807395842
+-4.26191498479859767382463913753622437517030534016514611582985 -4.2247127800071302676783917985020947632860423096181370074551914
+1.0503693477060603258374623448591064658106253931592324835418334 0.8813791083008804274912020316336745095716438401828104875272926
+0.6599557554633589340352982742198392620553896245647275092828816 0.7270574227365132105192077422624991471581529482005852794555746
+0.3862074219539107897729858517615777742116182736759595727122567 -1.9590492853305543387463202094240736689948524531888800869144313
+-8.5542564459167214959556482667633741767098172563538753397134885 -0.8962367790741595444404446412504749850130830741653076616543099
+-4.3155855397153986481614630144926822843687966536796161830040934 4.8268992241509849356761662960067017262489584259806794267547471
+-2.7668343676551258987470342738281279580962176441695241818382935 -3.5219083081107368369977740706118535643459854001944900972134347
+1.2974134676237122708376274977652973776724660841520685548325671 3.3620795362471436213997747016688127726854184278245487634029734
+-0.534247132699985349596609964185300298867427881391390147765421 -4.2983503882746858016780067112680956841235590764408079841575549
+3.7088082002019955399435240629405649465660565242752506043675474 -0.8640002388810522023175559648050533899017145473651248814445563
+1.3331025708578111188707642296694831063258849729604752431783335 -6.0891933674180455234830112395248065310886647567861417612142865
+-1.4140462794805133757952121554095655778121472650317360217858417 3.7887431901980835806862081873756853492723562048534554067043811
+3.9956666626536394644690758550645191612201724928429185481245656 5.5421461799183028890898441975922873414295649049973712782289918
+-2.1378686564472973828784166004551581180544118279979242928038046 -4.5822582161176956168536623006459298995523094231850568948009629
+6.2567438222439922914657557281687253404587824752009587719777567 -8.5580126567143085752353097786685099516523347437449028216446927
+9.6160162531245359786371553906213813629316291243283663427692009 -0.7468710179401818197103105095597946786926273948981513444252659
+0.1105226851256026038967997490405778947350791875658627373556312 -5.517399223487806352194970984402008346302130077392444466260822
+7.8296287728244157916179865785867371974891203033357562212750212 2.040429712506042564133692995893843578530921823005709750190353
+-2.063215182290650462999666814227205242954013760064216877710339 3.9914388727004790031843239176100012413860746609280618508791133
+-2.2143397660067804003911818535137576062362040653938006672315657 2.7505364539997554834237870388218063659603388086260525192469344
+5.7112774043385070513657780282270566818077236995721049061784166 6.542922171019153305789128602324588257532480422370880015459871
+-2.0583838351537674500492318171510376018048578341011661489594668 -1.6860354037981659875868429473809021860099156328475775455090315
+5.4998322812321794538192839818709922375674352722141284335719688 -5.5807476573642018464941799489607428291248012077805773020317247
+-1.4397635057337262012684523200486139426864133083311391970848368 0.507888977674990459375390302412861540926988610585640147117811
+6.9294805934175505906636152714980344701545152805230061760605243 -0.0480261205311655207969516737100151544636015501627951703306541
+2.4687373263255223443512553516673976337638832182581624145405493 8.4571474394344203668828590686962866644250814280282209875022357
+-1.1702310757872584944748803151774076553443058445504984242317611 -4.8422291313741772288104946214771582168760623061789783117495074
+4.9271477069662302768231079663868159274781839065258874596106612 -6.1685856491132263352084581318496931993439820961413181816821392
+-2.6255719052177754640208561087960636596501445034493395936570788 5.2767289902487160029740843042274288808131123881129739516142225
+-2.9290059342759508987770018352699488708621427045439313555642214 -10.6531921048024740871868076278895970429516216772044370204231407
+-6.6339396898899693079864976650198472244595151610031752818660905 -2.733989071550479807138908687275103050855647128282624793021558
+-5.2051471235217604548305183565910307288520971462825354079635324 -2.3574381911751558350700225541787090007060236415520598932568515
+-0.0501014526991785377227494860712878598821088018383576343395907 -4.5773143131938635191132907046392815151948042025332892270608167
+-1.0818461547644599473403966331525708769234196103241931593998647 -1.0561272285945638803746922511758016116683126155398852913744895
+1.7094265591720705980919271063155648865925403275998930454949679 -1.2755367469065461333460644432910293957578471005353458855702278
+-5.4205641724434824324517687770363527294523783394628455925047397 -2.1882949511697729320862123341999410255933054845503952267904141
+0.9021727010813962799271189292182369044039694047448059097773043 5.2472691463045010494648173471804799759931629860985964487085665
+5.5279861324973035224315432810858650038868070618354756096380205 2.2171051317224509270274651327962424394969570923731702711201283
+-7.0517370738055885126112456550861339713774313940542535923526714 11.6224469635561584178623822279086054885506234590498921146430938
+0.2831596341416966112797633415996827960672931115173735391598971 4.3831842606496714409875688897086057895586026509697124626105713
+8.0681496629865323914696617866381425401764655192318184687450887 0.6129467337835388475055781823275156316220508349388199987862855
+-1.3814170908210347487727609150187333916208282846462834809736533 -4.6719021471657847012641107687459646915178364465014721314842915
+-6.4608744686383887438561957238600517088653472036722314026006522 4.6961993337009269553920937576401583820421685799266139250569598
+6.3078298219097506789125176132825554613035372599772772919452569 -0.9950602750995064746201203109002483376100510259224576855146047
+-2.6195325919059371488466457065334335173881687129133570606693649 -0.9889612364991775421471314420297572968746611730788171413990941
+3.577712371817730723923227832822667783299906969863397139593835 -1.3601415499296891355432263484645376198416899811134574974435472
+6.9496490450898112270203880589025285278922928049272640258820334 -2.2622559160976132058418857072858896539778252413131088319914674
+10.9924487483533112692270481824649417757542065874367612350678829 -2.4617644616976418222396294211200038949024633411925640832337682
+1.4606323100571924155657301200759981485852120161904445460986176 -2.9685043332064137209356260257896181818319088422901901483705382
+-3.1235013932541411110533288124878680529808698825332593671491108 -2.9126154085119350992050277641140772316058875725975147199137032
+-1.270233127842326360553206934311261970202419775883968322823334 0.4765847948464714690435421350620954409803971777649160660432351
+2.7545762410837285024412321202395985927313912992387965866885902 1.4118976294635059030373577424453986059038781258530090659063431
+-8.4030259518253682759630102956862977686308157487242238434916841 2.1598893160599993274400583787571910412045124403574009016179601
+6.6184707156972537901007323111059773557888578264775065557398571 -10.7882863438551850524679090037555347219090506900859398500798865
+4.068022898636496502215835301547828784931363866390612675628113 -2.4047017202871294321943483205642431796872895781670462411556563
+-3.1526552582517143195431733160047909625455726920571703787569948 1.72244222485945385272772763426003406573995593308345732099505
+3.1310689262023047520116059895614739461632592468539775064954721 0.2727574498251428917494210003015159633330988988918977699087904
+-1.4960784563952536532513703748053980451147515112665396646447224 3.9099681064256600627170497965781315343941946603565126651210602
+-2.5347545639482615220446871924843369772622442238896762736398078 3.9604368050787691706846755853959319207075689750041906345866144
+-3.9015034297510758571550770250670382822946039235305454588553971 -2.7835275806709171409585950352481761939624101987410673928424859
+2.9551980505908917601513364241972570840820441981795444993813 -2.4626716344465069010098843411017558722921474101414746215612661
+3.4849882076648812530863979549385048360540878594438334791768461 2.611117193034885627572502330028100612470538869242820085061184
+-3.105236809970358852135634538835850680364281067865917062045219 -3.7310812820841888487988097984346599329610426009721392734893476
+0.8904513341711976564656520853997184012380088015951931330011228 -2.6488096101889017917344094169791054583461663275320297065506345
+-0.3388704604116214849814372995296292979556110074471156531584387 3.0978651896903349656266905211722066962254948313957093410927145
+-4.9225321691415802856646718810381952894901354956776792795619512 -1.1757881594970097561234158762370836700352111729997283741086221
+4.4699364420123426970363433197542343008156715038803589455758631 -3.9708103193527619474503983162106051127512282878839893983448819
+2.7028476545753199128283569928681825925188790401964855755697728 0.8014315473838958881098165886246098506105105756068061766990961
+5.22910806534000562774493007781127839153852084050656098357753 2.6719155456893619186320435980921876644016310266741980831597146
+2.7920080498062171327295304398034149372399876546401395258572519 2.5639886708175471173426653159520404301205558349991764418730828
+2.3583163742200654414483553316440442493463713163218126925079977 5.2012542997819617128484884305791776669269863301179843674050108
+8.318095943725714042466215783969322602912952958639402431092961 2.0514482629059555327663142672843397823511995072143031298748192
+-3.225619749803778043972148765827008040960116341001952237356436 -2.5097397757584089713458613263348646816773448213155196036831687
+2.8450263579502948894784068536152378252083284541341424419985297 3.8501252208493512773851426944271471870349685957745802598080288
+6.6602756789059361450511320006617074734263614420785267291219533 3.6689374953405411198552873875547169249477892637924083724926199
+0.2794264469575887906748201340473782633963893740216177661689015 1.8183896619531425786687932390094200155009631935086081375064918
+4.9566075740256159298095917237621178071141621271664400066815922 7.2213513398625162107655694147519468752565959063305064365904706
+-1.6206755280810762450831167082804842245341838066852266206854256 5.0027441383839234081238740412289684577388038442971304280676822
+6.1075566529714280296910310222278200926583244391481836064199137 -1.6292998776515256023875961347698896883583386762484777527386054
+-7.9181874043793432774207887953871677233612734421379452450402339 1.8250404120465920220417893704435105916488801654419165580571612
+-4.3723798370731582120337152081401753596041770692321508566374326 -3.298434782046257451526425291469848364341949664371718609418901
+5.4192062563816354397731485512751207652071109983162846565293781 -6.8932393988105967009816799449967877983069763483723471514731276
+-4.9583305548207474025767096128382545707437377702826112124672308 -1.3056862633337856904648640852761495389704038870195362932207069
+3.041555587406730136912314684347835470744714699448593814431531 0.3678174104411518409346479323367584098579191364070805690335896
+-1.5676684139678970010808179592179292368054946226864748338146097 -1.7948522986541170853216818014085825724505554656886302706745306
+-0.3378105885253626434970351247468788408842175969294394089836889 -0.5751731223953160846631623464249563850635469949401123102049236
+-5.9387148368493912824402112057628769097385209541679536904097616 1.1466625741290617253209097801083774928604116749950744844181638
+-1.52196825007167813916546474486442407697388254815575281389844015 4.4325644497623223937557364961173923851584099541356729367474869
+-1.7034026008868291476123086617532129676512307347387902169832313 4.2837269656620749691402497925370178672385746510222632862665847
+-5.0550623426609613812782019464670281499794813269603645588993806 2.9231379321827260091114391286176520424093627799504163954652766
+-3.6081415886120998735024016047584866086730393231167670321131073 -4.1162049027973579219864302515192819432373986235414427084829425
+13.6362583749257462850551863589536803480749189479913335418164927 2.9756951103495065413288932750529651779896877157388081277812671
+-8.7170249073491419042106791724869955291466359904533603036948711 3.6883096141751329043513959008806488901080000067898033419508115
+2.0222924808236083419059240743246591126419848176703581839112951 -7.3132147240290126498566328041436678870664889346648070335498414
+0.8728741207158331790158355475399019533558982370803125839991594 2.0241354688720483342793932245429363006870210148382801698390175
+-1.2927194089336657263284585415034146710147430409603341242853653 4.9834700759099257643592900638496443303880847054306456880463593
+-3.69940146699489871894586868275814925113864211076485439986458278 -1.89647105971174089267865701017489076980844594337875762839589795
+-4.79530968124209425485052145966292630285889974485326287728490672 -1.4087044711349932529598820180194966136049504557421709517369435
+-6.29123478217779538497062145343635012904186787322768711661601677 -2.43698930387018085860042210474246611936938774909746872184523829
+0.2087893251750190331489334206278639169824517468681967130260748 -1.3536590732538610007777518429651058034886028211541329832421501
+3.2483449150767204519476329242128516600979734370826904820550161 -6.5399983976224334212973549364477792170479733108579987027731768
+-6.9956441205087571615466752701978625551399840958199391586816885 3.9088231373880739806473423474256237940243228281150724387173064
+-6.0071700290869504805243202020148397243602105173035846861918714 -3.3421834512547591527639141468206501860748336266043762756790148
+0.2017998469433513253340497968352052229422370288904313862998544 -11.7158198427217554440157343501649989106321248767653280747007271
+0.5723190286882742663698478568897304295583690789353196159563581 3.5553411099743677934084420089684267454715962054227630466595189
+4.4566276495533968553644545092700921140535845858644019089116993 5.7144476407172941868814796519557448262710005811834011765545303
+1.2998100035134607463956800708258376000993664410846565504346658 -0.8127780260555050979752564421100062752179159682731469319621509
+5.71536548469129713088727910133613375333118094866495197129567342 3.81934674367045119808067736902042657697743526940740182685609741
+1.7910693593688416584669777168668289748444927394047768535338104 4.632874637389625180931600406613718615119945692461945581085383
+-2.9319907414124193725777380458650952782584111184250393122534256 4.5123347109911473703926360577661050392827702400801855386506007
+-0.8836375977254058860867380855335243285150877783769472280954466 2.9743561556595404122281381202152693964999872424598596437959102
+-1.8207595764512624984981352317364436740687045758383193619234452 -8.897587382606369694257927199254406892893533321674406377344474
+2.6790231788783744842183228789479879870897095817288019813411188 -6.3859752582946713050428539412303790884557343312905430544818844
+2.4764669662704193487278058653996559736467926356918773070195021 -4.1028776737053229638833404921982131542551906762951953307895858
+4.0099052801528481785016392638418615942259397890271106531492674 -0.3325895668971449642034307506263781680032253461068493231029118
+-1.2464770935343237282025666669582933895525945951733070849393716 -2.427288831159071858197831034971018017602027014575510533857281
+-1.1377337725080819689798399157504040062915639240846866155233505 -6.3263959850181809524025376242306994365706242901662248928669326
+-6.0447856971770776811291705118411179878424545039135279253492135 -2.3448816854597173344828203186425252806998497710426467757360587
+3.1435487944121057042371483493406615695084708605109135313889742 0.7539204478435333040879386874743962129909578905363042618781042
+-6.268133411460957159566774942263770075928321176453830751903205 -2.0748180675366570075295280352343154814399779530957541771300679
+2.2071322197902714413123647772901385838283595143257862839497242 -2.4601421150067196419972208337755376832630442442959324440385748
+5.1907235497467307290590665609547856693474522576787706901140134 -2.3374580597506844565852193883289066879157880896883554395695574
+-1.1867868980440834316437288535160698274457621777388618487411223 -5.0163124336287304917821879531762108073729522615628992782961318
+-7.2013032429704793847411122412693999258099634548753142964557585 -2.8227915659829470430978027983761304035542975246929385689700111
+-1.5273309557555682683258021768513230446206783948158524497545148 -3.963818923475885699115569218098608000377977577765403818720581
+4.4163659466890042011234795949611433407771075529225651369697114 -3.6357936846625804284898873639633525351582080114825286883564951
+2.0270996684718551739687379687105154631259485418350023209763127 7.4363007718462311904797624867640659897067464961853672610327451
+3.2364857932245613652223795610504121795889600121411243751689161 0.7334150897983436244379151650991364087162566137433752978340358
+-7.0023561735936336533975603858018671899356619014071431776836824 0.7631078362170642112843967641733811504383031732390008154342333
+-0.3523739996882535656844347104794077630063468711647741370077655 7.2954428584925927077293439462837045056935115058973154274178512
+-1.7606408186194958126739177877744770157911177348875245787207321 -0.060343349695770756134893265366745143306355255447093591235262
+-4.2597595687275977939486026557715810948760984793080354063616499 3.9252314816044713021197164895742447532773381778354168642689117
+4.8611023905718789086590560481195383668869232831152107590907008 0.9730455114579035857473081661332435916582849955254295633208575
+1.5315585396899640482816276736647622919735272537330635273023664 -6.7252954220905359846978481263749014079047666735709865931804119
+2.8689056270368878809774225544997752968480423228079280651689561 -4.1753122822000828351428531088901604154363347240412609226349696
+2.4326713152251395297059260876063084038982444392187627522325838 4.2641322644491295178629265483087639838455930943408776166020628
+-3.289163648969469891001399555859968691862367185506206061600137 5.5121401344726092099320580818913307428033575042764763819389704
+3.2744348704036206261812531596201842554419952690613882472252196 -5.0078924784359639212272356382526549780872643327835788631186097
+0.6961823340599250530450530464923258181649425587733020105954346 -6.4722304575275788922601504570068033193132737689336039672587704
+5.2695666762817309468254658583674715447166467170696362376724275 9.3334337282503369145972034653902439390038534944004370489892718
+0.9529966205602271930706622677813663606730655040437246656334263 -1.345768757520865488007892331668603852901864777254468663328025
+-4.6127522322688001835935536419622561209845092179983236002062989 -5.2857518721108482200438943129644477028980252027750202051949198
+0.7401416204472310686440111322612398308442486165074278173012358 3.6094964863644246360025965685088791963455404299635810107391069
+4.2253088851566528008676315939876424784824269094207391328892038 0.5865280691281476097749178755959403200461712137956173606539377
+2.5206484111312507185107752579200029534528970761836906107115089 -2.7019930781713978798415640856820832220154097314392341455590445
+1.0548100770748631391456385343411574707927588432619685510730492 3.0100837172120969294937429470540501002306241505764268903553286
+-3.1946073843174180631099000370775346704300170414016875050395852 -4.0111793793284018872227090954198186693485757207002452004871439
+2.5555537721427155688638153585790388890204733669345690257399201 -8.7902368011864558861015573471908625422370019260801193870097758
+-5.0690593065761379811769337971154819843135348487838403569876483 -0.2599098953028603799023047274518258717035119560509932929070364
+-6.8720830839754265775738890790873317050396721004081691592404237 -3.6949672662306425593446956222739845349502741097022784576983015
+-7.0377009107011802832554298754132816629914947338444283486399196 -3.9087875174501001144470459398872356895704467347993892490869662
+5.2734547703207512105654627879092828608753150107928744083958933 -4.4835459920454890473474923947748859115372751007879795332435515
+3.7929029921203220852701099742430716831494604311303047633328639 -6.6329952128847847484959259995895706505310097335764179205246717
+-8.5792541934717769797444053597660283142462277940731271521504053 2.0484078703206851631006892933712990923736974845057974265376991
+-2.7841921659183541886633741970479044300929097872358671731101162 -8.6658966294791545327922791341241307237270483401221965531248683
+-1.2848700323528827556877465888564660218675380908155560700859939 0.8512610916382678379947323322569905310803278044758659777291289
+-0.023701282110187393811650951500523126409133592763666623461883 -1.0673156282538372237992149792737696859080950116193765162544419
+1.2283191747947195785869024815113367358776552481098734232078565 0.1797183250918302156229916471448468328504585057123932863366549
+7.6674162516969744525523747568371349056990986586776263369071305 8.6417644743160686865712842310038632743062205427355963615365018
+1.2457714527932280628862398509141264548454253601859783716019534 -5.1282957716765523725604747395533881406328571310590095129050399
+7.447166834681970872986270265375250485976547845196215951544245 -0.4656217036645145396205975000795503494404808385358987674786585
+2.1373569711364830562938327195601879096137742524552147462769689 3.4801249534662907922054198832227592431920651108248465390837599
+-2.236327305451552746882393165122373652985394796771302427516205 2.1517374447270798589880763588709822896191429512378368685504784
+-0.944904543843764168444560675072651818361073717143637628127767 -1.5845861159803021823876140837583514622887424866728336349378445
+11.5383276442585438875716183764407847773269149403113994384550199 -3.7334639963379658893737276854861668538534625057357433573442312
+8.0496667039119494943314544496026948914874969007760871815320708 2.1402146615432508043371585715929968720227706471238444829521028
+-1.1075252584110453792303730545647312945652515139915773158507376 7.9918734928861232843853097863097848455825164841499177482854912
+0.9698539620219543768900635573118397545957708756725531453520066 -2.8707470437675201557119121296145989832726052547584431210737854
+-3.4889039245738617684955993670609843685885049330422741096794119 -1.9893157965803065024058088099726228334142120824862916515410316
+-5.3213756942675436125258757636756685335338493262930312142007713 -3.6834527697888591806384288599690313188946311986439544854037161
+4.0597626605351739205139844375697293307574453802097100628216969 -0.7022261200723540625396561941016580251045493542085446061889583
+-3.5080681179439067266695192517962013695976594298030048395249615 -2.3154166642776415753344962341042575828518317711751449392766794
+-2.2059068539628321963149612290300189983186315993426599570173741 -1.6383775057303727465387424062642970790083188508259112479496592
+9.1205338155509895554386143288224689628932583692125502860170833 -5.3423083350548966078146298070084139310198451648475516985314373
+8.5378388830125092762630155428333086761310042513967220546868236 4.4116347272852349362916151736002454057665544331021519250859232
+-1.5725467050524386979808785526546630764770956974422427045218201 -0.299272978484200698169445750807559908279425841656382338760119
+0.5892723286332595390898490146465524717503316338114694261482014 -1.2378993620648141849578880183549331777717408693492001447051289
+5.4038751864105106501894897694351808915142415197137972593966164 2.0473398450635784678109435411010893572598024717447912740163765
+4.0265483514783884780206880038185395224413359231427557326921323 -0.0471127228933000443664735545220133187546386802797693733069946
+0.2708300141637862982453172714891648608107332471563207906933748 3.3599322406504921770299324516877947138765653806908570050213372
+-2.0898667570064907167406077171049125240891366930516342680834525 0.6643203864466651523706821492902392791672830107775623031121451
+-2.781374747767230699357374482379870866385322997808140908803782 0.9701148259711407061038041977355727177243269671811192663212197
+-7.9822761566572304044869106266880491421379298486464364574668666 -3.2127725817442107413381555705485986339188753486450005303507003
+5.3076830182659499495508203826117209129231525806830962916347568 -1.9462330665124704961304958554565616428430958596162510821317067
+-1.4545052354082585911550303046476185731354280282304506985287494 6.1295870463198650085808890202718823575583713624362114957021458
+-3.4826678236571305426480453048519971606192252539843548801507108 -2.2897380126441352997572938283867917863867117349765793286745462
+10.6404022974467871452272289630133930003470981766812770127794926 0.9074034378693376988260175877946762356509755660607211537521573
+-3.084142748934494648067473704948997451523646707708404075834035 6.3554230450582354106764088352134383585564535845258694223709251
+-7.4522526860122510070898864226611552810822522224257884579353907 5.8137239684133185294477909744672259431859296926365624856682198
+6.2234334890150854034306480289884354848372302452216941004939563 2.3246939993752236317425463010890039757502829537251939112310647
+-1.8538677439511816542865492754644972269721337119703165841164038 -7.3520704800812416004404555362883014299410715705323620785333744
+-3.3020778179256315365096610344159511962288677944964793382637537 0.3977751484800480777363975910680319339608655642734117747400657
+
+0.7721031360269444536624854764846278079390436516442447307214583713 -0.7605582778547942408060351317015194879473019118917060721292547632
+0.7113282365127787106295924505560767722199840055537543517442585349 0.9359455243018989598720894094889086512450300947660621306436953491
+0.7679535856628120283990827155162180966010981503917935490380557142 0.64033297030031448665328828110131678884788143990971470968562862
+-0.6127602430473631495393181955733023028663546816025211937039540524 -0.7566145378422368715122716757726615136162685098609876740055635889
+-0.5944056790460496081717996899055920305811666877696698395774078378 0.498393464867089132881118789295770940752838691384942740522239679
+0.9839367502424209997890558933686976016082869978582241397510153252 -0.4971948424110283155918942363898656650230845195141350175248779212
+-0.4548419343247805224460011391703079342763504118566706946966391853 -0.3682837387895926737476498418989480477365801929350913148252356807
+-0.8849845588398620212194475625021727518116463369860566764411889312 0.6148970507477253459184467315745337121338375212139515007860628315
+-0.2496600323413886386258990085306122333313701779141184118995463959 -0.9083524682273578446532722997799475788834527253595073048265657245
+0.2013567579813494116381818105314838610969816486807952028421948124 -0.3916716877161613504785809028033398517645549846406356231576213868
+-0.85858010457166611374976182888109386496982051035674989499979384 -0.5193518691808852117378350732261309854332184624171433727414006814
+0.7326702292582058588316598422918662773838658327971514003421703067 -0.9750431258817692289559363598684739941265076062018304867776204819
+-0.2697443704573465465233716116511309018200366900116819867580635278 0.05005097085661604605086728229374112382053058454731767435671635371
+-0.6468087813680422377672655136982917947328505318460482424201962 0.4399150750505159978489133507713340072340352057744402647976718275
+-0.2812302577494115409480047067683469320314228801749259890701395474 0.1872909367861505164718492831692222169018789408412172493435499423
+-0.02167413194230472805204979364706614220652157873015883116130884482 0.9419321039051109549245680082622391092246632631231828777233002149
+-0.680894955890704100546661726757747116024714493408288024374190234 -0.4287041936652777153072881590344721321081952456510997660597381855
+-0.9306530725185795934583927665790248017610038861531896668451002839 -0.2333391111205556198207256592076331117879880842914267473885863455
+0.3319152007540851906913026983763584438955853838764895977762668678 0.7889477067277564731712862630611699647549102063099584994888747696
+-0.4414898031680223608932387792017485771255689761890070706015387399 -0.2563747285446000361218237435955077669028092056157149416120292486
+0.04675554236208552284539297942143061834219393972333359647545914081 0.8211574497098423675796354902233745259806437217163965161734702361
+-0.8152568938325646993310760006867681539054279301843202148958871677 -0.2430326281692574737943057410600918611450147916626606070615468027
+0.3952163240756655529212705355453418848569049122249531536768131848 -0.5566744269539672218404388199827460990960984415899809143036909069
+-0.9395163144138835125672454933008856593503204403133472584898229717 0.4524110448637644360868388875231267640338311624103409145041788539
+-0.08780353633292157461769946866167963633505729824902226238512671868 -0.4077100331640054846709900852315956380002910175183742932154068317
+-0.1743560068378512679152575299947443762504689480476570621749324843 0.9925432694290908433525570320250227385826836114793383624485189244
+0.6018835924636782523215034400201993341434060856497418585329625279 -0.6845441772530325736299180977635806745002567201737916085152286412
+0.5094537464059880326374352490064905763350159638438638190213421193 -0.5689275448635581694575383584343021970227104177442089801706330228
+-0.6412882157453879879998117648467144628970706782597054160685555631 0.3985567814775143901221253743791327148945266133080683203695999962
+0.9017103216368149546517732133490469846549850682301607701578308401 0.06961382826101090949578301124383292455559947536661707583968975184
+0.9631270643127979384664069651403286361478505285019531813591892173 0.04307050119059237005387541827491059927895209375649378090223139587
+-0.6210835173793688086670082589175993809833456274087668762475476635 0.5849881776459916509815348468661649535409940486756497653761724118
+-0.8137281645240375388576750044830353268919925528507904843095256157 0.02943622593745917222898833754618856585348471594569686881397428726
+-0.7041297500866612607234884784407130317305843364144413223065323821 0.3572417013316431962026919347150511042636763596269956578845059238
+-0.1235721593345202217795554759876880268687368789792682195280803184 0.8246603472400295391578505724317567517180656867730457579866275623
+0.01793996302825844948175557573252934185711456214972052895861572493 0.08267470722577286001217633724236129336011575576077446531397711074
+-0.3411596862218241172328579047617234818967459872060847679144866809 0.5296493544860877224747590127030477951987987258874100707895850711
+-0.7379746599220903325806827424480469595800618414934950958452657346 0.178161671839420517570934964597356447578898824155879129858818805
+0.6843546378904107483368305041075808036585650068151329599810630045 -0.8633908949968827943561744577901901026376268752722144571223670853
+0.4265099420399003863248167494626862205659560797404855195341684806 -0.3459820993240706010475901311688197838023719669999227712290509004
+-0.9874151891964456486571993218370826427302121071375833081581536189 -0.8814262497135981437569523940906532685397798861799997656375266034
+0.4601637140807105378191037234478805179877043129140064777542238544 -0.9722552720272006984678084914751283988556792015475269427349942943
+-0.4841039802362244364267157134690841461075259779700777041439742307 0.6486167889394565452584685154506739738504706411589692034776454683
+0.9965877589863013394561112420396792373833365736836351278348301833 0.7237216114456588829885327945423834052953613010855527824331391861
+0.191567730523304776574190978829765313731471509331205854313016986 0.9153832161606877637775414865990581395464326012246760580785761313
+-0.9100049476348622207723944867294612891098821253248738836563459568 -0.5010512652356920074204032205934276172215285762480987760943959851
+0.8085565025927605798160394591787637574375967583263627553971120289 -0.003517119711452846559277971844364606295296520854275366315952866112
+-0.8851479413535487385573817957243936843534909265401263726020814395 -0.7432644962454565902867854377146609433353697756825593784757725371
+0.6064591258881136876029163103297147737049475826316704311935105558 -0.6678889143320625765336213759043802181180754155696893060399849702
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.6231432486376980435414857670687342821530306865222818413703487444
+
diff --git a/tests/data/nfft_adjoint_2d_20_20_20.txt b/tests/data/nfft_adjoint_2d_20_20_20.txt
new file mode 100644
index 0000000..3476300
--- /dev/null
+++ b/tests/data/nfft_adjoint_2d_20_20_20.txt
@@ -0,0 +1,470 @@
+2
+
+20
+20
+
+20
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+-0.2206549379852138057578743061470069389191225157277024467333194435
+0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4643197195119173309525456044702917254373982711189458917859034631
+0.01022750575332349257722449804129916311389119097299090643512381743
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.4700775714463633978511207403685111986859425845978719788126486235
+0.1092122305172402888258153501556024641240468035240884586547566337
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.2642327778745240757646266294392459562801915916132871452102135091
+0.01032012051955487309722047463966310173477870581273801739268254951
+-0.03919417871052420194526378084573471772000103115061608042162915008
+0.4969744253080455744694825346756894506554753184704475582968873208
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.07714972696698667716678650997245420808817430827447314113682745907
+0.1729154576995603929033538546168666485286603783333729055438208098
+0.3914347841983986584093169466825129403698312444687581041683071856
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.1313277929451562487082545713868668183502620330575886917609655136
+0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2416500872464844443813651159115503866293289962833710383546455749
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.3029583073136138265829962071140439545004830470746425534136209257
+0.06403862356712929207278788512728706067982585049275341514041588589
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.4195634668605248660892165218851209239268844866648432819445044954
+0.0908567130718900285397128207157625325081936945730573057287310191
+0.04500489974247188801035267400166477957461676904337052075668156194
+-0.4384199598876636262124112488913918123145588604895783942604512689
+-0.0883406168383272939574326124768842541480299327543389567802061586
+-0.1013589956735152573510406730689184973691015496657475510126506381
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.06875288804967068748620631495815812310608096163779380055154102558
+0.4279156393274057309236852245921689139491849071240754852340002326
+
+-1.972905237167855022972015260659265850829542560732818384501507 -1.4090937594500393190905175665121905787412990250218331019088828
+0.7368096053386489322483684396400222992399462317638697327403896 -2.2088029262043736552733804435353629548348369653813609944160097
+-1.597450292122533444420686213335325136040562786333444158183616 1.5997388548338419177110889985020439074363462916771156314398719
+-0.5992330628827519821838594631768159879195499837579890761063673 3.1798719695966225985113542087435769275298967821788380403945032
+-2.008239056413609219763328740761408281960980207148687222184537 -1.2366748057905401189585395928231423081823788015967318083843663
+-0.906451543123341917602994399822116358860664626498882881123147 1.5308960356664138498520939264327520033929932387832141470496868
+2.0516721363509437426196368089683392403127401809647886023522163 0.6617057254242762907723938222349637659352435406824273726479348
+-2.6566497019730380495671303203478249631266921259416044722501422 0.8557920356357727217495643567104299534884129488793580463128687
+-6.2697987477497495358750074896761780517004975870434669912063035 -0.516336705017754131423352262108813517981631189851317031932961
+-4.4268446694062924714933701340450647744985554279679362907111376 3.1878631557844026666559754947607401251588207312127261083344624
+-2.5853972281656714104961562275640822094641868336386689250040653 2.9166387352424112346182678454236824757235246312704499375472005
+-4.5987883390280361673012124401936655049398916538318371657521614 -2.158211666476463605314003535572431966297267518404994280547875
+-6.8544617220450247171366269490574688524702233626773208732650214 0.6221150906349855667297413386392622797254786312687269889935937
+-0.9785044128208328371282156432964103889866751446023023399478242 -1.4581484099404763506506394318618491030513504901897059074983323
+-3.1114923833813319381663851491358218738027281099161497052949344 2.519333216100445764599691643405183303730508894651528702612535
+-0.4905690790841186870667452023769824266943158526905944343326898 -1.1975334171685339288024693976581816438080260579830479236392024
+1.1780111783691005281184905751588579449845755281302306134666423 -0.7941241864953057481614447502319295549359197612539311338883236
+2.7286752908735330910085621563632833856853951963638580367989581 1.5293588788420002163634491595110441588449339227114909090993499
+5.6443815477353549505930200473556497424449208222640436235744276 4.2560357316350979644696944271594537336378920337881080297415052
+1.6250384906753680536449557276038666544142383828765439043243339 -0.778581276881135593776369701755136077563818714642428903318712
+2.9415421633431633143758125462078171057060115687590048001616393 3.3003705518138928829310679722947613824212579673472019484595655
+4.2782407343664771826338058122472489063337133242193834931173949 -1.0369334992207388115484281612823501646966192699662043266166442
+5.6387173279995093065295894598602805273860698578411370386313177 -0.8356110990414545361434373652624018056307458022883797515602662
+-1.844814255390212460706401939168187227016262783483470412948097 -3.0097106945877718483472382547390081184698892492737245450205243
+-2.2323502840535144035447662745849010894906729453647594138913826 1.9258441626334489711305056884119265145511361140126685339316061
+-2.0952983544309349839316235064862767925394578522102058238552545 -2.8247728618915645262442187898564177214212029281034375285845269
+-1.3393302095920943541109796846229738013512953101751468467871399 -1.1666292343964340266476426011779106998856365904197673962253499
+-3.3145637960675614518150547448356832238325345083264812310789521 1.9953374817883023781439447882592422012430137960228961344704764
+-2.8915460426911360788703309984754463420896187995719496283976503 -2.1820695826694946128622990126143542440278135514545910768301692
+-2.5177518484575551092069379944739052855150509438591465422911654 -1.094588113044228207784751114563600413528552671996937986473921
+1.8658095253996058474045225419042399301019145534325482019044436 -2.5660241656040917026018458779325757975561947371045394577529002
+0.8027727694988384096696730943566968828973600763382686711493268 -0.6389600170474703706748469809430002932928345972345777356051453
+-0.3347955986587849542074264278374827193059347449783900632188643 -1.5896056683377077432935948197954620108473636412375900287189035
+1.9091508744522716260726756647516665213930393144680315711325592 1.3496266141733985494092535456620838165401953257602038876468097
+5.078294155306986942429305434965452645201115951276364321361728 1.9954829109393835475867696043598033152019445829438974686023729
+1.0081142649643341143618045172611690204449939655134598736650789 -2.8554748477009927573233801304681334195057612251264617286789517
+-1.8708068763996959961697973371310565192537965208087592057667955 -2.0023695824878276405752162718554309821659531924101676224842913
+0.6265666093888280181164468640723102122805517032414333747337898 -2.8090059557386972055756944480455292088957359312770639379189937
+-0.4184980218767578574442928048304354014467916737376894262924336 0.0089142088177887592691192646020843529564259645555890718904536
+0.791472150097765913945090796423279817604345424334523864107127 1.9354744207568168365530731148968182745943068148142907151681653
+-3.0205957418027217839887226810449693366701821876711754051605862 1.3548369785984564479793897210998218412190759898169646497409886
+-3.5552714900227541515234916419347022708130278188052277909407036 3.299238102135443026395827641584963904748632595640033786611383
+-1.765713696793981689829025439496015153472495600120189164234288 -0.3320545233762722188812864800187645395709878626839744115069315
+-2.9542080734431009167915257095784636443381645237051878499020611 -1.2864108008691405072669038186871901644805692468164855709132242
+-3.720741899490324060561443116715208785202592086490809912460228 2.3898978237006440135675761590306097054460591172184204742546161
+-0.7814004880419167090186496138468761713298460237895831476101603 1.9827100919933170993399068193948205535566656822315566542537256
+4.2363764003359605370288116440438324903412013753905851732263677 -0.4892110198011484348695881644934402914401616066378836272177612
+-0.5516405407594323507287219523631057594622089294413174865097481 -1.1498669421369684718288731135038438035228332540431036948701915
+-4.5838471586822699673737053486320302470908534677235973279130026 3.5234346353585255162605997485639368036044350459827844257785449
+0.0923259254384955081165707848209463179439169433609568188939952 2.4548270492755573488965557400803406723283111920244224997801418
+-0.664960631213289848724927045408808387560127387949896127800981 -0.0737012639859870028707767063286442638787272102252415334246941
+1.9034941514467399120769921614570720099992414903484937650265475 2.7099404971333868543334618305299942432195045153495424480078793
+-4.2691524521000060391811650504356816922744312635395817795315974 0.0727690696631192331661199928983132543735546151270349634913986
+-2.0244150153637572717276579228494748181594990502805870085815966 0.7734294511481005647601190799853358724299068594200235637427978
+-1.3960280393268928741481073961623121109030350409499978805882101 1.1761263983304728525706246298194807260191127737730365132330679
+0.9032450724618710482993712724512534239060011173878985452361557 0.8896992301653420858087760737672889883038066846332913931407043
+-0.0981715924363150325166090403690695939164241144086819881409491 1.6265996568476347920900146088841671770321919539935251814210794
+2.8038965794092884450629637687002854491187597540788969754784987 1.108301862203238445644887656102934462324358720394336945201809
+8.2986130357879468688343479153709187937773293686367966602402216 3.4561041900721352328689864575906778805620671812418294589651449
+1.5805617202790156619070506780911613764549717320255971951035567 -1.5743354672259081266697703118816460312661851828379879719309179
+-1.5343694958784817726133547214262985635489802009413647608832363 1.859683258743344110025326225219524724739206957654685598678788
+2.55990623190798628568809669272435033036857383363177512114311 -0.4538349335634500746671353340230513402061691752876379188015356
+0.1082862596040124971166626709851317962438732482420530756316263 -1.2663232186928767751370915374616310933960420517807913662425533
+3.1778859611124370542625376860607421349825556289042397707855607 -3.6723292705920858917080265557939065387249358683295804003144629
+-1.1908719933324702251674852869011240997605345442530329448202829 -1.2945314012763173901925246890621891733185303443505699609747663
+-5.6005654623612828949695199902247282831075136939071592287334183 0.4340774108969037352088271583677856584410211690578254248213093
+-1.4039721668680764872039939356655068396116967790505889373789115 0.6648024586488715883242367957166093680109108554522165494573955
+-3.1246273130340718098098095773438290720484876579602362808210274 -1.8272872592845984425847661666104677570849610504120320552710971
+-3.4448556746331683881715020252301009935551423898551743449364981 -1.9653811887031838243298848728202816534237363574145790128684752
+-6.6222527541186691209475762028025295100611805105859111114463383 -0.7063530961703523196046972147761116210428240638696113852074274
+1.1614630165519883413053781199949060797114715373342005012879321 -3.3441296281968023648846186495771659536021198057350234890839284
+-0.9694535459694832953302692261521006498649725401905444379924293 -3.0781315530477661586297467191771971308051503860760499263535092
+-2.8825758249952028913935196395817587600935371578430390800652285 0.9640187328803782657698292842848778529399716655409344698565873
+0.43672216610389611308320858191406210524208611179865563273013 1.0863057626423763761977336315907983446395945415571726936438084
+2.0849562382651866057299271949668017915338233654524787221776101 -2.6911044018986663786972227604527493356365051478566643610460006
+3.7276363203816757168258791722240098617018325069878969179296664 -2.0022388462894819380727554960266348293092340978323446422327523
+-0.909561221477512118270408876214567390095566885905167846135278 -3.0876102094736980434293269887668395626314690706305005105462908
+-2.9582870738990371364248443381778758246700715772840099537319319 -0.5180537242261994353183362673195831488960614365495732485087979
+1.4093353663016054269107482683529751143036591422852082755358899 1.2096545472361631669904976130981092441923102771542250873385911
+1.1439073951624455130589991939773069986382622835934294700050626 1.3987603906289228704023799926999749119638824589623808871711084
+2.0664749883184527943687172937244306401188422926272160302293537 0.9385238736829959101507582940179529755174441420421275693714717
+-1.1030929503573245419644175146815206851994450963597960698167975 3.9562617932471875985458216332994198954007112596833853317002471
+-3.8505430413859413705223257812578241304136889257988330010492916 0.3666855787041687092211049006157125596781954527953929104265796
+-3.2248058141578100444846320931438597540312164999826923508308264 -1.7891981904841762915691161259473914949994463140777119775711091
+-1.6784485193610544973546225927550659784877796509400664853509528 2.4008861873942566407072555951065567815300974893602693375778714
+1.8059404292523719322993073101719666826089869968558982857286602 0.2212303239070979792026136338449909671563154568522243902108079
+-1.2852421806541442655074451370797647778943192995410850914270911 -2.9252707933602927575675230629721034202267028802831861401504287
+0.6305164512567144035878394905322963862058991238527308826609215 -1.554264531776185939894988797140911120521657607240962584828802
+1.2083736704429150339110416921725026225355648071113211282798932 -1.8651734231849472707125606911891188716227109061013048372964453
+-0.52613365242331128918394818115936384384483736825241976570426 1.6410953979816096759303846582278142840070710301187538036534467
+2.8705790620328280732331034220448255271074074161767621150506892 -1.9157928109817790231850465872913043421714925731665719426111245
+4.4210752662210028585929871349765428163177047375372269847708942 -1.4738558982898079847878683021947260649097390826459908581967251
+1.3903476494084776420216246394565009222943192608815055222360604 -3.0508889999970526286337819047501452497497511589216776377096186
+-1.6796899982190662781343844341591571113240188310894512090237867 0.3518791554475204690119218778324972998728039433174394850915579
+1.3236861861329936050501606459683837089764525312869242489927135 0.2516269296682466858213869708347602827976965133693756235417735
+4.7430387675884403175370858143684277392482083740573284827369541 -1.4982912207579783281655500877570040044959426703129361418944681
+0.8985657939883716310703756807302108359329922057763959677096918 5.1219601079686480491528949262035270410566310485557445151530591
+3.8310322024524839681736345817884023004215653076603685760797176 2.8247374665685181584044513612380240786160096698796646422448753
+1.7215281661705633715230657129815040659577149670844435412472791 4.0124035238231804983506367146186959792463274595440534426074036
+4.3280648060741622072778273552431325975963843386840208653071903 1.9250243874420165562179165451069007050902757259685437659131177
+-5.1274677449930708425969343466178361599134652361791647908924618 0.3229102885699982480666651196217564568044622778860990672810378
+-0.446448091721822026291899974381382315989154142906235975127267 2.6158245391670119191862747643082338465728395625841582899886267
+0.1648670256752413006721775173500409277853676124751518710076355 -1.7618934396183001265471941466153810928120851979083524993050373
+-0.6604332188071715782556979063707928804277430127156396793831372 -6.1997823249711762467332482844892510410396416809330524260592231
+-1.5211809935735048407294276797240443944209132345609733601906732 -1.2984771561332262800249197851705124943305082093711049576154477
+-1.7115526911754630411289863303787442256202896535539107206246467 1.157463749571202330102875034346738185769801102586201288947922
+0.273079045215218790856297727404249318223036517268547682332831 1.4591247250231522622602522850035455116421873799856937667403336
+-3.4948245802959375080091629983953340987603536886178499498297276 -7.0052078249945726960645042123814438334535660904576585423090147
+-1.4055819516979986786114691967109229793570071687691762510527685 -0.4156032176044614728846242651490509337919051888522072470120269
+-0.1893850050116626053595883438687538687428939969717548043042184 -1.2177667105070493454349490840137385405673011973908605482696255
+-0.3227247947975979136506948174532223662028515133381826727703173 -1.5454863231455024382596236076233788716975256791095185259301658
+-0.9765461123621366087114699258001488213938127059063367139575901 0.4514195179658447745811863398809106568714792025469309265716599
+0.8561294765516660185649896302020328387886038372575558538121666 2.4494681973495376279684890995526080893002826719030481590740116
+-1.1222549453995530468647920155195853073319480005277605539550044 6.2877243109122844009431432161499736997306168869286199709208064
+0.3231574748920481490276161746996480981499534726326499798822119 2.6282211114252295796023006770489505214622446009914733586742535
+1.3737524919400322883855040246985092964933973580906522816024874 1.6404375773008799717533002323946442475243716148384076607999784
+-0.6873664031695142088544390976762698092966009518436478129313274 1.1433866475242885209455568493931003064607116542811425986982147
+-5.2317209348200494896341126932659540225316883935033650962162661 3.5463123661457158789120797185478943467023507519892109223481231
+-2.6396644781026714300276207214309199921639699507677747802004326 2.9886809593002365890267767405230976182024382210315684569122577
+-1.6964016767414871649610746295146446763839941150044856906061511 -1.7044230849135602663809490680132183944095069613704716453803278
+-0.4085878953594119078916776579430261462890078361999444349308867 -3.6274709186058956616429930405640373406460633139460400065392221
+1.913613970019526374293740230583638428732648847681690072325858 -0.5526330568632728560093959853199138330789938008568094922406504
+-0.9551023716050504980254955738828194952653667790652887116168998 -2.2435892859014229604860516513291473864590622937278460493516511
+0.0484815908026825796791000738200156373504675972089230155409882 -2.2888564718878269472110297479035849231891845407429535185075026
+-0.3322716860213565708947503401643065964909983218024919713716675 -5.6011008782467780434092205931911896151862365386562496597670767
+1.2296807537190168080020503512905773220462894474657780688289785 -1.5600032139333852847346760166748309655187287477989747143376638
+2.1556788902636052027675540744330236973511861820723943753474529 -1.3428507309470056806933221444458723000830318866410593748876354
+1.4522174080274047807404675405299506015567750900786076428777024 -4.6375539819631297620263672308049276060102785915903771492150218
+1.6317973600587997038248628694044304056784872172570725122589786 -3.2175795015791785302471736103335341500050423282121026214862422
+0.5849486782270526930921615668495606074700149662020443796075888 2.9931670713724536615043676846106551462838241674353855326295581
+3.65058042069366532232098883918451534618108419047016780466802681 3.439003548639643996977911547634966715454009460953644212833535
+0.2589502858298171641636282740703202933528630877237636182802856 -3.1209652699577617582677735925080471175101618690969009012300521
+-2.9477174798207952425380477367581022689448738244540530795665002 -2.4747743196888849330316817262420169105287533957613053850551086
+-0.4319492107418523887106542772463272917889535551780993798729223 0.4826067017131033090613871143247527071274027322812753953709434
+-3.6033071455645955007177788297920824200710797370482918644510454 -2.528773063928012669658141568620656068329858061950998345448573
+0.7201266178268493590336410020812256585414239513486118293711847 -1.0874332562562189570153954284791135114499776666712321432378137
+-1.1245081778247243281176264840624875708205830080058270081677926 -0.686367560113520391813908924726547504384130120168541525299356
+1.4557521532832252364170296588773536706162742275434482506507957 4.1129915269981944863865776861841200610935219743962443611038691
+-0.3743530327691428917838239313352192354879312306814122453265085 2.1810638911230694418431251067548557764880389768564615633968761
+3.187450919297110599737271220420547621147363887996525885312409 -1.8629774336632688939304359619201162604169863392501876162892259
+-2.8402571762454707114668688321354351822872540094388221207186611 -0.2116184792738200296213375052383629874538383153493991676740796
+0.9672824675729782627785663937997807706669020112069895655589075 -0.5037113611342992346542021046650048761065607831147305492410923
+3.6686825755532015558756778404111837440476588992927386852373632 -0.1077621984779701925372733955276377530296552869860296690738741
+2.9489094186104070900781718127904964061038002209689328671475008 -2.7423308037578195124791224285372610817679148141190602721628689
+-0.839181092785494615590873448537033822052389453835084186402101 1.3674854539872467328488365020898723708277516346039174401936395
+4.6632260175508221709714140339680980831477002560416718700814833 0.5285023205648595730851863799535908124819112761979004212164226
+-1.0445696509953643732269472438340006462016095347363129097899989 3.0205768216174796540600008298727506535434347862238617825239219
+-0.6609637209681878262894586501138854622269850980230506108464313 0.1180394830807214022357182558090270031147504380976567008216049
+-0.908307343909891062870639609606120932622832720012323462536223 -1.9423029370951286821182205966310555683108317419337716214689606
+-1.08982945631808992571445185098452318340680891036130792770172202 -2.13192020431984053125728333046706531852647188484247444015148477
+-0.05526106364352997696967729739696646330969993544892626116886122 1.33173119729863414795415289923025633285694807800250059594538452
+-2.41361790714352964253720219400597042220494551203287923371706428 0.1069631147868402024119954798552258649509729091734999477915759
+0.8969328667250956162656362501261022794365866052872075774841243 -0.5568618710587608412514870300086848067840318082730332409137413
+-1.0762376496437810108968021270516509914861166720061867343725576 5.1316338162827296684049169039208377447803224726154016886054878
+4.5311207731110689033445112286498388696687627216756689359220702 7.160060369430722114881793844622848215089261442585379213624079
+1.8524634193004627178356787755077537657055550490458396025741435 1.9730449624369553454669103097498164905184171539935828750168849
+-0.8816338629535827054484529844877581027096121156187627608364857 1.6354378036286660143602960087138105332115837201352879195093899
+-0.9521443079062342916322979154491031332222018309945639387972313 4.5934590586788389833335700158130236062473449452846667197863514
+-2.8746626135998388440907424869829279367800419409213766207567617 4.2436713299011361993285025229436440641099923438833131648228745
+0.5372326660922030866225989016969837088463387229215052528194216 1.9514668088464617683022746214496246165058690172703977886611044
+0.5809791269159792057054810838352372604900220627923189469935444 -2.966528117151415676099178726107230005308857546764472765289194
+0.161722427022343526838948827117492895020762200470876439276967 -1.2143030346502582490612639559317655691274010085607525898785332
+2.6286450379560851515499752646869885110602905279177902256647438 -3.4853640297749414147516114702846435175352370771746439524763105
+-1.6434043119091891224351149784946040436125044847473668932938887 -0.7628923933866484345647807629728097272500963045241555244835828
+-4.1138042994833682556128885675003712543843429132456253309619886 -3.6716004871053834181943593197106337286881235971492266108361685
+-1.8285934411619200309360111709569701576250274881103117166079478 -2.7264197045178176713212946701406514493020103553657051797007544
+1.9126385830070210192058632982030331772038814053164868121082388 -4.2629621713841500605734959383872285925470252718302519867922201
+-0.8513893892827149926158061854787760070958348327319061902060623 -6.24367476304408268768883999416592262483863212516896459862883012
+-3.08570590236679546728860518229338131390421125570468170134764476 -1.00454893648024582886786329342099052894618814518593986056692423
+2.88630038396052746843755861990238936703134339154635129619396849 1.95353462506729132106153881278998306146436258317669165586529952
+2.20911002766390023478336121294686474701830039758920879903260058 3.00963449071485495395652815929271366523034703978029728430950934
+-1.44603706616275879217770124049680841223231460999486825917896381 3.61705584179809538194690892397058035060689522430341012317187191
+-2.58183927601454557848490197592559038392608116132815359354728503 -1.36850717085436055384225358347556654006436624598785167918007985
+-3.5985257000929028291485804106704853095775321064148049789835499 0.8209347790239406165920928185526609868488778417234470207506648
+-3.1862406454769550762158343543090106170615287986593461362982141 0.6010149509083395312485510583983423554938015592747029860489054
+-4.0482367638427708348563305112653515485979991821127173056744495 3.5099460430347482650563266506261868658400756251376714062527128
+-2.8200870598750779559405467900696228045092775717691738227196801 -1.3851420648773997742530540887810533698144883262719653525871652
+-2.2332107611931298829991124144969989413435692405770025876435073 1.6803933215763041533305462630398401685129008950964585853495441
+-1.4221552842144879946192198883488496157202986924347163692993208 2.9345906787500284376128234274245987759803737808710401626239617
+-0.9730220520571533780590242878608866302437830681894650167230547 -2.2998967991892451474204716158893690102036186435873600660590117
+-3.8551378134969345338990110510953490247636685694282169384357843 0.0483321222470002808174244388383333152998258140108309034881086
+2.1525799362310958216465248435604160950911337181471471283085018 -0.8808770745694091705647866879276110207601505694313674953190082
+4.5127931831077297195487399310043849990423912668187914301349816 -5.5312190543061429899668559065492260271456432883889439031156749
+6.2329090453883735846635586918307330532710387778561408434199311 -2.2050283946459087525814139408058544436202966224384649533796051
+1.1846491012601041102378617852670573681467636090957702454536582 -2.9613240282554340975118394757362468437942091974973784860882968
+2.5551479940009619995723836125195241524808806822767143320961253 0.9305532960633982587375113977507279872792038944029045017994353
+4.76717058809797008900517868813212138574871162523322440767381601 2.4483580396902482656229821589426143394095494579645611798638473
+5.01736852080464538671888217971345076954596881746939686107090003 1.53323987098656986968297788763556393791018046983835139380868949
+-0.606011657200912654443687071741821164521285319544410805189171 1.03065137914045695003284374655082321554661130876139052013359202
+-3.23406908365170769986156591359478643798503265743830485463940048 -0.68150175458898467892488240593515620690386549885982433407215036
+0.98337144770175491989681876976692424485796106546309430039462684 3.32074710822963827734902660588925057734220781591738824736420321
+-2.73626090349028121522651959420096834610099472865529216587173608 -3.02306700368849094783658777700754071878525015958448019941956816
+-4.55384372383975008368905934295478329493623107577534342390798626 2.03908207116871700324717599603031989578340310074015850430995582
+-0.08143871965152999816914314362549080662748138216687174846845905 1.59521443923437396672993159418908735754023270556604444143094149
+3.6917191774138371238337121822077879048338258056759351032689967 2.920377840684673587953626157719051301760919279130803682355602
+-0.0573932355543326361572814286527348252366279359438229134408018 2.1938034807534178950019837871178012715271712993895693474817069
+-2.5804435091827358828566405216905486983440549791409190466093942 -0.9070713918352427555131724827005383760342972977715668435172334
+-1.8299580318644704497997275944514175983329398867903823355417832 0.0547045659033960879293883826251545602427893032052102179637405
+1.3720483594303479025104231011106727385042794986764587073231177 -0.4752999041042586887727389931903806827354464832441315545614873
+2.6590081428483040920037281302061308860825530615090656522566146 -1.0528499602851150112668351311899971516567401705615694303625996
+4.9815125269081510353078870386053073649172752162516362746210267 -2.5478032230146642417718590145183035814215150990188936913434102
+-0.9664715109287710544794782115946968378298541336729385355442805 -0.1922042158505259283836219152600376741271900828840877399112618
+5.0358247496558758762401017317443418730487906402604104055901483 1.244229893135672182885765406169073555849077153808216588847646
+1.6063363424489629887692284130078835592209324062308139293100155 1.3117158853668888217299621800204948465552899585977294139950223
+-2.0654294891222356540603839713553140775331287038960004616102652 3.2404669576154493363694716788670529609331634685698616533337994
+-2.35236369260250657952468151006872188485862839445700839596223334 1.3363679334562420561699838163242296325089066408036579394638907
+-3.26761364740202329586921301637053893446841883377623462743783844 -3.19160526990806980050565219762489311923225318826777869573687595
+-1.73297796426411549364670984255447811582076733915210373492367025 0.24923564206134765226469096288820079787291701971481006353474508
+-3.98157309789713064393639352485686740640374619137224255768163479 1.04295522497818428251294695055868664128671082052718284724476207
+-3.97720195960948726598394897077877881955366106339358931628522631 2.76356116649739144239689940944855910416872833466044261538163519
+-0.69273620291038926726455982040262810773021395371128338842658488 3.65049234461408652300844952142191819782712823381059172308151541
+-0.13516689833903513538280503600052450610328949593926531897013826 3.29799739965861933835887636461699218446793350528235118820266617
+-2.42793515502395853222842900687469738634636879430220956790698598 0.00163156799813816828743131499168561690883475392078759062114488
+-7.2463520897188969558084777135251485758766696455448311814501183 0.02037950480508067159985362065980435338410363428214680157261829
+-0.6036569340078630371505369062054992003995970130946152351971314 2.29128766361333783260149740966396101163999088913210889993007942
+-0.15848756719517578047217244915369425587355412113728628862332802 0.00176290387352476551645362700637585162998466658511529031334551
+-3.6075992292566625189589848736691152145288359388725089003498477 -1.6107690981355383508990415308862608007587538021372135365312102
+0.5719627249865804191566380056408073287504122758614878622333265 0.4594851091065595939185929052234455485699606023008161968993209
+2.0141438596559105195633715921297924544435423246442816321769289 -0.040914464143869888952161324600985604716700910114995249059341
+4.6631171520468432830579750799351966484703114249349998931110881 3.7009192533809486125062481310193758145021365008198160197833207
+2.3293300592672493106631141275005931987950583060639989713482469 0.9222909626260533902089662653449667817410938895950827174679113
+0.7998102428150235322757300701349747705868087372606203685886226 1.2720058614340700417603227652784544620047445082410932201447571
+1.1830074725537409484354102623254601121505866477496278543377341 -3.3946554395831848657462082077561339254710948581291926178837314
+0.1234300876985112060831064809263119170785848572005422923680116 -3.4945573008404173599327427715298286687059042913133091976513446
+-1.2629388518999484647533372589147567942614760517156973902870913 -2.2250982462142919395189246045988094182775102226285323217606741
+-1.7085118938021733196272739166760788201965818047898261033781903 1.110726748337471581187460890352171108774727065084585192485874
+1.3819453599518382222710819219270855681564019105004343662614705 0.2804109843673077640145536130666997330832317132786178283694123
+3.92376522201214833736287486896103789066626487191371994922003842 -2.86604784495719085155360459199104152759219055451595810301886477
+-3.50900949439465230499569843826282386926884564329213886903963488 2.11101531984156800005602202892559153515446731313870819918506678
+-0.92675817264592972841922330769771880946626457716027450505813354 -0.59047936391757089791101244004385654959671940713149972381758831
+-4.45353791997849643225200946938025959780313420942550921706344715 -3.23518173667684712437066411377500040725468010031982981480918842
+-1.17556422392001924851973680156247726642537880941466761347127904 -4.30875550665074397354074471860289611713162069443650723385602489
+-1.80328666948564245679306046820062848002894995641756964308602945 -0.92988989828037341641260253520914052296217839192518384997766149
+-1.0815401855292237460328725855210308053022414959790888948383311 -1.72370566797823588845729870217928004415299247257746011522274994
+2.07702117060126394287011161445258425705677457854939652888146482 -0.2919047789338719775657355064582123817422158531361173903346083
+1.3919281534278288846657836309735579139404724662599476618086018 1.4100351013173992133629353516409119694389594473987035619368572
+0.9474775619746724300235144118550245799960720273455381363637268 -0.3343778604584314877096209662052700837219737963212885251439662
+-5.8839504378235285460032396034247103508191135917463238735498783 -1.1404231602286174786619084688685512698913411424852474221143076
+-0.0158256998683288775571205656606347010103776081833067163321579 0.615556469994927080358351957985233311397796465666522807671188
+1.5991798191596206265873826577951245992372458952078634342244074 -0.8455444843523804449349215132961444794363822943593640247005209
+-0.0793446403260796596545053635618736151397394165435406272779254 0.89835154199520568326453547606461585301420501827049462043145
+2.3909083106133858056736033387625747139374932083375324941152808 3.2515577807483232266996683677174147717762981121822338322062001
+2.7190984062776309769021272937808128117494762079413254809523747 2.2244789086114959757231644726758175000256790457292728909015932
+0.8776072954048903409742430756098218939103574859607852219755551 1.1336835921129419308091374983520821799065289893804824488187397
+1.5094447524160457011225009934110594620319204878901131354615099 0.3209596224272065574893748378560962613075512503475861838552512
+-1.7502886327191605381306020465948409568775555556581838263248603 3.5966064096089645234082753748319454743961471645810962707950505
+-0.5359747461348899033751044446543769879170186480127082357476591 -1.1456511304771583303964729815267085847720306193712931218331773
+-0.439494707875216677479167986258243339041954709830674746217231 -1.237863774791592822641455626783035733583285800969737595515028
+-1.15769761711851996781857200763648642065532877580146756067056525 -1.30665047023645753108905061669369059815370200132583687597656323
+-3.68801690990846996560331086097094664642543649559777332731991234 3.93480064646706638234569467015670396587532592009648356061776089
+1.29637334706656821316149118253722970665488755981561704787144829 3.86669779187853265584252909739800438463533461724344804618906895
+3.31138078947929027537648408094180327880040508220896905912896683 -1.45617625459428313289439982521791658150784824039852519590171525
+-1.01119674839743893167321559338345202528731204187618412303751718 2.45382379122024415284075737628892359784152261010219003879426218
+-2.3053961787644992225975149077627897332489906849395505661450801 3.95304301196556700966885435400052156313632007235623149067557035
+-1.8202516156798813319277601587389630524000279786176142695392509 0.2733743489949979565381751709225705979988251319434378340740368
+-1.5170218204564321108419520820804790639467370881689732203705685 -0.5917001497377356536020713688722278512144444721084783359720108
+0.1040691944458124514751351110027265215981471016620559937650589 -1.7747481768693763983568422477017575369540075407577322019898131
+0.5337444320034929870110175671424977706492801767012532982303035 0.134822006705461273279248774455538315483664211550759600796198
+4.6028454571636114256452545935774393995500397271860017470851273 -4.3607030700723019282765822704798985364583556525359971893395424
+5.0624173291725590691720150125085659856786381209541119245465134 0.7334956652443975619620695307300119929744274707675549202511669
+1.3502462805776516432633482323655064783745325035689061376378719 -2.2915663963823636397136764649467342235880606552247837790239619
+-0.7980969025199952604174205644130990240101024546468935999798237 1.2141848474313251441977946302817959293481147292956065970564577
+0.346041499505655389125527229753014040258820393947576990361462 2.2681144347895991552614443398461415535414771473794167271708413
+-1.8467927843203874331755413229633239909102552189919949768354029 -3.8702986216717616688464776559720685695455141856710932450429135
+-3.8003550431623690029450547696344266999231382495338234842851972 -2.9827470595262811386170396439220338814260902162796244978208138
+-0.6322840487533044920874315723578923889614800108940131852382761 2.4960959092126438880466908043659719794586565544536027326666821
+-2.1613414845082695344783173128114330772577467297444423171426574 0.6645745274561587908139570905769151538104440519447674173936918
+0.2457686743697992912663935916498926616081095401948801046430962 1.9525214751621022224036072600972643657094115655768043019478806
+-1.8226234157793654634503611349743056786775626674411096763101985 -1.0514429502084603588596890417803907475146022568055213423146605
+-3.06668578236228911453943664662530054362522786406625825084319715 1.1171896914210158113785130970151720007545314458719461911386251
+-6.69118499955837467083751892101670678224648806194152334942246489 -1.31894773599062796913779794039337064535297244408818244473093934
+-3.01433218879278086304004811266531920826656612504980036486732596 -4.43036055079177512036983222030565515060982833883522322916627615
+-1.8074784449549465682686508240230650720908236949126660081273147 -4.1308498264563881581235618615361624617553390114494887659479086
+-3.9477697397805474635806486701645138584498470939910913048667499 -3.0535499888316812611985012618975960972443009405324390606132304
+0.5202953557814469481323670718219880250738099511648465723568781 1.8692307935411714622272522020593286461226296193248828391507921
+3.0816303794380062059064758455243164509997567255931219604784413 -6.4469912398006682262993880863902649486017121745357140587674562
+0.2133716787180563635927380847652008281946145674267333404140126 -1.173251273000236751661155695082572619711607351529114614847605
+-2.7259279938283204627595764699168889848030942022523199588119786 2.2526700748017624111801444195226581705913624410081577376683254
+-0.9780621516244425710685340862304671603646209790604423205373262 4.5222351361207468617728097736054863761713587210133629886355787
+1.7657151803584065558696215321465061164027182609556053407469379 2.5235009384881078288709879303149884465346960072462739295570948
+1.825351148238873374162847746403429139305968733163243674444235 1.1043144566021513413078814875317532397936440959298498046740606
+2.0204565510205649691999489975741599953774307931276385577011525 1.1879853430682404135176895602065011399855369092681442123154046
+2.3454189767522679588378748420149889579202796260004055198819136 4.1478873754557380045290124681689307581809136191992954657243384
+-2.0721935593019849826368721881024805482291792630459798111960181 1.7543061083701583090848239370183386939380003370585178882766199
+2.2350370625989434263505034961631805311504617600997075602593956 -0.3090753950794003669834536450938341124963530196086976196739335
+-1.2615424927183205557664120440218754516864196912478398450346628 -0.2073841217959362286268590174668245849980148031263866123399021
+1.9491447341634351446285310253467712202466003846678728362636494 0.3128844045507168921078720572517666234209522300308793218592663
+-2.829210565813333564621641426414491050558298086215528873330744 -5.5170243450275225650157319537207767924020255602725831401543205
+-3.6254029532526109063187576479095893590544476038745203073229655 -4.9221383043262558906904746546393322173869836168460778788407868
+0.8074363934580335400570361493240788056901217567234364032367863 -1.4574131711292631931725643937733932231299469514013259761516908
+1.6371415919435100312917420772931291910485585521071115085569878 -2.7816606530538267443457352676905904211298592028184933062552254
+3.4580195515160021033530202487458362910416915292398726537478162 -3.4031572946007399704063347581571936884975916881959419127171544
+3.6206839659434818294473885486350648501376537950799399568196914 -2.9037998807224052509669332070028059964947836723567712122800998
+1.8141897458651774467279854364786597043815122307302161368854846 0.6375373344101538469645118375451834754052273557068256662150747
+-1.1262384149285996431894708030226127720480115176465223269931067 2.1787421699904782344384646187922368588066895614546307431166592
+-0.7765420386565614491847204259617788979622171196867369870714842 1.3539134188156183797613252602983156597631277233107149547880235
+4.9024216376026397418441559096586771545854654193578644831361448 -1.5335187458371777820005327245595685699179473619991934570300455
+0.0840645778059716864681355587332581563214225133675946465287017 -0.8595375996980727394827280441323686530842241338122195400041888
+2.0214293602044406348537032328630138128741434045985004437056054 1.5660012069538600216295773497525743630747150089905725186428973
+2.8984984342781063119976692498022429862559031175252225825116696 -0.4216522792032871331874554778065581310187042155786532995439052
+-6.2002315817608372711894429744305175894190646525840429039319642 3.6541862443564610532185438092053554206548048382606293102875881
+0.1365873585650698977583227894541900513481061353237209581359349 3.4281199110472567628705617388260045139900028710053802853602479
+0.3899594895308596997608712213313369186061590835058758067745736 -0.1609796580988966651682164674275128023528206516839823845948127
+-3.4906858375306743093200986349096229005243930347325143582131277 -2.6620635006744266073265279997807202631292318517853456938524047
+-4.3690625661889520774535314379679271388085548914910538657900881 -4.5510187095376926145647899511442931778952035828270429669184683
+-1.9174199372233700427833908601310279466292758980078644529734834 -0.6698422048819525269146039118055352411667856976645395221400454
+1.8852473617279721749182043658859802799095803712749049528477325 0.413962733178673767621159233733120019163560662077916854849767
+0.8666039214757618765437760815825966044944555071487116605307252 1.2567801730622824347280331666794139549998123421376110715605666
+0.2131751253763288285132511019300016508913165636723009005230828 -3.4536685414970957453718640032978849060598410729131553290687627
+-0.4319585224885683810650902790219374341482629665254449845529061 -0.1330314624340764484661899288076960493658463421741914162705075
+-0.2797279815469626466921756584415683598051297872827322862282394 3.0261981449260297585541535151670563253715774309758881848022152
+0.8359480459125776332787053715203838134379779166958141608747964 -1.3284550022824160395699200854739974115491130659519440138071551
+-5.019613284589170051402912740940688150340720543167424026113704 -0.1592959624701441915151732915965299466958901684125747103320489
+1.7806220188702161066464751047184986183171097017004853579546306 1.6672611874443126163040780825748194976632167110705146636329088
+-0.5454379131531490643271892397665546913551281483645921266603814 2.1681698658660527199494958072639045099022830368464088735998779
+0.3823333096396720674970660641412512328479356216603312618998292 -1.8797188226470313614062819244306787954426982328676423751968872
+-1.2708102261138710798796829089949939081125020501765486692533304 0.4885743075783947366746858951782766451876560059947205239323431
+-0.1697436886735359490723700114440689147122322524872902581270705 4.2562235903161850051139762660385267952333742012371907440210634
+-1.509118239491080563652765855981657555745072960806893832651393 6.4365006783626882735896117984707135675521314608157073127418122
+-3.8756210962186173962229149287744139336091564832773633381801402 5.2211652731965714953543592521734058666458051368708831946281536
+-1.440923612948552077681645668304035139945033730210242463213868 -2.9449699664766516914912941681941139319354459706576573619414068
+-3.0777903129088574538961112276541095757800336683352408655282944 -3.9574830473671262175287776238961107240825170650654991818591147
+2.0761924965416678380233162036819863543490024872477790567115783 2.970086239270633133663348161257193211260526838596855706238461
+3.3176360985871596840841632184859796846969479779731335088564733 -3.5513412210934327650921667693204964554443559165906577901841378
+-0.3158809161359930656741585605931534995384372199272699360642615 -0.9818943374718768373670912937031614540143267299320177403332239
+1.622686043368817729221501353967138321878431842306234255282803 -2.8268644274297497553287879193035593132651920270281509009900457
+2.9928515792854477487406001725352230033955333574815670407342914 -2.0244469687565909336400982395734866254839746395965121597583345
+-1.1566254241018904563635667116446391126468717443481524656121326 -2.076739637173289830525336094780634724993943523864982293769029
+-2.5899668236966528827274880910057074400838964629078873175566034 -5.1372881881002881296906528944417124073018196909645303966007995
+-1.7966395118467484182767028306681623481776560588641168667354833 -3.0506620197324322858150354948546480264715598652368961545320471
+1.9338029594555111595863055924041305786646904329966424340918809 -2.8553323260700693430870280012408041029201054019211280561589958
+1.1715614179902192455611216078042139414158150441284070866132479 -0.530566793579238761948199811077069516461799089936402338320302
+0.0531931680522241575130923918895043234623803364682551820713475 -4.7619798858757056675368480233827672026241425400320733196837106
+-3.8531311898299967690638182517164542645331563779238910811693765 -1.940898797774262460861146045735091663704996598479531505546636
+-1.167270119233940737147926485697810940285471514519568473017493 4.65699832270437508395838147059809725520861520519666496009637
+-0.3505946136165534248365284847352444504953708287307795747785949 0.0521476974377312619670911232548771464332857179454882767273203
+-2.3997349223776483568482103246904726703209678643257278622503361 -1.4598352566282102059888729236743907598448790123185166324456013
+-0.9654884776849000619082338110631327475216099570473453529373058 0.4591977448735954853608261622145678241045615917406614083105369
+2.1859721853240215650909184162363730067122780478062398526097398 2.0425374974196735831269622122979825453611220996505233632238568
+0.4744193317038181945752733474792038837600173147923400179579296 -0.5752479998524351748308627604320233244831786247864877707367693
+0.7902773543752617365268774660352070406867424060875210289132685 4.4915468870018064638297897966913513525204647985740440992974591
+1.2922275647562329523896262180220000061241629921375912288170431 2.0730685238456613446218253421036730323563232313760950938738697
+1.6528346032733833909873622337894349192927474873863512904071785 -2.1476463178639694205697264681645059775415794630704605316855569
+1.5353352145705953837130772333421384425460917029011534111507043 -1.2890258674987810811469421456363146759355720398746726020258555
+0.5659588808756529249110195628320454967760171857434306242650564 -1.9744645591025236402100540728248749392131554115435744672309269
+-2.5134976099166332402509771976421912256905165217619373241107522 -1.7436113303408505331328753657159387331846215418501096192530783
+2.9970441038284690870822090996876516136591992130819855419969551 0.7278876251995242264922192627585898037317417016958853044594563
+3.0021247472854727975149889683804362670066411524896777472826634 -0.9695076149794000575597639414220952875868899156900091677364339
+-1.2893154727647360804301261922555684377822128368212159899076873 -2.3288490452905588684232309050590274461229356397403404358443189
+0.6995125470659544401907775816269365868110944614934122320731065 -0.1331617642453643274557007872660065221009655977890148631875901
+1.5384194440325911584494253784936772614926715872667922047662285 -1.6718194346062788216578764708780079385768335588218704722971779
+1.9213997145687557252931664282562214822098896293499904595999006 3.1845810257008719273144779130961977672553931443702358681923068
+-2.0592100187756853819293039195535097626654831288224600724408094 0.3072748412220004785099525353411583140431158291692175397918493
+1.3825121172011356591806833477516949860161233519219525495127326 0.8385090273667126715255834507097143251825865610086578768984838
+1.5081869872032830043809740620467761873635719693455875906844795 0.4351568354335946743535032301364199523372864611855352983708261
+3.4966133556786478759066454025408902374162097652486039875597476 2.3677251064894416113763578713659240670248333502761153820088224
+2.521221797095901135713675565252877089880990134575660024716378 0.915662866092325486222265685144538964933994528043189862632629
+-1.3636352229880434200209892389297552102401831174805292697613458 -0.6113494813049017082285525501307566825563176378915080470063358
+-1.0188706000750953753678745933223246650881695768948165461786333 9.8167935513175528713063756345371790902220797930192960635411223
+0.0796911336528635199750991974694513399843067602176230336795962 5.8511761658689113912663991620057749034785415921192463544342017
+-5.8748957605103548851178313784999862535621445056424159055105318 -1.2814860588836439911957759622041769937395536959822957236585283
+-1.1159663982114084777831770906714859261468175131538603474003792 0.5222843255203181726772547642356370930504785296792471406152839
+-1.0404149542694578827614165224919015904559974447442548161001554 -2.7208682950528107911799850368976296435956538925606348115543273
+1.64920336733850145532741572356775850364826365884019289275971 -3.7689637045075855340895022009119711391394243739091894671083236
+-0.4764131624655300939507078209826097446100062974618839399081355 -0.0107060986954324126192880352390869728439338036826139841365055
+-1.4657229638883358540954830744675346866548382929082748058505517 -1.5304570568964749683434400905136789260180017918803213608960857
+1.3429415687973409793593611498285917413661109563483234380599156 -2.7133248115934769951864457453050524984512572173834361221078472
+-0.8441687938467300963296015132945212860342582549183406167224156 -3.5730136101285305293580187386785173015335791272133527375037644
+0.7358440139220769449736493046765108455047241914549470358116322 -2.2036392658895836135411813028695591945910100847145587111102648
+-4.2717775370275705358062013957058337903834946811353480554694752 -2.1363377146740083817890738658658720901703042997564211594972139
+3.1711732304986572958171105236882811642951961405791156042114149 1.3316960719367056425371034979114293286257431535490042386572641
+3.0197786435099128898459183937295286983487564913307078168459932 -0.745173050774031796502600693109299163023612370760267342328495
+-3.0386207598822913921363394616813329945186710239518641296423806 0.4747360806855077180484957767146466938941641788026160311743713
+-4.1053873621372566374861564685866421054105770216739549347693922 2.0191041585820768612820295451785682599085070689972296698601998
+-2.9109926928364557239150241584981715861045311164674974516875985 2.744188331812119271961133957861789424830275208890011279290853
+-2.262679430769660506663863212678789678943197413026601269531174 4.5799490351650722756036117408494402746428295777578972618646612
+-5.2084236021730193641858532089059957670316903951618210330610922 5.3130449258530688939180013832214515824070996216526155559933696
+-3.5816522334726931695625565843591533495998474127351702201659445 2.5686040517167436313831496166471125844307260782680699055139534
+-1.4898683876309236355541099488895426149446365821287107551589785 -0.4001329010938235693801951333768187035289838054354503556719315
+-3.8936788638059188672838196849620088180818937443513063417848743 -0.0159352230078465025488232944350753142360599355260370426898234
+3.2334834502633708133099997548944692187085931962975138742646582 -2.0461033911487264034473516269848022325772851342213042038220941
+-0.9744909041833118680887951905106285162507914721919979739345172 0.1880127652751528790981698221140419426154114236603330778074839
+3.1030776891561998956219924884834005569537834630295472878946669 -0.9679156824570279829027703176351375046976199109404236828599081
+6.6304840809942070917217617465433253883502124237961858687778923 -7.6307110017114042888263090278509992628359315377271188516102105
+1.9874191074619452326426652639019908566879103503850665798142114 -4.369885203439451068747990502572105351498245069758019601314716
+1.5064161273591698172862557520678739180347296421072314253322767 -0.3017030323007792462403743225970105965507285654227952839380041
+3.1825324712997326970142958395538744959039426318311945655244019 -0.9236732465281035877859878262756839807406782258774238092811962
+4.5143998256693750265365225681791096364485439680053220980764714 -1.7734512119167369984237608865233346012988040211371571228635032
+3.12152759870714372956862581658815329721952416914533040236169 -1.2186938316581967788065765994778802014900431179136258926948383
+-1.2017886592338003938125368823298857926761021636342382611421737 1.9656342479736986992694190154450753414769205973666416709159972
+-0.7531360556845367367304276289784692790612403860585583281918181 -0.1461791878912858416845223808130201394302979683086212637381322
+-0.7493455310534769756616019377890118933570967527281996269378758 3.5688270499821767169449264024610612081066471681884953023429926
+-1.2554002448022359722944502290842007440908488897028440452808877 0.8700265404179843736035943384393383132807754603235995346847925
+-4.1440428247080236091246377230582417548009591482504183354973578 1.0156956492698971760728616942557873563789501307091465623439102
+-1.0496162236989265777123860885192577486556038103151414448907232 0.6854443720303419543251778121390036938846194100024416605928064
+5.8215892148719908861249209743736869282210079103747742547782538 -2.9349091334600480039268016188701088545791435787533095932257138
+-2.983315140265692981380683335988790452613061071155609830938449 -2.9071481146550673847472585087589002269945753753539995978354362
+-2.1846961159909212239601226804066150729879773976534415133185365 -1.0711016527864003078916087686824829330484745008620086988699591
+-1.2005889088926083001426470061848788607474223645679494151428187 1.2478934324684539513600839438165624022567114549569975643425209
+4.4497390559315274569815948037557462133303229160060496494988898 -0.7773110762676374087970720704988515151541415130654807527294754
+
+0.5356506216935318567168964679980224448474954197740742721804425662 -0.5458569288127476004682590208265714990676611459841400026017844665
+-0.05251382922654688111844675415661855947948761360659425718759593363 0.1856688150172391527088040246433169286752829500750590071977203062
+0.9518095182124288782767378820155949547911261560251647626870735792 0.8193143821859564924477154245099351963436429074028089074430038904
+0.9956223852813107496522616247115213137215848581937907906567140918 0.4604487491339531156973853721884505256237012331451385915640611729
+0.6741052796006089834676571454955036801632897076493615121596900136 -0.8606535828683120015533980099014960687963233985081987928030018579
+-0.8697750560716627155371707094260289644371901052310063829991901781 -0.2028782443808202039078700152556584967073846417006795171717789768
+0.539462018274751480324642644804511358394409237082129058457521908 0.7727562160593342436881229708062656539223995010850938445718232095
+-0.4274845026027779916855619203781095649893449575458629944853980527 0.2216455512897554102911455213296037106714896153079531893725412128
+-0.8604697501072873707535504424154609782723273602355359333803551115 0.8060520707732849845829519568044036159880831172244051400087891596
+0.3822062430356176188977280281604014506988427784943414973817258933 0.2494984458565048492106180084187393465587010901621886528310783225
+-0.7335087736711041883089151876515694737975402817556229765975958245 0.692720462930580375837580120465281755163139346395305274413909974
+-0.8786687027770929787301562525828872003547410177701220950278899658 0.3484206501444620766420233468327938525050794194268200530793896515
+0.1944979336074391420204691208780533563017707991268605634570366201 -0.5365723013330725289094471599220332027885871668229904917249565862
+-0.6717069716036456017860348911350501039034020263227184271420653514 -0.4969838973904267472552603461634423875526049699439467087064029146
+0.1841240265716411858721923885202834145897392121583597644960322461 -0.1099633225953045478540363356794430416477263111166654723490589437
+0.531416327611542071221970089939764430329756625444579259583169101 -0.6756547625687923165084584127259768184144567299620396875756298559
+-0.7793598342770851820561551396646691186537674923197586552161425487 0.8687355316920355914551191479618699998090617653378680974249892199
+-0.04982739811897050028189209963034074300557183166488389610036293982 0.6573707348942885034556657549189062350008259948442460481059842193
+-0.2152831478765442996690076717147867376683641103330644151579049018 0.304092255431421724386276285709205877741518261756931899126135274
+-0.1430325904665435237882241441707630670064919508747748361914900932 0.6923315191547459490617708873077670147989473956854336908747033971
+
diff --git a/tests/data/nfft_adjoint_2d_20_20_50.txt b/tests/data/nfft_adjoint_2d_20_20_50.txt
new file mode 100644
index 0000000..710d64a
--- /dev/null
+++ b/tests/data/nfft_adjoint_2d_20_20_50.txt
@@ -0,0 +1,560 @@
+2
+
+20
+20
+
+50
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+-0.3667543868355520941544575938257847368987701408778114882987979123
+0.2235509586448150240212804986667065785030694154925182387434450696
+-0.4393343513885464893650781262914436001773705088850610475139449829
+0.01022750575332349257722449804129916311389119097299090643512381743
+0.09724896680371957101023456043902667815088539956343028172851831004
+0.4700775714463633978511207403685111986859425845978719788126486235
+-0.3358534858018228008930174455675250519517010131613592135710326757
+-0.1306486726789604518575642087548321430960584930096366967255476517
+0.09206201328582059293609619426014170729486960607917988224801612305
+0.01032012051955487309722047463966310173477870581273801739268254951
+0.2657081638057710356109850449698822151648783127222896297915845505
+0.4969744253080455744694825346756894506554753184704475582968873208
+-0.3896799171385425910280775698323345593268837461598793276080712743
+0.07714972696698667716678650997245420808817430827447314113682745907
+-0.02491369905948525014094604981517037150278591583244194805018146991
+0.3914347841983986584093169466825129403698312444687581041683071856
+-0.1076415739382721498345038358573933688341820551665322075789524509
+0.4098351732528003809102269734570294879975455702584035273166455779
+-0.07151629523327176189411207208538153350324597543738741809574504658
+0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2729284644063738002341295104132857495338305729920700013008922333
+0.3525707830542183854600907186155249059680080381975147205747395167
+0.09283440750861957635440201232165846433764147503752950359886015311
+-0.4593142592621138819114189833820168418626239763706778624898432299
+0.4096571910929782462238577122549675981718214537014044537215019452
+0.3029583073136138265829962071140439545004830470746425534136209257
+0.2302243745669765578486926860942252628118506165725692957820305864
+-0.475571127242979322428858342205484247182890021731465477599417665
+-0.430326791434156000776699004950748034398161699254099396401500929
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.1014391221904101019539350076278292483536923208503397585858894884
+0.0908567130718900285397128207157625325081936945730573057287310191
+0.3863781080296671218440614854031328269611997505425469222859116048
+-0.4384199598876636262124112488913918123145588604895783942604512689
+0.1108227756448777051455727606648018553357448076539765946862706064
+-0.1013589956735152573510406730689184973691015496657475510126506381
+0.4030260353866424922914759784022018079940415586122025700043945798
+0.06875288804967068748620631495815812310608096163779380055154102558
+0.1247492229282524246053090042093696732793505450810943264155391612
+-0.2206549379852138057578743061470069389191225157277024467333194435
+0.346360231465290187918790060232640877581569673197652637206954987
+-0.4643197195119173309525456044702917254373982711189458917859034631
+0.1742103250722310383210116734163969262525397097134100265396948258
+-0.2381993349353649959266405506577935293738035850399354993188862868
+-0.2682861506665362644547235799610166013942935834114952458624782931
+0.1092122305172402888258153501556024641240468035240884586547566337
+-0.2484919486952133736276301730817211937763024849719733543532014573
+0.2642327778745240757646266294392459562801915916132871452102135091
+-0.05498166129765227392701816783972152082386315555833273617452947187
+-0.03919417871052420194526378084573471772000103115061608042162915008
+-0.337827381284396158254229206362988409207228364981019843787814928
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.4343677658460177957275595739809349999045308826689340487124946099
+0.1729154576995603929033538546168666485286603783333729055438208098
+0.3286853674471442517278328774594531175004129974221230240529921097
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.152046127715710862193138142854602938870759130878465949563067637
+0.1313277929451562487082545713868668183502620330575886917609655136
+0.3461657595773729745308854436538835073994736978427168454373516985
+-0.2416500872464844443813651159115503866293289962833710383546455749
+-0.4398392223920449400907046631777097726644650279540499745251682393
+-0.3235444591656903238219892489862732802375142646453324666079452958
+-0.01189153022550738271020564024560338180911293813423246023331802902
+0.4747795551811432367868902234458387985659947076528818830641254566
+0.4927498363209993415423255652249335532347992639631937083611382401
+0.06403862356712929207278788512728706067982585049275341514041588589
+0.3358502781831149238206790069978103636181122693169617235357165508
+-0.09734719631754635500146971073039353781911067833272868718380283592
+-0.4189021546786846898713994499102361111761337212340449822195971588
+-0.4195634668605248660892165218851209239268844866648432819445044954
+-0.1952017580385246842215057574004983762128495778038110686132947133
+0.04500489974247188801035267400166477957461676904337052075668156194
+0.1798107471163638439578816295238259584468770453133038678573909804
+-0.0883406168383272939574326124768842541480299327543389567802061586
+0.3979314169915041735368106500472849935917247124619023375003704306
+-0.05012499979552010356459573472764647953878012390959562904972546234
+0.2706265164684795897847947709150290937598347126997964072971218439
+0.4279156393274057309236852245921689139491849071240754852340002326
+-0.1306768866297050878382755406991227297651262848493266576034685194
+0.2678253108467659283584482339990112224237477098870371360902212831
+0.217914162026091385849095108839794223500424779425144887657128012
+-0.02625691461327344055922337707830927973974380680329712859379796682
+-0.2968732896149628517099100943143613476200461843570397483007658758
+0.4759047591062144391383689410077974773955630780125823813435367896
+-0.1609020739688566968967924800650866311305197251794118595176451781
+0.4978111926406553748261308123557606568607924290968953953283570459
+-0.3680457287373024960717322225368521536710342004223667403911426638
+0.3370526398003044917338285727477518400816448538246807560798450068
+0.276593682347415558636492182615343991198000710613327895110370703
+-0.434887528035831357768585354713014482218595052615503191499595089
+0.007087880987108839466396846546797728109882567594291260004693055154
+0.269731009137375740162321322402255679197204618541064529228760954
+0.3448794239046061622109983794627803016406640741645905667575177771
+-0.2137422513013889958427809601890547824946724787729314972426990264
+-0.3498351569751814493591869134788974919431524046935587950216858142
+-0.4302348750536436853767752212077304891361636801177679666901775557
+-0.06548388787215626885971146251934855059017806534963115617003157257
+0.1911031215178088094488640140802007253494213892471707486908629466
+0.04524751634490719501230109883674608756741975505321511051160810143
+
+7.655015422162722952054485702555626450912572744111918682870248 -1.475838073322149423965479580670316428462821779577807397017603
+1.857397323445796917323639892821188851329401002991173555589439 -4.736596167131494264927346726691728034242500989259017003863935
+-5.795075921525261708511381011146229073569278217308120373951362 -5.4203077554105404469973501210333117794379661139116193510219703
+-0.2411348260904703711577601784606311965048401801415883674754719 5.8668947038666285057445051806871193884846327764225302190253769
+2.1841316645296567576732072753739936228652181706926501610103037 -6.1372368981384472602487524369618952274318880730016119239253805
+-8.1538297649735316572838940475204899623650077017402045558007235 1.0446138153932922221906444073329562273328233506989505153813679
+-0.3926043308291172396167449122446295135169550408138554457248172 2.9551088357604681000523902805583426453324038357855988298415071
+4.6507552328133746319521909786528798549036011809119566213865851 -0.7952196320415786070582710853402634862825388408320617405506388
+-1.5562733533021015814411995689838026651573844706979111334685378 -8.5735477952563739602835819767739628850913847018566930874519525
+0.9542348737684861189724488638669534884378985782105695836347886 -4.8963177083860589970441166120901285523777148521915334974328422
+-0.5371446602991768521330107198586877472406073657633286463115097 -4.0554750119271739608584686501119853883905399831069345875014018
+0.2272248412059979737198907945360388156098581080179768862572771 -0.9826159152702370839503869889398247093641970556346398004137823
+-0.2232485438837420180166373427622037214835806599481254889226621 2.8070566385632490434576352830011298074828056019911654807395842
+-4.26191498479859767382463913753622437517030534016514611582985 -4.2247127800071302676783917985020947632860423096181370074551914
+1.0503693477060603258374623448591064658106253931592324835418334 0.8813791083008804274912020316336745095716438401828104875272926
+5.3345865206995605040653922911427212819568484466300695150180417 2.5408602707449428598337779046906164367407619168594578883298577
+-1.3268106188143384381481427046794548350324568658487312742321704 -8.0627770935585158764145614194489827403223615701408504569495289
+-2.856099918594466570113315759071196766351241638853288349171081 1.2279930608743088011569157194870315888134445884645712353154622
+0.661334633557858914475708261070464504141480429084838151019211 -3.413314073131608760721274682874539246280189029018534714737498
+1.978569237196176447598901728132459580409660878421572631343139 -2.991200855684241532622380104710265193254829106504300410296081
+1.302795857918976760427559401710896997065706819233225623764434 3.397420450592944143960592660631944233608127377286235208026664
+-3.463941637568288080034762101027455437797072521376950133431942 0.647361872950039218881066270044342675141270751742628440566031
+-0.4685645429799149921530298636312035539281636494280245365443059 2.1224846843431014047997179179948834698515897637885890483585985
+4.7781884906379470662251441108636944118221480943003781400275876 3.4533557608717222010406502371433965129972834986974534468287638
+-2.303277016473632779259449586770478289314139735177236090133985 -8.7759597577052819199535280343163526153449763609064115916623812
+0.6599557554633589340352982742198392620553896245647275092828816 0.7270574227365132105192077422624991471581529482005852794555746
+0.3862074219539107897729858517615777742116182736759595727122567 -1.9590492853305543387463202094240736689948524531888800869144313
+-8.5542564459167214959556482667633741767098172563538753397134885 -0.8962367790741595444404446412504749850130830741653076616543099
+-4.3155855397153986481614630144926822843687966536796161830040934 4.8268992241509849356761662960067017262489584259806794267547471
+-2.7668343676551258987470342738281279580962176441695241818382935 -3.5219083081107368369977740706118535643459854001944900972134347
+1.2974134676237122708376274977652973776724660841520685548325671 3.3620795362471436213997747016688127726854184278245487634029734
+-0.534247132699985349596609964185300298867427881391390147765421 -4.2983503882746858016780067112680956841235590764408079841575549
+3.7088082002019955399435240629405649465660565242752506043675474 -0.8640002388810522023175559648050533899017145473651248814445563
+1.3331025708578111188707642296694831063258849729604752431783335 -6.0891933674180455234830112395248065310886647567861417612142865
+-1.4140462794805133757952121554095655778121472650317360217858417 3.7887431901980835806862081873756853492723562048534554067043811
+-1.2902562698576796210085121838287933412171293818704612698616815 -0.7304401371588741549739319229962468374464599192863703055943569
+-5.3849615487671411161652722749997469389463896945203609580372799 2.6018494169153948457320914361116963845581406414246697069254873
+2.3751590368790019378616060852375354783840521190224587354818136 7.0477384366391523494574997541449605139349062686162331104149321
+-5.6567034799629883657216070945978683094893682087164339948745028 -3.423718956646977746016484457403044122501967252993906551524875
+-7.883050678387406422641832526230883415770744922822085228151082 7.0847205494882450062717184423597955764615646852080346794085926
+7.923596121231825959127712069344606959033899614368510135034282 -1.932652227314001824777465326258479327580353282848000994204402
+1.6496856515577982992298412388993760297769124720483196701343223 -3.9546021214276382244595010795405909736491326927100126234250859
+4.6154150716769279429979789835592999863554730679244086853488435 1.3244754795795198523730426643261789058642557547221317766758665
+2.7407619707792859731067082017889765963854600766250301783292157 4.6399911581166922595894329815478016563538007837240732549106896
+-3.1090698891045710415894947743586588956692012746200293582288653 -6.2281060592616232776305379371722786776795326106210735555319777
+3.9956666626536394644690758550645191612201724928429185481245656 5.5421461799183028890898441975922873414295649049973712782289918
+-2.1378686564472973828784166004551581180544118279979242928038046 -4.5822582161176956168536623006459298995523094231850568948009629
+6.2567438222439922914657557281687253404587824752009587719777567 -8.5580126567143085752353097786685099516523347437449028216446927
+9.6160162531245359786371553906213813629316291243283663427692009 -0.7468710179401818197103105095597946786926273948981513444252659
+0.1105226851256026038967997490405778947350791875658627373556312 -5.517399223487806352194970984402008346302130077392444466260822
+7.8296287728244157916179865785867371974891203033357562212750212 2.040429712506042564133692995893843578530921823005709750190353
+-2.063215182290650462999666814227205242954013760064216877710339 3.9914388727004790031843239176100012413860746609280618508791133
+-2.2143397660067804003911818535137576062362040653938006672315657 2.7505364539997554834237870388218063659603388086260525192469344
+5.7112774043385070513657780282270566818077236995721049061784166 6.542922171019153305789128602324588257532480422370880015459871
+-2.0583838351537674500492318171510376018048578341011661489594668 -1.6860354037981659875868429473809021860099156328475775455090315
+-1.526366018881618287577422681057073500990223529052329201941071 -0.2078144568587848227559979741645721371187750980038444479005124
+0.2881523600258005071028878432417561739935874202247417944364808 0.3386136386507776055771097454872302669911774921630255622777883
+3.0249014597746783942159624315517369261345006613414974746624674 -1.9349063235734017638551445189354742305179630605854276195447472
+-2.3287582830454445523977177193184952118598476213271280538925597 -7.3104750144792108292789478851385130289451602485326098314981416
+5.9779360754265071013480524855455717302485987537566157484233369 1.6003717208690049775517075586790146175248837511650191237555978
+1.8511452933557301753387267895082062223825986053813300975130212 3.3397508896611989054957645966821212734333534182256081444785259
+-2.9067645325779215938544421406649762740778604874860731167421446 -6.2902972151091147870915736847331811275095950853233286864112633
+-3.7252126880133228381216962168360618267027175026221561989026862 1.8928054115000422346570721267701628570687984592014943251906838
+-1.0961205184372255059418157760729231268060712452040740400939306 -1.4376430832847084527735342290596777648053996270051759765988883
+0.0503728648090417081219781397832300158878928305223545038943112 0.381893426789648995167911008588521373677225207350577534693633
+5.4998322812321794538192839818709922375674352722141284335719688 -5.5807476573642018464941799489607428291248012077805773020317247
+-1.4397635057337262012684523200486139426864133083311391970848368 0.507888977674990459375390302412861540926988610585640147117811
+6.9294805934175505906636152714980344701545152805230061760605243 -0.0480261205311655207969516737100151544636015501627951703306541
+2.4687373263255223443512553516673976337638832182581624145405493 8.4571474394344203668828590686962866644250814280282209875022357
+-1.1702310757872584944748803151774076553443058445504984242317611 -4.8422291313741772288104946214771582168760623061789783117495074
+4.9271477069662302768231079663868159274781839065258874596106612 -6.1685856491132263352084581318496931993439820961413181816821392
+-2.6255719052177754640208561087960636596501445034493395936570788 5.2767289902487160029740843042274288808131123881129739516142225
+-2.9290059342759508987770018352699488708621427045439313555642214 -10.6531921048024740871868076278895970429516216772044370204231407
+-6.6339396898899693079864976650198472244595151610031752818660905 -2.733989071550479807138908687275103050855647128282624793021558
+-5.2051471235217604548305183565910307288520971462825354079635324 -2.3574381911751558350700225541787090007060236415520598932568515
+-4.2072013272609925695662381244381619354562691169467031071532561 -5.9756913781939036806661073403947416500378552319024555847280888
+-0.8022290835864852813867599250196829364462227351758836492983282 1.2997682960229681648665215917076300893994374849206744485462286
+1.3090575187589850467425431439084959284448830595245180294805678 -5.5012819278576974489905737944181108828363027202954544177071645
+-1.51664780746666647530163061808974996306837528138369308188074 -1.752391436727440562284727453058621287377704839349186788427206
+-8.2785611971269974577097742014762149591505709438578821828004508 -0.4659118393730481121809783793037882136285942873633536224450746
+5.2593601105864182848951863067537495913847100715859270589764837 3.461168394839252860082356016990601347372308112658620679891479
+4.0277034686734178440656133932206020169482647666482292796717063 5.4254810017828647435602021184357080463973899947410964390582275
+5.1520312495081996953278425592451265406218470370840443845953787 3.6635303305606311219480046291240611988084443931156810624922975
+2.2407373499017322436354241309007247074639602528565849374015246 6.1328140250577847884273356215226749246451789677231628981657477
+-2.6164267462002553781666435797761897484722539660971167646655053 6.0273378520735979074619828595562191552168944936347223884641436
+-0.0501014526991785377227494860712878598821088018383576343395907 -4.5773143131938635191132907046392815151948042025332892270608167
+-1.0818461547644599473403966331525708769234196103241931593998647 -1.0561272285945638803746922511758016116683126155398852913744895
+1.7094265591720705980919271063155648865925403275998930454949679 -1.2755367469065461333460644432910293957578471005353458855702278
+-5.4205641724434824324517687770363527294523783394628455925047397 -2.1882949511697729320862123341999410255933054845503952267904141
+0.9021727010813962799271189292182369044039694047448059097773043 5.2472691463045010494648173471804799759931629860985964487085665
+5.5279861324973035224315432810858650038868070618354756096380205 2.2171051317224509270274651327962424394969570923731702711201283
+-7.0517370738055885126112456550861339713774313940542535923526714 11.6224469635561584178623822279086054885506234590498921146430938
+0.2831596341416966112797633415996827960672931115173735391598971 4.3831842606496714409875688897086057895586026509697124626105713
+8.0681496629865323914696617866381425401764655192318184687450887 0.6129467337835388475055781823275156316220508349388199987862855
+-1.3814170908210347487727609150187333916208282846462834809736533 -4.6719021471657847012641107687459646915178364465014721314842915
+3.9138649053533281761204929749263589554518038919350754560234971 0.5084350410553288236472430087394434253907895970627067502177975
+-2.7564413987520118076316832946317904252820800501718432958547101 -1.5971052070064663930870192828398013400675812364225211415127903
+-2.1381319678817420241496998848350438202105237571688075352845495 -4.0349499772777141355899778125581942351944700295112456708168992
+1.2100347897372624141800637775175762285731734537234910979684481 2.6541455898584732002167921116446904250736589012000696817867814
+-1.184653845328550571756052919434814369660387948853841582979703 -5.5904250839337536315943406269483924910625249509705548682770788
+6.1745185318475178921502529718986833049527706271578676244808125 0.6686980693920925354381514010447175335935308269969067351602186
+-2.0286421754710812006261026936568022701025286912266749150038471 2.4569175294042436946355753285038874412674106042952732918094119
+-5.0441204456078525931823175586276192797653950399911016760699284 6.2745725990724074549243705596307528223393910102746874433858246
+1.468615749440534345405632214223549006131718966470722013206853 -2.6874415463762970093362797488587706378011221255932139879976559
+-7.7993844666894376472161373126254113725953331011472352574669792 0.9388236908422964775911414936780932242127208582031608539872598
+-6.4608744686383887438561957238600517088653472036722314026006522 4.6961993337009269553920937576401583820421685799266139250569598
+6.3078298219097506789125176132825554613035372599772772919452569 -0.9950602750995064746201203109002483376100510259224576855146047
+-2.6195325919059371488466457065334335173881687129133570606693649 -0.9889612364991775421471314420297572968746611730788171413990941
+3.577712371817730723923227832822667783299906969863397139593835 -1.3601415499296891355432263484645376198416899811134574974435472
+6.9496490450898112270203880589025285278922928049272640258820334 -2.2622559160976132058418857072858896539778252413131088319914674
+10.9924487483533112692270481824649417757542065874367612350678829 -2.4617644616976418222396294211200038949024633411925640832337682
+1.4606323100571924155657301200759981485852120161904445460986176 -2.9685043332064137209356260257896181818319088422901901483705382
+-3.1235013932541411110533288124878680529808698825332593671491108 -2.9126154085119350992050277641140772316058875725975147199137032
+-1.270233127842326360553206934311261970202419775883968322823334 0.4765847948464714690435421350620954409803971777649160660432351
+2.7545762410837285024412321202395985927313912992387965866885902 1.4118976294635059030373577424453986059038781258530090659063431
+0.2459866493477013217837939573575945893533845001507969479825629 -7.3895322762512126709269333138074823544414765071695099207592903
+-5.1849052741209456552031809249978053999881741821667348536527424 6.9673516051335114474032731082133682965923897226956037738701101
+7.6551849513950339698733107329842531473213586953651974836041445 -8.3664748364949855636806885425570025644811789080010354042747849
+6.2044357092502213238716515628045749436776848620891087933532364 -9.8689795639255573662266552039061377268040499939031114770500721
+-2.0717155318546357888121154549492769760611496399238394823672772 -1.8123419142424752739565290395027287300046584398894176764398704
+0.5415531443113996564430096238759728040038236939534086542516064 3.6684676659942250559711816769511778769315282665868098183547933
+-2.7082321925837749193830012898883050816933224417108936100184277 5.4383193622174547374352894079937966535928353615853038063912012
+-1.6182001717697705426150695405385987433080584281590809777609353 2.0836479957106518613220391594112453786832640332034049789304942
+3.8105177112587532665692556726627341304238704501165321631211418 1.6045176649641336233375674087332334874034606352261888258334386
+-2.2453166297139643024122070644590210192469911399866633343696886 1.3307877135033217907369176559833720549620255452950969561362424
+-8.4030259518253682759630102956862977686308157487242238434916841 2.1598893160599993274400583787571910412045124403574009016179601
+6.6184707156972537901007323111059773557888578264775065557398571 -10.7882863438551850524679090037555347219090506900859398500798865
+4.068022898636496502215835301547828784931363866390612675628113 -2.4047017202871294321943483205642431796872895781670462411556563
+-3.1526552582517143195431733160047909625455726920571703787569948 1.72244222485945385272772763426003406573995593308345732099505
+3.1310689262023047520116059895614739461632592468539775064954721 0.2727574498251428917494210003015159633330988988918977699087904
+-1.4960784563952536532513703748053980451147515112665396646447224 3.9099681064256600627170497965781315343941946603565126651210602
+-2.5347545639482615220446871924843369772622442238896762736398078 3.9604368050787691706846755853959319207075689750041906345866144
+-3.9015034297510758571550770250670382822946039235305454588553971 -2.7835275806709171409585950352481761939624101987410673928424859
+2.9551980505908917601513364241972570840820441981795444993813 -2.4626716344465069010098843411017558722921474101414746215612661
+3.4849882076648812530863979549385048360540878594438334791768461 2.611117193034885627572502330028100612470538869242820085061184
+0.2963316208681251998654133772644291063198147511005356675882457 -3.0658973192594520539212663038778702521680106810381290528177259
+-4.9147494908757131059208628342107261290934144971520870515197041 3.992800706552228481608829477217356009866798893818959534851681
+2.4499272544312633652173058403454784976810908971557744947845072 0.8781735326863100804792859253719361687907378981453971154390357
+4.0351496913018572439362704575490778908341357628756403599226662 0.3372999548308942411002168325365562687113120871281115039661745
+-0.1328315208993425195032523706196394555949165704839461537300438 7.5633066617340546723893241731536329146110982764706175809482192
+-2.1617437127569680279767145951943759076144960366626791507375392 -2.3597421686368165233827495829504928937001549945665924110080672
+-6.0994537914495113571543728417353107444864147106179750136852641 1.6402053058454714918746964721484728207928903328967569046118181
+7.0357051319643435743151795314050392057704932256535785006524802 1.0087393232505091122505443386247065143386877970507987593258259
+-0.4289770497817978004701634991574718376557487599426865312408468 -0.9653512791662263155748580772983794140938851954105124624415034
+-3.2746660152498648429127386178865811447499638067354933909387979 9.9588727126639506241700601212110088482796126421076982955735182
+-3.105236809970358852135634538835850680364281067865917062045219 -3.7310812820841888487988097984346599329610426009721392734893476
+0.8904513341711976564656520853997184012380088015951931330011228 -2.6488096101889017917344094169791054583461663275320297065506345
+-0.3388704604116214849814372995296292979556110074471156531584387 3.0978651896903349656266905211722066962254948313957093410927145
+-4.9225321691415802856646718810381952894901354956776792795619512 -1.1757881594970097561234158762370836700352111729997283741086221
+4.4699364420123426970363433197542343008156715038803589455758631 -3.9708103193527619474503983162106051127512282878839893983448819
+2.7028476545753199128283569928681825925188790401964855755697728 0.8014315473838958881098165886246098506105105756068061766990961
+5.22910806534000562774493007781127839153852084050656098357753 2.6719155456893619186320435980921876644016310266741980831597146
+2.7920080498062171327295304398034149372399876546401395258572519 2.5639886708175471173426653159520404301205558349991764418730828
+2.3583163742200654414483553316440442493463713163218126925079977 5.2012542997819617128484884305791776669269863301179843674050108
+8.318095943725714042466215783969322602912952958639402431092961 2.0514482629059555327663142672843397823511995072143031298748192
+-1.9778765231507881665565070274766505234268403987254293376518033 2.4339759303293246280554736026703363704487747435195231702107331
+6.3694868236921884543824633954002293332834338727892022119176634 2.4679756272963298560340043844638678963933240962442197224731061
+-4.9788710072129331855044245358722955575667253979687462785510501 -3.2194485045971016752347345170094745947634365679665783204966545
+-5.1306668713199363990968252668477402571575512642289491025814445 -2.8113155755839488810502406845137994071519916230307469119096159
+-5.2317236509830053352436237863241166736261951024488546752792145 1.1277327224089421021278010359684573180571841518776301955878863
+3.055430604142530768321388114265555194675037356305459984739753 -3.2696405817380983058080799231036235505482858210071611401667761
+-7.6221929400683725559573309908397820757083219175261045890257393 3.1700522285500286247672075048164446921507826303298602516116836
+2.4769511242206378680220142035485527497483548330825523053331586 2.2818390131330936750290927500355693161064122164483918836989417
+-1.993328139819421712650473431625419319710631716140610929607854 -0.5928831873522594536055100648660474317631687632873272199322966
+-9.2815913193177604747004092398895417845686289763824343038009155 2.0662957067399215937395680911784306032034174947285930912064805
+-3.225619749803778043972148765827008040960116341001952237356436 -2.5097397757584089713458613263348646816773448213155196036831687
+2.8450263579502948894784068536152378252083284541341424419985297 3.8501252208493512773851426944271471870349685957745802598080288
+6.6602756789059361450511320006617074734263614420785267291219533 3.6689374953405411198552873875547169249477892637924083724926199
+0.2794264469575887906748201340473782633963893740216177661689015 1.8183896619531425786687932390094200155009631935086081375064918
+4.9566075740256159298095917237621178071141621271664400066815922 7.2213513398625162107655694147519468752565959063305064365904706
+-1.6206755280810762450831167082804842245341838066852266206854256 5.0027441383839234081238740412289684577388038442971304280676822
+6.1075566529714280296910310222278200926583244391481836064199137 -1.6292998776515256023875961347698896883583386762484777527386054
+-7.9181874043793432774207887953871677233612734421379452450402339 1.8250404120465920220417893704435105916488801654419165580571612
+-4.3723798370731582120337152081401753596041770692321508566374326 -3.298434782046257451526425291469848364341949664371718609418901
+5.4192062563816354397731485512751207652071109983162846565293781 -6.8932393988105967009816799449967877983069763483723471514731276
+-5.9432974431611138018792795530845714862353949425747061651580884 12.4839124848145317748054671351498619978764645885461640013298634
+-1.7256406435721797189101063799398320051953989892917966426528685 0.9570508745840796270748441269694414511361080550014107201777193
+-5.0489608493715925068511849343399548714413712638601668437505571 0.3724475112595094251640044282351270840806470183601265397387466
+3.7813911763511251366524891364688134098250431883550500786057651 1.7363501064616860860539425797635919205801814361741028702029859
+10.0307341236501038588923844280396334403309872575383707972152476 -4.1621381395080491092053229241050008238722722136831066314144732
+-0.0552209903320708248446180486464650869875680973521007728606281 1.7601429741711670879650889746372174140515919431134593728977406
+-2.3146013182677131202649072998689639406025992145920558534414571 -2.2104094435294538697310308337591424030882934005919641709081701
+-2.3931535505649599685306355728874878750994582836720162432201853 -2.5256079598879469841399049860884693986631402740945409926057385
+9.6035912734654359090114574747555826189983670458442577997076671 1.6796220471891517821528045073209272814992377283437990317368323
+4.4460009053394803030305977407039753394727146985557829417741502 -3.4161795961505445883184471666240538411841339581864954709276228
+-4.9583305548207474025767096128382545707437377702826112124672308 -1.3056862633337856904648640852761495389704038870195362932207069
+3.041555587406730136912314684347835470744714699448593814431531 0.3678174104411518409346479323367584098579191364070805690335896
+-1.5676684139678970010808179592179292368054946226864748338146097 -1.7948522986541170853216818014085825724505554656886302706745306
+-0.3378105885253626434970351247468788408842175969294394089836889 -0.5751731223953160846631623464249563850635469949401123102049236
+-5.9387148368493912824402112057628769097385209541679536904097616 1.1466625741290617253209097801083774928604116749950744844181638
+-1.52196825007167813916546474486442407697388254815575281389844015 4.4325644497623223937557364961173923851584099541356729367474869
+-1.7034026008868291476123086617532129676512307347387902169832313 4.2837269656620749691402497925370178672385746510222632862665847
+-5.0550623426609613812782019464670281499794813269603645588993806 2.9231379321827260091114391286176520424093627799504163954652766
+-3.6081415886120998735024016047584866086730393231167670321131073 -4.1162049027973579219864302515192819432373986235414427084829425
+13.6362583749257462850551863589536803480749189479913335418164927 2.9756951103495065413288932750529651779896877157388081277812671
+2.3134587054038636975426536431667701746310275251412170490844405 4.8568180221458355648413064833525739291093627914581389624782139
+-2.7176200160403432931852307598660645457480145857524906487674853 -5.862452041585423503542017518591461381621594780691459357261241
+6.5377476280463974966714427055414967191835051199981929548501696 -4.5716834806445539668001183663229635425893920466052699751659997
+-0.1523847745015578181774323939667335916686919868941067569255464 -1.7155286821604776675415291364945677625024685628540876799598213
+1.2827800767413934087988990966294492883106638155312087656246666 4.5855193444239270244996246627103266444024524753176334060345528
+-9.6730872553547837023365261467756966846198644931456182077364293 -0.4900916388069759741182785853284239011030733892070558568688388
+-0.4191954613173777950285959972120041738997146257426089269117765 0.502080168741889942773331471772300405493846373055732937095213
+-5.0437230303106571976643735759165755262697676958912325539059485 -0.1940123430517096378681208082993917460159236703054592349607993
+-1.3795585051016976040118104883041599248962823560771281619909126 2.2003758239416713514420352339746167654047255513798467427321991
+-4.6116766100343307842957874646570692973383738157327719203576227 3.8987694203154263359920113470296631696171148336955359294754788
+-8.7170249073491419042106791724869955291466359904533603036948711 3.6883096141751329043513959008806488901080000067898033419508115
+2.0222924808236083419059240743246591126419848176703581839112951 -7.3132147240290126498566328041436678870664889346648070335498414
+0.8728741207158331790158355475399019533558982370803125839991594 2.0241354688720483342793932245429363006870210148382801698390175
+-1.2927194089336657263284585415034146710147430409603341242853653 4.9834700759099257643592900638496443303880847054306456880463593
+-3.69940146699489871894586868275814925113864211076485439986458278 -1.89647105971174089267865701017489076980844594337875762839589795
+-4.79530968124209425485052145966292630285889974485326287728490672 -1.4087044711349932529598820180194966136049504557421709517369435
+-6.29123478217779538497062145343635012904186787322768711661601677 -2.43698930387018085860042210474246611936938774909746872184523829
+0.2087893251750190331489334206278639169824517468681967130260748 -1.3536590732538610007777518429651058034886028211541329832421501
+3.2483449150767204519476329242128516600979734370826904820550161 -6.5399983976224334212973549364477792170479733108579987027731768
+-6.9956441205087571615466752701978625551399840958199391586816885 3.9088231373880739806473423474256237940243228281150724387173064
+-1.4012511871771897889790148400977887588304007879423383544872687 4.9009446810450794265561356960758649453122476647362103225677076
+-4.3417033060413587101904037626802056357491487697397120026710522 -0.2832484011556091035479673302628028880457963698856184713331436
+1.3555099850378502087222606700675902632105652964081153717430391 1.621882541795410574744673189160040257850727670699990558464755
+-3.6749227237655501961161429130771586813945653312873824004117109 -0.3657229305203894603344665825301674201139929181251061539667986
+1.1561950009836093444926128702931464910791616354981964127628858 4.3504201181112945480544523629242224890583054031675397928664417
+2.8495819757814421103590204636476345231735677990354123463060273 1.8606667715426462119771766641126232451303853604974825192647868
+-0.8633424230491995558733530932874832520702333468816813287439472 3.2432895210827103311780655728958372522666115608973071533385594
+0.726518258286674367857554060499100470504107152835792888739401 3.7567937752075961112531780975310281003610591014273711436903565
+-0.7347240168204696471983354457230099771653162337592224510378954 -5.2622537934221607753247271480657109336452958492424534043290621
+-3.5998113912035559469647086643161396695409525362577907276459425 1.2064131011561688806877534763604675557586019068172567531064619
+-6.0071700290869504805243202020148397243602105173035846861918714 -3.3421834512547591527639141468206501860748336266043762756790148
+0.2017998469433513253340497968352052229422370288904313862998544 -11.7158198427217554440157343501649989106321248767653280747007271
+0.5723190286882742663698478568897304295583690789353196159563581 3.5553411099743677934084420089684267454715962054227630466595189
+4.4566276495533968553644545092700921140535845858644019089116993 5.7144476407172941868814796519557448262710005811834011765545303
+1.2998100035134607463956800708258376000993664410846565504346658 -0.8127780260555050979752564421100062752179159682731469319621509
+5.71536548469129713088727910133613375333118094866495197129567342 3.81934674367045119808067736902042657697743526940740182685609741
+1.7910693593688416584669777168668289748444927394047768535338104 4.632874637389625180931600406613718615119945692461945581085383
+-2.9319907414124193725777380458650952782584111184250393122534256 4.5123347109911473703926360577661050392827702400801855386506007
+-0.8836375977254058860867380855335243285150877783769472280954466 2.9743561556595404122281381202152693964999872424598596437959102
+-1.8207595764512624984981352317364436740687045758383193619234452 -8.897587382606369694257927199254406892893533321674406377344474
+0.5283572871854619934474363415632185161196983547955901998537159 1.9290526617321124924827264373798853480678152668811666972969882
+3.6771037249992654999468698474119234915198978668559958542549998 7.8969418414637466627797275381334061014914193710600255719657685
+-0.3709384711687400797847118395413804993814945860305431059315675 -5.2868257741861045502529437200773510882021374731503243382989276
+1.1666686929002864443683982389662469194626490760860350498758178 -3.0995214338955887628337626080450890218640513046423968624433175
+7.0397553850797765552113994231553002549270599469293324612095082 10.3945158245941322350115430150508262929307784962951751326475624
+5.7594289646993146147830645037971231156955757266577973339284431 -5.7232237299336207452001433500363876899153145661966412191958858
+-9.2661467726398856265405223629239780794574824405577583250469461 -3.2748103581402371273722360557330675225415067501890401787707753
+-2.7347121532402993537193886928704186170755308474950762470184484 -4.0791673295909903327165840895516518290429050700792414620364028
+-1.8144057190837317137559945077016873672768240754016083095872361 -2.8255040365222788255944351189502705067541992178520511621486888
+-3.4803602722367723135808446828023390224315234868570993779274016 2.3293617765465232656331664903500448993423117818696593862953786
+2.6790231788783744842183228789479879870897095817288019813411188 -6.3859752582946713050428539412303790884557343312905430544818844
+2.4764669662704193487278058653996559736467926356918773070195021 -4.1028776737053229638833404921982131542551906762951953307895858
+4.0099052801528481785016392638418615942259397890271106531492674 -0.3325895668971449642034307506263781680032253461068493231029118
+-1.2464770935343237282025666669582933895525945951733070849393716 -2.427288831159071858197831034971018017602027014575510533857281
+-1.1377337725080819689798399157504040062915639240846866155233505 -6.3263959850181809524025376242306994365706242901662248928669326
+-6.0447856971770776811291705118411179878424545039135279253492135 -2.3448816854597173344828203186425252806998497710426467757360587
+3.1435487944121057042371483493406615695084708605109135313889742 0.7539204478435333040879386874743962129909578905363042618781042
+-6.268133411460957159566774942263770075928321176453830751903205 -2.0748180675366570075295280352343154814399779530957541771300679
+2.2071322197902714413123647772901385838283595143257862839497242 -2.4601421150067196419972208337755376832630442442959324440385748
+5.1907235497467307290590665609547856693474522576787706901140134 -2.3374580597506844565852193883289066879157880896883554395695574
+-1.249973832824100601718583058571382799622002321655166433001616 7.8006356943846800023462613433756610459131414335883288601440461
+-4.68764422394345945809978289627332610455892975560739623505756 1.6454763929784824421836531989596938516319896973539234625284152
+-4.0162311393271105740616199742596117070484631789088078547713254 -11.3924215981425939157501469958825649591276093856295507362558946
+3.7663506928635177260570166041625241493517589860454909058566147 -2.0811947536761750348643350447522455843388180551726198463194112
+-2.054937538032855556110278448388087566206567973632707468056114 1.1013820545352820863441569346363368130576060380147919021523263
+4.7743106555163266232871099017696120570015329118961821824802917 10.4052574285466347406556085902485080138201939292040692854834495
+-0.5581360542445042192981134819743467993887533764220308904922147 5.8173973388631117371100970904387962942951535366656124717612905
+4.7449580606040854491134519871229789488246215519510769129688693 -7.5618511165614153983598792404630237264180716944152654910476417
+1.3027062131310275734789845201371940323691788266446986073969279 6.2331003658249398663447544021053872986645467761421087765130919
+-2.9028622729924888211230690560142434410689840135020807014929164 0.4092901346268585322000728600662427948249914401493529418455171
+-1.1867868980440834316437288535160698274457621777388618487411223 -5.0163124336287304917821879531762108073729522615628992782961318
+-7.2013032429704793847411122412693999258099634548753142964557585 -2.8227915659829470430978027983761304035542975246929385689700111
+-1.5273309557555682683258021768513230446206783948158524497545148 -3.963818923475885699115569218098608000377977577765403818720581
+4.4163659466890042011234795949611433407771075529225651369697114 -3.6357936846625804284898873639633525351582080114825286883564951
+2.0270996684718551739687379687105154631259485418350023209763127 7.4363007718462311904797624867640659897067464961853672610327451
+3.2364857932245613652223795610504121795889600121411243751689161 0.7334150897983436244379151650991364087162566137433752978340358
+-7.0023561735936336533975603858018671899356619014071431776836824 0.7631078362170642112843967641733811504383031732390008154342333
+-0.3523739996882535656844347104794077630063468711647741370077655 7.2954428584925927077293439462837045056935115058973154274178512
+-1.7606408186194958126739177877744770157911177348875245787207321 -0.060343349695770756134893265366745143306355255447093591235262
+-4.2597595687275977939486026557715810948760984793080354063616499 3.9252314816044713021197164895742447532773381778354168642689117
+-6.5033771114708046508795341400113350466450171412467738591397978 7.7060195081919841425108618125888930334283640661806399229572165
+-7.4059070439067609164226946694770135299418606014256657794567 -0.2006692456659239459107150819536694484899634477801959735982563
+-1.8085523837284469959588554447680357479905134646941427223605527 -3.4493929966326978887186047181609889839006873676074895627087711
+-0.8926324376479473600070735607715622113991062311559289348417578 3.8349975102441188617381458824079791985754205865667100156735071
+-1.8684205097299531929128601222134753577124303415947837563110641 4.354319617725647516546128968631112498635299749296885176939407
+1.3724584842651600514789998681459565769269625729311299242906361 -3.2379421984694817285300153353117728923775546764364671420294425
+2.1094146544931557736490649947861993950911356792588227155645237 2.9503167686021887736850142386105694213848645837194987859904679
+5.9948669754201295623372837210725611874889560890202311869606266 -3.9146064669231671467051530634269286530535074230937764071779789
+4.1352583972922533447296289590269334788690061957500237193851543 -0.5708533405950067878634439823926401094766350221956643574888504
+-9.0648888222968166282367292117661535954641420865716387312638384 1.9236991228209977734133264338937395122107743011504961856448915
+4.8611023905718789086590560481195383668869232831152107590907008 0.9730455114579035857473081661332435916582849955254295633208575
+1.5315585396899640482816276736647622919735272537330635273023664 -6.7252954220905359846978481263749014079047666735709865931804119
+2.8689056270368878809774225544997752968480423228079280651689561 -4.1753122822000828351428531088901604154363347240412609226349696
+2.4326713152251395297059260876063084038982444392187627522325838 4.2641322644491295178629265483087639838455930943408776166020628
+-3.289163648969469891001399555859968691862367185506206061600137 5.5121401344726092099320580818913307428033575042764763819389704
+3.2744348704036206261812531596201842554419952690613882472252196 -5.0078924784359639212272356382526549780872643327835788631186097
+0.6961823340599250530450530464923258181649425587733020105954346 -6.4722304575275788922601504570068033193132737689336039672587704
+5.2695666762817309468254658583674715447166467170696362376724275 9.3334337282503369145972034653902439390038534944004370489892718
+0.9529966205602271930706622677813663606730655040437246656334263 -1.345768757520865488007892331668603852901864777254468663328025
+-4.6127522322688001835935536419622561209845092179983236002062989 -5.2857518721108482200438943129644477028980252027750202051949198
+-1.5459840845323575759255047846638653193263033446547952690759332 -3.8854547281957751601533243455028294912774354505237607277315348
+-5.2472773662855464884757867837726025765334293803957287466320199 1.0599682495677706776522650527930524268449439754762704434620982
+2.0354868135906231076514887533005776662782936338876431110558866 -8.1176060987045553082988353281411177041598781262515445261515047
+1.6543492687037102985270659578801957872656868712651893147608857 -1.898791499553590529812729171069939400869827689701002274201469
+1.9575240536656908003481540918927209287157841409287081702562376 -2.5041315671523857024437936022223629348844121754177958132695568
+0.104591490716660770030467728932472509996916679840261908518844 1.0554908807106339530030905379209231586833492996381847634218975
+1.0048636178349319905896805492080290810381988409435831452116784 0.4391789873017691796853739957473470216041023161457143925748923
+2.2240234071300925905378023013454495852736440471095092083068385 2.7057693291072229862717605170763169363375820673380382201250833
+2.6028285255938045006995937292675668497294637793459459151864311 6.6062154348422319887767485328489734143819071649799454294061037
+-4.4241353318768960625449144442572510270224787199452403147263916 0.3229171143781140214451229272329709240548970823767234272351706
+0.7401416204472310686440111322612398308442486165074278173012358 3.6094964863644246360025965685088791963455404299635810107391069
+4.2253088851566528008676315939876424784824269094207391328892038 0.5865280691281476097749178755959403200461712137956173606539377
+2.5206484111312507185107752579200029534528970761836906107115089 -2.7019930781713978798415640856820832220154097314392341455590445
+1.0548100770748631391456385343411574707927588432619685510730492 3.0100837172120969294937429470540501002306241505764268903553286
+-3.1946073843174180631099000370775346704300170414016875050395852 -4.0111793793284018872227090954198186693485757207002452004871439
+2.5555537721427155688638153585790388890204733669345690257399201 -8.7902368011864558861015573471908625422370019260801193870097758
+-5.0690593065761379811769337971154819843135348487838403569876483 -0.2599098953028603799023047274518258717035119560509932929070364
+-6.8720830839754265775738890790873317050396721004081691592404237 -3.6949672662306425593446956222739845349502741097022784576983015
+-7.0377009107011802832554298754132816629914947338444283486399196 -3.9087875174501001144470459398872356895704467347993892490869662
+5.2734547703207512105654627879092828608753150107928744083958933 -4.4835459920454890473474923947748859115372751007879795332435515
+2.7264655498081002956850976424530348482170604807337413450304923 2.1462314866662069246882993839573664546921905840876033430698751
+-4.7665645995071485984677403576140032273338626375631740996339111 3.0226181966779879740079700188865881194389786740035940263177286
+0.3924795348483408874002582771549023650586990885225100097131509 -4.0601935819606143333438927173295871816332140367380830499216384
+-3.436280996197161731928043663018190598562862986749684143099361 -2.3895483216727539304888070043479798815724454768558052869749939
+0.2927862177663067875819748388308377843866616966297334333731383 1.249094565628934213472426248494938489580473058214152983959767
+3.188912147493219266115936710156980728112887835753031640046002 -3.8849740029913064305037775948953560881939708082811427499382494
+3.7940661136928795381014341410344930846638343701122169299410212 1.9883180023650517765628789971282252985685458749019190569110814
+8.5554174740581301561283880286100232752876006982774998083902512 4.7098180483710511368515538476757975112386709910133789953664049
+-8.0688043563283077032033248653028394361676679738615865788517283 -3.4000845995463878361669289453706617638231627614019400068348704
+-0.6840155160861191698962520856748180340632113292987330361242859 1.1536362107326263852985894596239584891591880767469493691303259
+3.7929029921203220852701099742430716831494604311303047633328639 -6.6329952128847847484959259995895706505310097335764179205246717
+-8.5792541934717769797444053597660283142462277940731271521504053 2.0484078703206851631006892933712990923736974845057974265376991
+-2.7841921659183541886633741970479044300929097872358671731101162 -8.6658966294791545327922791341241307237270483401221965531248683
+-1.2848700323528827556877465888564660218675380908155560700859939 0.8512610916382678379947323322569905310803278044758659777291289
+-0.023701282110187393811650951500523126409133592763666623461883 -1.0673156282538372237992149792737696859080950116193765162544419
+1.2283191747947195785869024815113367358776552481098734232078565 0.1797183250918302156229916471448468328504585057123932863366549
+7.6674162516969744525523747568371349056990986586776263369071305 8.6417644743160686865712842310038632743062205427355963615365018
+1.2457714527932280628862398509141264548454253601859783716019534 -5.1282957716765523725604747395533881406328571310590095129050399
+7.447166834681970872986270265375250485976547845196215951544245 -0.4656217036645145396205975000795503494404808385358987674786585
+2.1373569711364830562938327195601879096137742524552147462769689 3.4801249534662907922054198832227592431920651108248465390837599
+-4.3630538524067493479413060953514329103500501209850432255395822 0.2745369066896018513290006164073678180860404702712315209558424
+1.5061466836676608379082404025985869305116958431465204375246322 -7.6704544609712635815642370799129357992009439012503832183053414
+-1.7899465935965636094754841564544911691140542973024942075102468 -4.4128917992554948058061659882860363167672232305522360508425084
+2.3740430406908392231327885583362827967715721297877009035194933 3.8725005699502647027633991159510135390163034878859389086595824
+5.8979594259425657902420591266800605184524463567933248948846264 -3.2678726062712568209443303642295425082166361934141942964843544
+-10.0589859977461270062848700317390506410111389714955110815207804 3.7424047358670480449936917360289593173267319078821499494923654
+-3.9046125022452588392002136514354070204990527660068942938750365 3.1766311859336129605084483558519614884753829976067741867774062
+3.3643813250762388082501738679125492137399886402282406290223443 3.2485975458276538904091208574391844956596034678005032639318058
+-5.8998317618612948581420266397873278698277711910955703250848426 -3.676298143613898061464036752539728816014180676699201104673055
+3.573887029206096172664848861936374707731192519554015485757292 -0.8461762589745645873434600020290183073329749319404131567446193
+-2.236327305451552746882393165122373652985394796771302427516205 2.1517374447270798589880763588709822896191429512378368685504784
+-0.944904543843764168444560675072651818361073717143637628127767 -1.5845861159803021823876140837583514622887424866728336349378445
+11.5383276442585438875716183764407847773269149403113994384550199 -3.7334639963379658893737276854861668538534625057357433573442312
+8.0496667039119494943314544496026948914874969007760871815320708 2.1402146615432508043371585715929968720227706471238444829521028
+-1.1075252584110453792303730545647312945652515139915773158507376 7.9918734928861232843853097863097848455825164841499177482854912
+0.9698539620219543768900635573118397545957708756725531453520066 -2.8707470437675201557119121296145989832726052547584431210737854
+-3.4889039245738617684955993670609843685885049330422741096794119 -1.9893157965803065024058088099726228334142120824862916515410316
+-5.3213756942675436125258757636756685335338493262930312142007713 -3.6834527697888591806384288599690313188946311986439544854037161
+4.0597626605351739205139844375697293307574453802097100628216969 -0.7022261200723540625396561941016580251045493542085446061889583
+-3.5080681179439067266695192517962013695976594298030048395249615 -2.3154166642776415753344962341042575828518317711751449392766794
+-1.8262755208763538375584094157201188455907784283581570275234234 -0.1563784272209280603232940215889409019029162745189691169583881
+9.3416936316862127147884945482356844862689581646538916526572641 -4.7347729952743254520540280012703166712890471375338435865082339
+-3.0629145933648718864703205175578250688141748696881668219165043 1.9951435760224176081121763385664877587364387316714829254366075
+-1.2429606458350826026146339274750169366523047307062133387006352 5.6552106532078147445720886294121965378534770690643749179252405
+6.9161185129906931622431750221733853568307571340759699716886573 0.3743722088833194167681317060941466808733230420402733310828727
+-2.871324569987375142536890868160432129890577737322177694056009 -6.590857944998868460299030283979616987966007346129748249857261
+4.6528595489410220803796988468129770249617008001353104840947165 -1.8516944303204711336216541241435521773341987452330685255281048
+1.3238791077629578157221994916049252754790155834536539833127812 5.3955367507760894177843556734969483486119108624461091348153259
+1.8356887923173739836243119799007289063821377183638173796258285 0.8988877781681504075126358376284018402140045873251712775989245
+1.2655595326075032742553556121239458012308169037222312309046749 2.4027345202524237685907728409535254498837582685744281375659142
+-2.2059068539628321963149612290300189983186315993426599570173741 -1.6383775057303727465387424062642970790083188508259112479496592
+9.1205338155509895554386143288224689628932583692125502860170833 -5.3423083350548966078146298070084139310198451648475516985314373
+8.5378388830125092762630155428333086761310042513967220546868236 4.4116347272852349362916151736002454057665544331021519250859232
+-1.5725467050524386979808785526546630764770956974422427045218201 -0.299272978484200698169445750807559908279425841656382338760119
+0.5892723286332595390898490146465524717503316338114694261482014 -1.2378993620648141849578880183549331777717408693492001447051289
+5.4038751864105106501894897694351808915142415197137972593966164 2.0473398450635784678109435411010893572598024717447912740163765
+4.0265483514783884780206880038185395224413359231427557326921323 -0.0471127228933000443664735545220133187546386802797693733069946
+0.2708300141637862982453172714891648608107332471563207906933748 3.3599322406504921770299324516877947138765653806908570050213372
+-2.0898667570064907167406077171049125240891366930516342680834525 0.6643203864466651523706821492902392791672830107775623031121451
+-2.781374747767230699357374482379870866385322997808140908803782 0.9701148259711407061038041977355727177243269671811192663212197
+2.0921620824308275512174843714355613529692762313500988222038346 -4.4871897955435790193628837171110225668313063437084801115796748
+6.2900653263714861329920999806710471364397512030047494187738706 2.8015877583594339136582872238914505863020649023348069133966743
+0.2404826262725429721319151658872708785143034800501398362815425 -3.1633150528813838094435236203405715484781968567103831402982798
+3.02047661188299305494731605673259173377556690785705606127009 3.0314066610447629139794697507721387109173581541578151319764928
+3.6669396461294918479520326336364210342561149709653285110785023 -4.6739181866847622648749117857318175940790389776714223580700852
+-3.572325958791562297025722147712664898751095555353147123994562 4.049468451373510490754001403325903586337636352115221397658998
+9.322436343648091549963066923991476703835480929114077456990814 1.3980676329943652259354071846308745263748822725110077830923554
+-5.7688849352102817146614169300533265141629223069236800264383962 1.493077228193929422004477466987215880801376007461997337793405
+-5.2239544543781953938007238671447643634867848757307864489826583 7.1219924188878528628033388243459185775836534744999999069806651
+-0.1945726469137302081395794294992220975797254209386369877375928 -7.8151110972709611610894137667063483980242577842727660566058303
+-7.9822761566572304044869106266880491421379298486464364574668666 -3.2127725817442107413381555705485986339188753486450005303507003
+5.3076830182659499495508203826117209129231525806830962916347568 -1.9462330665124704961304958554565616428430958596162510821317067
+-1.4545052354082585911550303046476185731354280282304506985287494 6.1295870463198650085808890202718823575583713624362114957021458
+-3.4826678236571305426480453048519971606192252539843548801507108 -2.2897380126441352997572938283867917863867117349765793286745462
+10.6404022974467871452272289630133930003470981766812770127794926 0.9074034378693376988260175877946762356509755660607211537521573
+-3.084142748934494648067473704948997451523646707708404075834035 6.3554230450582354106764088352134383585564535845258694223709251
+-7.4522526860122510070898864226611552810822522224257884579353907 5.8137239684133185294477909744672259431859296926365624856682198
+6.2234334890150854034306480289884354848372302452216941004939563 2.3246939993752236317425463010890039757502829537251939112310647
+-1.8538677439511816542865492754644972269721337119703165841164038 -7.3520704800812416004404555362883014299410715705323620785333744
+-3.3020778179256315365096610344159511962288677944964793382637537 0.3977751484800480777363975910680319339608655642734117747400657
+4.1449363601617785726318796795647900832506981936688346058852317 -0.3874813803700728075457902638826502819670573550912597065805182
+-3.38903268590334933926654264100118134184076382228109051744502 -8.923962631231320409386998203311786812872707017045650006146966
+-7.4309148990109996093457492955317894826796129638466620706092429 -3.9738862317450659179026449349232953572402848820416671420174361
+-1.2181242985402299313974682078345496092686183312287467201534537 -4.3681489151630270072535007533577424153722211998875937755035842
+2.09290804838122876542331715305843182031171420135654853622584 2.2687100734733740270379851278906269065576015093761647819870892
+
+0.7721031360269444536624854764846278079390436516442447307214583713 -0.7605582778547942408060351317015194879473019118917060721292547632
+0.7113282365127787106295924505560767722199840055537543517442585349 0.9359455243018989598720894094889086512450300947660621306436953491
+0.7679535856628120283990827155162180966010981503917935490380557142 0.64033297030031448665328828110131678884788143990971470968562862
+-0.6127602430473631495393181955733023028663546816025211937039540524 -0.7566145378422368715122716757726615136162685098609876740055635889
+-0.5944056790460496081717996899055920305811666877696698395774078378 0.498393464867089132881118789295770940752838691384942740522239679
+0.9839367502424209997890558933686976016082869978582241397510153252 -0.4971948424110283155918942363898656650230845195141350175248779212
+-0.4548419343247805224460011391703079342763504118566706946966391853 -0.3682837387895926737476498418989480477365801929350913148252356807
+-0.8849845588398620212194475625021727518116463369860566764411889312 0.6148970507477253459184467315745337121338375212139515007860628315
+-0.2496600323413886386258990085306122333313701779141184118995463959 -0.9083524682273578446532722997799475788834527253595073048265657245
+0.2013567579813494116381818105314838610969816486807952028421948124 -0.3916716877161613504785809028033398517645549846406356231576213868
+-0.85858010457166611374976182888109386496982051035674989499979384 -0.5193518691808852117378350732261309854332184624171433727414006814
+0.7326702292582058588316598422918662773838658327971514003421703067 -0.9750431258817692289559363598684739941265076062018304867776204819
+-0.2697443704573465465233716116511309018200366900116819867580635278 0.05005097085661604605086728229374112382053058454731767435671635371
+-0.6468087813680422377672655136982917947328505318460482424201962 0.4399150750505159978489133507713340072340352057744402647976718275
+-0.2812302577494115409480047067683469320314228801749259890701395474 0.1872909367861505164718492831692222169018789408412172493435499423
+-0.02167413194230472805204979364706614220652157873015883116130884482 0.9419321039051109549245680082622391092246632631231828777233002149
+-0.680894955890704100546661726757747116024714493408288024374190234 -0.4287041936652777153072881590344721321081952456510997660597381855
+-0.9306530725185795934583927665790248017610038861531896668451002839 -0.2333391111205556198207256592076331117879880842914267473885863455
+0.3319152007540851906913026983763584438955853838764895977762668678 0.7889477067277564731712862630611699647549102063099584994888747696
+-0.4414898031680223608932387792017485771255689761890070706015387399 -0.2563747285446000361218237435955077669028092056157149416120292486
+0.04675554236208552284539297942143061834219393972333359647545914081 0.8211574497098423675796354902233745259806437217163965161734702361
+-0.8152568938325646993310760006867681539054279301843202148958871677 -0.2430326281692574737943057410600918611450147916626606070615468027
+0.3952163240756655529212705355453418848569049122249531536768131848 -0.5566744269539672218404388199827460990960984415899809143036909069
+-0.9395163144138835125672454933008856593503204403133472584898229717 0.4524110448637644360868388875231267640338311624103409145041788539
+-0.08780353633292157461769946866167963633505729824902226238512671868 -0.4077100331640054846709900852315956380002910175183742932154068317
+-0.1743560068378512679152575299947443762504689480476570621749324843 0.9925432694290908433525570320250227385826836114793383624485189244
+0.6018835924636782523215034400201993341434060856497418585329625279 -0.6845441772530325736299180977635806745002567201737916085152286412
+0.5094537464059880326374352490064905763350159638438638190213421193 -0.5689275448635581694575383584343021970227104177442089801706330228
+-0.6412882157453879879998117648467144628970706782597054160685555631 0.3985567814775143901221253743791327148945266133080683203695999962
+0.9017103216368149546517732133490469846549850682301607701578308401 0.06961382826101090949578301124383292455559947536661707583968975184
+0.9631270643127979384664069651403286361478505285019531813591892173 0.04307050119059237005387541827491059927895209375649378090223139587
+-0.6210835173793688086670082589175993809833456274087668762475476635 0.5849881776459916509815348468661649535409940486756497653761724118
+-0.8137281645240375388576750044830353268919925528507904843095256157 0.02943622593745917222898833754618856585348471594569686881397428726
+-0.7041297500866612607234884784407130317305843364144413223065323821 0.3572417013316431962026919347150511042636763596269956578845059238
+-0.1235721593345202217795554759876880268687368789792682195280803184 0.8246603472400295391578505724317567517180656867730457579866275623
+0.01793996302825844948175557573252934185711456214972052895861572493 0.08267470722577286001217633724236129336011575576077446531397711074
+-0.3411596862218241172328579047617234818967459872060847679144866809 0.5296493544860877224747590127030477951987987258874100707895850711
+-0.7379746599220903325806827424480469595800618414934950958452657346 0.178161671839420517570934964597356447578898824155879129858818805
+0.6843546378904107483368305041075808036585650068151329599810630045 -0.8633908949968827943561744577901901026376268752722144571223670853
+0.4265099420399003863248167494626862205659560797404855195341684806 -0.3459820993240706010475901311688197838023719669999227712290509004
+-0.9874151891964456486571993218370826427302121071375833081581536189 -0.8814262497135981437569523940906532685397798861799997656375266034
+0.4601637140807105378191037234478805179877043129140064777542238544 -0.9722552720272006984678084914751283988556792015475269427349942943
+-0.4841039802362244364267157134690841461075259779700777041439742307 0.6486167889394565452584685154506739738504706411589692034776454683
+0.9965877589863013394561112420396792373833365736836351278348301833 0.7237216114456588829885327945423834052953613010855527824331391861
+0.191567730523304776574190978829765313731471509331205854313016986 0.9153832161606877637775414865990581395464326012246760580785761313
+-0.9100049476348622207723944867294612891098821253248738836563459568 -0.5010512652356920074204032205934276172215285762480987760943959851
+0.8085565025927605798160394591787637574375967583263627553971120289 -0.003517119711452846559277971844364606295296520854275366315952866112
+-0.8851479413535487385573817957243936843534909265401263726020814395 -0.7432644962454565902867854377146609433353697756825593784757725371
+0.6064591258881136876029163103297147737049475826316704311935105558 -0.6678889143320625765336213759043802181180754155696893060399849702
+-0.7125906556497681391201675092436355218810428000432951124150783383 -0.6231432486376980435414857670687342821530306865222818413703487444
+
diff --git a/tests/data/nfft_adjoint_3d_10_10_10_10.txt b/tests/data/nfft_adjoint_3d_10_10_10_10.txt
new file mode 100644
index 0000000..4da5124
--- /dev/null
+++ b/tests/data/nfft_adjoint_3d_10_10_10_10.txt
@@ -0,0 +1,1051 @@
+3
+
+10
+10
+10
+
+10
+
+0.3173894901710712338304379034862579946422889909408459156044823877
+0.3158172726100860915062929641551410998518287222512934001933103318
+-0.2206549379852138057578743061470069389191225157277024467333194435
+0.2235509586448150240212804986667065785030694154925182387434450696
+0.3525707830542183854600907186155249059680080381975147205747395167
+-0.4643197195119173309525456044702917254373982711189458917859034631
+0.01022750575332349257722449804129916311389119097299090643512381743
+-0.4593142592621138819114189833820168418626239763706778624898432299
+-0.2381993349353649959266405506577935293738035850399354993188862868
+0.4700775714463633978511207403685111986859425845978719788126486235
+0.3029583073136138265829962071140439545004830470746425534136209257
+0.1092122305172402888258153501556024641240468035240884586547566337
+-0.1306486726789604518575642087548321430960584930096366967255476517
+-0.475571127242979322428858342205484247182890021731465477599417665
+0.2642327778745240757646266294392459562801915916132871452102135091
+0.01032012051955487309722047463966310173477870581273801739268254951
+-0.3302397302111728190115491276401944207700950097206887998953721881
+-0.03919417871052420194526378084573471772000103115061608042162915008
+0.4969744253080455744694825346756894506554753184704475582968873208
+0.0908567130718900285397128207157625325081936945730573057287310191
+-0.1579152561477417245680939938059372817945921112643983640578929336
+0.07714972696698667716678650997245420808817430827447314113682745907
+-0.4384199598876636262124112488913918123145588604895783942604512689
+0.1729154576995603929033538546168666485286603783333729055438208098
+0.3914347841983986584093169466825129403698312444687581041683071856
+-0.1013589956735152573510406730689184973691015496657475510126506381
+-0.005488434703663033807202110079459379772452209210435747933850600026
+0.4098351732528003809102269734570294879975455702584035273166455779
+0.06875288804967068748620631495815812310608096163779380055154102558
+0.1313277929451562487082545713868668183502620330575886917609655136
+
+-0.0242535767318786474505410339230217971227137988248049605972367 0.4737965442825169837488036818827815360472871185296926802983873
+0.190198277866956240752490389038493911527689220614325584230877 3.5261151628680641352999367738647085593145637494900421573961435
+1.932688370789028634482576263623687664095935231075130309768312 2.4558912477913891709415706385452746046404184240425338477358324
+-1.0719418427350805855634464228595793103613057041352895581462446 0.7352450329335025548139368794816262054867822480174370269650371
+-2.4668434841127352780127380907928949216098221229700667365229646 3.5392740749049337197022019224649940619113033199360433098326096
+-3.134514468495096327683736841755002266144214755294073380252735 4.3284692474796152443822224765874351956256866608502673219665241
+1.1477568562010737762182953778392074819157656683667812903369425 2.3401998628928010652801942974164963745175487549574183720091031
+2.7258604544631716278196366171085311258085330351018810239222671 -2.2555805017633334923038859232673355178345682529892795117317725
+1.1237489185988711760612416848173611764687644673446694495816739 0.4435868948139342519024380045940139700769682105005372853095319
+-0.3652503942919750397038516024991708704049205582244531001694388 2.4490941767600512074157748697024207979794499685309593274206633
+2.8473821451678434808883958401742379111110308420442291810071213 4.3741519980080377049275333095113334104813856641650277914152098
+2.8001182882370682121556410438131182620052220476141601901823808 1.7103914889598254728858533041767991109783281932354727232824812
+-0.1653174525384665171438176418803695922396736418773182961846046 2.3836618465348853825911293555004768993241844552922488414387653
+-0.7639177806183319164872754252612136047360453847276528611624594 1.0772608289341191584630236639630985280357809842910354515721244
+-0.8732548302995623236547664550434265694416649285680738447272566 -0.8527641309325263354210724392112061465191735913548196162351998
+2.3241663170130030847334057979032215057076288355779239143169252 -2.6228871098835075150709122739854308937557818265318830703551374
+1.208327729281382749261383077630719209130237595794208201190668 -0.953613435694310422334804600689402176739546638995881457613863
+2.2652498534143696729142017831538797506084337036604646102733263 1.0710168748810006036768251238712718274851153840645374480712701
+2.2227271689470767768958277051895704731152502708042222361373079 -0.4979939283335425427954700575153627505466118054998681296191499
+2.9180565119242169955828961966638400360726254546020246931968929 -0.7519157636837206953299645362849168090206733069477132382631121
+0.5397348097779184908600876448470402328757729945374458683333991 -1.001526343802610845135153921720092512831128222193667996331261
+-1.1688025778473822461146768458595271609412191462447267246853514 1.4314590368429298695921091416717143919181190937913412401525857
+-1.059890644289100758911627730570218945238759390351111315551077 -0.6748109629027478094272836664535351331692430310045661268474792
+0.5978883193956031654675904724992478236025820920284255324931489 -1.66155855783358238416715351554294534355714587329917239071070981
+0.1576997848027446584971270528117678587270400895192201498074085 -3.3355001626322365641697256414373319376872014832667766253547847
+-1.63896425136035048039660796976595934101792702361954771734084656 -0.50998246122406420846670304054061216746311830936710102135497134
+1.0192383414534816651993767443230653639021916737022088159054061 0.2290391923684284055533157773842970844876809462810799289221309
+2.3686007138493096472374845630877909747631134179365686779047326 2.3323419578992977927018709945016390212356415768126102386221341
+1.6621796207427022347457618918731414842534165002868658546829122 2.5691479638663414055960518281616275549910294640566005997288631
+-3.3633275715831484064208210688769396583965562966460513247815923 2.417424544555262387161888997145578770700065879687571539493805
+-0.151766423599618859757857256881588619033119896165148988216228 2.9938179721262486238385945063287648603933460438770961216090364
+1.3453941318975799218856771822328736265368818552654973839378773 0.0810924788641727437954304866846413422658740893519097747980291
+1.45332676164380189926317800454723242617151229739003720334630009 -0.8252120695306537939213624656796895688570944153634528700360966
+-1.6426132175026113953322036013216372372896245854450495642378447 -0.0966169050349247240154963240735202317889436109506150969971607
+1.09079879565317388357786282001190440719001009165105188793809604 2.37834675910998868882221314287985512500449940920837954382848664
+3.28335468864275912591191808008345950813667640781810682701243962 1.15514117237821741716713141053589946485969634988683813841878632
+1.86752404195801068629236653335888572495198895365616813001951808 2.00880879536423006328609064786441520849251479139188698150430916
+-1.4544275959158045612121516245908625978655258511623207248828604 0.91845408625154639262889856719911311129886755887050902058511653
+-0.2957924762051134306868054856938847456362413525409817543325089 2.1293950313986682971403585478636603811274548858710852335079936
+3.9006958251412507832049584720667375832120700306303648099121296 -0.3938730407378591698739839312381116972411343470866809643593781
+1.50151748076965522182990625919891308763552623016816369324029255 0.4947075112162655846432565381291799188526064643753630323833987
+0.2630304827276185593285448394279241153940754559271000077635685 2.67773421185124920383501992011818445676189035856927421482198129
+0.92301506431316541360579689419785635721887483949089840269774334 2.75924157991571876792504109530790890243991170334005073381085225
+4.16536848362243152332217087604502645859518101455164922945812054 -1.46856197021878323268380860395215565149915911667503239317318627
+0.5687845133610394462861907282498359230774672598242219358161694 -3.77511019738973742296187695750182825007854976521918334895968696
+-0.74962454900295388483622483123030782295573630056821644128027592 -2.56088911990096394867744460736324889014101017218658490116124871
+0.49452900334429621981814991690433662471243603563056896558324798 -1.14464373238668185169962730882886059962245857547259720518625715
+4.90375622087299176699611122721690207328251434126816932493434253 -0.26548108116723729325354577271482913052100807820367141736259656
+1.93562587212645485201576783700404698561943896828496892935317283 -2.42488179394143668802400280764686594326544028141814992604644871
+-1.52250338532029550667336082886649221185723481751603702892800604 -1.7387040536577636305281540451079299530474490463514152844380333
+-1.83980176128262176549161745924097995468778641837967654703790282 -0.63076271905195413612144360084502239327972835468020027515393846
+-1.00444920263928887300646777341050571646358258041910085700338579 -1.71285720218047059846884877933557669086437307537574967922695302
+-1.39784577901143046070890229273393110612397619976419066081442515 -3.96679271656469096222741163412685625157688092692057268706464867
+-2.08642187368148667365709481010264411497543926032072983427400332 -2.36109748139760453608259735602221573992720333024574031195080232
+1.18351764548026803940452478225420659730768953398066217206021209 -3.15606594801698939876901180613057211483073920608065143282601843
+2.02057993255195832004490124001859299581194468042036877483003834 -2.04071226996915745379275589937633460960988200545008026977121672
+0.32120682353272543920588820152605038873061206524322140463689319 -1.65752531790802925976566164856936808391728202024611976081251125
+-4.06313619548257514489176210881197326740617264875303817880855396 0.61315226011556809498526746194595732331567838984584551578788158
+-1.2191016232585862444680987313526386892270670116616918507808554 1.86723570362389168424218638596416722608589604866178225521570016
+0.15685601776501369331275881316763458745313142142346993870995885 1.07294495864129178997537331681112612716785690681472924404263171
+-1.1532211832920048628885330486602916905086007963956094729848796 -0.8605149522116736674818849140671318640292717118148489196802263
+-4.12313999193944165871279104032149611017375956085452885770413954 -1.63105344072947968517287526314677831894165318956545553685596446
+-1.76689114872027437389179979936014536918138728691769029869687084 -0.33503100701726939239674906270958805371895567293322508650046999
+1.17410879111902457400247647947654144963525194414202600464882165 -0.65740823662471782552956886059175756395696684434099820714776722
+2.38904207202588832724277071635368467138611134540680219710710752 1.00413961592310140152460081489557286308414351117961634885942201
+0.29401042257428132075155849855733832848177171122571549374100908 0.00255225918503095423723429636207905791173539581101916408618556
+-0.62604676458729516983919849405046449262229955107046137429579665 2.28985768943917321283443510498755734342242414564510384055218914
+-0.21106248372500668954568812706162422629722387357291161858790259 1.90788871532582877773218869855850457600947353714191887908006436
+-2.29044026665702299556364565281836420041689578348902779813547797 1.66138942277262300339974107128852161298565772692380508469354875
+-1.92115895797778797556135783258869724968761221467860184438997468 -1.97153665359883729322013662889363165753413292077443838336611605
+-2.7246198026033232771664284502947281377982014060342834491040529 -0.0744095896948294975464104263048371867550100976187884112804424
+2.24058117020596487772972302887631148464280287106466399984010306 0.1421338358932405669525091490724084596857344263743584944209605
+2.13323361143021894464721100127945557670387586708338559417081377 -0.1778499068763487081454745527747959712191320292593490062665885
+1.01100796642476244490164944678747467375503139438355358159892597 -0.60689246980043908167511766302953576373333063772139382798427477
+-1.13237335913049429975335564521825860286197241488800284625281201 0.1725428729899411007660034491679099277303005445449711588439298
+1.22376267065892146303981291304061567297111136939223389693098592 1.69351171895914805998774854058634133675902588106736055552968443
+-0.3560092456467224001931502221927948839866241107538987288053984 -1.44191412767053873462778467226056077553559991778898020586724539
+-1.9063458049787014364266954179346517254878821129447508142203552 -3.53125688029586307044612060723340261168596181476521104514699586
+-2.2981088538653044383924345030090969266816039174875587252117812 -4.1792329322436349115330559576408108421713526041348002249817782
+0.3198298294329932592664454815334439076019866151641575905725383 0.0820522018735436477724510642813186917160739498858511640632428
+0.7578196034147221859230808007929880073119166396858068668055253 -2.2335082577668291802196288496322980001555135173412755807801216
+-4.5642651918051421613313442251685057148259384525253253740673854 -2.0129051604469529626402456310318033687310663370556534279698558
+-4.15240027697785477588977821204020666022651624663072156333184639 -1.5683233986683211335108183755845994373707814216882049316970068
+-0.8245168907220779809264894345368019067125478952903020651982824 0.7658575844408468330837229203816669775570844956931013666961388
+1.5299903274563799165451934854417115731158679613962411447073248 -1.45272290408728518425989474759547376392589947062686044062761303
+-2.35730394423998162791754540299767287981895647537899195549354252 -2.3943645438583619985613465001699762681085710505746122458525907
+-2.41215404693970484393318094969897146544673797437782396373728467 -0.4761667795291624625462773921672110436925151816972487094845468
+-2.27062294924194774204799617742267277901396509248198079168775269 2.3123008756452814789127621862070541560530139130412737871509266
+-0.6239054339439319272090262678822542235112771711279460170438181 1.3971594330539138110797868088881218042561537953118134816519974
+-3.1636446162241606780470747952717055843571794491761637587970643 -1.8263646743998786825601838194823986425507665336658537650242963
+-3.6125011991247346997835947153299075805600762826053670669548853 0.0707624860520658766321310432011316923808685110441121433112296
+-0.4297181914733911971489203413249494190927399205736498295275453 -1.1624173524305252269379551803667530536243391535714642488135103
+0.5881515956016479377136132672567940229519336836590681610030437 -0.0667195557016124838647158627996292457248051739046090814014496
+-1.7460967431386588748226751642497896541184486216948834309233195 -0.1546024491179814811952779364421509535088583399060470510966971
+-1.1463660952869828457406015764414226707872016161024835970624454 4.2156724845067136509926161430795456692200136099883810711648596
+1.6638999575075330325042934579519416418725086855881623356596958 4.6020911813563100294872423245366770693437361434336447175656827
+0.6473360955894618098309194958515299154148537660556188702429188 3.1186844126468800368859374337529784210016028790729968342194274
+-1.4215316297781085397992407186464763603542296561616695531642586 -0.9870392853274791298717886976227643526990748125454486987879659
+-2.97561763104333440182678112598601792545784229415108336054567 1.0794929848212292532216985905904355543524617541410897464414366
+0.6556673741699710708684541515808302890865960815670380887227219 3.0837428201286432345336020251999628488331342792746610168835322
+-4.0239944034551823204624369407897732308059275424760929982356242 -0.6292510709402828122497235521673769790612990796213350119846326
+-4.0146638375795155050542158501517115694582913629811661467806817 1.6485739602687002483518060872554038558247084241434732892931323
+-1.1487749563234733709835749278818178729129368432942163697437224 2.3959658288657432044321142831401065576177417188444459874153486
+0.6627441186806358546332491554242428361146607850042740099257498 -2.9037796996747922208511957202571110205668757932789219639798596
+-0.3810996657933620066087111604977433555254326594799036259051826 -2.1249452934464967723772277627596239007962098811159134808167603
+-0.3670202777103975331208805063404473405371539400947531852272427 0.2906623406769022507663362088848494601574043425797627136517332
+0.1352792818040380318739598728704851023848888742087550385444125 2.4420107092127203331321312518823517939536480523215970961560776
+2.6918796084224923200274725056751606894404213877245362119696701 -0.1365156811082478347045927970653680478643626378532395708546174
+0.0321931842384772518834250639376765383303230861952347986439588 0.2203806204286429995095682238081725778284624156190387878707805
+-1.0711792072187721104366822450120421234570471468231806149826425 1.9309088574274689275858105613956639200344573560204795318964203
+-1.3758427291633047916116267979110835440798053497982953451130519 0.5941081478217773981499673579523491411412693833188293994891975
+-0.5232587319381626275585617164818165327719663466668746639944751 -3.4763594263318191701356587620939056562305832381175261356930029
+-1.2813047100843703834618235751711013239353456162502291728391393 -3.680245249882360808036171473677817734638466682282471825218501
+1.8472791709685675785273722241287868998897388494957463000747505 1.0978178489129389927717739091761693876934186860376579484509882
+3.70024903078652290113217523882735769663933500953177231030071215 0.487672981845662540485723974430571137540928825658439298256555
+3.6937824655180669347060957448459546836302599046042203451725258 -0.88003439012749379717219394032159966480398294514551933103926836
+-0.8508030355441879871632620413249918670344577180445937841075337 -1.83579940037725651664136658192462640181558299538561450127683637
+-4.5678503568187699934240926311539731011809844653399747642297061 1.9997873399861762141811769185211236431952049405389624407346725
+-2.8421435118812037347701586782948472498177854307885938516062372 -0.2832462057236092558469829038060980627086277336295819777412889
+-0.148147729927159971519944151042441402602160904926096835964026 -3.2828284190215732753927884908498712985860103856672521436474769
+-0.2095955290883933879842209370240568785734111653465827700715143 -4.2677434682842073096138704534596802734132014962242174708712639
+-1.0309398520144630559233857449886242853130896100760038188857957 -0.5216402445310275810203338554797322259879164914024094784235432
+0.45282540599002817588076511485503762015987174136093932135600055 -0.051400614689519497926960259329753265947984966056005883643206
+-0.98031654053627459909227538245004908982223489850956448967579004 -0.77623078771043887575268861126756391796876769823920332159994251
+-1.08663864345996714932335024163635001605729767833208124848986222 0.27757575563943183669375995781795469065416796543691881733006917
+-3.76990063988767700775456609240450055974429954249420267367675701 1.68582862474031271940339997520361533643354451453613807252301117
+-2.33828931263665244792799954438312402812885922666985714647864148 0.8397434955873138941617117820136309690703784677990644878614192
+-2.5884879248621523042344180810813074908815426341485094877379775 -2.8323961335175401729933434401237933131717102263470779427669182
+-2.7636269119007287381978090362223945427922962640172810493915469 -1.1430340467430237088439984582660618337691744626396966470279785
+-3.6256315211844727442304123994997679074248236340393600411951319 0.6828679691573858756765038829386489725583312220157493555054751
+-2.9696540710239944791860654655056883292255614752187889170112123 2.8735564780604895509398142053925299368242298340220822438540786
+-1.7749674185650734151533521440730572615090857549650342591522228 -0.54592458668542728227329907800305425585206919129785786956880938
+-1.44812558812871349305650805113134492988758804802661772323506527 0.56650161680274148414116045634374791509956344252813265029267313
+-1.5650063994347292459313357753601673454188769122010771196243057 1.75785718356277236747928589239365500921506977736422842330394768
+-1.88460082349828457067441922282779676948647495813025570296829329 3.70291168909382794848017098560577463246137853367163540722967096
+0.93583879466277894916794921939226786129041260728521319360413473 1.54135041886799192666380120817033681596874604113929817894330862
+-0.23548145033776057035653988234084832615982846284571659210261423 1.06302729387715421853418934089531183146400401057898844017129055
+-0.44426844029740645113909798852938628859081629787777776859660552 0.86272580228353390599954675733098979473096004816130932674891154
+-0.94371942438267168410644682451821688570005115783149660495477634 0.7045333551282359047983985604085778201613624087617587423626937
+2.86176188971625422167327066313295365404877315133883203809660112 1.17421620122669226717428137430381423211184175347826335987018033
+0.88800482346522450114565275968090337249630464073173438570780219 -1.9118843107930098734794285434957197165984066831420948655839873
+-0.20844268083165343154253062102822969002408525629607742917573208 0.28481836205718609986130235553034525736588835451819066012169284
+-0.6220625799164290296904999298088638173738376578129522279567207 1.03262505379679900713572072459166924755349913374738880355757441
+3.05504174796370296204472271577842106285540613221989437283115855 1.46931460900941516890117357529514141365929424986867616619858985
+3.23489407992526569115806367544361064898676305395420941791558418 -0.60488157346111648862517146440523622137239907395222499506464076
+0.4440965839439319450582649109155139958080805312288632544423665 1.53462434154246812724885903465692603626015685812416533466000042
+-0.13975626981914911215872131031059737059741314707513169172915196 0.97485994349950015394956777688370512513951495776179130393592051
+1.13802163620151375004967989512494610633959070886045882696494245 1.18655554587204854964676197690859144014812114454381755578713372
+1.40056864460637434321971038746633571109437357540609648877627677 -1.38762331001064635043349038583474236659367214470521513130572021
+-2.71186928492485999357284324493221340179038865043110649659243236 -1.16505852366513579027434452463942133210235843024404969569294454
+0.99000154838452839576732108538768344975908261448603400831570686 -0.41073663893973575817263753793217442103839447255924813583398155
+3.51988813711709192651081721205804513829311572604404488570270729 -2.68650556444245626242779941342042909705608575347809757417931356
+3.87234442102409779037830194290112783897323023504626186246235107 -2.76877320544423257370834222544546324134808748813354885865832473
+-1.87454641430672448113469276941981057122474222315809345786489522 1.01673601328387387013779977386555201178573397737439709275740691
+-1.93861020066884252928415192631619571336456698315481336822456022 4.5454109391251093317467046623966709227776707899041790602817467
+-0.74934375625551769428751129308019895151912542599169687994317539 2.22562367808489211575588113418693190480082969251841213297209121
+-0.23493214914013969308220660303762662184895793224703881336444008 -0.3256653318401156153734911017785915383795533654981417892844847
+-3.65653952776103737978568869926327474709420814514096777970764469 -2.82058756264782287806130909822631411150538733055988967005154483
+-2.3224574218142276470354851928353547270551268981001453458018135 -0.17259496101926803828313908156606367031348644535076275729019444
+2.15981210535815671009945286718020133715074069733761729379362828 0.35709837823238740569349462664287363380162200093615474146239
+2.0250069225012107541956810352326215392155326816944049084725832 0.64755953021384052402156406617330593374851528892238887188794154
+0.14180808559042843733828570818341489411734504735878875624088899 2.38001423655620096350947134856272570088291713569169800678306381
+-1.2031147658925145118949927880782078538592740797372415469553281 4.17860931949548468868203479393874461336290729028213952587781535
+0.92816779971067563566371778776906702704867794257009654776404631 1.28699310183993947231899548437454061006358698793339183869488584
+-1.21757590991087440909759639473456046196990570097459905983146068 0.5842802468062569588751266402639346862531632672072243810684608
+-1.90111765519970324121074346670989052947480654806272919526482369 0.96225867209132521267267302513879718566626265562055638238859688
+-0.87035658640500907742795291677695831749347210959001227612859008 1.69247872608740008119607308797797631417113237155484850461552357
+5.14745676567886424289075169748557061610242517360152946056578621 0.8097799137183115613288753937564020846440998941681912763848729
+4.24123124950516224452980358365903615458221153305864236193637812 -1.08107837663064312009652088128200097153668962073075525936735797
+1.68296351565586015019555475477927201322336628375866055369800973 0.25893246836181092523970796341178509110119674027139783702664297
+-0.02715027905898598798164931379367747399305991895135429601808779 0.7107013794248627886012924528593337468862786072978315668461256
+3.47994965489839282681064609210027385251004596562214443423667465 0.7536377661130388381452362017088625165382944284449149797110635
+3.57156642439228431646641141182365314006388503546039676520539031 -0.85840505628056168027200225422263006875701805860958206806593262
+1.00217178423519337586772987782369991505752526234824374690156412 0.45363307474078791732735584579921166398651392828407982178207209
+0.20491092788256115379579594346244273798635874674742102389081712 -1.23307960869227241964268983812733772891584478413314108109419082
+1.85214524584965325563273958762824750510049241911323523305957453 -0.62396991564493071874542076259789718897213134521247525128338338
+3.4995499776030969493964083313914949153691277383819945691649592 -1.98977675225114920541931676205747324737025627367790158380132622
+1.39587137069426056925192930037309617946673132057574103423647961 -0.9512282240663804218222721458940623567668184325738414051712459
+2.51058740659432284565376921188806267638284243869371815825285066 -0.9593614919517396888291597608266449644093284652870857487274686
+1.95231794527375550490001703881196036088426579328759424276126011 0.0457834482587999911916387417752527804608119251094739876703646
+4.4432957001147903851318517199206182977589945317822200393686735 -1.8127246316559353355377125240589677403547646121496875084349114
+0.7896315704362564663295180844852997292911071209131842386337679 -2.3252096769482459861366317595748329334297365849935582443704027
+0.05844319755298892603585380118932587843443699668372209756743035 -1.64134858360799893181446515362900964267736695394830660529345
+0.3038202349708164231766795312708567722432599326038752853310377 -1.3534045999198481837563958722743829711434719555595962394713415
+1.62162455143023341005735067904270225407653205901300230364729565 -0.25895819279562224276313509737691925447179267637392564434096417
+-1.73690898315677688762343666476506695161713929009279194869261611 -2.12022652733641445403767708791531832666787215080363029211971758
+-2.7025084895206681785538739312060075084056824738530912632935012 -0.71581200701368635482615301082879772940556289678070185723517658
+-0.93443828256731463017255195961266958691686388105261191947961824 -0.58461783258213563621287920498186224130509619469504251753580818
+0.4430600378551069563021166159258160256895181382915871089284422 0.6754887365551679904285830462258427683244608135542772229124492
+-0.0666660803773971503518245366887510896127379901089174923924717 -2.3735567498339025980178821551953408499947675019557384019971833
+-2.3724284875576679601400233666798010098712568298812614540614573 0.5053804429266461110522408958762091275933165247296720641752079
+2.1014209125038656773735290562084565774993824600202069172523075 2.6488473869440881048161795582754218920922149723310097988947388
+1.8191708967682349426155571692606854359842466665269205928939985 2.9320173264465494551338533985220483936912654183210557496441237
+-1.4924264694107346367955855311432114551073365688983383437881216 -0.2157945244007068077052018237395370035019037959617341390620692
+-5.56930240465894288028649613311907882853535419793146965549293239 -1.0115249356709338486229952487679681084825427876376604653777276
+-1.23255747410963743842423615011843544163477428078568240170094896 0.0781272981966699670375229183300539783254965809401569101608793
+1.3305098917916526478921184277005457817275295431176983169116749 -0.59875757605758327253859497176099342775839321032124038336490165
+2.5734259025068950333663281674076993627323794414234295963680164 -1.5462376632556412544028844447325579127117417304358306010369441
+0.7431837221564389666234893215762674264646261865062541009784323 -1.3794895448764134843014377776414133666562990406213835073838047
+2.26845445557607729449618140957542696008157944233786197438134 2.9686805924373661924341545417889291357053285718936503028107751
+-0.3293604489161032028548458772015076955320714329100415770769635 -2.3978106178766173267850475167401815366713301885429060542221839
+2.6552434008417956812053969648711667480972354359780706124208091 -0.0262734830357958592994119369707502533178948514337121423409307
+1.6350670459322660822167879375350218607857634917402889129820119 3.1635435665105641395999604752618222605644038248774115218928101
+1.3302004781331674660817442148656301612749895291205295003162237 2.6368563268315427630655843278455450515456057294609737300279101
+-1.3810525878890961292182371568532180505231285778151629053148984 1.91601453682609814683638941372137174578878894987027973236408396
+-0.29330155544054774900295348864414301462379350575400810182580068 3.5154419021473892310634328943644580625810577544910848869934851
+-0.4000666389273996126541310783403873214667435191881692208441915 2.1066190676904092352487494922502963344353102554599803417649182
+1.8221350086738585884132081515682856231990956556199465162936722 0.0137251981770816668622084882173113416940679992843956945080497
+2.0226435709779383291390180888878013303965500904767100268263673 -2.0349280486109948203527366948552450379816817361563177717000488
+2.2159165526961630678101304882292550599845525924282547759681866 1.3682406191869045929290177355736394808604688607958939222761822
+4.3988110127499011089330275512891290646053118020571683275847029 3.142110322649859796700119416536134749570183291805268405694552
+4.2845887956163491837717422573105655662660323167726079259407774 1.2615589213455609514567861221942454785352983761760809398234459
+2.4049585005944254880799992335450659492456595623507500116248339 -1.91609308531385087455281060540965369225649904889067070429693356
+-0.40149261949945236794442553152511110369747079586676670612960484 1.6093838033741994401315874424245900895528076134963006550948593
+0.41668474760207324785521088864751811963025751505215041285178585 1.8523285718247036481145231990044206593752099438472024007065476
+0.44306654453846751249591169728277180209451423436180908015721341 -1.0099239086161271581945522149290135732900174531255504816324436
+2.21188216044318760859079031596417566186218951359106018804842689 -4.33985130395376255484289191141400649163903486576047202916696293
+0.83843777876382752918264484974055270655378438709722998908577503 -2.8545730963577937800093191211551434550834080871275528970991732
+3.0569358198299551423171782886249354542973590142205868286955109 -0.8833246035914790111824229798343469090554382525567268522882849
+3.2310449472909132186524565289446426483269503148006592766607138 -1.8786459331968538604000180577970557957519622714320236700470836
+0.9132783297962969514373971066910808911455414108785222056437732 -2.5776649026410263919564211417984095934373664041974157537323863
+-0.15988984603284082838892293749855325185829176414161046704927608 0.4077948113585671252787240716967445914138350324832615014413713
+0.9839745281880617083314424060690814452869408435982085517892855 1.89441925950512570097427302059709801210014998186788097116108904
+-0.19436467699067364932605408451922431916218696034528823443816865 -4.05258302024744000827096739323913638092218858289802412598403166
+-1.85307368062598999660664969440492455819047879454702394987496211 -4.98753172369337862596366246532895243907025085838088601378753798
+-2.08767377415692039903687254342271697624933927271099801509691676 -2.63688177730267873792517104983566470325308297241567398806726748
+0.07565338943366845763427864991623203383171802476702769516520749 1.63929746249588712367829850809141035637185703634043403142603796
+3.4275185009051894621100602003780577439887185964019986787176845 -0.85437004961870198839540560079881965774401604678475117179046674
+1.1192022039638707269771549157653644631445513642224280532377282 -0.94398767711717863163653604837946899991076083348951298102628673
+-1.9195850212705204301645800599806410089468922967416121272323655 0.7994792162956733385226129655658638302592954423425027599753554
+-1.28414724672134952333686751588625805202436002359024717375139886 1.06201833963214421154216003503395534684757922109667972924957675
+0.64834263685215983948925302451056283557334330726669243987758923 -1.51679769369587490444664906147139236110827272771008490657580498
+-0.66392334887030374470365522929557630930818744892362574865338066 -1.90843295495149043832235138754493986357653528986323204177646366
+0.37038693872167136722867566992927996967732281976295357806824966 1.57079421030520520390618666067179146428695073436950243096508507
+-0.51594155908637019315519750510455439469703604713765162984916392 1.85272061803287494428661879881005025107325820532600034967663218
+0.64326175286894249775671462522660034962386033004911344313758517 0.02061998071231508307527881859629673056835663085619294726053896
+-0.79812443942450568188941560980916903615886979945656447070361629 -1.85840613206012868902150732221711701806920247534994923609390534
+-0.81742218165493968169944435314329894556379420295071324395714819 2.08047644634687877813469268118253323020081924845140812907169315
+0.76356379407013599841831765698351646926798789935611803394517567 1.6409893113318718071293473860835042179689162943559020987884384
+2.8767728949986455833665231799092893296438822977288802116663963 -0.17810424468626428233508850675910270767747379561158772911785302
+2.97835992527459986078552198589232762051117972574682036926762385 -1.0636232941435012132159508789525629230280032736631089739447782
+1.20821288295588277795207953896790425033539005828828821789732037 3.04817076154159086681540878343422028933611915170140942257242309
+0.45882160707696863045811359636341010241054990456684165323347244 2.53865463951300659904947151910071023613821613410813681868477902
+-0.77158190422480356390656117765815491714409699975802073341376916 -0.20594836102669318381228482142141575570036995521184214599740729
+0.60553743264064357128247434373082855515580452708732834622481641 -3.38041741581040638549998593744005536136496482417905079728297774
+-1.21648729461042440714620400370702471077521457073679954592451354 -2.39232342344544879739756375080449157830538316695689746879587444
+0.3486504155127436141258096690319528668808432713349351003914713 -1.36422310829366782815730662438944234615756662510633784976089696
+0.71844277834076252834237824105342243851362248451353431159367245 -2.41659390173824958673557622432193502129841987065444114401386522
+2.07682866663494488306790438268301691168411274771672400181323312 -1.80331360927286011376062199154071856923214216108816796493208714
+-0.78980379254598760121553287373827909662449106597746411778222503 -1.3295611946740125084668600520059936652710619735724160691076755
+-2.25143792746632147522220530662766653730074695900078111853361066 2.22131239533978868656051248161813115731451019644249316655269394
+-1.75954138175587158304120063898765081493597162751458564162654701 -0.17247679589926810443755877709521275846567738622545837514919138
+-0.60942545427605533533909474625095880041950873389757498625552915 -1.54354168528523882225633558602848905545841369306811515874627238
+-2.40189190390651945239938188191480253356921109648329063554143505 -3.19886062359006213498451344022849971727588244120042902612244698
+-3.75975030661959334977433916228688414359278791394103771835424778 -1.45129458770101167814950748602603681202137024225881590403688862
+-0.81573012089681542574917191654902505009664602811290144517460975 -3.19279754998892838932449325006054313696633822158345025047576056
+0.34923204884454036442940246164749457859262097740032957557449926 -2.04777867410919981483862489834817535019302049619251074779523069
+-0.19344285484402050261206180680118059106455445220505489270597344 -0.44595590221187507125527059115488917892379296827145437981893771
+-3.17541551021792288383120907097085025915425539633385729047961131 2.63606462877924763322498596861704066064474733103515334409162739
+-1.143621050068835605493088645885847505919212844674859821368141 2.80224447760250814868342428257841494213928545468347338779593578
+-2.19791178832889611107975224300128120772585126370312621766779588 -1.46271685692399170605859273792709003842800567553557727148936739
+-4.42860519526921637330918214079794539789678572305844343817077447 0.56799213808454640917834904310883440308524494242952375082074174
+-5.55125431080276952480133090657668653973046929971638705580787981 1.98740441251924727397789594424501190887313962243881852175613897
+0.39292516291411480359246742589034743067982780115889383605059326 1.20418783647127353103862903228418957388106415102850967318357235
+2.63301229554942621641710509811621103165432157999389819741834076 -1.90045183371402642661372750598759338372011875757095747632500745
+0.65878185616381490591591239838461614604759788952821593692627529 0.74335738491382578125015742189243952266459310719526024240020514
+-2.29966711940741097187090583516370984763576064062386223228052823 2.86646462730487877001042842127169639602451376685695188054886879
+-0.84938782266282038062540628613284421292762036862975626694760707 5.17344051904871140007210872571045104638116266792082954793399424
+0.64088960441207970426583492670220587858115748152461161743772403 1.89405844454832530467781722917566595136674486841112266795335601
+-2.12588381500022969969018084041642451678360722218720665559370215 0.64541275615920133789097514604999364903621449419431307432289795
+-0.37948212854301401081799685437798268109978926550463226943308733 2.12879345252635866332299575422305927647423486767632807300293092
+1.06638962594798262706896413708537213509868243553225472005972833 1.43257852029352472435620028893902208123558853694273644342579754
+2.66892122186074439004241937939380555190023286384297526395942458 -0.35760123867486914847235636428864685235933871765720973218105818
+-1.15708114253081260501503854673281819045305446526449901928579395 1.55035431884832705632684664273575834395024359582099383316945095
+-0.40963662071513679146512886848674503457106503248530172589502676 2.70008469137702359722672854717441228093889671348668822876038486
+1.28900704990283602345897973388083869259235249406919143276962157 0.54032840747671346066639149041342036274574799170777787794971453
+3.08271424459245843392528858273075104008423196933155624172254197 -1.5004887122441429707506712953270172435751755718364348566602053
+-1.83060821720250563377748408485508467380629258515629301497722092 -2.06209347545947569806005883645914917459269614368146203563220279
+-2.86634931329702180100080391346904713508796917904065260648632525 1.00538280670562830055516701394811843028260603387297428976200305
+-0.1203331169346276021081974542725992483013534368692882822764122 0.45552922988660533860141496155358213988593891768567833985389408
+1.1889514909124389389935080934753566133459711712980685120433872 0.95596101379555401675961776946319231341373502673085632542432217
+-2.4182384710774979832857418769919202696730186382274491707246113 -0.18795400887923466376343058644472825327516129243178955040966538
+-3.91445370522183498922989560479138033215521189396627620625315568 0.68907346208978181748459835537375460791431316312570620030721244
+-0.55224624373037929950339105020169348338051774986886491025036317 -1.86844677606223758372675780304867187974140368872852372383539787
+0.95270967609171505755528774423607820303545513376278515182858195 -1.15543544015475714709948721636977470777092363596758650113099719
+0.37204337291730047560605074038805170687341460026142248248233174 -0.69281575409490223643444949786205047903388177326580532778623144
+-2.17409585854154869825811197190158210790034307231510768763833849 1.22113964153494016400840882931145575609370179225816408192265289
+0.33563265018228233278180809654494583539092796674132609143923268 0.93521361819608130442331476826487362169240899974970889839078902
+-0.70457690849561863535563158890791715374573198764018759790016974 0.6854399220005779008509834624770986429497136791904696782442369
+-1.8002647184785129443686655062595712975176660178315824758345203 1.2632871915431544572668082203268553143001185784019736759892906
+-4.4598046389963569712163493503572140346662879289034702391400099 0.1826303574480799272919307415162043225155447183546111054406414
+-1.8842904567062751790100910821012804014524893723294424241819147 0.4589573012050799129506210812396601844399984433000191432463976
+-0.062268522601953306227104735059519462797127483911981730006415 -0.3636665480002384126371124703512675489086705443623558302124926
+0.533681634163572076147787710755621313263006229440599312790901 1.10577330816530409656198101443119694178604957918150324287678658
+-0.25097998692512899545524920902382723236631521458334666282593805 0.59495110868293519158160949487069043913833700302059521382129197
+2.08040924865820601169221348519075933021433124718195867230605782 3.22978599959523656783328496005273473170065777375245599751632319
+3.59765807556827258345933881504662159827643963933239525658672041 3.00441206084121355412113465972251170465566054387204421199824469
+0.5831456985755239715724167831072904539074146169932059436164268 3.70946640668287210810416541415951348660365422019701240591625632
+-1.4381844095778041597506763360405759670789794111786211493701688 1.3679750887082431247464827798178802511319629155556513706251713
+-1.3911390340337044461329839212950353772423165844463775015020793 1.7285080191081070800525454251377038982008709855061044091579177
+-4.2185437607997596379249476763175910163467542899836108855065797 0.8642481939181473483115443306839082691870730713654361918292576
+-2.369821411188517586315853692592697949966552004044839200281936 3.9253214511122963944108405295556781508789000699702822723395089
+-1.9537676762862596974876667238529734411663343670434153466592132 2.4304912192747320533609817310595052900241748930549954454596136
+-3.02504087350654007312008542696760871022310780285116342044586598 0.4567119608194590048176783875930518999851579314366657648121102
+-3.1481519670755817066801720523581198162919763027263191909589237 -2.57901917195127756820555521094159732838992952529417156234616316
+-0.20642482889925174166831489559975224596644368927483143858390718 0.62615515128714795553773162190071472552969321665642085949644142
+2.96182596443608757996623216937184152300267822796321286884609519 1.3087574574904268937124914199988561682915103533389272873527049
+0.94870344355608251851854785883904840767559648471731888621120992 1.8075021620813348794573962523126891718413704762248436788264456
+-0.4628926378227513960453387725724346248700535156160749709701418 1.4968005034545525348324425524665306001016709873174582258795065
+-1.7666816100515475591338020249730421871116369066610800488981799 4.4322281879791806278094757611704296331333474795701532713857724
+-0.49851268594289727919257894380182104024017485905251681912677262 2.9815310497887061915063869102893375391456384385955229799302391
+-2.61287151323151004426902145309685559033142068869236655686818658 0.6098186798563383571176242747499922859759431569793191242508001
+-0.49156107512936613273963761029395411584614359177720343675215159 -1.47372080781599516153806791002049242301116196808721225567932363
+1.20387935294441423950940875221539353252100001215600734708084039 -1.00690138759649449167694632319126738715496324926616525788540474
+4.03081907983221654637246343145361924519651579670861353715046053 1.47320361932907230832896467289144319453575855957091327591622832
+2.13620420706942754786266761341705587697174848831399713457725262 -0.18446055648446621346711311554275955591227069448252523525478455
+0.70547130205355570656524215845118246851365612509751101403051672 0.35646582645943829361319980893169984016725310626535449710225797
+-0.7941875438420604792782046663454266074821472755218278495198563 0.83700007709331450937011095528158632758090165039600155775796816
+-1.3418232282612050455719845480299947841130780939973148430021475 2.78862889957205988764187184621610635833322613020417691962592574
+-1.4729921063746609337880235822474453488358065119665410177312377 -1.1879713425002917016766760516871979536509495749398628075975123
+-0.3291065203924194464064742396109112131463690647894861905173517 -2.83447270383460963615771162066153974157534044116425443502482149
+-0.83450748594147655911564208360360891454128768060470468351544164 -1.59237154598369372198326314309622695337953037000036582683901527
+-1.2129780036896577319362374053502911699986626286138696117095011 2.4354259901212935179190830949060625897027453011285417981368728
+0.87088455991353670916346524329885422264508112105356163568978216 0.56584805638722668852317689962594856738453104861954616387513019
+-0.27543853650827383566074168230303181303447857001790561949633487 -1.48679148293308377378271143520866948533210859863243042280961259
+0.13105700406213244318140703721194641949363463201941854276361485 -0.0321588421253406028770169755288965421041534436343589549385806
+-2.27817019720044663991980196693865149508562802860642076183179573 2.45017347872321770420569827884006277840433300532051077158502466
+-1.65229923739139264159805241243075265803087977915955801552320985 1.94233816470195854776368298454914149694989729441237267515189112
+-2.80488401880731844873835614071502864896863620221465327878767882 -1.1411578111440761717062714807123316452041682069322127764720432
+-1.83780517270191912838924117905884816834984840298331874872561898 0.40623513325814513524567362352961964773482390887693952239597454
+-0.6932038649234079907577097026893331977836364279070332645348583 3.55025481742836832560927701983751112019710391053816614790897012
+-0.27740510817416610064504027228418472817566565244204036002579641 1.47622035843464260035697742737236373897232799834834603126283301
+-1.66968627797520391852154398757170502885739093122747365419079462 -2.33437499986462841900290250172180545746120800129349320246567686
+-2.11401104559457261198963620102393072204329505276895021866320285 2.12863051831219940929678579212540836598160406253847642851379881
+0.1909765290281556452377025018212986598291697640044328426988953 4.37638553484093149302869331373284921146308734760829990608029064
+1.61264428012019339545050799500989458481234968933230515240211963 3.08378477608900634101281221829820581001184355733748984275177617
+2.46033684381866706580994566427947688535115196609815882690458414 -1.62128377377808294355291008594167456902429269603011123219832153
+-0.45857578611943218614711068204094268242417547172117383463946103 0.30582737221667904419974342261397836934094684806904421293143442
+0.54207596294854665787880738955856767379211448392766854421870026 3.29349177144247318138736010103614246776963315762500735821316515
+1.59491500217250152754501982191245723983262375082504766339658917 2.93637006164235489728505256219868076858919162173736123623291515
+0.3528443006292812106347165657218364721854116462415338581436526 -0.37768349384130620706940346797013889647681607425902871095351339
+-1.17449815063867829806594043743185746828387829993951394597723864 0.04416796930562397226611483425304374900653583940903580038386359
+1.68240980638030757062273134115956710102834795974195868210759522 1.54580972014661720192936869066792743602719749059517661790404354
+2.72191332061379098646680239357874181810942107330029720869790419 -1.94571459752783415423512156462300023419846504562517384718330416
+3.9323028091196105561255754836252566075477866669949222373076719 -2.15807227919099781999182512496067856506968511764260406938078928
+2.83308082750277609153760644992020122392761228680672401982555284 0.24388422368348310611975966417865238482845217370172344665820295
+2.54406220916145443795476313757241277086098929744742205505243789 4.45427546191158480934936643735404155016319430621819950461097816
+2.40945671127406793406857372341771014810675960218214640782866049 0.20665016478988327685908413726809185058794406325112287319578606
+0.22962709637079118194960007873437471181991367088969432298169336 -2.6956902134743008230065994649045666307424505706433628643923288
+-1.59763385776327053378042131465819881961755598644161353421411423 -3.04429709775392986220321397337405385349853940623075578969912668
+0.29934846633312966332175574285610719144291894500333110157989522 -1.32687831483235084907214618189081552359098540471064556116320836
+2.58908442493259302371823091044925311646406077537053140921929195 -4.19244454920085793510593202765744363838133691620073449815964521
+1.93045630140277733188103644925849742433667500793449508857710122 -4.1545372680348171051472799745453196303337386520073858174831483
+2.3540569937900061548840358741153462873209492564668775742919101 -0.63136624812535533195790276585896162729112448755032029572636381
+-0.35924354461362692432478707841427572864747466371825899423108066 2.50146900602996513786138199980473089061967779472555138784451519
+0.18266247573804833312156521045086558908916019465365708519623544 1.45221534318446138908817160480583418637920154866541784069856383
+-1.44870247677319744792242024627866943203010173673034767776964819 -1.83792341156580362622541202916348181533428806666765541089981725
+-1.60727489143921202759385217697816976048362217060191484793003047 -0.68040997054939608462548757734071892411221478491829790354114798
+-2.38934505830720666839057057815780958962474532694244932033754241 -0.91733739403834478504359653496144974667235347364989478023468932
+0.06909438310637432132391936913964773954147867009887630474503972 -1.11253756902982674311767657643373315260739265737385358197273136
+1.46887918803109938903279364464994435142291656809254966259047462 -2.01446782871136101569309956611784544401560406346923471294648649
+0.57243055382676380898249063107564225464793179701708346461545484 -0.45653177521943077811160923608004742534331702072097250496619188
+-0.86989571620243620435249342838452402334523029122879512747231341 0.32599632956683037448229106418420450383193496090459000213001184
+-1.16518608472376110861443552164845303896240981265372071068326863 1.71356863056834731132916645018733788420814450533376413166846155
+0.95693922760465439655383703637791545033696255432990719617600277 -0.0248430045279309147110992518076477982041288102703467530725122
+-0.85899428681940475104976717394299100792783293549903826291356471 1.35058512650593618481425560242703219490922610235595520771120708
+-0.94474253537192778054763099662103929888705174597290715085338478 1.25041514665628253846417732270344289622698626453844403475976878
+-0.6062580271625518262105914272721876717865650252984825254394405 -0.46206889368603420999310720721191189733342895128992826731046297
+3.48922435957522002318443525803777682016270739453086897478709638 -2.37231786665240072180344966086187973914270668422824532822135111
+2.41688933454015034646296760487745448382706696880602350360293215 -1.85014761752282156585715189249670151161788028776799321623308412
+-0.82239286050935999650073155075231715848558525681647513978182573 2.17723206188406267236946980093345007331859287823293008353001261
+1.42313550565804551027035893050609976211040151235046249678382534 0.52456563989986746192570742631883614896036274004048313063559233
+4.31579959169909978824875840717628310336191828351764561298748495 -1.62871054221492769432076218057827768611668342711243631711632282
+1.17373433284511457692578393362377842866682863608147740909930794 -3.15508426912650655374101080930069919701768202426822183513849892
+-1.67379328999595597522949811588970558929732692600276131859225207 0.29110273554372120892823830915951489845949267974431477432128561
+0.0747132747398021654683199056298845226597948837189877838442207 -0.64180995380856321353554912096966971450995552501472103463569059
+3.2121904028145333369997280926593947685506345600505454113656867 -1.22566427022781138516521345571627976240196514704449526818712824
+2.9701217558413344197463271502096877387832780217045861676356045 -3.1880525115790291035321500476596442765915997021604959026649444
+-1.05005308079069780543992873279090627438526268767393568102479564 -1.22790154892170302740438679895402974036274261270283007297636206
+-0.09971851503632233190329883401944571070869908266262840707978307 -1.32419051524638826141162557475245410012120778607485285266565942
+0.2821545262310010655632777654201246927629205910093120170276092 -4.50844432519613638379773915335789639856244883813472262003734044
+0.59836166861804568995644165942287408041518574007929047778827377 -4.28377419647931313698149424167342167093107870525203914913089902
+-1.27657231579906231886408212091300266524873285813619355430767701 -1.22211038841450777130563680056174803962053090492054895992079264
+1.95289859952625094821762100229386501633851469286737527251687436 -0.36172458430915235413249863883360838222424348320747396578892844
+1.21564910065449489894171400631557129812775369588765820679317629 -2.24349784685618730357066782350721876008817983242872925923357379
+-2.02257237492009829669280306400448326888114680987985742607424392 -0.84159782394864592271849313284169422365205075930756826887207789
+-6.39106743868921076064881781542479488412817444061185625396717292 0.14998782487926677577468854007240871058262689398877191077233916
+-3.14724759769393769054866920524746869843529910582164768383386379 1.06434240299544995597317496178346385480718581015494277492042746
+0.83655527629200115002862716756770094366794767861395779286100247 -2.70219540936275297177685885234729115288625479146958104059994838
+-0.1405424084412392478968787853197219492530263999152691949117374 -2.5527080259701173805234086452768485801407191394195808219357908
+-1.2714975725310423838732422615466284783270997710953514068562609 -0.3300789922605695512420719164799476829916818408449280409416771
+0.2816479008946484246436075913166552887429823087294140128175432 2.2202179350113221599130835856263531216836162989706522425563505
+1.6108375561675064411430947698277691288359287512257151832211514 0.85332290236746966027795156949645072368639581800364257756495175
+-2.5968411186198881505078225058260734762939563338957327260787684 2.22714946202664343807387524362717429439575814066120723269674368
+-4.36933650824117432278476607960429272849219316278637852055908825 2.07140049578304062105842027094467525215540258440924221700653285
+-3.87662628734369970475028204714909821952390982390314782005065444 0.88478519836403007756080136432730628749346168482345782819316372
+0.50594353754612599038675352955578509397462751188992989410502947 -1.09204837553058752054769090632527946260473830839841848793738904
+-0.95374981425566515107483827625369270674397381804669784178477616 -1.13337677580478620448783843841029867973835698021597102289276278
+-0.4447846595869340297402144548016409575680429485064538831896948 1.1111037488605975018674567493777156524746908022558540715482371
+1.24085367248180724512447666397527082182344247672346625522372173 1.1931112610643960027713967399715791624175554364035958521897584
+-2.5146353217593985714009215834672763706038017097671496087044129 -3.630274137625104586017352031480645479317182266439918795437055
+-0.9258264921854378254496982161001173298027822046383464404223943 -0.6329882778746223757733074661570095753632755968852749702582502
+3.93039733677669427814386001568426596913499469241538051245626005 0.3089623426748856232321742331364952589583247162992527005337553
+1.72602190967523165351481221427752483648551708849105223956405235 0.23343478010033522866129542682886358515725546534211389243425393
+-0.75924614053592277300495627976476006488450181260739112816568458 -0.0269258205385380107116638780936185632686591889073603506087036
+-2.16389022490725252823467994686221469434101248171411306132777031 2.53384925334872849015981310871232998617225128681797221814872344
+1.86693637293579205386561665355901158054839389427127013071364537 4.32652681459633469980427885372813011454602191844403774083315433
+0.94911364936820367445453290819159492091375250422765428674942223 0.24032016944539163207950886180437907757563217568672343563636754
+-0.3889392062050137905365227853026140195709649805557923135800797 -3.0832699421593538813783836706295108356441001491002918698623899
+-1.1990747730532790318326003591507708462262109798609912059029973 -3.2456974107064712906704009403723000759139200628787979787885015
+3.92646563961815238157993781117994817182644173074897915987947602 0.81863153571917088305123660435521921907372443787385632597570907
+3.3886696623457525889604382618758414547728801468593139013931592 -2.03282385297150139854098278901258897030142168797558177931944079
+0.73825254347677725088628097314971889420685634137027379270683873 -0.82417452327738754514975243438221396295416451375453913182282368
+1.00129238519161024726744507055593236367715648328389538848085112 0.36437925166564997667014651757227498403033784244052756428158647
+1.39303976241537189092857241901137562238467964398977793083257846 2.7344257794632640157978028254364775717094525799929004887259569
+0.37204755896003715584673198383690239272385386752254457709459465 -1.1503238203980021497307772074765995386000403507320416949044454
+-2.97496116333824834678162332641716433848174520894376016716797063 -3.7265390668925937849054301172011166706596398077480054550396704
+-0.06155030815504688510395242374003881561745220274718341215346953 -3.76808222873850762134875988021971032223409861839953269364448164
+2.51511074985898899768035261382294735815641259095487277742425657 -1.85650917057351010569654638215369882954862583995914226504057885
+4.30486481900341266306760259871499926112475815688197628583409389 -2.8980478204039930359090359094878499238466540734455180743398449
+-1.28066011906918148055301970881838774556516096269033911633495367 -2.02450124181124852155174496469060889875599401854842531106907053
+0.36808202677896471589849680813931357137533878782098684635362264 -1.06616315229802219515239173895659350471958560781414454301948454
+-0.04206514872458326976614371696665798212687507448280724061890724 -1.3536128432928855721684822746643252510117611122710060228572292
+-0.95465487355964526738900957711429746984528671665853725685212018 -1.74538795275300532753963419728606439628665998946250980299914063
+-3.38597527140080462737123946940648295262882951031561874700318453 -4.30297874224092743195031997357374343178477073857438003762153016
+-2.15470964464611751309746444453605484016990435896806476652657317 -1.44468977650483440871086975122009169434437415608339765497229377
+-0.19445826454976770980203611341565885421362349678985859949935352 -0.4133525528959944758149088374340855222801605620886193092430293
+-0.55198960791400699126971018696292356659423726960124430712395479 0.13734063451965412905001712998404085418032026668927995980411168
+-1.25834374489620200256786714472039191906374052728795633330705441 -2.49630315470385996651373064673307921150688094063727810349758325
+-2.2165979737281789606615258421122984931992642113544910507817891 0.24867458657913203721711883919993277695323970906825048631963266
+-2.06023128433610171723347996806216199752805487212858225811536441 -0.25464642130995296888174099222552222055001956411781284372635575
+-0.58945905331775252136227451687529730617991574435446401022860411 0.60817887736059461131340437102592100127120547472941386986508501
+1.00748091055682981362850212418435127194669285757633308813335934 -1.27457315666688265243559275009865416592668668038263609370909723
+-1.1692061064367765033286187391259468516269093997440745676566338 -0.12796808158762271791510484741734216498651237775999309325826178
+-0.90924058336990347793380058099997179189823486690634040311713984 3.05816821298956431225830883707044597885776445354174725609790751
+-2.76614302641943013697219707517299400624140824591687218727477305 2.356238395630565039372013532081491922951541772765919917407918
+-1.4054858336626489412711985796639078238418885772089822524796619 0.50211770489105870038496961049602408694177943885852772874544699
+-1.00682875483903940699760895729790150328985795825409309495888577 -0.58927612583084081732391167767364309314041338423348208260007911
+0.58794914383455239470964793820006900315417470521792914753192826 2.484620675521634514796700598713322588211090835137195638327984
+0.47361486520731077169596593135990495227492173026624833193373972 0.71258113755907790479288522432557430453368636621901538129742045
+1.15153624912838396304467551857023383786073267264922023083944326 -0.78127997997323767725292582401685453539265251397472731383051881
+0.33166430665284434299913097916802267952992736517332432350318468 0.40976061822801037691236351757725812221686203838627426975866227
+0.59016697493081930206560160019859954873959571728520035662034868 5.33241917873390956030812378847407237403987135890231454447911006
+1.94462420893936479771131033262397535624849522725980555107041104 2.76284307544564596222782584750044555391173276123470592174381619
+-0.39617764609927145460435339934759105417315352423016758262939097 -1.19459938085800593940923906852154591339033342982515364618240272
+-1.45242320113866142104853927616842176718037685475664318946754634 -2.55627675681431916727211937361896820396089282685199054518114718
+-3.03429908769950448932434035565380077672473958049542241370565847 0.69986373189228596356832108863442584585804822557842481494431673
+0.463845378163547349827966263172733123903286741165459746509476 0.41753550144963763408650526842819702052881654919871556617442433
+1.45937037970515178605425386269190673026404822591028698767383078 -3.03354270429701816017255885403571281239237414202536316551652574
+2.26851796053189909877240324520373300198499044405052672139643221 -2.58870974114730920127601299188434418236070851706975722567365359
+0.50555066622783411044550993366198474353327637751572119667505368 1.85205202554782880162581220547084789774907453528435963341700364
+1.67242662670277511048019953813537603587394821357268375855830385 2.5454710003707035674245721936701208184356397670768993679912472
+-1.3535296322525124513248105723341260635484478377302906225153148 -1.39201556174637484731202772442473756831631382408291715669405092
+-3.30037862167284607497393515766532984671336758381386012258069082 0.00850108553842747605546479858477309556310755798543247779462602
+-3.20542686683924275895507617894366397260598417406523501722263881 0.29160242670722280783263194393164364362883963985811557340353355
+-1.33955033469483172604138530672657417432240092291151424946972319 -0.64740004365929289589920645734492793612242989485751736487566491
+0.33942818228104908281192501756404013288645779841531204738007006 -4.95841311938276730866872581472653591301600850250211368462767007
+-0.96009119179669727820386616699477100770165269191343986117661411 -1.14306248544115917030441642408830589415438128593821610016107379
+-0.52257181378777630540728942848046978785314058790325598642044618 4.02667403701262489654308426727499585744284697203322456960722057
+-0.73326863824325714677935943881713105303559738626768229728016267 5.74642680020627741032828809349283086694256582253739191899689069
+-1.8217163303281722146791437154142904881584653628308338495033684 -0.2462307935044077649633711184419852286008159911917053545854874
+-3.72617957495739499139423114406089462788292388063547921813053492 1.12870704481276372842686024565888219376898145827342456055640363
+-1.17841920579742036725460348547448874033610419922267653403716226 3.33978488529309977213381828122513030827209647833584564234650203
+-0.62086997074221336184657323273615976464697719222770550962423069 1.5171392828201245208767130593586377016131548667702221344422132
+1.33060168974341930894907920237319132685908652698382903241241927 -0.40908090206390506771055927505002754989202270034005527398969295
+0.0387662765132109014401645394485334690738344986732453097524788 0.10993610095546881152576324579504283953905995430604780344647475
+0.32794944507099628924902449198589092270437810191113691239671978 4.64583228817457065945912694003015874303622385042211025532205445
+0.53874457008305757683175242643175632330234591267312416251273708 3.23071881765544648574530177684213301354312473939840499965370206
+1.18821411349145021978696781819827845360202751896229573122584256 1.98555851525831746965518643052025414062058330140187620942314431
+0.24265187706220675870636026102439856609707457196136660122798566 1.01472462306843472477935089723929841297355797245925128931894832
+1.57621341645819178184243610810443234248347041734760311434410723 2.02269807636309114865122636638032071142782053686280529141191751
+1.99827161717998972961914144999520744056910941293439899182676307 2.63120971320608498862776137817243274523432724904894566962485126
+1.43828178188439426840820540472704924243713721484444802487173969 2.53620430537006134634436269085214631138673564036284220289012421
+2.24460660053563474719534869555416863159560863466124817770723487 1.19329942454767707156580020483845999418906277587824381717955567
+0.19603644203204362981934534285613661960117775579515930939083662 1.86556796521740078051617047579572705859778388683860819663205124
+1.83034592206449661940251567466429265698812286093347505087063061 0.13294834195454330218175420780576055135929349711488765697347611
+1.78031957964628260085647226239543973738374457282289540341354322 -2.0173230054107146059671412660046538271747051729492994236964149
+2.53011794065154711176000811294089858400903026370496943679919179 -0.79890235030737835220375636473385573459647638465404280564145369
+-0.44967175931202097949915644756023896474530796530223103895854673 0.73408841829839869209092269190870792372512346780944118408498728
+0.45080074997123094300554591702113615930837306444320874921673809 1.08413060494972939847877508593981571082262111179128110479640235
+3.18484372062310851913039965305362741724858511853883924915715565 -0.8419715925530384279157225771666238594210520423339293744826994
+0.81335327583637968505011766183655579994788203676570127401025636 -1.13266644239453817846550257165378491540049222486680271540224699
+-2.67039609807450935961922814453537212984879657551073490445401874 -0.4434151576319418898608337232459859379074322560860215992234216
+-2.15116502193655680521224441882985801302264090010483247198776093 1.55811813026298745384539957894080301631170710620943105279668767
+1.47088998130841776484591420548943602153883079189826413555650776 -2.14079412476368552165075381137485690657279871175423787414516519
+1.47823044609378532790732183612537683921178370778280260445345406 -2.6405954807248586358424492430585927712250863107292445311370263
+-0.02775795979981263795645243876751937498710120787285011007411048 -2.29338481391432025625297603821422828838679090227000661639263567
+-1.41724445533846249156180124758699892310041461524470687773031994 0.22112097396893428500032110010051708812259694310924834630253844
+2.02203094605674764842005369424897483702903217626069132147027291 0.38178490875911588192230672173250812414380285954200960779792894
+0.68509052255534495765501389275508995749136375424370640001471846 1.33241177894711660099433045801301276651038667282747670729833152
+-1.63930994938366523737440069339164928504075777733020922426361334 2.2161698583604216995134193933839371395172896373230289312419444
+-2.83186188238053237368063879453023812407275647060669519290050457 2.212755521077361560386547284548100820710781171270634585277387
+0.02177323013298190374347951676168350975656423438620663263897294 -0.99045238387299852435660101504176275617814283682363309683393968
+-1.08531433967648054981573229377743608692740584295237884695619949 -3.54295850732442721775080279353854369935985196512827722984982178
+-0.79888983425521693417510035771221052968723146445942133074636445 0.16098403681859420610886576767700686664326825522563737518301375
+1.62937793241536914479805187006114649036027013995634367677568664 1.44678743294864572067916817162230869487077303646625601071837093
+5.55072299514750907288824074704995555372783321339632452151947363 2.23330295751315676551764102216453961481892908870074938180110076
+3.59221981436394790242644281716181930966081037309672212126717396 0.28379026511141742496920607446993322182288112554501168423956179
+-2.36426202584462339974354684185036152826992197927008863012768576 2.56023719244744584671395826612328151219523836794833698446720964
+-2.72580919990469955298328840310076615573448810224988702327824344 1.9004158537926366878763687655356099359526807940866990841491274
+-0.2767898655323554305823856502152995772141160220436647843509724 1.6679956690481346999090602908958710184371094533452077866492206
+-3.63596562847463164232274455651354903980394285004877179462067564 3.40952118994923839077736969619572969718769625181725736503393292
+-1.36086615605379953151592864728440640263548501525156599284765491 5.24256919591509379176130771425939093991197198001903044514692373
+-1.32047538431977188463668161476134188713383874037274925819469414 2.12373182030882094999438112243427209979996237026767127102765595
+-2.12314381302822177056717857669963315006853009698445027097025961 0.06672651673410371532370215775286648610578851465986269447771078
+-1.4740383287873850115473165447503412614346783200358591005416987 -2.04715795173355871473724870067328146326808232331031476105825423
+1.60111224749579616850354419486834003287782846164563030142232178 1.52077416498508596406544982309671361979540488925944105080557074
+3.23789157021802305620095230469360232697730476512528896465556981 2.35462578881249571676471772782621584967971816257222883273190984
+0.98785861809862555055288102106356284399038601033411856876315427 3.44898785902462142753794795108154220675572461380731279986328401
+1.2746606717992094276964965384360861892869306445829710063294929 2.41282502421709333840379564959102724850303748874682112314398699
+0.96660512529169169218480273115631320241585707867368044783444596 3.52635034751803791108265690521584640437802025410199812094958034
+2.852785563805357873933115713532997249188279381872123124889408 1.11496564894788833601643994439693649105106046739530670214375297
+-1.13940523767004326592649715961645375030792793935534635190893682 -0.4238403433931806449418606285271583070446322321176540190202772
+0.07456229497660449462773288673661467354209920850973636040609748 0.34124768314068936246304059702065328907544921751059260942142986
+2.7133280934149671229600657520589893184298711773827145728498548 1.14065223851198269054671193953617045933820118886252684520924859
+5.49972137334491439242721166180968455006603674696969282075630507 0.40373241182373862896827126755663673416360188081020730143981919
+1.84517038219700169752963707019671651356962520074159663183341113 -2.69391830835126678872411470639529952677301967180589496735138936
+0.46288923952924630072362749014830048165644148473481303163567983 -0.16204688679180042725963612695352073530193154308368619365996692
+0.93776209866773324109325013067463125572383380440080119411484716 2.4036573513621433300318490330008266124339252799915357915121142
+1.47627526508411914916009307716398824782111369912279567207017445 3.56989467079520975114531842282576231014089757110148299277811599
+0.32900892703043357143796287292345360143756364002648147105740935 -2.65588062912074401656694268974484846010324857831352634514642291
+-1.50836777997828456057344065709880891415616514950957224477538319 0.4550546282424416535140204034934955324506460047741529701500688
+1.76207915637813287307226284674092683420861606472218247099912333 0.35757000891463713981097108720591505402583122279137532183476285
+1.71672598042677600738147951917375616562085170598966075663168826 -0.30953839634486321720641120804470469117366517260235077157847556
+0.29884945947945013507688340742441055698063083263447237431133256 -2.8307283772854808037246032188632852541736244181489662424919719
+-1.61537527866514384954834799446309370499448428260955313943326776 -0.78425491030038680819734341788134638450329717131172037277356392
+1.62136231413712167815241514729344225963876837224987572826492054 1.77381801715819067321453323112560468749195163163674906846017862
+0.15264149009554204375157050285538182991620053142305480397659497 0.9274876561613311978973092388516290779678993343323115473107585
+-1.71601554166876698014129470650778425740764237612718553389834246 -1.59883210480027563390170934612506497515295799251081338453216444
+-3.74430567007355787522130878557767950857774338041829293883789607 -1.61275339610515210609137985379354040533048133502168860763313845
+2.09673562545760600794983187835182218968514249726768926138243824 1.27176344890275718421483848524721177295962516259242129572116716
+0.12585275468014199963969844157138684402283774751929129014102877 0.39059638853761348669049510856332935626784234216648234525837925
+-2.4585255164272103958373569628342833743370209153934306813898488 1.15576824626894634311808713270721190127244615500959698384653181
+-2.75581452711947458837172630985239899990139131683237809610588227 0.37803064889374716019756962335011250036799623711460001123645837
+0.36070558186046614810448271249600311583169253911475818718195412 2.25494648749252761050152567869487518822943383136360061189269771
+2.21432747586685748386252901315894689065079684224779650122958406 -0.57881041991870275894864554145673193573888993900435433959890657
+0.60360420922137777673885866741645404089252126455011323938351154 -1.47400684638221027483579057475119078764574714012944418003073905
+1.41686454429761356415471453220011458062146206850130102846874287 -0.98246636392935238486231986302763490308324118878113017665053185
+1.9017163681156162802147664703960615673768995589319982548967724 3.17654084384967041596169730820972619376348614629159440616867249
+3.06248020760099968943895115882187342940210922560389996236545693 2.44170822862006205149351707143677292609694532493711911447144521
+-0.24367589085951841975859950004645113556718610951681544320965549 1.5671061221740964893836700980278733141107518316789546162713933
+-1.02474965180329208248602440988582434012902446064674072699523217 -1.23815580600350526065977831308194866355976020344337712338065992
+-1.26172447563970651663314043444167705342690361988724398247411699 -1.66596390396164189178229214125236836829018366579066757334468057
+1.99439884048572375909631755981062911560938609717639554311404014 -1.04724432216253586934176480599159918871136885839999431011570562
+2.34365092944109070618214145663563296142602140614475833324830548 -2.94967677502827689558231939852571164766130502804914317567814117
+4.08804717111099245115708091917785185727330396239481582256940522 -1.38952091688289826564480642678280697632176938283634178186462239
+3.53586079457739861884245780337095661138041063230714307731049034 -0.08170873972720516283747910000145433618048258629595435653939093
+1.92955100011440225814409606494795802754631008638183542387782045 1.40223915757847792150772460691503104523063581868805124358167753
+-0.54486733023402420406100773352813439496967977441230121353485653 -2.47744456048190393637559886299405140662330914194947323624524665
+-1.67427574528786045792134844568389790563651717269742120691270046 -2.12176294256986869009646265287324880726846377714294728676872831
+-0.09061282366954878333645790621276430402437826177628861532459236 -2.04259632765539647117386756369791356442741608398376893458024135
+1.23707326902145020015194689513180395010603298740016050218324869 -1.17232979329421044444682676980681343802090404165218107117521213
+1.65144064639806265595263156286552820153616203103583950723871996 -4.97443752473766560877025753508109350059529953150392392091174785
+-1.19311505541340679877950523316022283655716987880683915198622423 -4.52772313746563750681772466606676542739750850831246563412746005
+-0.10664146436416423834813280542865788582810777547160329604990339 -0.58254129469248197690378889862722585179209557377204264544439482
+-0.417664216811886478044705875101818619060052496554257511451213371 1.868612928089974608241193966809337135438398120599862325470628776
+0.8320239158375045177502124884262507358795652153982474374381925 -0.25396284398981243351397379373030189095108268495684761133742771
+-2.20310612702713438705479664892530995673940154356203226026117573 -2.64292988734738858702668131330745465555178233350033855550198217
+-3.38605508654870896562967529706304739898381948734064339725772883 -0.31606634140048527370411550890121643856865665236160030946893398
+-4.3566858234684585685421283520391449313656016782564069778637376 -0.69838996517646955513574682083304937846931446910340755188806584
+-0.9773424361762669263610953368454077184683504803664080862546307 -1.14536272033051148936626492050613793622480429829652989724958578
+-3.17532487103341025509557582191692108861041358517692836325130161 -3.28068558953203256384781856544308321282750754468495352548958179
+-1.98947747721470920515134914994336238338488180021822957365369626 1.24126255503087843007950359253048022820593577305640443745222533
+0.21510228957065384565766319493660725405175415521286228035817355 1.37552319174085693446732121296920661979092498680504510981631772
+-0.55056017076781881691972914002240819187066677272951162088324491 0.33629866865521267350548112516333726455665757539965535094154165
+-1.7757044343193067649327206477019308681819761403509579987906489 -0.95188116232195798701222017868479620905837831888978322697472017
+-3.34315660493584488484250113251788338443909209530998018319988522 2.90948402227261421758518528972565141359737536923273802783951358
+-0.25054998395728625889835717440378848908375293436029973431995081 2.17859300019801692155770234112039694511998927728861733840411068
+0.74967744897682044853445898461952628941526796883679315824036346 -1.99332998700227617140650334605376130334880796760641015675290148
+1.84858391822817460760301014133280155361636045193604780618424564 -3.71607969473005550332287855378792743663765132400714220911501486
+-1.13797968570705355525493777029076032780912749348463178980968734 2.96726305614539871180413568037206518943252263050714545972621942
+1.36805697504513607191273957175569386779247719588796923507592543 2.39118315121315244511841864989263597511838137223604625269771811
+-0.53642080293455563519668183272621107886995461135706177576509737 -2.3657223983122768064162943822339595934656683538520760719321686
+-0.64743413888913851286720746718317811975036982878031964471579259 -2.40518582181216560489167556261309201405891706794637106533252497
+-0.52752975117313444273295712940269794523079145321338769044906946 -0.36796478702517792843404078139397350656229654172780961171472703
+1.65365894360361447129706326447248629367204805528937321063310038 2.01942506069022788386652489298292392702121728526151252232531634
+2.07467006009119798377664798135144458331319928060404509676860476 -1.75564882572436569426242382366927990171385951364294567356458071
+0.29882944887705123549355601024542520319784719933111095108630891 -1.13269948574172387331242475643094941523204509274428590210275663
+-1.08335839377279593757984142081361525497881563922373526815889778 0.08476841852642902654279973186080592524604828608301154273441091
+-1.53623398878781911502345783134816271281317790590249914107661632 1.08973443344543091161025684136069733592155551700295865456775214
+-1.8974150875521355707710091358168558859051823980689356785188647 -2.23403667816434558369000104042263858529177254565194132618820415
+-1.12211779277526277632790781659744041122556208570307373705147407 -3.77634044742368861597904575576716984991475880410667745059605178
+1.75886547139665899629874918279545095883519297717685535605804692 -2.57170142744618014037365253813842994469904460583459792827565972
+0.64067860896434337428261897804833816762327579135221257724414863 -0.50261222895985227282270305989571181032073751496791291332906216
+0.79142005325326118352992110372133528938327270015832185782956037 -0.39032087340065185800059024357050626393223913449552950534266213
+-2.34101222336766572137608670266623864323209414966164945998640736 0.0274142234074318645992751636119853901225758453473825333559731
+-3.00168727220388375529413397049792846025829414271380231491184537 2.82279590626399581658370795385366182943420755501957916824127182
+-3.91387057195007607514443645717136311955136255510173995739375081 1.35274100872529193249590189582648464150484789457350067717886806
+-1.66894498136383896476850530425823319377847543875232680984469881 -0.83165052059910051397778421066448388472594738655630283299298824
+-1.5522984661795785359695251780415698987494671275792067239955053 -2.89144322808172563703039153905118570113537204870704585763703967
+-2.0350398127825374032808523238163412007058718741000649395597505 0.18426994141835593162451944398210537327081916902805434662477455
+-1.04141550983520232916952984391266571924910021967339374832326015 2.40149054966317871790642010906057914718136683315937662639028639
+0.52883315638672805018091004707578185064223734898099332321336697 2.97205280433757153630933583544872975479348861288766525827339892
+1.30818417206065198828037921852259841986585062783829677761744887 0.34175388048692123498484130907062726892678107988134232840504294
+-2.2693209364359495115486452599127132498134830347544777370875257 2.64943989711275827128944174447266531766344679420928327580161251
+-3.09682910840620393566531282881817555102946805287936526878998982 3.49419537762297729455306632537004800729739382510481062643646352
+-2.85917971610340279674325712293041938269569304660141826606312276 2.73298585830362080169965339249023401290129174568852945198866108
+0.42158329750958207460216653882345839730227847995770195692418167 0.63622435387177504097769256924543788701327133643324216951581102
+-0.71546167947468504339097449822750654410400917921263744670485937 0.27114517380925661364885752707086346390463098121084970325995053
+1.20529311378958032258035398076219621783088154982133794828558793 0.84191588964057721041270778827459717527150955877031427824579476
+-3.1823003060277893201634544389914248821007840253436552394233882 0.2715595556232846073275943859594929847080527799616107275470201
+-2.661213776883705686878134317129223160459215099663018119614264 -1.4281554190627272605124862789406752630916802752929786166807261
+-0.980499618986722480236208289409593578472467461062080092702987 -1.97710263218157704808605713937852591056233303942125133219181395
+1.09698550216704357337786421881696229640619454323597328634383201 -2.49098289733855407615819332184928903388234434065218377862783027
+-1.40221094018035624032273828427058461580119643427997792402554231 1.08123563202588304300702608044839801518195095276377003518644172
+-0.16327470349033526620296444500677436828402713996654605840319572 3.28712073347302135639724979882289480594248647501992524836028416
+0.36570194865225925480386116519916394435779426383869398231177288 3.26555035055468452770126200917766718603466527341084580104846636
+0.63887205900788344720177825691602000638962430540002884361289386 1.4918247376622486186669772155144455481448922626772511190394484
+-4.19566814194239796891643283277899733081687816758288928479946419 -0.9684703375522031892814327966439808589870272140865784319545968
+-3.0310420447588243361646425119546199350103260909233389103079343 -1.0000400808726433180079891666222218060320037216457147861839055
+-0.4588851576102782034248396862006873317758273236335273752188134 -0.0421224061740546620080236880725295207465877296477467486493461
+3.29875961215418658559696076353391042366835362935829045883350393 0.2736400932526111978382746241395143494081923830446284712586078
+1.71689926491412382154601174054720270159884908447650138513665778 -1.01271737218551639007284849748934985139054110924503702445287467
+-0.46581384976820892772317897576029584215714932740087853909503434 0.99762982748111570080357372831583529163008131798321546516962038
+-0.06056880712811011908467824509885233789759728885110223542828963 0.67893078688353132559764833893830048446985269613678749377586698
+-0.17193796903554503859939345399508265905443743338372690500260112 1.85852859666659568944991839987797468885030164737213103806051147
+-0.91362745409371063809264885247724600972105773361234033088460847 -0.91487523370117999746009452572445635964139549662025422462437796
+-2.05781107364820424344415592155937217523165744606696819517629998 -1.94812430687801336222759962440938632956859357756048309085107107
+1.2885658793913401497077469552051405166086763056599778453065438 -2.97278988337742136552140094405537575692228410544289018981867426
+0.81242245687597317314034366244900118876388978611426091690065885 -2.0436351051055615623982697172912200425131930232392339574745288
+-0.24706087014192720904696177523701517904745507158662196113355123 -0.64813401985695589709116168075861393206192249611687850237813402
+-4.22677804989478631119740368316987995971145776128573486170396656 -0.98605903169892366622672308008862725219119689500474075586602017
+-0.69512941156838025201564733371230920045150063270557494595940722 -0.39257276444870003470666369858557624559209466493685298079891447
+0.71269919161539546198512167098284717956953422453567363037885768 -1.81199618408024084421805914869202043956206052939609141516363916
+-0.45672600433592602121119132669837923663346346103307035999548767 -1.88742963038762474295654274422410617256505642132279872409707037
+-3.8595403684822862207382231355507068581523445223008588019238161 -1.93101586209454781540993205223326096887144554883905302305693066
+-2.23723786579854226844273545090448545675919237700918106263539811 2.04260199558524864541194348932797624310665873249791028262930575
+-0.2373098455057091705012480746393578058068492371127627770659614 1.36596000889898947519316442912062183881069527934862160890889572
+-1.13486021939524256288865693062430627626141967139281724461351062 0.04070211663035281639838779443841270514712181687085712015004653
+-2.16423318960079949935315197877093914734611324053278599358617856 -2.38438158953830744061729290097157660761171141241113047326627688
+-3.01119208446215359618355873478210567084092652493425355607641235 1.39231429057665803793953627642735753787551907822137429127189361
+2.01065304697966430917573940736056061991395121079477827614029634 -0.71521706929721656154220548576631520003535967880721634448711333
+-0.54660828229455428938630988706941983962236630107287796494963784 -0.72809172034068415549797113152043925487765632681145036543528201
+-1.58040965827437296240221563105742686969255970218554057359926155 0.56728307400959230173010927884997547873352290298995184000348389
+-1.13569629779814836156840700089079484670570294699070023399993287 3.63035578994669799429096794489994117100742250205489002508019629
+1.86657962357978530651722619146029076717751172096067106469115597 4.05626729772700322412407565924448705691945320542491831484643448
+-1.49624552968686625897270704058546891474021564297903241868621126 1.42743348726596924128375672922259075202892987956525241414381228
+-2.35508469819500317617088837784530194851915977733520499963331595 1.59921814451623965625532472036100060136118741853111605780921461
+-1.1477675699645672369300874167905046136454356799709438015873664 2.77241629790908978405403726128079848984770546161474776572249228
+2.38732377589010734063262042862827402008722558322337233452911504 3.58717805269332900336230250478432164083036665226798453531035006
+-0.39481481584899718963648824546751318468395299530598039842837125 -0.35398355661260638403025009367256659199276669677751785001425528
+0.17646178777031255010355868461308420386407406162983865204615775 1.9787242738336611737656303578211919595328665898400174353360222
+3.90997447453149180175903654235242533195666978160464069741537025 2.07190756062554477999967558071120275181108688780935329988385384
+4.81640382803815982168543698198183848701577475614714122543518302 3.27472893802643446318389203911321648551336807782583051531269303
+1.44472783727633913287375927098889002802294660524207254479193914 0.78941406159295964448221416893183061814735393224635063523851024
+-3.035686791701187170674220536302816791481425406598063219593077 1.45028054342197241408974295590577785542721344875811481791400754
+-0.77661986563959642163852951095895946828748728969961335255719242 1.40341916391213394163521390332018007910637123443771518169350815
+0.63177955581001719173000449504262259401816314205403329836719679 0.33065387888004836017377129512721358694179899942174746755456851
+2.09965213695570537091618520988302351999560850603971790317477669 -3.37960124501203910243305604713088092182103557204195315731699277
+0.54921634739327377669043820567756538437234152218013888630474077 -3.58408107256945188558814169418029440707604360272538458182077183
+2.45705028671477640441361724250682485813112081807106674932091814 -0.53342023907117558152856525626442221960262762699438591244572223
+2.26066817944404062839897495988277307499890735173958570281384221 1.37544802802735688195860850262096035830170439801292247330858393
+1.25568961141855177654766985948363005238800982266901254129980663 2.10704681920693017851074665474205201432700129095191689936115564
+-1.64275152395493055312925839055871467790170753182377628964251748 -0.59899596149703254123182209141395772750755969162328550016237184
+-0.8812476671372271204287457485727406870825047998330849266956341 -0.09756224809602590181427426708061358446706352955501221944532313
+-0.55519987656658291578804335225094696935263211994231600719142148 -1.82795989192196921285849683075051958003505338014980707221541983
+-1.13585926340781002829546956842650017773833140454769487208676947 -1.728995100593153518003028381312362023789555452178016850914092
+-0.46171962390078319818547961978243997996122806647423264600155069 -2.38110994497749579322671753383950193182361341205172347081528129
+0.87751226798853419450320165693493619331712183087215947713292944 1.96623163457762541087733201579987412411096678120106314162155171
+2.48924199834320016517349535791571687385433980190018550558325113 2.62607486457990125687158393572006954724413215152964132929974818
+-1.06557538943926625367236831681067297883974984710594234160326549 -0.00937846856214524035962296869834350669135301178686764337901796
+-1.40890868503219709862265736164909570318575472326306836298144976 -2.13044711776158727879300951832357179831835921963402623721065138
+-1.61191207404223882077717321689017629564948616430881839154682843 0.60493441828403390857359938748560892268987488740392801298773735
+1.91877909349445874468245621752515498265102556008606150790735977 3.26489974837465588725498242588676265723889370855095201212720681
+0.99429784341525336831682838069173139536763895557048995525210658 1.39919695192338902781164161375588282214736174976544786500538079
+0.93041070467988304632481573785988979708696762848132064845859969 -0.60412764068177087953302708560160211710162877776767035698809274
+-0.6044508814213223866955514868662191795563411776193316053515049 -0.21169843664418423633977888893393893929576114656975829039624167
+1.00714116543629670032260696436825345021155472356077441947644503 3.22795487708373529895370458198260850700488009296767267524059884
+1.6803296045089603240491898579120731735901417086889278678745171 1.5286734744366748801702544110586461329553826387758935648666955
+2.54018984676193127074487068220516793481600462832090369420634754 1.40659235586253620724207146290711800683538794796643036454944765
+1.44861206221661078790968324908397920658654990193473995209932671 -0.90070015058349999301268256776506599230970826830732055332726776
+3.78199900801250635785781327616404560048882293614103326384366203 3.73842049145970648557128902384334897497137370274269469328629366
+3.91080694947407309628191638699037553522550822276175231979872927 0.96621623063219681962728146026762361545009761601933192655632714
+0.71857933409229973534984028084679157485238176039403226809275479 -0.40552012490831974308060083055032849836554642714759763829711358
+0.99344717561259428263561797886676213819118499694565884116659517 0.16451606911760216518996521986238212051114064913531644960919722
+1.2506033732841848514125626405646623137308243301663080270352356 2.01925693913518095715314681912330208040992361308120737574640843
+3.26131201238599537419469572478626291295002430065999954108570638 -1.46293907431274699495828957178553936529356889522987000381161025
+0.70375147159205219387845635140821429035244358390692619996399698 -4.41812109425825940620829107142387901459842786311865574037093777
+0.43608972108134637641695533781882683428871741506536208063195703 -2.01973365258545334462590170770895571324549284710890798103577365
+-0.13295097684196160266647628214313053979625837705658443090816109 0.43220214725757844962857852109428240330163365292387323192837007
+3.81268290563519421647899875950893644968946185869314647181450936 -2.31257314509647830233030776118702969555077912907344189359023128
+-0.22878544694960533705277517185522821666865377640379996227028111 -3.57962647087232333637836112522361478536114754075707607207162945
+-0.58970016292944660169107154452369841261302176439847959797035522 1.15362607557463627963808066311776917956783270037313321526910025
+-0.34121752042963995176458256402325776395527677650812961604473401 1.62074325082927417317779991376705636172985592117399370651090506
+-0.67879536212906965801975883574276054292366849097253125714619144 -1.12919489844910922245570666474186505266720589860859973197990294
+-1.72096613254186826382870466883891793203351557381810764956190227 -6.31784600029861945401196233145804200696389262967129167499989961
+-2.04664183437468612544049875967589696728328066823599688681854562 -3.39916413492743949990632278509323245392465310327499124685876066
+0.8153373815489625091187150551298073169179447826128715906329724 -1.25248652446472531084938013897859532447866027875590744623346818
+1.54490642808016535973433719902520743408088540585454858869378898 -0.69246493586979232119206594072698869501325492296502841209684359
+1.43125040176285456721264533438976000567610466940175794253216261 -1.70644824048992836555104672123041845278387396447293785337622395
+-1.0986032732879809017781341749797498028903002675499777181757552 0.4809133785618285133168831432039911475925110223617106999170139
+-1.22928106106291339397197310836421138550625231073851416976170834 1.7054879277528197778844965050396046040935175482763070007497162
+-4.15816555762694034476783710569125964398951683652977598225891185 -0.70225500973207757868309527276451629539764163110158196653662315
+-2.87892639754726464155111966259311694372928264274652148770584165 -2.34024786758769510234558844296896177592589727468829870513488997
+-1.73260935711978908146767730044909340904781290050664831397262779 -1.44998354354562139885877154116772515650259045567740824332210516
+1.74786340710296574710203867076562484750601781894229893646060523 1.36174915401357711714198930598390754229019263702034027460530919
+2.13553146665295960620842062409904557951807832785191463271783953 -0.89626583503716080087293062607909226745813729703946387717838333
+1.41672519507007223278648206451949657437990223564005008945459458 -0.27509278699801926739461588819934359787220222859561992462484562
+-0.7684811325135823629881923449259661187018914393038184813109105 1.24798057965391100675081919760309213872981606695629204449272162
+-1.5926198805415704688727764734260208283207713720838978845964524 4.32947751339175983239848851468154743086849056789639890605482584
+-0.8546117563329201122819837761466994412317495077591342048106515 -0.2752053371798289914462212117084526221214261844098424553647139
+-1.0072370877690701641067398783576355940311218961401296003155697 4.6431216662384807333037920310277718659195055732254767190790354
+-0.2336035116131206665303048253344121779823080651667867295137569 3.607507856555678806929585524551276096808077491095382044791715
+1.80417312061592084722956751608956568339920102105529365641872763 0.9424587670333872333190271513473852933748919507323253333303964
+-1.70406833456797900563980892462369728044863454477252529041104332 -1.0084637355233030908652414027468136882064088188726021249975757
+-2.76096051470327505225221913610262417055343892609911103082732844 1.53914243165923803376417121914019418874162214830255106018955327
+0.3455658999482752203040673877758468414898766323114439556060286 0.27395133137805386698457582744049252037390532312960390503697725
+3.8561453048135643970253920434339842338101560851961147121941578 0.1548766739538030892324366558152919356461472377323379241813489
+2.932032932320366855570010555627774707080772545196158483184426 -0.9570228070832967524127159126466039564855425956688464042779891
+0.5378238476915559876925027811578933829143680940128977635579298 2.4209123798948822449034881437573466141313482836806208995514934
+2.0162028068349889667035037525756167694415187806853024577059402 -0.2068840024022933445284814974726931089629218860126188215931173
+1.9808912033225880189886568223643388294495522955064610999062701 -0.4637747064871259606057396782108731750999788060265082084287598
+1.5111917193569418997540116439536794850223751148909558383643296 0.6442779832202809414790088321851647539522364155078394759858865
+-0.62849660211978466303183836294032034094399345765482684040651884 2.16187371513043399993482865038692454039093832848581600535278787
+3.02429268743018989588097769661763648148832935104388235381450631 -0.1910944784265151826350266017326128992721825760436446460439163
+3.46041501408562678861986314095943993064607675676191262216653341 -3.54906883441965597750155854997041556518029154199398724681790072
+2.59762235885350542710035108263305353274693682076606343612402808 -2.8820564235936027404877435335389885644571863713021450502035578
+-0.03553583455605785928611213703325327619460539109927513894106496 -0.95421288275351679816257832257085261730438196855214085559563872
+2.8457692250587148478328987315122066862235445483344755182650451 1.73969269766022790574423030368299989611490392468680750822410627
+3.2000793622180858731971748680549722931343742577890120063254623 -0.2742209690761984122280424827657455514153053483365359461124123
+2.2959630414623756208095632613053435364151931043378999883546489 -2.22252168586914875347015723382083266467050405471203578716732372
+-0.3495236630150087507052709162469990787890099218495250617447447 -2.49235125539369807746034130636511800882494435723432681918432709
+-0.16066740834150344646754354098537259973035260848669149191479981 -0.88587573236807807750072573191226544488521117309191645671405225
+2.03812896372502151324348397855787462664366994276066721069511398 -1.93705942707003412819340166142293336921229730272419398479421347
+0.23447994131850131591958614313678153914062304065497499597588795 -0.52780556193164070579432756210489917497448286932956807460531077
+-0.90951362463040839715400371633438868083073432458940032284730761 -1.5189227468351330567054295184928923597272981047834128868816296
+-1.72225492987640736768781652365072687570034083018999912618879591 -1.53240769425690987068519365402676700371544012400053755280496735
+0.30680966607600238220642157666044746946035441315543723223424099 -2.0998785619064117400711435660061229890579120958007705241215465
+-2.41611202595426395721109917514279469931913129436491276805373868 -1.54558026112719444390907068510413608849903358465763167724917831
+-1.90621997454563632473133330731580254786018568152781922418527938 -0.45478557039414784997075610564729191789310175408126269575105749
+-0.61938031949025866883427975342008580845862825807609893968701544 -0.56664059605230454685620913549013251630516604070913407392755925
+2.25002044719822592841136727969965492319311441608752077284239414 1.61803633645266939851746933808929537771965672017599994564185842
+-1.25101742820606884049383809250375947585217973930967638804267212 0.78064257609528960738691690532867199032774319871880471948010599
+-4.62820062620979780288808955598731744311323529182997565249931416 1.38253280003205020832440951137067523611652883532630353024202667
+-4.0555513980809608996788723788260714405073177370032990136309449 -0.2788688989403639137567393250924581701015595654845761364019301
+0.31880181526985573218966740833149106749884002542786362842538863 0.25335826572996922883647379101083406130103701981897295750129228
+1.82876652387141752386293825146725700311077845222249190921624869 -2.3800485661707931390522395555173500883601878792753714790633081
+-0.12159961088998455666856446506070134939989552705645886370250444 -1.40240115855596447583109290404134867158486084301240933690052559
+0.62791913904631613108432952472818262362571149123533466162754375 -0.13757781629898419959996003411785947850582515569724992433800538
+0.89060673625508953903148722649859656014696813290874820398722042 3.1537335798600976195299761787348880606519146826169182707807633
+1.56160978197936096509571471125889695654950602985274074704938971 0.43777204525129987331316319512024420994740162874417542433958217
+-4.5004359797989803533853710034175392018665664030125129346012385 0.36344107931057233815081947977027192386868969472222322398988692
+-2.28626848585073867059308349105091408851220835196075408726182543 0.57393720314575100536757156378335771784381987790719756065595615
+0.69795383981698399746646228175537592229932254977022433212106545 -0.36782033026378962505612664673532265528190651603092609344319607
+2.45103844140529508312419992195675585749312953410591901867043625 -2.04195943015739303996190654137520954859360633997355767987600367
+-0.64808978758554270274693567521195778195138945610379317447973309 -3.42342369653074474839976370121487098342937614691519508622525331
+1.33361914628292313262490577207532869940037908796762028833639871 -0.4497532578073133366876119899386631584696011094352588621146168
+3.21273388037724745927082516806071964772594208430125457155963798 0.16219782091027090982265700041025146746192165115065727783089457
+2.13873981843082808526370213753967159108121870256666755653367939 0.08369793391385423618107431289326530750678987661228700755503473
+-2.31353415871289106945536432918549140463653176559412218356031274 -2.61572239006673829589497616370137425900863507674527388965710568
+-0.17219158145523318331594157138995283232845465332079787322624292 0.50410768817450473448185351369013048420817369302966685809919945
+2.04263239625564516536341695535665803222467379138686689361700113 -2.07765352338049176464497160081177717310213912957188367402457392
+-1.3820497746876891397970863272413432532940819145511737019037762 -2.695144291706970548832023768604238997281646786050401404245804
+-3.58608249234760375700852129562282237126541732165866383533621992 -3.51595033080332794165769918590669586334131782988831043517176744
+-2.34116251188086921198524580410098248276889227707995574698837594 -0.59991552955098777834583100627827148268727397238208923124750764
+2.8305399568454332207123276968901026898701720878139987308397793 0.42258082782804913050176191707436967299910820945444110415004236
+0.32619069564425228872996510835420186207908899958588910428154465 -0.23755691115648134881619078982442303014053304928038880168023484
+-2.88440800761212333899475614360109931822815322428010073343270608 -0.59990837812200714286207415473010645448152296221913435999415862
+-5.42651230621810089689141420648027379497542451556213837028407445 0.80909498965970465740563241498057028488355004473051756199096654
+-2.4657651655080536955885920726953607404033682936384337383562657 2.11255180161123022228520777625906098220911935615834317053268956
+-1.43808100946689684885097605998864844703348614466131375999239157 0.48286647932504320110220916765095866725542366457550759031339955
+-2.48775168269258834426129737614924132888529344764630937748248963 0.72591467632277126946897920113097566128128771999544640357195015
+-2.18097272916409965446489775289292222022434880766286463328064256 -0.18699426854360223582485757769931231761302949593194666588187913
+-0.57981275940893153586078659641268146939151775113374376314233387 2.23830332008804058979565083696322497443291817739329422452638053
+-1.81174079521115093769448122987023113210492554018652060826402297 1.11308146740458092115527123213124238055039788927069063310886526
+-3.63265887004081455748373271066007402560361349239812604405365166 2.00371527547536414705247060869008423814511375646757993966803327
+-1.10438551987601975426294263055578286522032341583812224846222427 1.56689329213138094222764545320961133324685825412279331859318959
+0.70435007075418987475067796491775972821072093564651191080015318 2.79109300739505027701350045657789085331398413848512030005350923
+1.20328948577001572153536674711440473993885633723842670958208333 0.21027075736504411914993124331322674220505649092912706683643064
+-1.92896052141455461856095014104880342967021480813318162759559634 -0.41501670410052457320235495447983810387709873661047286643656287
+-0.43230991639117213740324168933170815523356009621406038612038179 3.49909057469994858243762251287390734221764709443167499558786859
+-0.78697366700972249101563476588903431462997152282011754958277575 4.29012758964078881626606959410893253023913581523433472601794514
+0.38332474796346010372355168267463885297194551230437915465163463 2.03031951839655792655365444952805418689812904928000443120627339
+-1.55288048457927693063955960814416956630418106389813151590359184 -2.42530454053815388066851576606515637355968799531025925960530977
+0.53750539138495426746090627613125757911255028667225777327780166 -1.54537077129300192411329509840529473920163508620571683564434445
+1.9664358022180859195325007673059043267943642063904897201633439 0.66632162237383404667497382763333976044523147718830897570069539
+2.97679737160165099571602333199385256060331645865237020110127451 2.91897451120300299230229287461958650084157526520952404914559664
+1.50626298656914562154957229627735442613079223293324484109963478 -0.01591775713486535243981429163183993578422412812577035494378928
+0.3741813633329011772664615763561916752462336907922805527585211 0.73456394427583967574112303361956318910727565836142268384294442
+0.00231269963561259158402817237873761581387085937024022047205628 0.08541531156890681253577838604281630511886435561059487041312102
+0.0907913360814198019483154089580617915381007647377134073909653 1.33030394104322707170579937709140807545265395286245554065987278
+-0.38466187181912731636126520866628381087485400589131183084650246 -4.06002305867438456724393047071188700875330786569241725532560198
+-1.1412669383744716311545157662119146046096278663183344015744409 -2.94324297376038216018347053133474129360471440021852794375385443
+2.2510012458688484544325312474676947682870478011351908118595969 -0.12036052650295909070638085075526470486920315222954081621557169
+1.73927602715004601735295076679899301052489188515456710940138784 0.55811218484367750501280199641406290842419462932060080919999097
+1.14566551569910188914446539275724544110283325568833927376521833 -1.15024515008104542297991032833898239275594219734526204289613253
+-2.07517838220820812927586604692566500252329372912242040661948108 0.21650333239641784881680470508915276170813292435602035862478042
+-1.13945670674505177156322761816593813109369080844570460392030766 4.23392961820134772968750029918754972911296355333168295850775976
+-1.57435781591691910448486395025582328307335381314111349061534404 2.43130694299936086495224320615416151081881097096637590546621405
+-0.95833307399550801929339692368823578415295395078463380668842905 -0.90122365632782598665934404310576123457378139847497458608541858
+-3.156698769303868027954310135387927110455458299361822587961223 -0.2825018617820545430415619808525186799340733257922219107561163
+0.5315712039054598678975501952702607452795413894899174226050403 3.3929703423117183823745019069251622902974219754338947761014187
+2.2795498970527965893029911403016462024403179359438064859674725 0.23670343859190742809513825677374761388688386579191454746580355
+0.6557721128142587836177437892753664761709718035616922962938929 -1.03380970263811100935923208461553958496235167526407518681827962
+-0.22329333367421073378902624218614565885981075841473052672572225 0.45620506526484996572651308887859976804267799429180194248095926
+-0.74136396346834617343121717108726802900503204376799048147137583 6.02933731920517200456398885688179078653435585074840270575073444
+0.52612834273727671201088423822060453016587108610334964457949134 4.21347158386553172991320619934350132098364483514847717611151608
+-1.40617643266003374322612118191108288558215735208852175691994206 0.10446812187431157675033435117667521781209132922991771770465414
+-0.47275303203122808139445587189384169265730138388585121311292727 -1.18899429912914001899530983732290545376231673266824025725300232
+0.23768490431008208866662391056186798602213030457952277662277825 1.2520231279762775449518715864915957108421489084567796740796445
+-2.4207990527610341087437463601899358273598011142015681287625617 -1.1560509330006482180059258180425670322554405692055473481511777
+-4.8057788044579410203715952635265356657858758503891256244068631 1.5447474818930497897959404832026122948579127087409156177169426
+-3.2544486964880020864792993927680573588152313912698401194500779 -0.1525095676746907913636558373827337098146165417641874974166407
+-0.4974038427598689780398661536545815255189433640963491180527518 -1.0603939863013108760961320183515955806384276271920323036367286
+1.29127024024450504045626755302529630669352687714845082973045957 -1.0296941405952882486723378111963632945995995592838884113107123
+-1.294966524765897278472845450634181579508749818523129979397684 3.5287124360752686891073622759124481158118405334809322742435561
+-0.098117279911696145596863344676500061555154909350628311849167 4.7786685795462081269511504832665464488577475548345729848245317
+-0.1333658348045111310805407345659128261889563092887864414801367 3.254572409282246180345213747718640082954139211202184903864731
+-0.1453570641331133164588062181858358197141768707760972301241309 1.2739717487791598146012456026908661010350411214220883406230838
+-3.9229878872292851810030551160711104381506007134810170671959609 0.2429496159136943177240775814807916924407941071261644916175267
+1.4892974564068399590319825511148365163238475289477598145840017 4.1046474219616768178291785609986279214847353668433942033228968
+2.9106872761831358655357051743832085052891410003112989989517202 -0.3779908974097274115582336015838594149393735595388721803585508
+1.7784407765069921994676317823495318451557680231835024645169455 -0.1159940231363199284836925794868435771737689898064846006422239
+-1.7867184442492222431694791504893981812721853054421230218272845 1.52288833018714075546196915878819228094082611338988833679484339
+-0.44961139784041383500586463687374725072114030200758189498347926 3.73399854031552482118731512286528299777306952428981655189524041
+2.71230605473428841492125502637754391229670443315413472949196949 0.13161217188886391178773348245383269199624076865721437938770494
+1.65229983417965300374822544771812975045353626078582593451469585 -0.02492385549694458237990795070552434528820956253054074850973933
+-0.967125093890292534836018693830450567512694136520176047221212 -0.13374388921443971480580789353984357754847191223787319930722072
+-1.5245007143545072018130004503431912805620585444671574388172795 1.2433979441501731618566506400623040181109941114323075002452332
+2.3320551728563778323207974673949805618526123221059702410713218 -1.342809468599060200860222679210867772754730384886706015029547
+-0.7971928749033443934999323559244306771149800475756410146520063 1.0821390416350070031261963450787662862315819376596543114980005
+-1.3874204617578001398398118392598961899177820313398602217961008 1.9031326253486098741923555423344940811656578209396380859367905
+-1.11377986948887785803427952393060001987192487790585672349701724 -0.1261332797764531923300532646608895096582969015538954573117054
+2.26070922839860038204707261453301319654528903372968098629516545 -3.12498784794136262574842808360791418945423197785241245429177986
+-0.42183882282413309886043696338206061922117487697998125418776122 -3.15205866132541627137039641801902895433955659846197732904647395
+-1.98416320078781129860335233147149108425117952110739237450099487 1.3393721525354803554384346737506109499730408254196953616603672
+-1.36647942671001635286359127706118429501508262206048194767909521 1.85743448784749446855596615577818720110328383188694542678224445
+2.11465220446404778322175391120622658163228150898421907681664446 1.13694130087431594633535913562973528480221981678644992136183715
+0.48615211871489825714021467337187329180307403460214998516344295 -1.62010570717346150405110465300670218623772141885726013302283981
+-2.9679376352286515319059350071690630890406562688256018662257953 0.89120663788038580852400050146745301574319684262383741298460324
+-2.82742380806936691911680989565614246821026008152620939792482494 0.7778162920476139136490049287331759240534879397975124470997655
+-0.8631033949795632650269673834841026620228194189517230015339608 0.10217284757023247689213145505383164244550374935949892228452285
+0.78506050540026896090949811049995291691545004170443329554994535 -1.26597237619734705518913512233289353395199583266614413845418046
+-0.94962203114373610298792262987179012523803686529882006459437407 0.60590883140003425723484320490575841376558313737161214071376362
+1.28156358440946382217426270426936871810746551275496223779295035 0.62293108416169261716880302076942650668122182720094666688667289
+1.95436373192619521462356894428370512003751048501167405992202149 1.5574314708055156745787905645655137232583248625495608765800114
+2.07266961567539924960112618688917269559138660195716436396608807 3.23003179240019992660721870653574551200686563426359974707730873
+-1.87540928943831550376527890923066526824075487958183687729897545 4.26429521708277756600220520161449021784723109741417430899293355
+-0.13104616896339592560399313731754561151612233555621719407654858 3.63655821381591935578952031153673584900232745997217010383694178
+1.33039690120821895570680177512257205947001355844515634397301671 -0.04687220635871153048611127078801425911924932993133223187548367
+1.86559762802959741112576451935711920740422954074264833296773943 0.18907064526429567345147666186408212263258529830065482938890291
+0.64089208047957480465190651076055630353721888453120645307778966 -1.22151252608442188192339377532492409542437742765039861825831037
+2.45913286784907618654459232069046255924704604166127329538805051 0.88696983712014064823628906085809897274170723330088630361204215
+5.48572902629045578691038716861771446987489795734052286328232717 0.66458595714331622827824157693948047551541899654740153188187327
+4.53507131117052569149958501877624842654275387377945444929933578 2.42265999985225986380498720200184688861188744913792044297728287
+0.52583799397688299070750663213708574098268393821891940734867931 0.76197986803192123475727052795141347710806220131841259656504141
+-2.20136945095656730459058374891026327484996785372074869690766482 0.88999463269346858109159273527434420726298206319166401228066639
+0.99432568114069273496677706924183761862713426804003455578051649 -0.88584747563907163561662797227849353366124010135153467104428617
+1.59371149426587135140744438324972497854611326903303102276763879 -1.63313665848813819673970219826575052078005936597538997643505302
+2.43003698000394947286987537531351156394294566574653237554018557 -3.42670602513556388580845213381355523452137438098164448300708046
+-1.01064030337943658709070035784353781626524990162162100553551709 -0.25449649090044596961680465561697143234567935070103143284736992
+3.7173196154370888230883652552661858729555512110895451540588017 0.57525197739256817353322573337362977385420465583709831594584139
+2.78448832497580704149427663586458801018616894079543553698040143 -1.34827750759899856648011749375329893683295979600682816518432983
+-0.05071394264697470168184810981938257246559576294281991299834531 -1.86018291690121925440271365389260806516531434401464279999212246
+-2.38869006485922645227314279932981996433073477510371607075840308 -2.2474573697180144594304273375789586503448992590318473369254902
+0.72234821524866912649837464597868921510599016132698421862585552 -0.17057196640965365341276972324041586351518750376154739276870935
+0.82713614145099145502668093442780632133851748586137739654130598 -2.13882767009675413715947156276867337882176251733078996116386358
+-1.81377959057041961957440436384736556619911979580531752753251217 -2.2245582626326652640273913275008091981110436978625037234686496
+-1.98313897943938131269834630358768870250394249731808933607674531 -2.62401495873834783827216872437129236192539847339758457415124165
+0.96008994525499710454039541996103459275674007235660180070605367 0.97214928680137339075961214573066942192204079307823489758090195
+-0.67986528890698716703012057507540913445335390585537712451487942 -3.51923759544795858934302726318739233023668173795498208726910837
+-4.19973428936091687250316971108766062950508928168505611086469348 -1.97492225071806278130909869094337245225647452620807444116062594
+-1.47640116314893950078937679807969355988338708324098634138333628 -0.1884698693648096370115432918495538659412134719677286362408302
+1.82663869586528601208588869542610281147894524313861720927181999 1.41669161539972452199799537445683896028613925257966975396068745
+3.16196900489867311279818071522576115300193703840501426146262947 -0.04469824248309240686477473926794768971687502819399584163040952
+-2.41777168856817225095869432969919121933559291948307089644692371 -1.5062358772318169733645534746622106625965170241391174303515419
+-2.197345979160074839360001995237566772044009857386387928218594 0.21851596303579941556212237803973991992686499530507449959938532
+0.44982503275093655796565010414101740869272651725888093831122561 1.57622889989165097476011701785034139373978896510535249044459217
+3.19936605398209291714605101939358579920406218187465551614472442 1.78812640568453203896440343312630160604769813095741658097208079
+0.18667870259599862954487654837933787918604608591720963032123707 -1.37611913952152935888884860979549207388565850479342609508351004
+-0.70276283165723824811388485627186666065146217959957915513398 -0.74815845263523694712045460386645135071418928891957112901444425
+2.2741413139315702411731360884226979681407238581413044798230029 -1.47807369496026886863978280564474860544575633903649120695036256
+2.67402778895057266785157301381555771805039907706146922442519544 0.37989553766698401137563270980101334677038223750736691391033667
+1.06646733812505730883429569174822949486582312392661000084021562 -0.31547080256792375863091805993350227607412968415611268762801175
+0.48932904765337997584011457419551552603334775875759385169327534 1.64711381045480688204114572566759479665496134420268441486291942
+2.96839721583733187485919797423371941018099942536132804948988517 0.82208986914286104570895903232973631427970961972288241072271186
+0.30060210376746051492240706622150457333039157731170547320422236 -0.54191483984847930150749281433415130912000324344061751669644486
+-2.06401962128439474880591392998614150117088641653224301674169672 -3.47661446628304913638110030018034705615872020643288773300609357
+-3.00012023465286414155627500458408134957309304001621814445499594 -2.98738559804241021329260511027069720094360960331441862883432268
+2.39688046972032739848873265170913619964318681010903582398154093 -1.09199700342529849885962539975530632881995547399713071030301379
+2.4146467470378146318782294662823499221544387975753680236963706 -2.699246898689406490914818590801398663824714997052655860153212
+1.797069948122837469634953391285121364275170813001137990203245 -1.8185597198005468955656297199390979166272229534403877725363026
+-1.003490742146383482080602731546587944689071131774639677603667 -1.19371003565621655341739279560807803048220975927992222328427642
+-0.5614601438970501701112635339920611781457060703819909009736617 2.01077005344713389620075754788463595579034454020677449971472311
+-2.0552522009488812803710712915235407229782939774977500881932735 0.22325880610864910219068112375101516942897468029385383034110561
+-3.50455886980130179478722681774653154102563517949787042833812178 -2.06476897512612250477576189036225480847663185808101782551422987
+-2.9248846693400483923810328546100459227480774151734377764073736 -5.3116977133988567737532938488304232098121164136967592445616439
+-1.01981651791531275145749862529777389912615534393944755116818844 -2.41812094417450574113621943768077925302601421111588796011843212
+0.3175932202790792505355247441571692224417276475630489756526864 -1.56617698482401570995671085653005366000261577029280435297980885
+-1.60661267602941164428098844458334478881158202849275079507273398 0.0169657969405645573470043585702545899824132448786381034487214
+-2.7170790454639639104207659080141423991168095834082255170250885 -1.6131368878714202117911176910513416385571337997611932199723525
+-3.4692358584364223347976993826448958137476753653669876931206954 1.6881890305935408217817672851647669702376262292664471399405091
+-1.2280462772267017266248079489300962547855290080925043265684033 2.0120905456979432385081810527072936147930909928450380464540907
+-3.39786071409212666347026018678694209173531800629026808128908938 -0.5604899206165785414454401379655960974341788177361636294585049
+-2.61808922515903483777478488637778429439782687688740958007698143 -0.9423750212104264984293512428674883037409567774802116040405975
+-2.05606401003703339072232692494050067049467863803482523871959727 0.97728831631615912070633098605816698368678123347583195595083484
+0.79728411754353399128879215181523669698889265731777899448508172 2.5424671150776872991279253542832421700704658230086892324034438
+0.19713011805323028118172725366289488287210570435466002509650235 -0.9482001725816824908611449127227791943890041098268079212042577
+0.0401634826595701290195015034105173951985330646951201611965884 0.00080674100598725735456232143824645794134828463494699943349355
+-0.5674495580195220822809280635962964700109328042279783692361825 2.461607128957328302418519078215627029187290549298938451520113
+-0.2211530628199357275841168380427627124106031673348845833674557 -2.4709561316592940865165356456254361223126983256082854482726899
+-1.1974842606434070371159893042611363057347427692556425908015941 0.6026456595248804180577304895742623735550753513306992971818427
+0.5517402186249363717318021935201537140840068560232302772474075 1.82532673453235179520110648324495947432410193525835892509174
+-0.4054208518438170040222741691116561555363995335279503207542127 -0.2371172679563009175911703907065329647256299516158216888224906
+0.0897548659178851438435594756660107369735944154943077649907788 0.2906230465674480609902793536035659361649465635647944236486889
+-2.0867915405409244841718420630734019560677852782969380975054322 0.928832156332968305517574086106337290425739221910837304101422
+-1.6734674090769232441121133929203248012106994656747464211461166 1.1249400944748401703163809597209438069984042727291086425701906
+-0.5842031692825022625902131115754992688407515791110418585448301 -2.9798592286231635500857298210358904039970984121041520395916819
+1.3085545505887530295887388911779452973752907535373728962879839 -1.5035161219256683240367782186497936771848256113479373192001652
+2.5416912777688008182189229707091451954846912638713411704098997 0.4535499680176114223160495880884052788474772170633007429797483
+-1.0462024435186907097146712762029573649351923514448306285818766 1.9284014913872361308571978602527918439582953044961922512003641
+1.4291859447319870373313341417198386003479526864067780668611919 -0.5700372479304626612738261497833327690181582728383168287603647
+1.0485498377977538994517323204954650750711684892060216754942429 -0.5748226752260388605932755740482396989597570220773248570356918
+0.7892970720608642614635123945029925300956943630586637932478874 0.0725106426212292103810777282582290873362733955816738369269264
+-0.696919063587424897907523576207182070366293195883720808549882 0.58186850349146922768347001337909710002603450952266805183718949
+2.39114956514586941854406349184941441561283369547752716023216146 -2.1116307228752216545853090772610547489248704219678693644693893
+1.7722708084550250785369800125292408288580778191278190308119851 -3.3665856846193635790380711459734833977301058702254605778853504
+1.1116746269574205330367598112524474980067390901614372618007477 -1.0880813331831117321050335270052510968022426525006161484542069
+-1.0584558685312740611410282524494099507809483180538737802326652 -0.3061486903127313268694416045236820445542593429233671858790855
+1.2037207888550720986688356868410010896147356331551079698881352 -0.2552116952782409749322718504516353952618064330628683065688279
+-0.1500300280517418463544661407459712104185393080221991269417176 -6.6729867146299186181104458957834721059886014450796111857676304
+-1.3228309226672838654234278880473709169461956824388076621048388 -2.5256259499192094677723634197488703647365869419599264871999573
+-0.4510828285899406249620181866300100628159316715327046718955668 -0.4084355234113054904137893622859813416405155763786508493551059
+2.13567089239235170430409610705131349758568818523510744069494575 0.22783680722779140119250061607962205177849843361196663929213453
+1.6685135525709000839239312310163330432795088431048217976921182 -2.36594675989398029964290076342032006534461839823342370945706908
+-3.36693389836180871548849378113739839760348049368757555456338803 -0.19765622630202094896580247701392127362962765126598793555725118
+-4.3179833145202488246941493924497612852786610603195366724728123 -0.43121140111911041712351832462369561296414442351093632046942714
+-2.6679446713733626270982335487554919860753406701071986132866859 -1.3831861098311418139139102999531904922312734461694989420840423
+0.20686143798784771469265349699683609681635738498292937814560768 -3.0754104868414511477013866631328817907074562503308786446256617
+-2.977289152134810952922959506001514593064476307996692717377989 -1.2065537369391168766076659099015709573339128706519414589568818
+0.82759508147719879134546698461412878101725217350443950648783597 0.7132536758601196588003954926786135047384202423125175859575926
+0.55961738576111876434802642780802583574723486592821293193704373 -0.3946565904642821733646928596286119675239876425923807181003827
+-0.73538530382772630691032398285385703175284844967122275923793336 0.5541017313634026429994910903494379969568738172471482111880984
+-5.31879314203316774095318281031150448920726479484757760003943732 2.75261354465126171211447245215457081239809571548193883588171977
+-4.11498047325232252659957345823339086058561742698082216712326013 4.55713194653255487264182226274350574413837304630816762784590518
+-0.87110008951664714528073258061374138385495434572010646888178474 -0.19366848512708073868685667124158002743237830213861144277319619
+0.27303611501134866875445926693268704547217543986924674188264574 -1.82684130930770663387295631520617651928743602580526494064014885
+-2.24343817923656141879398583168345188362059587301560683179332549 -1.6841474446267459629015260263989325327495883445965143455773966
+-2.29625612705102129816996245163139255147458687255220079115112595 2.38963523680886979019821150814931829343756230717152501620345381
+2.47937065872825516184810736145165913488771346434673114933652807 1.7547347077779860696519677058223242426364380341076612505555506
+0.60831400509065352081595490229727914341338545601370564353935319 1.17189198837882867038787985815470854184217176412513298334647344
+-0.24359863684147201194534564862066048328329517392941125729272153 2.11629047412256991025773556126780881087529123741909141180422455
+-2.1513915239700637510520866288036255379908632826509848815924527 3.24017681656972337145325230982797438402616236424998464683530158
+0.35432148591154509218678786796102896958051264367014316793453528 0.94987894619321260124975322147647517149095034748214707692992453
+-0.69650019683478549554319614141407331758935208113965255974387798 -0.55630905823118643766302666677607546081735813846585752656171673
+-0.40844926964626380221805920049975617391738615261849556615910516 0.03685160723524025831584379408375351973560161077496177213016664
+-0.04232616739319991812831912593860991943111239807467466974000233 -0.71404484010668577192015995351732536056114158819450064786256459
+4.3180465034106770501366952069866193605265471777427958137758796 -1.01751593399013561666175539986212479429245867020098897322295819
+3.03211677266695350485269139374005470768144133344580699363750744 -1.56314908741471778908455361870437609645616194287318384697019126
+-0.96929713091739689565528616617504362241944997998961866541422966 2.12671677275709503285967514776740402159527795383327228919519112
+-0.40393502433315363657714058286973888405517275121534862258126711 0.00658354018317319072095509650635772722681600299210282969338212
+0.32420204360559732608171622177782467146315295178265032099270951 0.4423989008324871772903209438620755532201431478352694931931716
+0.7747065618826183740053200237134175232957449139974271674405492 -1.86789783162204505033528172655528810279010527916936265573937623
+-1.74671548853489837902513761672814966287492917274329721819704474 -0.62744094225305714706117024276362129378993422961032372569519706
+-1.50542004059330896708961989078920381050746104432809144200594868 -1.09085392845458920476403131603912087855012481043602688115459519
+0.03016621613357957653681664028908425284077648039002506852508722 0.30971878414472079743457536987858352940440665804355390764472662
+2.249013526109138906728596274873959517038360883846994307064096 0.43340183340238228089263752807550168085367313522363887572456253
+-1.70352597309818774705261165722723892671539459603084798450528 1.13179142387767977227723059214832314408058303038716535316792718
+-2.55250279091510374530873762079630632740542957437775920708214624 0.87953651418218937168199633304746277319397385460574510932046777
+-2.80844110143572685385305070330244941815961131165099952151322197 0.4815603838685942090337041029906758214573859369173533359307978
+3.6380822184900635741602984276484985499731926742795126522013489 -0.00353994850942704095957912346904326428097994833126414312662204
+-0.02364081473788869781089456417000507995560320892190998711946841 -0.3861146531992002116736103989414695981737157624525780792098466
+-2.30244079413558925089173383104993921379288128179420638869155211 2.56888284500960586353134733812960089326154276562489440680968404
+-1.88551345776990803664371434194421118238672829854049472272877263 2.76244999646136949255469923913644430046853178449274990413162233
+-0.00663849292790765078013817563474152293195068878867753378122167 3.2817081512505415945617457964090024590694653548742624852715335
+-1.50655626201537362056103504663175215079740963788705178447423349 0.30650340269075130806479689729902088759757419028030222611603805
+-2.22408065841772059661240453214970031684886569456160394936658985 1.17717439315134162813454537006471347947622633361286372980780344
+1.50081683508719114383122024443320002587890377642000047163072839 1.26646184173408710364254126945024807811713100210209968197119251
+2.9772698977567102936355554012810281706563794219647704926652712 3.00857653814863397860479382751343759127505332449402818537859722
+1.72972918709004357435575182355559111998207541394106717668567276 1.07569340974237297294700865768321409039746056200007516150111494
+-1.019338572015439942569060358395883294188078105286550582285465 5.7577543671467498186203011717360649972775425106318825521112751
+2.34316894203856159323997088659292002256033480021175802750707465 4.79084078173926243327922589909203148857883580084603629829096003
+1.84938735259857916164696711209681262347955059585641748830572695 1.1567948130493073857277533980271204470110751086028485396070043
+-0.13734676188450207719505546220806035290279919186661695102590536 -1.44824296504454005315514600856189751028773686068764031510387117
+-2.52517649655199223232201147347437713677346989341653629794470282 -1.36622731862760580116012573008215182543839732151754929224621271
+2.87830255829441405205751328058634568686059828143040783028895293 1.29441865274128875362488414564804233791560446844764003303782502
+5.47799620622284748743962462040706718034449727519435224296902687 0.30742707837206391944353042655502545570504367580233332703712019
+3.89543493418164188362986028375120591962396036524258990811324094 -0.35378385759804963151274449452134569946426411229635078269112262
+0.38140546893955013161407009808631512958776391543288959568762709 -1.58670400614609840026449478671463312425438428155483236857364432
+1.2215877244977188142327052084220130570366131178133366358488738 1.87685608838684571261563050852805229733002990780127901022889427
+2.6890455315430373201656035118998466308969864527553509120852448 -0.8874076290061172648076536245863813130005908436802534960383542
+-0.4702830060125046603049258277282199268903581133647462746601526 -0.434960136603967553883081258446700599201533911864018308303159
+-0.8961169099040905864030631542489596487567576362328236808213935 -1.9357753826379308205583073731404009943502591445024328262487622
+0.9787366569681459803794601467346829281550778852081665512941443 -1.8035684727357841162654525249055034852319929659437648835465122
+3.61175194937675093093650429564481445776764623686022877711264601 -3.4943491437425266975531889220664591545342103952523136095045871
+0.06344950837272066552492517318216026165525439043894428917148005 -2.80937331115327338549634417053732904289646382256027562589671718
+0.07381415356076517668986724962410271643456452727773086689452549 -0.21128844126944613003860239267042686185239564018419798681536992
+0.9155976362384407672173362312256565514932534258397675696692986 2.74475503533625653466134274211401891006834353093400943075844512
+2.40536381340760802414877009801770435275895442928598996017639475 2.6804754310114674832870347992571426809194178218291685965739076
+-2.7817131651808257555662327221645473809240747421729661203610094 -1.6372529776268185133117804712496899277787369514045246264878
+-2.2252714883612262748543165692863580836973618321387489670104181 -0.0417167434780187974846370240643413806413192951790063024029388
+-1.0524734557290815042859707830017125100336010843326910420629304 -1.1244785789213631307365978598088030130380517822184593632572749
+1.6020546148978678921565604767093502681862830337105746551923465 0.0157133644524746390061323610148624007115252009088622920326904
+0.7044039656441212801461312517730634614905081071785212188229135 -1.6140192372561917229558572827728030402997244092632613991610255
+-0.4646042611251633327531377139050526747890683576649178616558977 0.28372711296851782622393850891422960080094809363452295787767332
+0.6925509526866261615959388115383417318979928457754334211697491 1.10186175874372696761913528178510238302494994470268988908162883
+0.04180102814750720366326226527203349758252427017207514221210034 3.2118880607637694015287125936553246986762608938780509033400924
+-0.8319479542968149564549857281418966073140964316528140284812992 0.7093090464702281475565786909666931447106159472039124019715676
+-1.9235452477559810174433519644335788969427032929196805463749002 -0.1624293131816915187467233318826162231757312460983644836550597
+2.0998038964273853500998932229266407022665247843045074204930015 -0.3724446105210338218699588358584508394802427924140152970166766
+
+-0.4833001744929688887627302318231007732586579925667420767092911497 0.5356506216935318567168964679980224448474954197740742721804425662
+-0.6470889183313806476439784979725465604750285292906649332158905915 -0.05251382922654688111844675415661855947948761360659425718759593363
+0.9495591103622864735737804468916775971319894153057637661282509133 0.9518095182124288782767378820155949547911261560251647626870735792
+0.1280772471342585841455757702545741213596517009855068302808317718 0.9956223852813107496522616247115213137215848581937907906567140918
+-0.1946943926350927100029394214607870756382213566654573743676056718 0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8391269337210497321784330437702418478537689733296865638890089907 -0.8697750560716627155371707094260289644371901052310063829991901781
+0.09000979948494377602070534800332955914923353808674104151336312387 0.539462018274751480324642644804511358394409237082129058457521908
+-0.1766812336766545879148652249537685082960598655086779135604123172 -0.4274845026027779916855619203781095649893449575458629944853980527
+-0.1002499995910402071291914694552929590775602478191912580994509247 -0.8604697501072873707535504424154609782723273602355359333803551115
+0.8558312786548114618473704491843378278983698142481509704680004653 0.3822062430356176188977280281604014506988427784943414973817258933
+
diff --git a/tests/data/nfst_1d_10_1.txt b/tests/data/nfst_1d_10_1.txt
new file mode 100644
index 0000000..6a1e2b4
--- /dev/null
+++ b/tests/data/nfst_1d_10_1.txt
@@ -0,0 +1,20 @@
+1
+
+10
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+0.02064024103910974619444094927932620346955741162547603478536509901
+0.9939488506160911489389650693513789013109506369408951165937746417
+0.1542994539339733543335730199449084161763486165489462822736549181
+0.7828695683967973168186338933650258807396624889375162083366143712
+0.8196703465056007618204539469140589759950911405168070546332911559
+
+1.56996596568118336181733052793968415861678875429682071845666137
+
diff --git a/tests/data/nfst_1d_10_10.txt b/tests/data/nfst_1d_10_10.txt
new file mode 100644
index 0000000..8eac9fd
--- /dev/null
+++ b/tests/data/nfst_1d_10_10.txt
@@ -0,0 +1,38 @@
+1
+
+10
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+
+-2.94154017298692440311153808069399378371302083241550459163413827
+0.1234445317223257147369546775135117303797863678338122097586103
+0.17134714203394705991942904417312282196260479046499735867930392
+-0.06998873061463215891187149722488149963247258341946000663010926
+1.04603192636022036906810473489691391750661543360189882416302932
+0.17116896481270777376047197013213863166700484559366445917263752
+-0.00279052096447109308334320651359037518693694999016802607920463
+1.11336375191164016684638863318990291299652924890315586093853016
+-1.50420042601808859018590793359890651490388322126930543399322678
+-0.99887857599336726230955702353887480444967052200186564885880481
+
diff --git a/tests/data/nfst_1d_10_2.txt b/tests/data/nfst_1d_10_2.txt
new file mode 100644
index 0000000..dad3141
--- /dev/null
+++ b/tests/data/nfst_1d_10_2.txt
@@ -0,0 +1,22 @@
+1
+
+10
+
+2
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+0.02064024103910974619444094927932620346955741162547603478536509901
+0.9939488506160911489389650693513789013109506369408951165937746417
+0.1542994539339733543335730199449084161763486165489462822736549181
+0.7828695683967973168186338933650258807396624889375162083366143712
+0.8196703465056007618204539469140589759950911405168070546332911559
+0.6316345452201721830125859283102821997036574445025868003866206636
+
+-1.16156918713850361883795203062585161614610934689753397271550432
+-1.86235408562156250222689240593311746469746278321463473553598143
+
diff --git a/tests/data/nfst_1d_10_20.txt b/tests/data/nfst_1d_10_20.txt
new file mode 100644
index 0000000..fce1df9
--- /dev/null
+++ b/tests/data/nfst_1d_10_20.txt
@@ -0,0 +1,58 @@
+1
+
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+
+0.68716244147902512079974523579538391480435481181807231730553391
+-0.3150590923715968194126307686495407722561409129255011455780857
+1.04268711057782317429815441135539350121975365764679695267386003
+-0.23700681164539973801556539407207273201114958498953930164028669
+-1.68360214776099286556833952783273837197910070965233382379469535
+1.04409559160086300440285189914058846482572207017658052072769376
+-0.02706159389402769039435300178423471414014321652907330840638523
+1.09315450121088229859926975371024481501662994011785007318781195
+0.05486261324882639978593316562828737599596741061302271870214366
+-0.14177559979666688078697893418022117744693226731728010309958339
+0.68628737912424474113015533366757704603008704581977187927549944
+0.5089559063389750799847428675874253569299975205433981647374483
+-0.062850305040949923993353386792819184908313862674225683039164056
+0.64833778381708697957863223463628319444761853833367694360992983
+-0.024896301839231760605577746867033741772704081393578983866697917
+-1.207567260954058717164226285546983249554565638076909054751449354
+0.88238321973541567082378880341171368248885831730970178540152491
+-0.154136107438982593928370292192691029587417837368080071874457679
+-1.36657499324808147281178227420185213920858058068837644519300096
+1.19236098422666031738077831687478733389228944781106100339490145
+
diff --git a/tests/data/nfst_1d_10_50.txt b/tests/data/nfst_1d_10_50.txt
new file mode 100644
index 0000000..549ebc0
--- /dev/null
+++ b/tests/data/nfst_1d_10_50.txt
@@ -0,0 +1,118 @@
+1
+
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+
+2.04763119767011345188991753286908038902040948148057547224706001
+0.45518794899224527159912535999207831218775983371225303599323861
+-0.33573533014739424973235942098666559053671052598123672164453227
+-0.40829574027217748502912185951303622103615516035095597196288185
+-1.03708218566388618953713224712070140669475404756365526963344798
+-0.33723670442426717051016996605805041564785940996875883531182323
+-0.04716073660529231609003653051134932232816566137685462586904332
+-1.4858098784734329148092370302874358225774903058514452918043872
+0.31305081298860526297447892376351798893256447190675397861673687
+-0.1200954402279634638775487706656313042020446621172305304315346
+2.06172405249434047670626234127885672850679042584290895449447305
+1.39387766243866026989497801913723324034205900046755385151047241
+-0.939981554423009532783151228631872745962324129616285978053126944
+2.11888923777528842356183185959686915856412502450529842407943132
+-0.608787077398282885439415289265473352962173898797605701484286605
+-0.768748564312690213144948896302240490796555566513703016015992122
+-1.64672756369584285247733288063987747710806244843376797196167804
+-1.21953971908185475617069212798329230026135965434755392117805917
+-0.43375176425623677535837948003370865935799084063443022290137485
+-1.36403177452413331433908115334109070341377899311960193388452074
+-1.85757775977361893784218124232262347277211866457548814820580894
+-0.847233327862584571907253457165431806696668439552425582129658827
+-1.68044110442573587998820602037556004434353653902338746827883042
+-1.76866746861733883754106569638705048735443953535757528714248914
+1.66480327624735155987641880046868894005023291936593839447416237
+0.15504357556076321836924904219311813384052276124232039418113037
+-1.56073261016358893093454510453374769600736359698551503323404308
+-1.1042212935364657389119761166857601225028814719985836916353084
+-0.10547678544438387470696234226837620590933631318030380475536303
+-1.74048669789370349650314652464300710963395413213251180549258917
+-1.63665363473130095400577360765675318966704395168572520766049696
+-0.766142310785716789826258158443607897285432395049885335385778101
+-0.35819236991496357618563094647457175528499718532646152555133973
+-1.2894673769827903888504757227576557282506417053709990199214563
+-0.35949180181049648148111008023855163901478884476798544785128758
+-1.311201413677058297444079436861554506069251534846040194288910907
+-0.95743757891805995376158498748770237389304254399645017825172764
+-0.20646806833497442136372444831709540610982835531219415605433631
+0.15288669392796781467596897175619065299688539846287379585947792
+-0.40529392430338178622887724222533127217335733392554707246844656
+1.74314923255165234220939916611452243844969653122398162507659111
+0.09975365656699476140149292944926557948082731411050588154328902
+-0.34511373266251930428318622050864224573757948546990808041045988
+-0.03413924685718738614626073525871488015846888851447746533799341
+1.75299811380355076278812982758383523690134368416609502015658414
+-1.248332046238333054874840069132218785382026821900729084263240595
+1.78205980354853369603124243493830988603000516970873529613085336
+-1.90089564690885451082192726694785930557456206563612416126261726
+-1.277952529300166246099508041523301568760447206986548543918582883
+-0.60865240238031569389704590454885346185920998734071098016092218
+
diff --git a/tests/data/nfst_1d_20_1.txt b/tests/data/nfst_1d_20_1.txt
new file mode 100644
index 0000000..d63e768
--- /dev/null
+++ b/tests/data/nfst_1d_20_1.txt
@@ -0,0 +1,30 @@
+1
+
+20
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+0.02064024103910974619444094927932620346955741162547603478536509901
+0.9939488506160911489389650693513789013109506369408951165937746417
+0.1542994539339733543335730199449084161763486165489462822736549181
+0.7828695683967973168186338933650258807396624889375162083366143712
+0.8196703465056007618204539469140589759950911405168070546332911559
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
+3.3917764338735925128924784207898505844314078733398900348497873
+
diff --git a/tests/data/nfst_1d_20_10.txt b/tests/data/nfst_1d_20_10.txt
new file mode 100644
index 0000000..f61977d
--- /dev/null
+++ b/tests/data/nfst_1d_20_10.txt
@@ -0,0 +1,48 @@
+1
+
+20
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+
+-2.2223728610347613542848829155174119055665332546107640287123094
+-0.1128819695314852602068200809430218041805103785922665888184966
+-1.29444935519520365448522159669324275519676031166404801696393346
+-0.4501445109607015764349198311652839723655897563674642151749487
+-0.88635290957262481599258096944363344440994902187559040489365489
+-1.29854444343910818965119869973017712170316921081161292162969615
+-0.0686011076864133020635986908654531268254402477538110957605703
+1.96470669060643544503048599426187450978280208440634270648688405
+-1.6436858915699448125209533301449705060729443458864323795272999
+-0.7897314323353096620899656998553211110652962777184151417198696
+
diff --git a/tests/data/nfst_1d_20_2.txt b/tests/data/nfst_1d_20_2.txt
new file mode 100644
index 0000000..6432758
--- /dev/null
+++ b/tests/data/nfst_1d_20_2.txt
@@ -0,0 +1,32 @@
+1
+
+20
+
+2
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+0.02064024103910974619444094927932620346955741162547603478536509901
+0.9939488506160911489389650693513789013109506369408951165937746417
+0.1542994539339733543335730199449084161763486165489462822736549181
+0.7828695683967973168186338933650258807396624889375162083366143712
+0.8196703465056007618204539469140589759950911405168070546332911559
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+-0.4413098759704276115157486122940138778382450314554048934666388869
+
+-0.4318993466574751601014603449277504521128947944348488502359791
+0.0096529702037490407957367675498513534004690748427062485548096
+
diff --git a/tests/data/nfst_1d_20_20.txt b/tests/data/nfst_1d_20_20.txt
new file mode 100644
index 0000000..c488566
--- /dev/null
+++ b/tests/data/nfst_1d_20_20.txt
@@ -0,0 +1,68 @@
+1
+
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+
+1.9204467613223434130615888633063424421645077096488251368679042
+-0.94568199252941667444264109377175280737076078223383978725852017
+1.99755413517302134475940667748317828569662628502750075788174843
+1.30118961379569866340032821809379808419564712517817244225554151
+-1.79257220359149596509756182271246744854499229878508850079839947
+1.9901055052487944829678767393754971042075781688968922574204886
+0.197276224125521743689275480967273934690091447513125875768077
+-0.41122535752096118023154595081532171334577327883794162514233766
+-1.4352399741626618770064697842292076596453244043832712902296841
+-1.6197205847727729620387819710113906859873142265798135535589807
+1.8662065228992906988284140343275095353483179366105341023220793
+1.3441315842590245664277757014818217350024879583252854560222531
+-0.916776059919034404507355552653905962787046960140363003704210884
+1.2661949719431837227994706521140217275619678833855596757217487
+-0.962890654499348645791785594349460721039267291985620919765313728
+-1.32575610411863322196308441966610749197775438041721381265174129
+0.46842899224077019874363102071333977838301680071897133196322562
+-0.1695573372091627062790807158483571686220919601913278985371632
+-3.39306802116806820662335228544534491424481829330136172693369433
+-0.81394614284247381110255005017919464761476628996967175402492112
+
diff --git a/tests/data/nfst_1d_20_50.txt b/tests/data/nfst_1d_20_50.txt
new file mode 100644
index 0000000..288ebe7
--- /dev/null
+++ b/tests/data/nfst_1d_20_50.txt
@@ -0,0 +1,128 @@
+1
+
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+
+0.6990664979896484107450404742286744286521137451603374137306255
+0.024824136847026787709244056824625791583581836246595273460098
+1.38159340660199720688749038338665587526735169923793014844058421
+0.0875212853275566558477594599279756340557999577585457383348718
+1.05518751135334886032076847142334118314189775959708428610724172
+1.374560767287194223069861665205075911525050881925080756113872
+0.0680138725082378698555820259406731389383934389884415961743566
+-3.2969640935280964357765480918507825692104662517911554201509375
+0.8824353032943382991547856272066609357500800364933960631027146
+-0.7523153637512070934968039520911962085378534486175741123926691
+0.6831091979244390547429794045286409870227534227397796424545321
+2.2770771487981583785579748672987325246959873781622886897217156
+0.17488464765491574964148103864724225848079483410767666100612291
+0.8866413128297430614426983146870888098159621825437327925014389
+0.912145336600598855310423559915700724446731379986740065138192475
+-0.7890298517459237861203117929739287365886017988861801623044799
+-2.9218722289917966169041320255477840191328666075969948292107561
+-1.81847668253005108796264412599027580164711404124257905211084717
+-2.24649153023543960344941832025178618466649980382589456922322292
+-3.2189681195084267877070636739614606509057401224815221920841952
+-3.68449566613925555355340962333722468412450475809631977474197591
+0.524238787587334941086016610502652080263189647892387129845599
+-2.19157660592293108136151789322485694054866768668955013549618145
+-1.7070193853597030059616182832029551787592732774261230676481047
+2.7756069506156476252111659307578015191884673200023558607897091
+0.6870730313595727143359797195234171950386540195384862819193889
+1.13427957427730160952338066225706661479955553158554985462296392
+-1.0758420341958422881638647700766904448876869199157108598163105
+2.20839414773792069940825443293383048164760189325865795438804409
+-0.2592547021491574950496715970008106399505984713487501812721887
+-1.86166549231568500639618550535485742928408152504541362094888587
+-1.1049536678158494959755490407104024637613066670313878941141853
+0.1984957253138109491060216206873930421452997101792725416880634
+-3.0718887148639526034615408797557159312153322466659967387742161
+-2.59785657506074186685399756055406559067831838119841952498015565
+-2.91058417188041511669087649940164062615289237648104312101427754
+-1.8407838154633458925934449205009313104378270981104927078646802
+-3.09214814557884936406279669379146934456264746316929224230412227
+-0.57958160608740601422317092669478310808833017304991087331781364
+-1.4685509919460049582936956486560447064247165719898576926048266
+2.7192644014348827918759691514160195867796264076665278722297826
+1.8143212013774219228090465418104540029296415156612269086534478
+0.2170481154667864976253573371361067068711185535022045202725998
+0.0494573271062685404949107587233985079067203094521821555853418
+1.4896431118517228484628125528732332100062125437049615490474139
+-2.12777261605703334205303836299004936006612669279976795849332692
+2.6686104403001849620739489986624072946028062428274089118746407
+-3.97605841512196319502818107107943940466286105613519579366258134
+-2.47407586408496035810429931680207706582387915070295462524348548
+-1.7370056125195930399645547742360592758625570488380141109062899
+
diff --git a/tests/data/nfst_1d_2_1.txt b/tests/data/nfst_1d_2_1.txt
new file mode 100644
index 0000000..5fe6237
--- /dev/null
+++ b/tests/data/nfst_1d_2_1.txt
@@ -0,0 +1,12 @@
+1
+
+2
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
+0.242657038654574569149987696924845126872345709402186808541106154
+
diff --git a/tests/data/nfst_1d_2_10.txt b/tests/data/nfst_1d_2_10.txt
new file mode 100644
index 0000000..1f9c908
--- /dev/null
+++ b/tests/data/nfst_1d_2_10.txt
@@ -0,0 +1,30 @@
+1
+
+2
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+
+0.342809015859728819603102557761445936709247526408983857808015437
+0.482161108540623035424362426200030495392155389902793810951641618
+0.6313085301127115512518577990343062926104555765117873977693490218
+0.059288815055320006895047932830312893215204840841331002422119861
+0.5791731190263523426422851117745223979181451887608425352332974728
+0.6313025994652544577893675296583506846763521520941381453451073811
+0.006003673781927610667487839568994392508399670918365857488302577
+0.6131726055116383599239033508710354391267693439662133036851359476
+0.211277628476596773537637407070860900392017952306088716981607043
+0.17653448196988588127254547655178934824035625396525050644841754
+
diff --git a/tests/data/nfst_1d_2_2.txt b/tests/data/nfst_1d_2_2.txt
new file mode 100644
index 0000000..4cfaaf1
--- /dev/null
+++ b/tests/data/nfst_1d_2_2.txt
@@ -0,0 +1,14 @@
+1
+
+2
+
+2
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+
+0.02045501150664698515444899608259832622778238194598181287024763486
+
+0.01110161313540698669688818430394970420499258369172530093278750754
+0.01561442624994212091954794958766367796202797787248100904216591157
+
diff --git a/tests/data/nfst_1d_2_20.txt b/tests/data/nfst_1d_2_20.txt
new file mode 100644
index 0000000..8e428d9
--- /dev/null
+++ b/tests/data/nfst_1d_2_20.txt
@@ -0,0 +1,50 @@
+1
+
+2
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+
+-0.23951350573751007548287062891499930767609579506428930702171849
+-0.3368759049327416595283373715240552575307105006818125930878895673
+-0.441082096018037917214853638679078688633706883487100102715025088
+-0.041423857856565638439713232236178551756461453335682186547053252
+-0.4046561722393306208051731874583917879791989206465987110400444459
+-0.4410779523984187560461681884088030660867328723237318554239415718
+-0.004194641588429648881464393095253522868577426237630563416492174
+-0.4284109039547241652634174124181333651682459413114449002065775307
+-0.147615270133510874794325769491705925046560834192881520409218641
+-0.123340958679639315150973705625559977685865443156610681786600874
+-0.241341357776869177948179625473799749888434650389061312164395926
+-0.197168288859500212478295153363818123294827456301082438896189609
+-0.0562538897907509538421189285704923981451110771606070830767267164
+-0.256066143986441839998025066505465881080911052574539772439637773
+-0.03383533953988030606693078141882507908678699227558251647943602736
+-0.2243588591802139304942299210947785040434748675144744621649572034
+-0.4234541781515618817429504531340533672938942601916133898501362885
+-0.0848439883542074100481820526632751602254958635361162461881831336
+-0.4191245806400120352778419415987064739536462772537577193709181744
+-0.4310555718181502306073383892909754118117418645900152493755819331
+
diff --git a/tests/data/nfst_1d_2_50.txt b/tests/data/nfst_1d_2_50.txt
new file mode 100644
index 0000000..fc80573
--- /dev/null
+++ b/tests/data/nfst_1d_2_50.txt
@@ -0,0 +1,110 @@
+1
+
+2
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+
+-0.39809953830029570106785844127734757688755803273198790092331882
+-0.559927265083723618170996146001295595522436398498608405567678406
+-0.7331301766746584908597741288979436678658034656553978574304083311
+-0.068851310227944442473887744004987022311335089822109612666371229
+-0.672586019075640385324574889001772052581434823814870875638639918
+-0.733123289492859699420471274436549355175713132330240464926540483
+-0.006971986295917435062258644916709791997713839098729468485834863
+-0.712069169302289777170787354883728690783219586880971915244328829
+-0.245353892279573717530192571304572852846744631649111090341824914
+-0.205007139587746544953432710850111771844386427408077510933950468
+-0.401137642772565354332184351403785134139228699762434917900768744
+-0.327716821315490804597973402683176575589648360837491167175111733
+-0.0935005626690489358350516240664790499910656431701953769807176462
+-0.425611964475432919528049372507832141122483477570583695508313709
+-0.0562383027528396552013458420169181337888476528504180217067524741
+-0.372910738282581596557841471684073842243578402081926240433548174
+-0.7038305096590935700790270928753220517349782825183806310035344
+-0.1410206597217199834496507636746370366441116435179374925070886869
+-0.6966342107904065616368079539882117286531242403488317839041153498
+-0.7164649174758453248357479379391691928974297894335894985579631883
+-0.5642150088769812832817725112083622356740144312706278943340157874
+-0.0820490566517608217611009791080183843065701264613871116121222346
+-0.5375367914480329446257001984110630353471671979498292933118790195
+-0.69075710419579595907229859551381460900382366025332186051952655
+-0.494966798054519433705272688090749429405705756837942586941765572
+-0.7279552399094126208380636156188708187092956793649820950471865579
+-0.64507920649803265759027439795471104587281042304376861267392426
+-0.627915481095780932073351586183101595057609915140307476490460213
+-0.7333997398313883827005431997796665330485599032063421137765161899
+-0.671960044586267585531691949245840399246303945299261531831728529
+-0.5320947634600812451704444275354544716851232888736228364475702758
+-0.3861131284883035648680834636226856967251427385417358975650683907
+-0.058056845190291100511210675114304966139698243704158222170229445
+-0.71871449765184623652724548897871019304039653103572728395464527
+-0.6994730972364023727972642092466889140678161734249525943989586687
+-0.1833903795905567817350907196311111303850413900602533887430835274
+-0.7261894480897436769067091955884799861052550077325830068939789179
+-0.7054410902386286418714985833142520285452280376095770583385477112
+-0.7244329470229402778137554912337682560903001625158951044058711493
+-0.164694012624524650761196161900620180452997974097899810946394435
+-0.488825754052037738713622372448843484449016029290482715865366805
+-0.731014660392971328991376337345583364285757064248311200402474927
+-0.055471718490467799222640550705799680649200742744941418639325034
+-0.005043816793537041564564501828727188080189836947161190651678279
+-0.359307061205431885288078679131071375049704089974387478224918896
+-0.1490000448296665433238238552039346558195812591615870714659921053
+-0.485542844974461506679565248038254902481816010373688908845726564
+-0.5742602421309735263190527810514962621933398452711447532751887414
+-0.1594817301142011369250088467359615548789436104390660560310882349
+-0.605238391737842550011982918525529849457342811449494999748238696
+
diff --git a/tests/data/nfst_1d_4_1.txt b/tests/data/nfst_1d_4_1.txt
new file mode 100644
index 0000000..092ff14
--- /dev/null
+++ b/tests/data/nfst_1d_4_1.txt
@@ -0,0 +1,14 @@
+1
+
+4
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+
+1.153569077086767158216037819416824110119472594232582506940023583
+
diff --git a/tests/data/nfst_1d_4_10.txt b/tests/data/nfst_1d_4_10.txt
new file mode 100644
index 0000000..ad74df2
--- /dev/null
+++ b/tests/data/nfst_1d_4_10.txt
@@ -0,0 +1,32 @@
+1
+
+4
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+
+-1.208337247615631758112680881982690469079087592065158891121259965
+-0.682506591606588667103829306584367320305807677602349209253586578
+1.500390531044281439963945047381409410712742945788038918057767184
+-0.32814810884521275140509586174439918240239260697404924689645153
+1.401046718475860737133334100773386383924650847076891130736853429
+1.499897601800228450944866999573885301950784174555323623296489221
+-0.03359191575367739665676961059507056513795255506274802591744576
+0.970888656606877846735119234694694941122756064704870867091943748
+-1.01758694982374894017373118145530877544809075195327160005383994
+-0.89193196153011546346234389843106913645188097035737494122385314
+
diff --git a/tests/data/nfst_1d_4_2.txt b/tests/data/nfst_1d_4_2.txt
new file mode 100644
index 0000000..7df4925
--- /dev/null
+++ b/tests/data/nfst_1d_4_2.txt
@@ -0,0 +1,16 @@
+1
+
+4
+
+2
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+
+-1.104380110490317105142377754088805737567693034939216540184336814
+-1.045060537583812517925033944337463361149162448189528315724316369
+
diff --git a/tests/data/nfst_1d_4_20.txt b/tests/data/nfst_1d_4_20.txt
new file mode 100644
index 0000000..d1da90c
--- /dev/null
+++ b/tests/data/nfst_1d_4_20.txt
@@ -0,0 +1,52 @@
+1
+
+4
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+
+0.136086475672089031952016764671995339018721543922093146179636582
+0.335622612157399029931902007958320766504925528313445732484108531
+0.092739605867975295181160543853318601475202945704114035939014713
+-0.0004352912079150662240870842459669441912717878524488878487995
+-0.925559518994938006483709533544357411800048933746388189476417023
+0.093242812044105475215633914335602364543594460035657843900639751
+-0.00012488352641721058640263352118386818096064092957845346278051
+0.360233791177448541440413912945533425374708012788066873174921854
+0.031107651184753152885792363654353964282432407003325494966772941
+0.017219789330542317135759685006865379819621468736148609748136244
+0.139094961131234974047635842982121581704500685236498382409912938
+0.07661256560780909137565059559351029634423558366597141872152243
+-0.4693035300590561699561710259018623175109517802143936759360049097
+0.164626192564206156347749759885225982411007744354850467201737055
+-0.2845322124449119266751762453384596600371125646023880031175577658
+-1.513653202391502835804371373039866330625764963550746240011271361
+0.390501557669534369291893300600804194673852269676410189253185955
+-0.696482378222453703837738709952486053976150661802621738165173379
+-0.696299461281467859631291383441357231021518583689195822221201132
+0.337578347601879284158079192502676434150150626198516877326727789
+
diff --git a/tests/data/nfst_1d_4_50.txt b/tests/data/nfst_1d_4_50.txt
new file mode 100644
index 0000000..d65761d
--- /dev/null
+++ b/tests/data/nfst_1d_4_50.txt
@@ -0,0 +1,112 @@
+1
+
+4
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+
+0.595279030027621440915700833261813652790102932305878024241561135
+0.405986821972428687778259367051012596439045354155921626647946266
+-0.870299677926978430389181981544078347033143037219425734068156489
+0.149500722096336657498353712228958299650443062083299061185325077
+-1.380317939256269174182080690094088375342733814664907030809812315
+-0.869766131463920609025463400130499175316789233923920692159612581
+0.015276145103719318290885554159875440602014530317477857690518213
+-0.447931860295863881126518490866419017617730762829673461377355451
+0.474662992232043737846556045878183387205252796234950142241102105
+0.412669853942221734123185954014049778410849481567078686672809178
+0.595315672533775311059346421819062806614150985771477221478453619
+0.56601618898352622348923844534103821502331038171092613518346728
+-0.2429147480055199943419860691087412647656248959712286713612868508
+0.591442771934775051182703764943917128730224482388152856416527785
+-0.1461912300300513115827735822565380583767577448977599878717192078
+-0.947840244343892780248363595796743572740632895044774735182856332
+-0.356471240982167696881542605247058651526740669900541165697032589
+-0.365923639963434612156229780757497059297940732404726509089508555
+-1.331451995091609492971194137242366157269869566418150061384282499
+-0.503661253449657930369008211130298061516360296167301116775719897
+-1.333239931002764049045083360307484315276942628975804587597757103
+-0.2132084473606938833602740558937228478682900666767962963989563343
+-1.292374709713616941555305822637896301993095473519480860626801086
+-0.234278243742022373504378505669792876005281323351093562066303078
+0.534879318770463947805232022328973459073093586574747391749023568
+-1.123537596689638734117696808681310090984965450863078162245703606
+-1.396757170483773689172884295949633867531155116129102634498784005
+0.161140387861046999627886622418863040307279266265786924257418084
+-0.957932276439121493131259190956967093321739661012678606278794169
+-0.090031026346436217387915545013311423914106191645958347355957848
+-1.283261294337514737928404808805669017469389866643172453331794743
+-0.978957280736078471228947980539918165017387484333476006304837814
+0.126396622170827974811287845707675106973589896264539630410869191
+-0.534765705249865539807223944510510936248321581849142537394980032
+-1.322242797267746451603338392117919058003782959421332430301136056
+-0.475077388760239418929835379782066800824302185578284472992533271
+-0.658285076067368589296688581403208294916394269623704917242757778
+-1.299384497840638337529597195195707648221208183410259917537317981
+-1.169807533853143506558436491078896496120965689281674093241404638
+0.342009784235105141597965648789546451237733275763848588328333315
+0.542928853862614780344803010578621089123654442809449314939172758
+-1.063890973338801972206703938869056513399711376288086658986004987
+0.120836944703211790678881068719826223894571247792329029557746946
+0.011051871597035672745009142546099450883727906982863140321656979
+0.585547123762524761564093283819787788103950950012033801823208033
+-0.386525299330770574106667054483631241381777948077102987282227728
+0.546969964136553135828054719311646191056248970163378215536613384
+-1.346735424998310403557250907163769371295407063580177728466707718
+-0.413558302347024518015914123493207199152091649320299836892296226
+0.258348914704633074579439895790266579215428146915195359661857867
+
diff --git a/tests/data/nfst_1d_50_1.txt b/tests/data/nfst_1d_50_1.txt
new file mode 100644
index 0000000..fe0cf39
--- /dev/null
+++ b/tests/data/nfst_1d_50_1.txt
@@ -0,0 +1,60 @@
+1
+
+50
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+0.02064024103910974619444094927932620346955741162547603478536509901
+0.9939488506160911489389650693513789013109506369408951165937746417
+0.1542994539339733543335730199449084161763486165489462822736549181
+0.7828695683967973168186338933650258807396624889375162083366143712
+0.8196703465056007618204539469140589759950911405168070546332911559
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+
+2.447032039091407676219750421152249985920143795840204940908385
+
diff --git a/tests/data/nfst_1d_50_10.txt b/tests/data/nfst_1d_50_10.txt
new file mode 100644
index 0000000..b6b825a
--- /dev/null
+++ b/tests/data/nfst_1d_50_10.txt
@@ -0,0 +1,78 @@
+1
+
+50
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+
+0.3893991760245118860284567200527273326140979038318414636035567
+0.64309878783134126324134918652862795368147880988116272651146
+-3.3176940395845489008334208106362921261928399673872000134770968
+0.916217169233469997787065222906774935783587969395456542732481
+2.7117767283217657446681321818235499017263488915641744419406771
+-3.3259467118833940511746674868378267707259703310360583798358469
+0.45497501421901559724797497770364272781970457809491493802671
+-2.2608329279796395294776240220800409696372210854619588606106337
+-0.574269398384039825934586682479305458580826371358804652775775
+-1.231168018531139418868724160499183952172126952985897938860348
+
diff --git a/tests/data/nfst_1d_50_2.txt b/tests/data/nfst_1d_50_2.txt
new file mode 100644
index 0000000..d8cf87f
--- /dev/null
+++ b/tests/data/nfst_1d_50_2.txt
@@ -0,0 +1,62 @@
+1
+
+50
+
+2
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+
+0.02045501150664698515444899608259832622778238194598181287024763486
+0.9401551428927267957022414807370223973718851691957439576252972471
+-0.2612973453579209037151284175096642861921169860192733934510953033
+0.02064024103910974619444094927932620346955741162547603478536509901
+0.9939488506160911489389650693513789013109506369408951165937746417
+0.1542994539339733543335730199449084161763486165489462822736549181
+0.7828695683967973168186338933650258807396624889375162083366143712
+0.8196703465056007618204539469140589759950911405168070546332911559
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+
+-2.626828403500342964369697150038043530159433166162842699206116
+2.2565985001343434230280011018446029876075878649285283018278614
+
diff --git a/tests/data/nfst_1d_50_20.txt b/tests/data/nfst_1d_50_20.txt
new file mode 100644
index 0000000..f12790e
--- /dev/null
+++ b/tests/data/nfst_1d_50_20.txt
@@ -0,0 +1,98 @@
+1
+
+50
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+
+4.775538253439782717003876076494601371477925744640471919035212
+-4.8191233875094458314467073528674474162808589166054891467938227
+3.2357596354969819175100512299359760925784666492082849740858166
+1.899173542127037047570749702594120826368331804071238849011609
+-3.1588535008687818452650976063996146409982656535251974952130562
+3.2737557183368324622982136271982726098606761650012509075046844
+0.528715403704126124046517653884384741308741501322373141224161
+-1.6986351213481924187332477989622977185637036758785329375053052
+-2.035541034801863165842483198819856626605548539162815253614483
+1.610578059927788415752276752326068408647998545247404757973956
+4.653754332771295115331947461809103607613049581655643176556126
+-0.467542433899287881481816307956737485298445334120364362725409
+2.2798023593893386566561777187538198315633162193187381419003661
+2.4339824632454222786803014611186109271607515110095836644443285
+-0.31031631212893964595473939059927123376649903951354714027069425
+-1.9150974173857768568427412172306973413264847033644171062535316
+-2.0698564562893895734908704076114184721211141345006827082042852
+-2.81196896021907754993915470764470223906250587022376413484917308
+-5.9941348115290726530249639764910609181110113911172964709818586
+-1.0558770123276082971928101394470257102900800937280678028478378
+
diff --git a/tests/data/nfst_1d_50_50.txt b/tests/data/nfst_1d_50_50.txt
new file mode 100644
index 0000000..4bcf900
--- /dev/null
+++ b/tests/data/nfst_1d_50_50.txt
@@ -0,0 +1,158 @@
+1
+
+50
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+
+2.374776634872162459760607647206931686902317181088526100434772
+-2.0685400996004487731558637223304162698948244381897302466221934
+0.5361586619043007327642429218354952456839781427884344932919633
+-2.517668660596599414326820242482085065164397501666257984410301
+3.7307788297461040124809891341193600488340892849351895123014244
+0.494066788030817992911914485032775066746823590939090097394261
+1.330770911644737517615043185620911032347882724685151178773904
+-4.5709844461250119564743381006068353439748798440666073070981726
+3.732703690702760311814052798061966864876645663670296126399514
+-0.406250319925423918292441154784311365643101957327422179916178
+2.246179503605801202399015764457930824416350935713628425627822
+2.311874913068644537055331947189247992961370397171988962926309
+-1.08533114034310709093606488473162675921727690871373893205206411
+0.1233942457953257074944536502780411463924419083844711190826936
+2.88007604183371771273146891775853577554041501298849624947703671
+-0.4501998931244659054422238642168362485045049095105295507882913
+-3.2002454428468487310976154145054677324069179657924142305853456
+-2.21655365038868423261689931725753903071652032588396312710502598
+-2.4603129740818216625751337288991215294408411592842482115644214
+-3.6846278625725456812732738728000892133066374607588100914971222
+-4.7158199566682859002435631958318563072439226381796589402489631
+0.35218274107352238516526986013554095177911864365391330410141078
+-3.6160779550793074310194684041433925067631219308497058190063661
+0.8060824062784738902908355142857715121205286891627250546596351
+3.053580416640706878898016995362526574189449807104364962752785
+-3.8038410779262352803834096298330204826315088017638877160159876
+-4.8786753581833543674888383149129885427014636740305012922603526
+0.6190156567339054765754236750822918874055300615920302010431593
+7.1750798226073039705343103231561426016584127849464055484776307
+-2.1701317008445636060741648145177106955596762975850902966497787
+-4.1111210697438861522148062227608122626779034648308171812406103
+-1.6273227120687776140652371864627135768832300056164861557089497
+-1.102013114964232152997783146152974941005268115396643822593804
+-2.9719873833835956860006101106248399490032170953605175719972657
+-3.5458871729385006204664123213135202840712350451629042786807276
+-1.6386756718888257841867903491841727145017950154732612616369855
+-0.9699905398156007543928769386915195100067619420138913562917885
+-5.3726011320416901744100210685138331144343033479728835658225112
+0.4489265490608477103655951698052671347946098283112131838492769
+-4.623195911223778377760558697327244023714626271593025963776945
+2.807410031291903555717076366632318958142371121210574706845405
+-1.4550702371792273024382193551985649232067064626543168661110084
+-0.648319930588072307543004806948445210226355154226701247462529
+0.976873733107929462903263170132781735234759794162822628590686
+1.751327583440058703560676051061421606528510530676820156351526
+-1.7538231129407889186996739890558986802338571930752557674295644
+2.660724211730477075356041600333183774113339498914893399312999
+-6.4252275318094577185428910343344943656927663527447769738435842
+-1.2832399006508065117681132113018467103555663461510201583669214
+0.7594087435975202845982592811284426569858092421928562000104159
+
diff --git a/tests/data/nfst_2d_10_10_20.txt b/tests/data/nfst_2d_10_10_20.txt
new file mode 100644
index 0000000..25bf73a
--- /dev/null
+++ b/tests/data/nfst_2d_10_10_20.txt
@@ -0,0 +1,151 @@
+2
+
+10
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+
+-1.503308277105659933852210997585764711993972164715843056510313
+-1.6177630809608098216935804956580480440363476010056595772250971
+0.8960987298745676816727787537295168530221561592585140674858076
+2.6068583986049260397398313809031947747636579339606532263276481
+2.2799048475337996234851639796579987825520153132790588012039488
+-6.1713009579787503219087900984295376797557873473914689219300003
+0.3130845495593592262485820385696520628809018835917503212344799
+1.4194389875462662590040044677101012094949218029494031326016722
+1.4389817002077109201757473145795678971467773720654773394380975
+1.9017780172686886389625734574074652033280145789696121323445489
+-0.3248193958296753342686701955173333269113542706307364090068966
+-0.4020736584100906602569386402509209688812275532857400372714832
+1.0138847382659369940912832361086576802788152795123739534412821
+-3.0951395419514905821850614346271266798652697397362897270328635
+-1.05068631494957087781953571806144710997361816734294069792479422
+2.49892018495813212113781299700491953909269772547767146746812847
+0.0773194149733676326961775167666715155245777383683184691817043
+-2.0111048361894317927574219158922030030830624086098367246611406
+-0.4409353014418641023715575026447934283053000593296583060442785
+3.6025567887519325204966689017250708002046574367259586605169407
+
diff --git a/tests/data/nfst_2d_10_10_50.txt b/tests/data/nfst_2d_10_10_50.txt
new file mode 100644
index 0000000..af63948
--- /dev/null
+++ b/tests/data/nfst_2d_10_10_50.txt
@@ -0,0 +1,241 @@
+2
+
+10
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+
+0.5034490181155259998304190893860746130421891924743053647627572
+-0.1837038074432937752974005833801871498110595640728180811374131
+-2.7586674767237535660881560380944370223198089070661096076891988
+-1.0698745859574132489186319038916858764288095754991367331761092
+-2.2022335742043773668577981342745087346932618762866505747175315
+3.5916405728767396078564944630644365618963122453035152943432618
+-0.2041439134856516038046938964481894650158397304910797657667685
+2.6005898336829855878648009457257582326679791204293377783771823
+-0.4649376279713694132701728583570456780090776619861722995884391
+0.9443794068405515679557596384948386259956865314395904517042775
+-2.3377316268677663599594771641093411970055175474677480000340778
+-5.0491510498478515415615199753560966042942556542549293093591727
+-3.8961917443078471154273612151981548819607260072277732530957676
+-3.0258421411000699996384620102708236196552657449332215122602302
+-1.4842443205650237326997196839865073352040119900205209358761517
+-1.0102472583025497675613123220139808499389144462958759743737032
+0.2189374947742808462955594379688426596381383422210624833734148
+4.4428696343352145536910229481787771467421649124310317786386154
+-1.7394630839322217062408981023171889145399404422615191121600609
+-3.9124212695142849938130873447971450776975937659187675554080299
+2.521943131887091790542294259060291513465096073100570800595358
+2.9605919169042432816545937186638698599673020526542239222405805
+2.4709761935177962117804320752264258596877865065279251932873265
+3.5513262821988174052473694984382401381423728010978921871860313
+0.5365939602910166603425744475330371504545373357077237129519817
+0.6420472049432558979387406482653999648226938701167793536044699
+0.3432302897712736706128932394424636294554508589146615948492321
+-5.653275993123935297106292394465558561011349514744319291761268
+-0.8659765747882175270313688536290077985507913483277908825846468
+0.3757561662704633452905323536859826955792150361960099902441172
+-2.0130802136877893915638682644574696252757867177755561564329531
+0.7212488896003556440855724836328613555458344368613373096516674
+0.1883845020970296092758623788140232301214605508167081916546925
+5.0780119209700500299904652948052449444236527274203792357697569
+-2.7123766336156508588807523648489258880466169800428846465509695
+2.933042616440713461682180323407654038992583982927988388270616
+0.8706794863322250354871141790022312380889029865624975944746478
+-2.442250638892943539484799837823829858885024760360854711607954
+-2.4308538680408677015899452667199419149029024640922627829971461
+-3.2313002168445479535520035030259642651843763334213262054416447
+-6.0645760321163293987761694745589543573473383540101827409054197
+-0.561643537938173240818087279233250636034986756619469468266301
+-1.6484487941158232862765965228757560066057694609191113618143217
+-0.1356616148628849142266280610067409519606975093774262640252214
+4.2168280241185306044833972530968417092300973050240422957720494
+-4.524429321461115795927489986248174440288094979206810040815071
+-1.3060686251802380268480135543396918962936417051780806133986136
+2.7475071976598062126523872693631356522572464194012612351788981
+-6.6106789780051416244086515441116715397488481671801649539163086
+1.4699846987588142621918599151024093632652353875729871589478647
+
diff --git a/tests/data/nfst_2d_10_20_20.txt b/tests/data/nfst_2d_10_20_20.txt
new file mode 100644
index 0000000..8a122ef
--- /dev/null
+++ b/tests/data/nfst_2d_10_20_20.txt
@@ -0,0 +1,241 @@
+2
+
+10
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+
+-1.827699932700331903576533832904563022068307153712673996625189
+-3.4857406928723553815900316840617120264260940604628724929357633
+-3.7623934675107703965103623982400536671445253288666674181899224
+1.893929419849093827391908983984938407787485094851315982412305
+-4.953472209504560381885921565020877435984614309546665812672794
+-4.0741929018414392841975710426653607608241666170850749893851189
+-0.2020891848035152029494465100655550192352368491132450508997437
+5.856504912261655060820978277014449795645060970812777113100674
+-5.592192190592230950235389625611740790125040051673449946795252
+3.728888712971962357039588751703810248151635130609441225344212
+-3.6861669106939751503375583403194165589650477165053165895258756
+-0.366758533419100011800809455731429754229207840268581870340832
+-0.1163846260397541555825099434987285958370140779430497587445805
+-4.295414059860653285609154174838415358262558117144761942305938
+-0.7609547192675212919249544489720570966278896182448140831778526
+5.1755805891229143402826262650072419249512803111474313542471289
+1.424292220051267637265247366624069565657982629338365540181824
+-1.5477111235380169557067865917772850347666413856665834002386905
+-6.2519184483209047005613557138606661908538082343286082151784841
+3.945961938331657203804728061462665833372279288089701247363284
+
diff --git a/tests/data/nfst_2d_10_20_50.txt b/tests/data/nfst_2d_10_20_50.txt
new file mode 100644
index 0000000..144a5c4
--- /dev/null
+++ b/tests/data/nfst_2d_10_20_50.txt
@@ -0,0 +1,331 @@
+2
+
+10
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+0.377414941913701641980604281714521283600422741949240555908727434
+0.286257156034881826917947161474943151268083089341448769053424682
+0.9392006333865916821227548404291848184201007925131229813910957774
+0.5114205299580920868823613420213360686329180904621350249508347984
+-0.6408078680635244612899765081025913686282954450887306823350772997
+0.61034769186326371064247171222348075927083751612531179530760314
+-0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8353594742240205937097730115138661305557325449129426505768609534
+0.1821483418007667766250895141417107286953921543595289977783017637
+-0.4074526958925963909486488891837393063126910851657623153854908031
+0.519412312832116093970077697359996336676003120133546342882630559
+-0.1339026726689501933617889040862807661257038358606191032725698017
+0.1617840119849052908674425797539541379830915417411164257796009655
+-0.5833399591688895541493678958036554117556929951798174740043291689
+0.2558611196916433369649336532000849479904305619298222327625863899
+0.9637184128969163713272727389388526394331293708405231601274766637
+0.02398516466411951663039478357357263297576765858214578984119980389
+0.7220807768185265925885711430037484304092954076856054861183001563
+-0.8314034062393001851412680462190559603040746972786212429324375224
+-0.2313683087056718682580625867623460795004227069874977160354372877
+0.5241531162028989758906123049906275766571616823241720374203214447
+0.09003216360057281587724105549690566269005814841108581287665281058
+-0.1599268816032428776743959117270259866309677355351818460136443291
+0.7126643265921692501928118835762400720628273345745039396768073268
+0.1443381463559750344148688262608847179704805274810841956785523095
+-0.9541149480810226451568227541620900387924893378859274527595762471
+0.3516772517804962317135771244694045300550581304302552629989927399
+0.8312645047002901343481040986077492354211106507977246573848547872
+0.8922074343575836687927424867109565448477559678636672119414443701
+-0.03914580715076807517564668371313115131680481962361916796431130169
+0.9746573852711840936336177201962708050687509298510135226623575906
+
+1.0827136719688875880248610784496965144165598818431822075194501
+-3.816457633609848897863140057399536395524034718947076679735005
+-9.2109985234030282320684520354023316874886543924622682058294707
+3.3525009845089938070812582914190128092639714757993271935233377
+-3.5380954589840387970496022377847990816426622563133114724825852
+2.692095307254629823012329082696113576131866197634859452430649
+0.46439608731029712955088410435557176028248157319011244990454
+2.4241956711515694338625576885355474549421583909927694779862288
+1.658061920936497648136021550355681654053062328603371939854308
+5.737571519686070307961559530709484371929939187475057042468069
+-2.047123972954745403809020819071329133338947070725667155953834
+1.105645246969504316711264790287506946737037632237296189611229
+-1.9670904736782014315183340310778720226957196031287207517345798
+-4.852412807374071741794051976521805674885948360060140681981433
+-0.41353338589790106564659227400808950038236453609882015687896709
+3.3908346177324504865177135344659608096175943320674794989651652
+9.388094472699171769856582715904625861500277294549047358378131
+-3.9524157240608612953238601946756507671441602031281932837760773
+1.765200277635125811747918919048689891044621951139381337369919
+-1.900048287017742229416304339908952025267973736965433818759437
+-0.189912170543964076071304408730590747995525166581022789444999
+1.068289734566077205405131504921376892533412745013094936223522
+-0.7236542867752689267494073018703709625166491995258865516760354
+3.0709549470193688896081093874055527921204899031110185798111061
+6.823085488798788437032581047870352074338606579952006381018124
+-1.6556583085485630477947150372658007723494150796189118910239288
+1.107667891269167667784586141246110171922814029152826707318003
+-0.803580918147894618993077976465638524923318489200648345872768
+2.9788570299970502498465750594022317242784101524657521776492617
+5.720215909323626772134831314248949854969558748449395086915355
+1.2032614173699145121884219171419389593050890277110877759009799
+-2.9060180420823658785760897926687677112356277121697516175426879
+1.06658540399062587157621824170709905391532469095316423706039
+7.268420616649168784095980335773155924776901247903801530786837
+0.2530101232251225535170734758602709223033927099206409730021639
+-5.5783733290835710851932755934669642319621353027636958460117325
+3.412156087709038964640026141644616052218754840659443917963216
+0.63456117733615670696749385252602868564988629870500397900711
+-3.745768904635882903091844814558419413987425839709214900370024
+-1.2721537311533878023255321732260590671085147559486725255865968
+-1.204985283448206511465551546648210957112504940562052960252317
+-0.088581810407851095975735622209253733787240263931443815723179
+-3.1855705572146782602956284888152200456629953214086112395464796
+0.5284081848958513535271775436985976235924219652878172066921801
+0.060759452570522664728669394950462387444722930754968721961375
+0.2207304405762412342880333549796797838653169031660151420903842
+-0.612694517259591966125685742786251125270236248483944647054262
+1.7186910630220069995416422328498751681315394158464100195470685
+2.2167636949597799280870665469584629825075725368579832892637533
+0.846586297393449148043541613374732387624705842954109279484223
+
diff --git a/tests/data/nfst_2d_20_10_20.txt b/tests/data/nfst_2d_20_10_20.txt
new file mode 100644
index 0000000..b9c2fcf
--- /dev/null
+++ b/tests/data/nfst_2d_20_10_20.txt
@@ -0,0 +1,241 @@
+2
+
+20
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+
+-2.111809776803488988436948812054555272398350969894589942799704
+-3.7676932584563463640577500418008954627098675799292169678546489
+1.024446424689883205112422908127335572916079300246136233594938
+3.800331207796250030652646239229475358143749833034970227512194
+4.0321835742226885866418283850648760133173147556900180720782326
+-6.5413065727426371347587154570162204868725300048974434102091848
+-0.425206659622459808185038291430583808145193802681347133956086
+-3.012118217186074637782753084065541272231294135057619353646427
+1.048012899581255728220779690070293916220301505425692254683423
+3.924993672502923813968539289393800170313143548921138460698368
+0.656640935413920519409098245823415934988874205005689921468533
+0.974064133704454889745217285348995115279816510316061118374636
+2.9782950338683630233472652720607849535197830140454856460623732
+-0.644839370749254559988756769703931520709519025099781857626717
+-0.4085461128930485525221254416238821270278760726324431326400647
+2.1977706852661815497486062471335720611316014209182630324972508
+-1.809642424704533779659033549630359893022980358009594244727683
+0.0274256522310817694000469287253552189730549522184976253090582
+3.6062716329063201440827237471386778809979280129787903857344757
+1.257383892897807379716288129173053072271525735549588690560581
+
diff --git a/tests/data/nfst_2d_20_10_50.txt b/tests/data/nfst_2d_20_10_50.txt
new file mode 100644
index 0000000..44e84e6
--- /dev/null
+++ b/tests/data/nfst_2d_20_10_50.txt
@@ -0,0 +1,331 @@
+2
+
+20
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+0.377414941913701641980604281714521283600422741949240555908727434
+0.286257156034881826917947161474943151268083089341448769053424682
+0.9392006333865916821227548404291848184201007925131229813910957774
+0.5114205299580920868823613420213360686329180904621350249508347984
+-0.6408078680635244612899765081025913686282954450887306823350772997
+0.61034769186326371064247171222348075927083751612531179530760314
+-0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8353594742240205937097730115138661305557325449129426505768609534
+0.1821483418007667766250895141417107286953921543595289977783017637
+-0.4074526958925963909486488891837393063126910851657623153854908031
+0.519412312832116093970077697359996336676003120133546342882630559
+-0.1339026726689501933617889040862807661257038358606191032725698017
+0.1617840119849052908674425797539541379830915417411164257796009655
+-0.5833399591688895541493678958036554117556929951798174740043291689
+0.2558611196916433369649336532000849479904305619298222327625863899
+0.9637184128969163713272727389388526394331293708405231601274766637
+0.02398516466411951663039478357357263297576765858214578984119980389
+0.7220807768185265925885711430037484304092954076856054861183001563
+-0.8314034062393001851412680462190559603040746972786212429324375224
+-0.2313683087056718682580625867623460795004227069874977160354372877
+0.5241531162028989758906123049906275766571616823241720374203214447
+0.09003216360057281587724105549690566269005814841108581287665281058
+-0.1599268816032428776743959117270259866309677355351818460136443291
+0.7126643265921692501928118835762400720628273345745039396768073268
+0.1443381463559750344148688262608847179704805274810841956785523095
+-0.9541149480810226451568227541620900387924893378859274527595762471
+0.3516772517804962317135771244694045300550581304302552629989927399
+0.8312645047002901343481040986077492354211106507977246573848547872
+0.8922074343575836687927424867109565448477559678636672119414443701
+-0.03914580715076807517564668371313115131680481962361916796431130169
+0.9746573852711840936336177201962708050687509298510135226623575906
+
+4.6238451157900571934629922766236550084069009081771747898529725
+-5.9271945813563327385504097591787563332255642493703399238227883
+-2.9325665264379787047182987101512536229695161729900023642470657
+-0.4460008583260121631726268850657503310183030361704235632432696
+-4.0350157981755990269226896548311231060962779589010546731356407
+2.551212915675872454515270405936876757338743160537350324120236
+-0.078553630638134257219386073942660203769574142773842810270639
+-1.346339230178235193895857355702463250403908164397615133564673
+0.506322033834738671975541205890831859804726659368804148632046
+-5.294586280283685272957517103500309186466753370005466838762179
+1.989936810450106959474354065783921148053342071306861647358496
+-7.376596899651098968541850470468494778711197547548043661431171
+4.172154030231339805107128302699627584951829968546683785364141
+-4.297620541520366016227361784551528132333818015456479376818234
+5.5547780077074733943528737595972806876003509791770705607162086
+-1.0902415229660823384638809524047502531596091892243968202828291
+1.674121858418029937372232324299050486039616764585879984159687
+7.4821612236253036915910249508313110021872704600780737526976054
+-1.2969621680121037247098498592107575033742447231095784350030116
+-3.396086003600507884067370434367031505593590557090672677524932
+2.5587338206324229453056087313970508704313554466120674771897328
+1.4436946693842706804210498420994926589802002426625677301659497
+6.1127269882211552212805940610331966716695235051833179670241564
+1.3266127412465701192315324411663655133541657467942547553615931
+-0.774311107969271695310173227597334334816920283156442535550796
+4.8475476510127700161927991878692494431833211656693612415820003
+3.7533851392289638500006806468315376445461761653225924517255222
+-7.052905286402646775521642198669667179251741067715392927650703
+-3.9035763102221555564970887515486292322351658068654382300220212
+-0.760968969954238985431671508602130228320219804919638953925353
+-2.9296642113220226947764928622319785993392366934764298015885519
+-2.4553944687503674735945116455146949642691928489401082292017779
+0.919162229467909713031320359753707872726145187066216618323851
+6.410433756288620236226965980642800404127901432053922415735498
+-6.5121107488996594372124087452716698963285821830244013112210789
+-3.0075456040385664801572084919248952597801749739861757811373736
+2.820144524034353561866221938326884749628179117851744469694653
+-4.32357932944481532462976386781239683451308730650257048932702
+-0.442278750862643598459304112747383701722438814254654610825392
+-7.808200564623883711850218403646434187609100129787237362571033
+-4.825578813298361562061214435169524611290840486411994655384243
+0.7717356998744077254890280983722275455551018174000458020290668
+-3.338247850452932441911354203883481839220988281173900109116532
+-0.068987465190488871913036642336570567153930636795955303031118
+-0.07061293297486790059250641277590195092537445354262665847774
+-6.1225587041605879670041476865569996308597627929574912489507918
+0.317395339240975005027609235841305457850523944388783128409976
+5.7424618797919662996384272581675897597096934217011496412341319
+-6.2975649527941705191408488456450193743912837827966155567986295
+4.76760613156555321562603614820110230721221379460543815517624
+
diff --git a/tests/data/nfst_2d_20_20_20.txt b/tests/data/nfst_2d_20_20_20.txt
new file mode 100644
index 0000000..a4b5f33
--- /dev/null
+++ b/tests/data/nfst_2d_20_20_20.txt
@@ -0,0 +1,431 @@
+2
+
+20
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+0.377414941913701641980604281714521283600422741949240555908727434
+0.286257156034881826917947161474943151268083089341448769053424682
+0.9392006333865916821227548404291848184201007925131229813910957774
+0.5114205299580920868823613420213360686329180904621350249508347984
+-0.6408078680635244612899765081025913686282954450887306823350772997
+0.61034769186326371064247171222348075927083751612531179530760314
+-0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8353594742240205937097730115138661305557325449129426505768609534
+0.1821483418007667766250895141417107286953921543595289977783017637
+-0.4074526958925963909486488891837393063126910851657623153854908031
+0.519412312832116093970077697359996336676003120133546342882630559
+-0.1339026726689501933617889040862807661257038358606191032725698017
+0.1617840119849052908674425797539541379830915417411164257796009655
+-0.5833399591688895541493678958036554117556929951798174740043291689
+0.2558611196916433369649336532000849479904305619298222327625863899
+0.9637184128969163713272727389388526394331293708405231601274766637
+0.02398516466411951663039478357357263297576765858214578984119980389
+0.7220807768185265925885711430037484304092954076856054861183001563
+-0.8314034062393001851412680462190559603040746972786212429324375224
+-0.2313683087056718682580625867623460795004227069874977160354372877
+0.5241531162028989758906123049906275766571616823241720374203214447
+0.09003216360057281587724105549690566269005814841108581287665281058
+-0.1599268816032428776743959117270259866309677355351818460136443291
+0.7126643265921692501928118835762400720628273345745039396768073268
+0.1443381463559750344148688262608847179704805274810841956785523095
+-0.9541149480810226451568227541620900387924893378859274527595762471
+0.3516772517804962317135771244694045300550581304302552629989927399
+0.8312645047002901343481040986077492354211106507977246573848547872
+0.8922074343575836687927424867109565448477559678636672119414443701
+-0.03914580715076807517564668371313115131680481962361916796431130169
+0.9746573852711840936336177201962708050687509298510135226623575906
+-0.7287905575728605025843722055111257091486772902084438557782657679
+0.02849594996466824865218850207780069267985584074611847663329993142
+0.6459433245400880395491408374407025292588521318149535734854910274
+0.8136628661132407079541934173897141567434892632439804419184181281
+-0.567269077607843925028375791245291662428913186501477835474640964
+-0.9476387464140397458861421362921055215974651715794066883914951208
+-0.2605437240709855372272831411319884164143200014969561164796810212
+-0.3311597085631775241605389615954882776971235843100995205029515984
+-0.8695822150875121724691553338257829869250127182425918912387649806
+0.8891098289754707421060220890985710245132795198449297271458423909
+0.2895552325554255930167653346015931047558748269272406529926466973
+0.2650936900762128600362413578030729270793479332746334793752266553
+0.7046936151828971593710415948632896548808680079056988913118083777
+-0.2115570299364757676008017443811649086191736127455534555376144021
+0.1470216587412559156294994682432100810761459629584248289010138317
+-0.4329010361486256961244622956913108506550874170254014125575533479
+-0.1766818323431859044625743795499747752198631648846896440459670393
+0.3427075333057822059987675632859967887158938796610229803331114623
+-0.183376886573271100129574182681696169179735558213922855123562123
+0.5665067551831146950685364521560101025985707475803564862178192914
+0.5846720091653589171386464934439494744713232525388330403763032709
+0.3128821017947787434710701629862425068710081298914976621641025408
+0.1943703959062877206669871517590249058034169064564194870074554031
+0.8893705554674630659403991877841826994191514257022249874261157104
+-0.8883357910902242353575856676539666074648753053656660309143767467
+-0.460716573466163781751268186859141052046462069031383085126522242
+0.2571290378683215613044136510821588749887474163677002652639520119
+0.05683348973511969001808746192505133291481235528637618587938493271
+0.8458238445504835463314748515393830432307810942061667936052115581
+0.2568190130746644331048317748223591322462097932104379543095780599
+0.9282397683744983930469496205745698232573096227549226254155622007
+0.6733680895626635922558736333908780380926273791887898430485173634
+0.6834258455476852992466772196651133096274086383123765308288566681
+-0.3197260966794518948885909003357003020869183279810950125249989182
+-0.3602154836971247653552601690662060499632143516459194629015046587
+0.5644944652643029946030943876077187355907298250270171876933333996
+0.300245006064926546622443908848084786661329770571675039165636725
+0.9109171936013987677935840681404253773950900911474823029568083952
+0.9809865904559495207084689029816148884009367903151903920423149056
+0.6673430101175698152854688993768041548769019864465421762641808302
+0.1912403836532585581545915780169638266665110774534903895312903483
+-0.8390872225468263142545242699093560592768485203012323759548269441
+-0.1694425027392812196149909158729299355102867577367629176586906841
+-0.1109481979293641305323565532634133494943626968908239858539934786
+-0.7576390226829376962602306885924643215709630457357178698800775945
+-0.2384036559822549222513803512289385096334288445624862912807231185
+0.3322077770142086566449475410492734728431728270878221527000512398
+0.3008294101164568639831269327829387098511379992571638835271467486
+-0.8500127542413940364553721045188171752513697377512921485742321549
+0.8368368938909749223146178710811008588487209933709262501849117012
+-0.6301301812957352916599361333234055414853612961930455283065817178
+0.92912991593823651905014229592884312166630951576917436549436522
+-0.2057454411726747632614076986736370443370299660132771686206360685
+-0.1506655683923674574544013920490541109453108644791859114657837843
+0.8300887071220306139363536768734752416692057466278345728554448043
+0.8244806963149490337769127166910316223379101498545059699144474846
+-0.3267801787861358921558326193709571898654303757814961069177939802
+0.3173522145518535642355402682590855477810669842087119833799882044
+-0.9157683658115979207506514703487531113998263500938211160185082296
+-0.5134442544464950511308392504791416236936576938651094919168340614
+-0.7129018571172519683293420596961998697718416105831222546361506794
+0.9065123083843027156086152486704570882336886865580199421650643667
+-0.2793634385919329761753480106077153213406385720130702294691355484
+0.9164978685669781253679917402797926874507921723240255331025472326
+-0.7596059702886165943031875281927001506068162489624554198112485991
+0.7396561092486294627586234874177829200642603190414086001487983221
+0.2718148178589837914007749073085756104697032416499157400657364344
+0.4662517483044007390427270839972516857434523020114609710559500148
+0.08808257115588047484358934167308625153926780195956135649522315482
+0.07657390220669434590596313316601208477726655511807687988961336808
+0.4588569896068761120165974962862286433176923282523892852244105839
+-0.6615298742890711325192770516946564063654133133292967525875541474
+0.07011733953074958640104399325017215014827304325156759173135366906
+-0.9612259440538002535765483137294916063381851202661518339189071839
+0.9171138429339400553744807769217606095680344268845843714152250596
+-0.918764366993980620946375697358810909530550693434750302372938919
+-0.4415653525364425875595561926619571676937519758818885848285036367
+-0.2086520325624420487101916822135314045088175303036646863500495381
+-0.1511824375843169824185114172319147719223588913836399964007230083
+-0.7035924603583511535986984592864385797537640709172487432674768657
+-0.6564151567101526404248033266354854181628562195765596859557723591
+0.6965977875831549207460696210505433710177694513815592587963931164
+0.5816085290684877844083071838790011353935994102902484256340030157
+-0.527253715551282406607425535965902718962742079261395869051002919
+-0.8587217878456442924783287669774302171560923546889427532593498197
+0.802615497785384047600984758361791353972886095624237938117483346
+0.8316489546057848621322523310402149298559936201982941913906852864
+-0.6097628083165813974260954335449904988521230536577883358240508937
+-0.7453827739395389922953742392780783948094849228955462762695809318
+-0.1809554132180854707773280908184743372302489521523696413745651906
+-0.8150644675782343977339925655387466104832252738719676821788883516
+0.8917866574285656025686075793775106139378346795002297501283298878
+0.1101358891689796743272094664641471479081663952426245980291616029
+-0.0541967333689012077592263814659907729121237619035205051756287072
+0.8788147199714254107037333013127960617440138295766969973173354907
+-0.927037926394366126809727405514811573238161533791917190660326036
+0.4642977843367946473083173399076729199459994296180290689057358231
+0.1101424766711395834493541735390025259293259452693930682212953338
+0.9804018990020609521055380413227891839510323211141337706692935583
+0.8144388485796060257725468016904833551056739055694392606072812336
+-0.8395517493960846429066650820934625099120153763823264316622178314
+-0.535636302410552606673000089274072814148368252053769909998058602
+0.3785984554723058056848684987205281373405286509670642510688353225
+0.8125408356507693035783621684477489598336579370455636449932920399
+-0.730498839098918994556008955395986000999974868552030434899102998
+0.7456261383135196385610840292806346156606897621955571769519287646
+0.7757376987729343002700728678244609761294630501410110238207420656
+0.4078040359990933213948732923927214812372340416337539086249054226
+0.1767712938446947695198229699328249449877999447752262239584762909
+0.07365715096199305303280147905505827004287730234420360693427261478
+-0.3108355387530528344022186566449990520542204513871372429842394977
+-0.9157841385420411790181903606309676436954041107787988394005532203
+0.5517970855559362574840981197851271127548171428450299159534222246
+0.8076059738124808816284579607205742577625775175934575040140126923
+-0.3623547609761457713662054674281991237079618589827581000231798627
+0.8183208109839758987990961359356649031888827382055407382873878803
+-0.8535325136050236145755622731382685357658674118927526952194103789
+0.7385965807078199198295561757281636178085738161163241745076529168
+0.4178732695594172450325633659542989992529347731253116371174433175
+-0.5340515573220288676539037563933896861133701709641430080525373334
+-0.4642629009871243127720569534731497065151730863379424324926815934
+-0.8697898736666791719966463521302103516597198677810465705462889386
+0.9260211067928626234987335196506123804866588031248091568668186807
+-0.008817333363577657304077859427800946074653041725554105998740790418
+0.5582339538069273279851977709472563742471538090477435724053193958
+-0.7255700875545188795082017268145707633365451965771130961377344798
+-0.9882699898882978270887601698779901692432742326870804476209571454
+-0.9276804865150421462892365252888320798428705497677187785005965023
+-0.7832811923001301276864916736742146403933964466320677660322633051
+0.9875308623632782097656312821453924896496525870736205800843638587
+
+0.889747600415460960400093602673697900288387980460494050373405
+-3.276133079152709335576745751625576831853258863011688127893312
+1.313784221378299076664396291698238368905393361481757503043322
+0.749480842901926770463096143671480474054791842684961895512389
+-2.990132793768236450981959335520811064045003562696618079485886
+5.892165367534542807122492495357682780023780432188218658154696
+0.21919892927260861764798488092668331738294275601342932419637
+0.904977771762815886519273752148791886260973914908079663991583
+-9.945409709107107417806212251980761475793462650159730177234519
+5.842563775103953154872734794868192603365499646526004783152198
+-1.749042892949373927002188771004818845622535270194727558531556
+-2.967352791815836524712681211897115952780615861248032689472127
+1.203271465554987025663545757701647151331661542255400593860289
+-4.640442060679902646734275229332487156816296836221070776426701
+-4.599408640205628302758592302561590919776932315718157949337473
+2.704621296951925655042146309716538157806424261391869157151865
+4.413286891811600059489763805825839053879944254001353989255292
+-1.645828989219013492294617797268436855679970260486233854188235
+-2.625970845452660156468635456994286004246535484191429052823552
+4.306980953241285913212709234456989004154028765520159685627932
+
diff --git a/tests/data/nfst_2d_20_20_50.txt b/tests/data/nfst_2d_20_20_50.txt
new file mode 100644
index 0000000..651c12e
--- /dev/null
+++ b/tests/data/nfst_2d_20_20_50.txt
@@ -0,0 +1,521 @@
+2
+
+20
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+0.377414941913701641980604281714521283600422741949240555908727434
+0.286257156034881826917947161474943151268083089341448769053424682
+0.9392006333865916821227548404291848184201007925131229813910957774
+0.5114205299580920868823613420213360686329180904621350249508347984
+-0.6408078680635244612899765081025913686282954450887306823350772997
+0.61034769186326371064247171222348075927083751612531179530760314
+-0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8353594742240205937097730115138661305557325449129426505768609534
+0.1821483418007667766250895141417107286953921543595289977783017637
+-0.4074526958925963909486488891837393063126910851657623153854908031
+0.519412312832116093970077697359996336676003120133546342882630559
+-0.1339026726689501933617889040862807661257038358606191032725698017
+0.1617840119849052908674425797539541379830915417411164257796009655
+-0.5833399591688895541493678958036554117556929951798174740043291689
+0.2558611196916433369649336532000849479904305619298222327625863899
+0.9637184128969163713272727389388526394331293708405231601274766637
+0.02398516466411951663039478357357263297576765858214578984119980389
+0.7220807768185265925885711430037484304092954076856054861183001563
+-0.8314034062393001851412680462190559603040746972786212429324375224
+-0.2313683087056718682580625867623460795004227069874977160354372877
+0.5241531162028989758906123049906275766571616823241720374203214447
+0.09003216360057281587724105549690566269005814841108581287665281058
+-0.1599268816032428776743959117270259866309677355351818460136443291
+0.7126643265921692501928118835762400720628273345745039396768073268
+0.1443381463559750344148688262608847179704805274810841956785523095
+-0.9541149480810226451568227541620900387924893378859274527595762471
+0.3516772517804962317135771244694045300550581304302552629989927399
+0.8312645047002901343481040986077492354211106507977246573848547872
+0.8922074343575836687927424867109565448477559678636672119414443701
+-0.03914580715076807517564668371313115131680481962361916796431130169
+0.9746573852711840936336177201962708050687509298510135226623575906
+-0.7287905575728605025843722055111257091486772902084438557782657679
+0.02849594996466824865218850207780069267985584074611847663329993142
+0.6459433245400880395491408374407025292588521318149535734854910274
+0.8136628661132407079541934173897141567434892632439804419184181281
+-0.567269077607843925028375791245291662428913186501477835474640964
+-0.9476387464140397458861421362921055215974651715794066883914951208
+-0.2605437240709855372272831411319884164143200014969561164796810212
+-0.3311597085631775241605389615954882776971235843100995205029515984
+-0.8695822150875121724691553338257829869250127182425918912387649806
+0.8891098289754707421060220890985710245132795198449297271458423909
+0.2895552325554255930167653346015931047558748269272406529926466973
+0.2650936900762128600362413578030729270793479332746334793752266553
+0.7046936151828971593710415948632896548808680079056988913118083777
+-0.2115570299364757676008017443811649086191736127455534555376144021
+0.1470216587412559156294994682432100810761459629584248289010138317
+-0.4329010361486256961244622956913108506550874170254014125575533479
+-0.1766818323431859044625743795499747752198631648846896440459670393
+0.3427075333057822059987675632859967887158938796610229803331114623
+-0.183376886573271100129574182681696169179735558213922855123562123
+0.5665067551831146950685364521560101025985707475803564862178192914
+0.5846720091653589171386464934439494744713232525388330403763032709
+0.3128821017947787434710701629862425068710081298914976621641025408
+0.1943703959062877206669871517590249058034169064564194870074554031
+0.8893705554674630659403991877841826994191514257022249874261157104
+-0.8883357910902242353575856676539666074648753053656660309143767467
+-0.460716573466163781751268186859141052046462069031383085126522242
+0.2571290378683215613044136510821588749887474163677002652639520119
+0.05683348973511969001808746192505133291481235528637618587938493271
+0.8458238445504835463314748515393830432307810942061667936052115581
+0.2568190130746644331048317748223591322462097932104379543095780599
+0.9282397683744983930469496205745698232573096227549226254155622007
+0.6733680895626635922558736333908780380926273791887898430485173634
+0.6834258455476852992466772196651133096274086383123765308288566681
+-0.3197260966794518948885909003357003020869183279810950125249989182
+-0.3602154836971247653552601690662060499632143516459194629015046587
+0.5644944652643029946030943876077187355907298250270171876933333996
+0.300245006064926546622443908848084786661329770571675039165636725
+0.9109171936013987677935840681404253773950900911474823029568083952
+0.9809865904559495207084689029816148884009367903151903920423149056
+0.6673430101175698152854688993768041548769019864465421762641808302
+0.1912403836532585581545915780169638266665110774534903895312903483
+-0.8390872225468263142545242699093560592768485203012323759548269441
+-0.1694425027392812196149909158729299355102867577367629176586906841
+-0.1109481979293641305323565532634133494943626968908239858539934786
+-0.7576390226829376962602306885924643215709630457357178698800775945
+-0.2384036559822549222513803512289385096334288445624862912807231185
+0.3322077770142086566449475410492734728431728270878221527000512398
+0.3008294101164568639831269327829387098511379992571638835271467486
+-0.8500127542413940364553721045188171752513697377512921485742321549
+0.8368368938909749223146178710811008588487209933709262501849117012
+-0.6301301812957352916599361333234055414853612961930455283065817178
+0.92912991593823651905014229592884312166630951576917436549436522
+-0.2057454411726747632614076986736370443370299660132771686206360685
+-0.1506655683923674574544013920490541109453108644791859114657837843
+0.8300887071220306139363536768734752416692057466278345728554448043
+0.8244806963149490337769127166910316223379101498545059699144474846
+-0.3267801787861358921558326193709571898654303757814961069177939802
+0.3173522145518535642355402682590855477810669842087119833799882044
+-0.9157683658115979207506514703487531113998263500938211160185082296
+-0.5134442544464950511308392504791416236936576938651094919168340614
+-0.7129018571172519683293420596961998697718416105831222546361506794
+0.9065123083843027156086152486704570882336886865580199421650643667
+-0.2793634385919329761753480106077153213406385720130702294691355484
+0.9164978685669781253679917402797926874507921723240255331025472326
+-0.7596059702886165943031875281927001506068162489624554198112485991
+0.7396561092486294627586234874177829200642603190414086001487983221
+0.2718148178589837914007749073085756104697032416499157400657364344
+0.4662517483044007390427270839972516857434523020114609710559500148
+0.08808257115588047484358934167308625153926780195956135649522315482
+0.07657390220669434590596313316601208477726655511807687988961336808
+0.4588569896068761120165974962862286433176923282523892852244105839
+-0.6615298742890711325192770516946564063654133133292967525875541474
+0.07011733953074958640104399325017215014827304325156759173135366906
+-0.9612259440538002535765483137294916063381851202661518339189071839
+0.9171138429339400553744807769217606095680344268845843714152250596
+-0.918764366993980620946375697358810909530550693434750302372938919
+-0.4415653525364425875595561926619571676937519758818885848285036367
+-0.2086520325624420487101916822135314045088175303036646863500495381
+-0.1511824375843169824185114172319147719223588913836399964007230083
+-0.7035924603583511535986984592864385797537640709172487432674768657
+-0.6564151567101526404248033266354854181628562195765596859557723591
+0.6965977875831549207460696210505433710177694513815592587963931164
+0.5816085290684877844083071838790011353935994102902484256340030157
+-0.527253715551282406607425535965902718962742079261395869051002919
+-0.8587217878456442924783287669774302171560923546889427532593498197
+0.802615497785384047600984758361791353972886095624237938117483346
+0.8316489546057848621322523310402149298559936201982941913906852864
+-0.6097628083165813974260954335449904988521230536577883358240508937
+-0.7453827739395389922953742392780783948094849228955462762695809318
+-0.1809554132180854707773280908184743372302489521523696413745651906
+-0.8150644675782343977339925655387466104832252738719676821788883516
+0.8917866574285656025686075793775106139378346795002297501283298878
+0.1101358891689796743272094664641471479081663952426245980291616029
+-0.0541967333689012077592263814659907729121237619035205051756287072
+0.8788147199714254107037333013127960617440138295766969973173354907
+-0.927037926394366126809727405514811573238161533791917190660326036
+0.4642977843367946473083173399076729199459994296180290689057358231
+0.1101424766711395834493541735390025259293259452693930682212953338
+0.9804018990020609521055380413227891839510323211141337706692935583
+0.8144388485796060257725468016904833551056739055694392606072812336
+-0.8395517493960846429066650820934625099120153763823264316622178314
+-0.535636302410552606673000089274072814148368252053769909998058602
+0.3785984554723058056848684987205281373405286509670642510688353225
+0.8125408356507693035783621684477489598336579370455636449932920399
+-0.730498839098918994556008955395986000999974868552030434899102998
+0.7456261383135196385610840292806346156606897621955571769519287646
+0.7757376987729343002700728678244609761294630501410110238207420656
+0.4078040359990933213948732923927214812372340416337539086249054226
+0.1767712938446947695198229699328249449877999447752262239584762909
+0.07365715096199305303280147905505827004287730234420360693427261478
+-0.3108355387530528344022186566449990520542204513871372429842394977
+-0.9157841385420411790181903606309676436954041107787988394005532203
+0.5517970855559362574840981197851271127548171428450299159534222246
+0.8076059738124808816284579607205742577625775175934575040140126923
+-0.3623547609761457713662054674281991237079618589827581000231798627
+0.8183208109839758987990961359356649031888827382055407382873878803
+-0.8535325136050236145755622731382685357658674118927526952194103789
+0.7385965807078199198295561757281636178085738161163241745076529168
+0.4178732695594172450325633659542989992529347731253116371174433175
+-0.5340515573220288676539037563933896861133701709641430080525373334
+-0.4642629009871243127720569534731497065151730863379424324926815934
+-0.8697898736666791719966463521302103516597198677810465705462889386
+0.9260211067928626234987335196506123804866588031248091568668186807
+-0.008817333363577657304077859427800946074653041725554105998740790418
+0.5582339538069273279851977709472563742471538090477435724053193958
+-0.7255700875545188795082017268145707633365451965771130961377344798
+-0.9882699898882978270887601698779901692432742326870804476209571454
+-0.9276804865150421462892365252888320798428705497677187785005965023
+-0.7832811923001301276864916736742146403933964466320677660322633051
+0.9875308623632782097656312821453924896496525870736205800843638587
+0.1783373466436970660022454632463179035762888722766888416391448363
+0.7336545898457146349237975784794059749253087905334857489144998895
+0.9127856868366581467510500732005220443872380003084957447131950721
+-0.3632881183963366167884860409201422151102177606787650299072097307
+-0.3268576018334922472384377473775779415605488146060240031080037115
+0.9427149588672463047630742061537997891278684495348468159028173334
+0.7916571579983658653317798731563225080239623370784297265192438825
+-0.6817701452011630996907953818868671270735516339211681814255907609
+-0.5168940707242169951406978648595076294647040487113324969763690473
+0.4155311954965517114024103086773167213755429855677272377839721067
+0.6506707691016388017357516362760131941221566979795718699904936102
+-0.7043718208306549962960929614939365734224121070283816720729220425
+-0.9030673117697692613858834879354138789682350761417043644810908266
+0.5465706740090774853953336301894435415008351646460109707839721596
+-0.6814239608934778019209189605706175697331566277120687413401512713
+0.9205925082347564380336697132499017123825554431098646503055203834
+-0.5020782788038677346392099888475830183897864323626792080264544951
+0.1045062318771655437961420896781653537832869869453123103733053855
+-0.1600201060994392446745228713066083331646179396065484107159119337
+-0.1176882561544923620215084381200312622694313533614808151971725197
+-0.189825171609586721044013508138189985950604720902663500662099781
+0.7858779951083861580332996484728804881745801231417586365625881696
+-0.2279832493810412940114966076664112325854082672090777285019621618
+0.07761160430503009576118799101543653660926181662195182427626478291
+-0.2055488181060608320954691371766551168555828485198254292077222517
+-0.8570653123756356936765798157651852007633450856266713907351356642
+0.8510470630599207981929699284163199387691742475697788917650312737
+-0.16560123613326167092245232006380763867174148167607503754889637
+0.4313169396402067420747675191335695107540210953445957632944683466
+-0.6136943581151102724274558633917286896829715873222934810854627144
+0.6107089044121956416324813364187592386184059323011742030772237424
+0.4569955077979069087363694857841772836360708458051620753700613184
+-0.205631651713017368814492512843157697507919536778183448181516378
+-0.3127653344142269367017311068934194736573539345353684494263561034
+0.5675769204970204695935245199626881958749158960158155816882247751
+-0.7973797882525385651192136516616674358654229933256541899442767797
+0.5012904467166158311205187729565579292182659743325041112386977484
+-0.2570017860782360774767408845442523659054818260225494146244853645
+0.815285634526596302121470271218431186471214471233707249972351082
+0.3474550590975565404544821867969338696280672245517491821876495039
+0.7718119181978566336150728291679018907122826327418198982205731192
+0.04535880498283686865208322483522967139304884767842664817216330064
+-0.7174845876743344015633175484139120449777707133419695966520824564
+-0.853296184466734367261440721862287405945662264918150798455455718
+-0.3551691762386405619967249318449133353395153150287271325435124081
+-0.3797572987358468877601704908647997438784227376119508300980299747
+0.376493226974464138185316874204450738186203149130236541221263506
+0.2816632617692655097062060192076384166912647824219953750826131631
+0.6936970465516315197236088803729008972356138275937389314888615401
+-0.8093948466492362612217398058810377625062288216775489656468562411
+0.7179094192553983421088688870290454722724258927762520549683983736
+-0.8752125899339353908597128121427435294227530087554395150859455125
+0.04176278772058224232241432506737925045260833246510034386845030186
+0.9269329565460541008731323076781001715661419867914361439680533663
+0.7868192948478988386779315105006009612933033201432314519183555363
+-0.006266353716036539320572064746082526752743361256443337864258505608
+0.2266154233841305998807280483192876569901369827513556377738818721
+0.2746350702494963366663352365693945459844370045750631885709403566
+-0.5247772986387898164750425486144677116796659442569793354035835811
+-0.4928925951310793013273500011155592100819574396889780507999573189
+
+-0.751892802703204519143242195800854464517538017971097814182778
+-4.558171987906096659610774011631922886788614992712584168960532
+-6.936634489315386485765077083415283806733057188461598636234293
+3.802396944008746149893178048464912095063427000070596810845807
+-3.806751251424963004540134859008343142874449390103437251643474
+5.80002212575569547805462200965596957980343189137378092254308
+-0.081982374603306259337528928160941516541224137246381119328349
+6.346360281296698054175793171368664421328375510204646055684879
+10.649605474699812331724047566949297517154893028212789972161209
+16.681212079225712913188712478800010306322326799014285553683522
+3.352459814937428774486856146226501491153733249923901878726007
+5.677054268143667177673255919396221904574605138434687926036772
+4.833727116855517298952119029492710128061031995173975221090412
+-9.275029183608587399302886661477963009124479129118386241519115
+-4.1651897674958356857157549905366338080757845315818824332230235
+3.638867885187435431905602221385014783463936684500734045903838
+9.951891168155819954009101817827895035594619032687324689581409
+-2.545137825254336856302609210390849478150405315372357101100162
+0.036936044898179759171368266030141505331003786838199558911845
+-7.905569388432877304445728501398065154824934764848641874035891
+-8.243816171575485121325942157979714723572089850361160773208218
+2.508695531705234104718897840538879461003594204962499195415659
+5.335607378906451827817099183920490422428355970899310662881552
+5.100029152652859560974744905886288874457951245334125899515263
+10.670406519558908133413584011354251252756073760859895104314491
+-6.010029087737852386316704452974988269668688416436470624969773
+3.062154220851480973761632057622179522160169220043798502262968
+-2.389430534316428968889138961053998467718686007424147175943126
+6.857325427064348162010017349438194326526838019657548546289309
+2.706033944108598739259960904676281564833591589590965743124989
+0.2973007141548542925096611190716964342624021377901839188483896
+-4.855211069517163362142970321357520953095947021551237387083261
+0.759039932711324947730727626279236854395658821445381748956535
+8.649911975140560145156338553479851832453142755622842460058308
+-0.943382355907944026622404460143412513851817910939499273682776
+-2.5076966006936131616132367483132300129285658453263725152526
+-0.025028947103962401452190389302938212256068346009981402729429
+-2.703741084043025347050985786126639209872879247834719638104103
+-6.364681026586976955783771799336394188354209640322346888942717
+-1.123341485257654829670102514639525180551149861960397279628157
+-6.148837977929676864384456585370783908439271325716639731439263
+-3.834286216058472916912571765195176830029209136562766408658279
+5.390458030858245871935557405677329754839205308368997160939405
+-0.425101127965556194225426961797031974310696579623479689037145
+-1.000005215448341496857235415697461402184996902050770510766434
+-0.445300789747384356639561423624540004398266823558455502889591
+-1.635763641955152542398893431656578781061120878289145366872525
+5.508678507362783617709582903880609047787141303807935699190614
+1.725578184541035681535649748989819999199538981450877053268381
+2.892250554995143053575799918549666083430389894078071535958012
+
diff --git a/tests/data/nfst_3d_10_10_10_10.txt b/tests/data/nfst_3d_10_10_10_10.txt
new file mode 100644
index 0000000..1ce0e12
--- /dev/null
+++ b/tests/data/nfst_3d_10_10_10_10.txt
@@ -0,0 +1,780 @@
+3
+
+10
+10
+10
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3156638964725781243541272856934334091751310165287943458804827568
+
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+-0.7605582778547942408060351317015194879473019118917060721292547632
+0.9359455243018989598720894094889086512450300947660621306436953491
+0.64033297030031448665328828110131678884788143990971470968562862
+-0.7566145378422368715122716757726615136162685098609876740055635889
+0.498393464867089132881118789295770940752838691384942740522239679
+-0.4971948424110283155918942363898656650230845195141350175248779212
+-0.3682837387895926737476498418989480477365801929350913148252356807
+0.6148970507477253459184467315745337121338375212139515007860628315
+-0.9083524682273578446532722997799475788834527253595073048265657245
+-0.3916716877161613504785809028033398517645549846406356231576213868
+-0.5193518691808852117378350732261309854332184624171433727414006814
+-0.9750431258817692289559363598684739941265076062018304867776204819
+0.05005097085661604605086728229374112382053058454731767435671635371
+0.4399150750505159978489133507713340072340352057744402647976718275
+0.1872909367861505164718492831692222169018789408412172493435499423
+0.9419321039051109549245680082622391092246632631231828777233002149
+-0.4287041936652777153072881590344721321081952456510997660597381855
+-0.2333391111205556198207256592076331117879880842914267473885863455
+0.7889477067277564731712862630611699647549102063099584994888747696
+-0.2563747285446000361218237435955077669028092056157149416120292486
+0.8211574497098423675796354902233745259806437217163965161734702361
+-0.2430326281692574737943057410600918611450147916626606070615468027
+-0.5566744269539672218404388199827460990960984415899809143036909069
+0.4524110448637644360868388875231267640338311624103409145041788539
+-0.4077100331640054846709900852315956380002910175183742932154068317
+0.9925432694290908433525570320250227385826836114793383624485189244
+-0.6845441772530325736299180977635806745002567201737916085152286412
+-0.5689275448635581694575383584343021970227104177442089801706330228
+0.3985567814775143901221253743791327148945266133080683203695999962
+0.06961382826101090949578301124383292455559947536661707583968975184
+0.04307050119059237005387541827491059927895209375649378090223139587
+0.5849881776459916509815348468661649535409940486756497653761724118
+0.02943622593745917222898833754618856585348471594569686881397428726
+0.3572417013316431962026919347150511042636763596269956578845059238
+0.8246603472400295391578505724317567517180656867730457579866275623
+0.08267470722577286001217633724236129336011575576077446531397711074
+0.5296493544860877224747590127030477951987987258874100707895850711
+0.178161671839420517570934964597356447578898824155879129858818805
+-0.8633908949968827943561744577901901026376268752722144571223670853
+-0.3459820993240706010475901311688197838023719669999227712290509004
+-0.8814262497135981437569523940906532685397798861799997656375266034
+-0.9722552720272006984678084914751283988556792015475269427349942943
+0.6486167889394565452584685154506739738504706411589692034776454683
+0.7237216114456588829885327945423834052953613010855527824331391861
+0.9153832161606877637775414865990581395464326012246760580785761313
+-0.5010512652356920074204032205934276172215285762480987760943959851
+-0.003517119711452846559277971844364606295296520854275366315952866112
+-0.7432644962454565902867854377146609433353697756825593784757725371
+-0.6678889143320625765336213759043802181180754155696893060399849702
+-0.6231432486376980435414857670687342821530306865222818413703487444
+-0.761265558015959776038963903242211813247582799987701574301727408
+0.1046561870893663260798556882535941223232955552582338303672866205
+-0.4422178249719287625023613714462236578393297082084105686699745527
+-0.3006761386836519584160039426021947715604263308295216335254395417
+-0.3931472033430920383369653755030364057981520323323553764459192375
+0.800956473746882928456987043862133272850468280050235725390942984
+-0.117336384734927911842612913616027626554640600021179492329548556
+0.4299591565232924801870368761556079288133632606094048768501521181
+0.351950842714972405603834006572622410785881893665581295538500859
+0.4719165407085054156880418423268675488422117760448059022673468457
+-0.1600709565700552484491336034747507816107856100797576115468140784
+-0.7196566232553047172113131790990428945643928116318893875786802199
+0.9506852903491360468879758484099667312771993016096956267658366287
+-0.3776736725704435658453332291251578463493585478972191163904289213
+0.6001953620324393368833490197603304801854572549372059847172328017
+0.6978878736648347125949172253483236996713754832649550025174381314
+0.8508443401291057488517795791511283359984797073308503806275388226
+-0.4669474695063991815703085816201270850746349019459750890255838246
+-0.4916857659539131984511014678316277462480514807356006060275370059
+0.6805454442564243054841615570704809357725921633306984108877804159
+-0.7429928693445994197394008924008488085983664860223161935727994358
+-0.6969676211949719236627008807329635886036631346596064918901094455
+0.7197019444966162425693701580554867509036572823057158142921206547
+0.7821091276993633157184444189269089852199610591029476119050859896
+0.853322612153932922155019514171215033718470215426888526974581991
+-0.527123190429983130601023007335782170127141621028130059541603522
+-0.04518836599707041257371263007133991513702551585551047967233360089
+-0.399491020501502399597869265119952339350000411493961463635298064
+0.1151112248581587985459044273509734339372139569519498681662926204
+0.4120054991803597141675815179438163442823969621208991056428168406
+0.4343579826046095597725968699957767082823418268721181549420071456
+0.2535126428268633086086116718856542176680789611156801564801311848
+0.0757591082002124635881632323270228980382304124620507025889787107
+-0.009921455995466628736212379839332998874975285848956671613709936322
+-0.5891566693005274615768435832037723406013603962165946345013825592
+0.4725424296459514103640632185799575468737722475096114637473172301
+-0.3642689669126664223527375212471788979005234643229363317834063467
+0.9106160875739411428476569185959640646231793213239998804082355729
+-0.1554296096295892351142787706783742826880784898341993011418432069
+-0.8069065915498787556695276318086362565827819941733622970182376756
+0.377414941913701641980604281714521283600422741949240555908727434
+0.286257156034881826917947161474943151268083089341448769053424682
+0.9392006333865916821227548404291848184201007925131229813910957774
+0.5114205299580920868823613420213360686329180904621350249508347984
+-0.6408078680635244612899765081025913686282954450887306823350772997
+0.61034769186326371064247171222348075927083751612531179530760314
+-0.1695324055840820458497589349479760035964663521113253737383164439
+-0.8353594742240205937097730115138661305557325449129426505768609534
+0.1821483418007667766250895141417107286953921543595289977783017637
+-0.4074526958925963909486488891837393063126910851657623153854908031
+0.519412312832116093970077697359996336676003120133546342882630559
+-0.1339026726689501933617889040862807661257038358606191032725698017
+0.1617840119849052908674425797539541379830915417411164257796009655
+-0.5833399591688895541493678958036554117556929951798174740043291689
+0.2558611196916433369649336532000849479904305619298222327625863899
+0.9637184128969163713272727389388526394331293708405231601274766637
+0.02398516466411951663039478357357263297576765858214578984119980389
+0.7220807768185265925885711430037484304092954076856054861183001563
+-0.8314034062393001851412680462190559603040746972786212429324375224
+-0.2313683087056718682580625867623460795004227069874977160354372877
+0.5241531162028989758906123049906275766571616823241720374203214447
+0.09003216360057281587724105549690566269005814841108581287665281058
+-0.1599268816032428776743959117270259866309677355351818460136443291
+0.7126643265921692501928118835762400720628273345745039396768073268
+0.1443381463559750344148688262608847179704805274810841956785523095
+-0.9541149480810226451568227541620900387924893378859274527595762471
+0.3516772517804962317135771244694045300550581304302552629989927399
+0.8312645047002901343481040986077492354211106507977246573848547872
+0.8922074343575836687927424867109565448477559678636672119414443701
+-0.03914580715076807517564668371313115131680481962361916796431130169
+0.9746573852711840936336177201962708050687509298510135226623575906
+-0.7287905575728605025843722055111257091486772902084438557782657679
+0.02849594996466824865218850207780069267985584074611847663329993142
+0.6459433245400880395491408374407025292588521318149535734854910274
+0.8136628661132407079541934173897141567434892632439804419184181281
+-0.567269077607843925028375791245291662428913186501477835474640964
+-0.9476387464140397458861421362921055215974651715794066883914951208
+-0.2605437240709855372272831411319884164143200014969561164796810212
+-0.3311597085631775241605389615954882776971235843100995205029515984
+-0.8695822150875121724691553338257829869250127182425918912387649806
+0.8891098289754707421060220890985710245132795198449297271458423909
+0.2895552325554255930167653346015931047558748269272406529926466973
+0.2650936900762128600362413578030729270793479332746334793752266553
+0.7046936151828971593710415948632896548808680079056988913118083777
+-0.2115570299364757676008017443811649086191736127455534555376144021
+0.1470216587412559156294994682432100810761459629584248289010138317
+-0.4329010361486256961244622956913108506550874170254014125575533479
+-0.1766818323431859044625743795499747752198631648846896440459670393
+0.3427075333057822059987675632859967887158938796610229803331114623
+-0.183376886573271100129574182681696169179735558213922855123562123
+0.5665067551831146950685364521560101025985707475803564862178192914
+0.5846720091653589171386464934439494744713232525388330403763032709
+0.3128821017947787434710701629862425068710081298914976621641025408
+0.1943703959062877206669871517590249058034169064564194870074554031
+0.8893705554674630659403991877841826994191514257022249874261157104
+-0.8883357910902242353575856676539666074648753053656660309143767467
+-0.460716573466163781751268186859141052046462069031383085126522242
+0.2571290378683215613044136510821588749887474163677002652639520119
+0.05683348973511969001808746192505133291481235528637618587938493271
+0.8458238445504835463314748515393830432307810942061667936052115581
+0.2568190130746644331048317748223591322462097932104379543095780599
+0.9282397683744983930469496205745698232573096227549226254155622007
+0.6733680895626635922558736333908780380926273791887898430485173634
+0.6834258455476852992466772196651133096274086383123765308288566681
+-0.3197260966794518948885909003357003020869183279810950125249989182
+-0.3602154836971247653552601690662060499632143516459194629015046587
+0.5644944652643029946030943876077187355907298250270171876933333996
+0.300245006064926546622443908848084786661329770571675039165636725
+0.9109171936013987677935840681404253773950900911474823029568083952
+0.9809865904559495207084689029816148884009367903151903920423149056
+0.6673430101175698152854688993768041548769019864465421762641808302
+0.1912403836532585581545915780169638266665110774534903895312903483
+-0.8390872225468263142545242699093560592768485203012323759548269441
+-0.1694425027392812196149909158729299355102867577367629176586906841
+-0.1109481979293641305323565532634133494943626968908239858539934786
+-0.7576390226829376962602306885924643215709630457357178698800775945
+-0.2384036559822549222513803512289385096334288445624862912807231185
+0.3322077770142086566449475410492734728431728270878221527000512398
+0.3008294101164568639831269327829387098511379992571638835271467486
+-0.8500127542413940364553721045188171752513697377512921485742321549
+0.8368368938909749223146178710811008588487209933709262501849117012
+-0.6301301812957352916599361333234055414853612961930455283065817178
+0.92912991593823651905014229592884312166630951576917436549436522
+-0.2057454411726747632614076986736370443370299660132771686206360685
+-0.1506655683923674574544013920490541109453108644791859114657837843
+0.8300887071220306139363536768734752416692057466278345728554448043
+0.8244806963149490337769127166910316223379101498545059699144474846
+-0.3267801787861358921558326193709571898654303757814961069177939802
+0.3173522145518535642355402682590855477810669842087119833799882044
+-0.9157683658115979207506514703487531113998263500938211160185082296
+-0.5134442544464950511308392504791416236936576938651094919168340614
+-0.7129018571172519683293420596961998697718416105831222546361506794
+0.9065123083843027156086152486704570882336886865580199421650643667
+-0.2793634385919329761753480106077153213406385720130702294691355484
+0.9164978685669781253679917402797926874507921723240255331025472326
+-0.7596059702886165943031875281927001506068162489624554198112485991
+0.7396561092486294627586234874177829200642603190414086001487983221
+0.2718148178589837914007749073085756104697032416499157400657364344
+0.4662517483044007390427270839972516857434523020114609710559500148
+0.08808257115588047484358934167308625153926780195956135649522315482
+0.07657390220669434590596313316601208477726655511807687988961336808
+0.4588569896068761120165974962862286433176923282523892852244105839
+-0.6615298742890711325192770516946564063654133133292967525875541474
+0.07011733953074958640104399325017215014827304325156759173135366906
+-0.9612259440538002535765483137294916063381851202661518339189071839
+0.9171138429339400553744807769217606095680344268845843714152250596
+-0.918764366993980620946375697358810909530550693434750302372938919
+-0.4415653525364425875595561926619571676937519758818885848285036367
+-0.2086520325624420487101916822135314045088175303036646863500495381
+-0.1511824375843169824185114172319147719223588913836399964007230083
+-0.7035924603583511535986984592864385797537640709172487432674768657
+-0.6564151567101526404248033266354854181628562195765596859557723591
+0.6965977875831549207460696210505433710177694513815592587963931164
+0.5816085290684877844083071838790011353935994102902484256340030157
+-0.527253715551282406607425535965902718962742079261395869051002919
+-0.8587217878456442924783287669774302171560923546889427532593498197
+0.802615497785384047600984758361791353972886095624237938117483346
+0.8316489546057848621322523310402149298559936201982941913906852864
+-0.6097628083165813974260954335449904988521230536577883358240508937
+-0.7453827739395389922953742392780783948094849228955462762695809318
+-0.1809554132180854707773280908184743372302489521523696413745651906
+-0.8150644675782343977339925655387466104832252738719676821788883516
+0.8917866574285656025686075793775106139378346795002297501283298878
+0.1101358891689796743272094664641471479081663952426245980291616029
+-0.0541967333689012077592263814659907729121237619035205051756287072
+0.8788147199714254107037333013127960617440138295766969973173354907
+-0.927037926394366126809727405514811573238161533791917190660326036
+0.4642977843367946473083173399076729199459994296180290689057358231
+0.1101424766711395834493541735390025259293259452693930682212953338
+0.9804018990020609521055380413227891839510323211141337706692935583
+0.8144388485796060257725468016904833551056739055694392606072812336
+-0.8395517493960846429066650820934625099120153763823264316622178314
+-0.535636302410552606673000089274072814148368252053769909998058602
+0.3785984554723058056848684987205281373405286509670642510688353225
+0.8125408356507693035783621684477489598336579370455636449932920399
+-0.730498839098918994556008955395986000999974868552030434899102998
+0.7456261383135196385610840292806346156606897621955571769519287646
+0.7757376987729343002700728678244609761294630501410110238207420656
+0.4078040359990933213948732923927214812372340416337539086249054226
+0.1767712938446947695198229699328249449877999447752262239584762909
+0.07365715096199305303280147905505827004287730234420360693427261478
+-0.3108355387530528344022186566449990520542204513871372429842394977
+-0.9157841385420411790181903606309676436954041107787988394005532203
+0.5517970855559362574840981197851271127548171428450299159534222246
+0.8076059738124808816284579607205742577625775175934575040140126923
+-0.3623547609761457713662054674281991237079618589827581000231798627
+0.8183208109839758987990961359356649031888827382055407382873878803
+-0.8535325136050236145755622731382685357658674118927526952194103789
+0.7385965807078199198295561757281636178085738161163241745076529168
+0.4178732695594172450325633659542989992529347731253116371174433175
+-0.5340515573220288676539037563933896861133701709641430080525373334
+-0.4642629009871243127720569534731497065151730863379424324926815934
+-0.8697898736666791719966463521302103516597198677810465705462889386
+0.9260211067928626234987335196506123804866588031248091568668186807
+-0.008817333363577657304077859427800946074653041725554105998740790418
+0.5582339538069273279851977709472563742471538090477435724053193958
+-0.7255700875545188795082017268145707633365451965771130961377344798
+-0.9882699898882978270887601698779901692432742326870804476209571454
+-0.9276804865150421462892365252888320798428705497677187785005965023
+-0.7832811923001301276864916736742146403933964466320677660322633051
+0.9875308623632782097656312821453924896496525870736205800843638587
+0.1783373466436970660022454632463179035762888722766888416391448363
+0.7336545898457146349237975784794059749253087905334857489144998895
+0.9127856868366581467510500732005220443872380003084957447131950721
+-0.3632881183963366167884860409201422151102177606787650299072097307
+-0.3268576018334922472384377473775779415605488146060240031080037115
+0.9427149588672463047630742061537997891278684495348468159028173334
+0.7916571579983658653317798731563225080239623370784297265192438825
+-0.6817701452011630996907953818868671270735516339211681814255907609
+-0.5168940707242169951406978648595076294647040487113324969763690473
+0.4155311954965517114024103086773167213755429855677272377839721067
+0.6506707691016388017357516362760131941221566979795718699904936102
+-0.7043718208306549962960929614939365734224121070283816720729220425
+-0.9030673117697692613858834879354138789682350761417043644810908266
+0.5465706740090774853953336301894435415008351646460109707839721596
+-0.6814239608934778019209189605706175697331566277120687413401512713
+0.9205925082347564380336697132499017123825554431098646503055203834
+-0.5020782788038677346392099888475830183897864323626792080264544951
+0.1045062318771655437961420896781653537832869869453123103733053855
+-0.1600201060994392446745228713066083331646179396065484107159119337
+-0.1176882561544923620215084381200312622694313533614808151971725197
+-0.189825171609586721044013508138189985950604720902663500662099781
+0.7858779951083861580332996484728804881745801231417586365625881696
+-0.2279832493810412940114966076664112325854082672090777285019621618
+0.07761160430503009576118799101543653660926181662195182427626478291
+-0.2055488181060608320954691371766551168555828485198254292077222517
+-0.8570653123756356936765798157651852007633450856266713907351356642
+0.8510470630599207981929699284163199387691742475697788917650312737
+-0.16560123613326167092245232006380763867174148167607503754889637
+0.4313169396402067420747675191335695107540210953445957632944683466
+-0.6136943581151102724274558633917286896829715873222934810854627144
+0.6107089044121956416324813364187592386184059323011742030772237424
+0.4569955077979069087363694857841772836360708458051620753700613184
+-0.205631651713017368814492512843157697507919536778183448181516378
+-0.3127653344142269367017311068934194736573539345353684494263561034
+0.5675769204970204695935245199626881958749158960158155816882247751
+-0.7973797882525385651192136516616674358654229933256541899442767797
+0.5012904467166158311205187729565579292182659743325041112386977484
+-0.2570017860782360774767408845442523659054818260225494146244853645
+0.815285634526596302121470271218431186471214471233707249972351082
+0.3474550590975565404544821867969338696280672245517491821876495039
+0.7718119181978566336150728291679018907122826327418198982205731192
+0.04535880498283686865208322483522967139304884767842664817216330064
+-0.7174845876743344015633175484139120449777707133419695966520824564
+-0.853296184466734367261440721862287405945662264918150798455455718
+-0.3551691762386405619967249318449133353395153150287271325435124081
+-0.3797572987358468877601704908647997438784227376119508300980299747
+0.376493226974464138185316874204450738186203149130236541221263506
+0.2816632617692655097062060192076384166912647824219953750826131631
+0.6936970465516315197236088803729008972356138275937389314888615401
+-0.8093948466492362612217398058810377625062288216775489656468562411
+0.7179094192553983421088688870290454722724258927762520549683983736
+-0.8752125899339353908597128121427435294227530087554395150859455125
+0.04176278772058224232241432506737925045260833246510034386845030186
+0.9269329565460541008731323076781001715661419867914361439680533663
+0.7868192948478988386779315105006009612933033201432314519183555363
+-0.006266353716036539320572064746082526752743361256443337864258505608
+0.2266154233841305998807280483192876569901369827513556377738818721
+0.2746350702494963366663352365693945459844370045750631885709403566
+-0.5247772986387898164750425486144677116796659442569793354035835811
+-0.4928925951310793013273500011155592100819574396889780507999573189
+-0.3113637472666701974473222596908779747755145602641740095469526339
+-0.5748854355426279234162395955225246347221834110564955747956209638
+-0.2554460407289573319602333075606187389397146712378109702048311016
+-0.576542912883993928715652331022719536448966752471880286018776653
+0.9094805878752663366484875502653563100058416506406189283398268678
+0.8848752416174802394989820330821347631944308988732361074957483326
+-0.2800064663747466167971611334477592148285678388000719119052505901
+-0.3524957419793069043802183938505947717728662986795036125951037387
+-0.92661757991300447545015659444519280829067045255691447808600615
+-0.5330220313943443910835605702117655504592614398056913858309712345
+-0.7330266194736301185266620028746862947402855823289205835841036965
+-0.08901643770401430747538873378587416087951119772581637121305331682
+0.8550765251384289421250035837565358470833355010809526497352204912
+-0.6907357918123153055314910754893467338334399179189583430196498864
+0.8787770736433328745035234902871834306966611855454194152763085168
+-0.01738793803090707722596079625349684366463055472987575653160098446
+-0.843789436167682845942043151679017937854325407163610849246652901
+-0.8141497075382254027096074950311514491854968487203741238943799987
+0.03889316514893840261980283978604250703936072380623394289182754247
+-0.5493273108612277875600478109570404534520845332638624479667841502
+0.6715912488533200815290011024385797575217363717470920802742883653
+-0.8438919390970836161462370188424965610990320605153865447984219469
+0.7184582122882689810255427112660454958040291396946043511983687288
+-0.4086097264688666636790174928803728608266459573162410770584140364
+-0.5697919261032078557614020481060183849522111669616974872492012829
+-0.6278243966060881460501444931432866833291695231208083680886203722
+0.0336828617705931544383250099730864952662928062350424608691618717
+-0.7436883526680899648969850724114253803054818951808117927039564586
+-0.4515446035045963800470270932006012917142703741148728102920678819
+-0.4810931364819359747828351037417496237257328332185652823964021884
+0.4458845011005795413736316288478062406750213207171946521339936816
+-0.07022130270408117391201617422037495983519685200057324281521736371
+-0.9363332435815881306934514312012861106386014749526768950073553811
+0.5931834085557288286300206310139754784241341457686571795494994774
+0.7036190395840156286745266326175275923901923175942468576350074587
+-0.5793821363841516257942372216607612745507267978856920167262365904
+0.00904502267908283601336368137866081061069210352581761545503802156
+-0.2778968847485682179896478779214700059419569060048743113852325563
+-0.2784308881971247865302566270327586460636817633229294056506703495
+0.154652062686142233335996164065894879050336448396759084360086347
+-0.6225775243116540313116281463349420309042753281761340281921133715
+-0.471116359097837612645498505928182428889732655753776028642471372
+0.05019084624368743889926916934552108615492017653478974426758842368
+0.6461406780733109189385884425756901416390710262453176809391037054
+-0.3646945557234024586517840337629880176834748783187949036037901754
+-0.3370795553642254807046883165466968306962599317309657519831180634
+0.07406951035684034748316975863636120744360012351054481175945110032
+-0.0706071377017734071574459854474813417829167710025638691080824309
+0.09360709618916370956867688682300922265055482761303476467874635515
+-0.4903988627030185676892387805777880755902392098553657129246566032
+0.8668617192033373216803865611020212154378552305142050619982759533
+-0.1745567235833106956445457069963316833929324818668372064961096495
+-0.6495725409582065831276338775327045761031092852475255376332913976
+0.3132302317415336986457546693818300494005409790462961496623925972
+-0.08002014266656912107124326141465267585210492463107808149275462116
+0.8439760661050647193221008089223906976491469018983477783830651032
+0.2742491031513893827528343314344994279572977620848668278687664294
+-0.02731317148254747797517682815221303356852477238112794448774630271
+0.8474076414796548139557410486347838750741787558443005871442567576
+-0.05779005908514727153148268653835324462294291367795091759798861981
+0.6263509070486716842858384400904599373074897647536296406115669676
+0.9742953226314242461965632460638579799905807780876871234627553275
+-0.5412738282089598200095228242549815505925302427991012087392399282
+-0.2810841851319220937367807869615879057727320463374091858347990139
+-0.6332274216696186147542273193898355103863532218808631013492331016
+0.02172241435608649221235119486946747660849609106303200545112768013
+0.7184196840602424035733157087786269966875702807495568534158194777
+0.3749586907344833235687996618371211329945742347114437060445496025
+0.5197997067097932079572481275469253932045397138803211253153129772
+0.1001908957778599515703760968602291233036923939615286132670111686
+0.1982609831290281879535544386961448200899094658928947930993426901
+0.2265305308299656396847919737333043590525494945051651354564266382
+0.7906018990132069071786050772247164464130165003035494689544865899
+0.6124546368149888732224396347205514888588534382757197943350914313
+-0.2036417356829187550510823664309236059942206079488018356074124469
+-0.4438641124602506074890760872561035010575387638641217902217169658
+-0.544767226142520327341708643509310597533503231008421701753029047
+0.4877743695516254187304790685268488336758168947119202326402657771
+0.3326494238536684877812162306671513312155429822231139301441247885
+0.5288035512647287264400603641207174184836483925130588246958035505
+-0.05640118305249958065859491687650402005035008328934427052170270651
+-0.9339602027658081848487965258726967589939079607563390689984129939
+-0.321275957553128745693922641853921576922022691685968198941970056
+-0.1418273761530124142414318806991383724249955778125131615411614959
+-0.4264505073732180514731028302116498991019475563421457885360967122
+-0.3923419951379572363099277373060742200052172625687618481037698142
+0.8711561101780366371965222118006359089295680450882925107561352892
+-0.4467304300012012793076027789623627915431040635298455194234986428
+-0.2307052332975307401648420105809548829532849045676342380730437307
+0.6986593716253086507864036814802859528738405415349193484448192348
+-0.9881297466207630693750918682605017613031699244501296308233100941
+-0.6760661791650244249188462300591840173691864903003885411720888657
+0.4739376045463275401017721226048506342846991506758626675206797346
+-0.07231115199509153957529197477078330317517719228116128797380329585
+-0.2135268112097198247010681889001898755255288900766137207891430752
+-0.00391719982426902043959346995217451979511795015993884792888825644
+-0.4074397155278875973813395109079469465734104483931918973323186003
+0.6066576651382865740459746508693765522490832331025440239481867214
+0.5054494871102213639926772825334560876816388786177817611761657915
+0.8226583267458482637565255432456222691986173539474741807557700154
+0.9730166336949259260659399295334240422964809729308435599151328247
+-0.364185457502622256307866947693356486103622853614760666076420203
+-0.4001542376557859551557248563046997931549614286245539273687375468
+-0.599100169628289804012363486827377728153644244666681806548743669
+-0.8583780681190373783452031494167712583130326378561487627832196622
+-0.3045463752630304889449065225990597597721299636237444059518468086
+0.7886150417047268238377576739443317830511703278264640239600600345
+-0.5588043912338361844241544228067077162062321498757294327644573793
+0.907133074597731305198810561446025916829146667322489554834535833
+-0.524311683190174937888559570575683572384050389075376539064024188
+0.6581907342494117061956856142004712902056506998470355167826692893
+0.1974669756782317180727160357254418526609096592424426109684117699
+-0.01972112572276554306178203846081429764689884696412132525401824731
+-0.394337251493017165762973203726973092159618930132047937098203061
+-0.8596972563284409333221353720093891317237347467906295445875608281
+0.2054557247504006267846823161008744108436686866387260670209192195
+0.9164793193765776053806704726303778876533969118110393675531419928
+-0.6145730810103541808333969921377717371467821795648928293281783767
+0.007095154334222720138793901658750269696036135112599827909026723408
+0.8623200152218083367220882180263569709602229105502792928185580311
+0.2328862533541289876695060577850480885078345462436653283599123436
+-0.8594243434084773575696832444002804697287780740482575549078989199
+0.4665227761410612503864559792071327777686034364978804464477715773
+-0.9811624944532105651955157652071808929067746331174047524578239984
+-0.5372721741325555621080856058022867645684999577425925732434683467
+0.9142689324243093913109361832104779693761718654772557241029242509
+-0.8519800093917999049786710873262630254438596819890789333402870548
+-0.8663463923987564465482638692819190364387064757346171016284231869
+0.2709558465428488894177444835034893857451398992362135202765939096
+0.8083674519889074596117164158478163589581003465847262190755456111
+0.08192318101143036468909245818104351795349752285255508370548377145
+0.4432662295285746068645760939682334332432727709335441542485014646
+0.7098458531193496043308156335940587627787235570183896188894276827
+0.90322989019219600061196867059798813661922909644595685154839827
+0.4794254791268536633480562976950887435436025549286522438789030803
+-0.7746484154169456512809937246271660173202685744110036148882342333
+-0.2763771350523139054750111351929364757670962641805178507420343842
+-0.6737640502546376711965235263761153629368423334845050663282786384
+0.9860843557274707818224203215557433615103323795855487753603071846
+-0.09908250822208310979388125313393386625642518646689831540002743491
+0.4083364361722581165801901479594515422760935325739573558840448982
+-0.1987464128103913290537565707198845322065664181338633370605495606
+-0.5407738721582197458183352565621496660631978320791939263962860219
+0.3927066115442214638047153163113331662262162359392646773307752893
+-0.3547265721044417796948020637228927981006372674781249634536133803
+0.7443511718754498369053636558248957547288930096116725829118390452
+-0.6106514856175809946267252713465468241183844646996285763158471635
+0.976523926183381328411157151775497729758348938804345757697622217
+0.7738274296309371782471493836581620439388102593378042753716890516
+0.6303435590127475728343988381089812280592884794559438601115730286
+-0.484063371813939130083050651772175383209126084648446213771534038
+0.8525922176927925458770820230111251769664015980843161969462044384
+-0.08163044187898704046903120648457597371959955348165323805504010125
+0.421148022345636083380666926166508150293522832173233944655555408
+0.1636579949610354489441057651722542939624135888641020127310796368
+0.1158996829838767780820446554770404024129821417414276676244486116
+0.6122743525100609786427539952903164332986527922843188026822436303
+0.8287184948673512642625509766623864745682445181955817748687592982
+-0.9776838203117432640468561992811674532088503638852841073034452293
+0.4475824486005748840610281907314246250638614806065401547533877687
+-0.2012889019039510414651830187674193045950194169108930931856542009
+-0.01171834366241198933438406373716581804955151297150743304159782864
+0.4922455338395964925166766918239575749296275172064692575993556194
+-0.05364567611959903567502330013213963546585099551575719307976293259
+0.2859039723670674295294361938847146749682776282795557426834523284
+0.8750329779299614706148239867721002941643109143868880399745229725
+-0.7722586575162211931712103266374485003179050625215461656404618225
+0.140103474533723761562030202095101893875706398592221339805012909
+0.8390047845124423734044204882406751006849491027338704535253123886
+-0.3131244711658136124319194937374637201951191483185787516824163028
+0.5906431155148677342149308852685885638274033210013285902888289507
+-0.916204807843398213138374272217346839955126571982524680966302845
+0.4438198023728849844308452858166958526884620742389769268237679581
+0.6601586762490308568348505588115261580494881196839526850118211037
+-0.9618853586098018371722211571527418635003319023500739295420333417
+-0.1292609718107532753146691377641856162241453138036350409973849233
+0.2813027204528153923329019336432992610341145263276842828170084429
+0.02901692607382806767360968742809799650944015215104495220771449394
+0.3041938498059602562920829742497990465452656988389381717366180348
+-0.8416332863784354708625199574482551667809708135793159735459802674
+-0.314950008126667019050031257450545808172579515682962559472777899
+-0.003275852688626340591683182725592289209533360992124403573787800845
+-0.8378625925962227631792682994265765481907889744535199746129185636
+-0.4342779984921702749034944690110939090155169682108203705245647346
+-0.9068313407149762968086567340954913610684595084886817903492351126
+-0.5878274041052291477943021502436561002773261803924218942833270832
+0.7976934088261920073242997664284179394988305733935216816478972594
+0.3072993380346806450796644618533558809298372285335849801472800055
+-0.3158899277774763040436693675498339368716705701915489772738691617
+0.4666714471594296105907779829907728877151358508508298995416084212
+-0.839252315736576298292024833817840220786429992773043003201199367
+0.3724656798429113456573796032664972786754306954066217858782865155
+0.7833206787384097305592819931133370072071003949491040665893856821
+-0.7544051316606455187663010577509845083171139981413787259246099009
+0.3363836481324219723370186210692794125850649784394352985597901553
+-0.6491840008149435654312968884792746101712975654905192131468895032
+-0.5376568533061764969177810125554299187960447693632897302426453216
+0.3436505628709939568617544614844578999694824109632610235366179258
+-0.9878395889167084950186530859519776075387863865636110539086573895
+0.231430699527959400864415392219075285031748034145026692189254385
+0.8865073285770955099860020924501486556125845788147491503154690747
+0.9964078756487818306982678918396703581497863065837502553775568638
+-0.1327340387426539333160769890953460166634179046951612739896832303
+0.1516135436026911837076485354625099431713490636151252380398422077
+-0.6794254217136540815383429489211152521219412790709340904663043984
+-0.8608338971722177289009152884317389810381974752382902396992736197
+-0.8579601284570283198168880475663448240213020365272821075300399251
+0.8642621396528582742546522275938696917350964149850345375415910969
+0.9793589839033901948731783645080578582463688236077166539472268901
+0.9683660064401229939001661515228452132613132290247913394628566994
+0.9871325644646234051116914095144895949244082254772823408822757459
+0.7429408357918861651391940854314483777231519683391271617922207998
+-0.6679971490414301274552666497306612376613754110623070491783068932
+-0.2222054162805692664553590963524746378422134405027779312108432929
+0.2825286514059141882920658191340775973641769752737899181429072621
+-0.8641655578339237157426364564226402388621743753891534760458972311
+-0.999608410793501567947359407871488407498148846407377827921738579
+0.6918702869983347579958468231672430091995168889418395643526262834
+-0.9376354253015494471896434810153189325665084438405669131018104586
+0.4924687906770157503064991069141120219191665852506741133594520199
+-0.7528019931350588413939154566388023308331979635236679471693177896
+0.6977106568122303299097295004137729206078400517066513083779044291
+-0.9241816059668043365862855436852035390363373632288175077727370967
+0.5191919026143328960366321977745092648338330203592978236081348129
+0.6714084342259733896142403819832445282754246581821439681178412078
+-0.3305661727568643970967579496852928159892749092036565327744186388
+-0.9004094513551951169051621458619598995816695783221496309703950609
+-0.9884847412191905817622272610251608563747945077452623649671510335
+0.8297590431974834390160620549937730525352694881027721814298674934
+-0.2609452664773769489135290033372776145152097963873696107291657849
+-0.3951818418178703493034052559225176300190976118265294520872713497
+-0.4205393286734249298736520308575155093951794910953125656434538838
+0.05443728213987669453050764608083824248316758211754927414048785268
+-0.6146453888431441977579264187991304908673042553348506918953110581
+-0.7563078968082354624200473875899165193618716500707274646443978808
+0.09396735259632912882662399404023686834860630896601823063552973929
+-0.5785656457034163940108434599486778925179861427139603882087606858
+0.03957899544097907583965796242273333021337860785083816690457151443
+-0.8523897650942072388808518940380192479382746023303926709202228227
+-0.0783278486518552435911237017548891443409964014583108296334729426
+0.6033167859658457194486961001342941735744068154496164938059859501
+-0.3586026685282925549652109446290082081072664311191650680624687117
+-0.1022768096029592458455381062000780279188050363478560222801108958
+0.8294682959773017741218920869469493367635666889096531886515534716
+0.2439910403168467755961516475103100677957670811159700079381010653
+-0.6217436439651384803300734137423667977560295277969228092600510878
+-0.4555149377465992268639969728371691262215382223593256475914395574
+-0.3638121656089442802844698751087347999906808525959787225726673495
+0.08022634781470307543831149021588896288336888891859159188614295157
+-0.3442492480706474446280159530436383963980497643713948380702723602
+0.7731435513750314635297578456626328452295898224889367523690353904
+-0.8066018250843343819679233406902709051909675387567362077697223646
+0.6498496955876471932216884562708997543204996823603089491219376678
+0.1642905711773671334665778070841332282088323895041996317816766814
+-0.4518494760071388063906173756614064107276944654373102185018585977
+-0.9844987906209126811310473648289719482037695495421754529715646006
+-0.686263785230994236933017760416487786457347579482201632713307669
+-0.4753695156132390969461568813093716281405845709725218384460712431
+0.6556099024117094888056949870591826089394312227646540750168521309
+-0.6080521800564137609237437916037781526823806391293867985443226801
+-0.07321134672111011808388258675460374818656780673570195420048014019
+0.8884544237779923905868256068860494057150693464894071066550039493
+-0.8354897195734111780068198561837673077169847832110436146953999212
+0.1896995674958023935839174980322220379530103420320344001246792964
+0.7156441808215881403448442063593792131902759984326841936686872424
+-0.8421913219903778026902017651605922300271071155283113389911103057
+0.5143856875534824565378222075822768838973165471074914221146249537
+-0.9085106045944224577834248408304889618324419212648761341182940048
+0.1490964832693746980567218590257837834356289516139096586207694171
+-0.6533071204065437867348628824043457513023406779543663479731285027
+0.2589807129282846863190912997106752238855054803532441648210855276
+-0.5271138651419218022479534356690600389529298477310942773491339837
+-0.1196937413617940965411274610059650995185123109435955751314866664
+-0.5906276157747267452890097085607812150766085943725793971349352161
+0.9512474782975162982677561838668759755171776738883301392493992342
+-0.2585173836652346672012366614981640522011558252359692008464201827
+0.7524677433111812677624154358601882415953170885621945514823934717
+0.007453434967834908162912548875213581989444052811981129593774874339
+0.7024443905669303463325044999633524679292030510648808694652482144
+0.6106130060934301223265972559359941935828860808582178521600687689
+0.1231870173638568907727920838441539340012116028226779971441342773
+-0.1170516315450676456572605810356433736658383171876884602766708347
+0.2379797449298319474236531372730651577119969114593543972996184914
+0.04370148341573901145774807336854657018472602856035430580322484601
+-0.01566823635122952039094015583015458940797919213007079339305198311
+0.4492410143872176596850637170953881938575382076365915189809344711
+-0.6585592493830587345638673165535959781595035622455918843124435087
+-0.5444085272080392258191197590500321857185674913140620444083228958
+0.2626598519861605182484353725321079345286314106027470449537646385
+0.1376877378972272155729752353482066269049185939455101441339815693
+-0.4006520844525121330244486700355445948137705338803507925144414887
+0.08187311850883778757260063595415584588170542069096467766500950588
+0.9752391076391505122735918291390393444711089786801290853210824038
+-0.3212233362207097908208338883029696979756133137518721105877588565
+0.5092639397663682383837026485562440892473560288009820563671444933
+-0.9571379854001650517501024933554614772600734829289247917367756493
+0.9579502281429485110215155578987438072018283869571111430893435551
+0.3116411197945126357426362801452345353189409007169370813457229298
+
+5.31476721731792233254244744521014230415609581565619873432607
+3.077642995071433257194385769928266360749784891862899369194835
+3.257191990700295742514106533822521336249867261845043920721727
+-0.774507108685566948675615257381061083750689941733861285196947
+-11.96646357022985677633533416380529989073952746607398403242434
+-0.688092422933331755667122392300993707816469048885257467290161
+-0.015109756348251896649789607726166457117608171061830349746407
+-4.468674258776365546995546849782726207498256612764298722892142
+4.035136189041304432586924821775114105117333501863819280352031
+7.552795430038371858474615360175465056996447931237797042995274
+
diff --git a/tests/data/nfst_adjoint_1d_10_1.txt b/tests/data/nfst_adjoint_1d_10_1.txt
new file mode 100644
index 0000000..65463a9
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_10_1.txt
@@ -0,0 +1,20 @@
+1
+
+10
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.242657038654574569149987696924845126872345709402186808541106154
+-0.407617807517436708162608471658721489509820462934105098778500092
+0.442063577432074355864053400862226090510665130261577729647891387
+-0.334965169738309858347391317926562521242821297917550500356068475
+0.120614385014336196159632793212550325470417307552363966436533892
+0.132355876197090571096963757495978605131997483446850290432306427
+-0.342947157089028580592381281787833500663923929106305995434200001
+0.443730311296372585110640109487098839675944171517794291427900404
+-0.402435616979731228463737874902628838048729030761438025301876257
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfst_adjoint_1d_10_10.txt b/tests/data/nfst_adjoint_1d_10_10.txt
new file mode 100644
index 0000000..4e82e3e
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_10_10.txt
@@ -0,0 +1,38 @@
+1
+
+10
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-2.39133381649558761846787996062748532086645583928003887496279535
+-1.51959661019646750778865780239981827594565349618976355552661888
+3.63223036228351154340649838297684238016096255533688421552054344
+-0.37612947788012902988137500859909027287607989807391679349796016
+-1.69521393061214736671111053944682856231491885704668626784715654
+1.09315935763003959041462905045719558943690856637614654092832268
+0.25460465077159464206434779005474011664194817523988124874807467
+-1.61561742570469655385451572086914648019498083007420554108468938
+0.46678084241099522488937061005219338898800039962866990837329632
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfst_adjoint_1d_10_20.txt b/tests/data/nfst_adjoint_1d_10_20.txt
new file mode 100644
index 0000000..a86a49d
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_10_20.txt
@@ -0,0 +1,58 @@
+1
+
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.60181416955370489069022560302259870185972960698264033911466164
+1.19172238459678387400170417103632942467649645516274293814593026
+-2.85175134703177109300829218327113268476825639018130941890474268
+0.71823471380662699664708441642228600705175390014293552008335495
+0.20260494602163508986435886038875507372698629288814550673043989
+-1.60676961488867304707059971708089350966230774320527046970097582
+3.15518510280904505842966430365895201405695418901423165879874611
+1.61379621395470814910879356891316252399576692591750127903085869
+0.58048331699908802355112481708496364860770881980620738940164023
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfst_adjoint_1d_10_50.txt b/tests/data/nfst_adjoint_1d_10_50.txt
new file mode 100644
index 0000000..eac58c3
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_10_50.txt
@@ -0,0 +1,118 @@
+1
+
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+3.29030551755756751987162837008274776315876740148870258788668485
+-1.84734796834300686973942269036081472935842581181899653186101268
+-3.6939865315867088409036793775967931837749841773924001176096175
+1.0843565966884434823093342315440295219732917766189142028627867
+0.4360599773498592728406037781703212564919664967271195911618297
+0.974848620355898693682327411611117839858814581261813331319914
+1.6798694728718978955106180189573007940119847368016974167807815
+2.8124928574245440471390682870707153229061661126939629693945885
+-3.0462502444239362621049364637081664759487649491152683748607982
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfst_adjoint_1d_20_1.txt b/tests/data/nfst_adjoint_1d_20_1.txt
new file mode 100644
index 0000000..25ad78f
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_20_1.txt
@@ -0,0 +1,30 @@
+1
+
+20
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.242657038654574569149987696924845126872345709402186808541106154
+-0.407617807517436708162608471658721489509820462934105098778500092
+0.442063577432074355864053400862226090510665130261577729647891387
+-0.334965169738309858347391317926562521242821297917550500356068475
+0.120614385014336196159632793212550325470417307552363966436533892
+0.132355876197090571096963757495978605131997483446850290432306427
+-0.342947157089028580592381281787833500663923929106305995434200001
+0.443730311296372585110640109487098839675944171517794291427900404
+-0.402435616979731228463737874902628838048729030761438025301876257
+0.23228520743629405520351627919076403253495019889329635486050194
+0.01224051899743664554831799622374548145559463049725290791798969
+-0.25284695806291902405640673614991881571102487476954573449000842
+0.412494420712161343075043458493204742453456684650237806599868383
+-0.440065443391117942481968150299408388090037866555151268514755099
+0.3267320702804357541974217325578461239843023453257114768899711
+-0.10878247328905836230591134731308065809864371964233249341978881
+-0.14399814463679911269454907817916095534768718050845009682203727
+0.3506720485054838890994972050370213783504755955383583679855869
+-0.445064395489765039819920069763373794698476538878439078241994582
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfst_adjoint_1d_20_10.txt b/tests/data/nfst_adjoint_1d_20_10.txt
new file mode 100644
index 0000000..03c22e5
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_20_10.txt
@@ -0,0 +1,48 @@
+1
+
+20
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-2.39133381649558761846787996062748532086645583928003887496279535
+-1.51959661019646750778865780239981827594565349618976355552661888
+3.63223036228351154340649838297684238016096255533688421552054344
+-0.37612947788012902988137500859909027287607989807391679349796016
+-1.69521393061214736671111053944682856231491885704668626784715654
+1.09315935763003959041462905045719558943690856637614654092832268
+0.25460465077159464206434779005474011664194817523988124874807467
+-1.61561742570469655385451572086914648019498083007420554108468938
+0.46678084241099522488937061005219338898800039962866990837329632
+1.10847548459230714411493430485560916188552438979643685542641795
+1.10078460766302415711013250989370780964182401782726775094537165
+-2.1913744928415857957501994384057480640002933680866011548863447
+-0.49682047366268336889913002989464492805755688516588102037656657
+-0.0968596135911198506261999898723779570941819884056581950686246
+3.03202837234961968076911177728763450769091344647033911676296161
+-1.4081149635395440647476288535344986154234175288166532614496628
+-0.6290276732287110932369862317494299414616544571763965415902619
+-0.8990551498513285938003353408937784155732356120115862565910735
+0.5963950626060895079620763526983997510474008603916174006801075
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfst_adjoint_1d_20_20.txt b/tests/data/nfst_adjoint_1d_20_20.txt
new file mode 100644
index 0000000..cef6f61
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_20_20.txt
@@ -0,0 +1,68 @@
+1
+
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.60181416955370489069022560302259870185972960698264033911466164
+1.19172238459678387400170417103632942467649645516274293814593026
+-2.85175134703177109300829218327113268476825639018130941890474268
+0.71823471380662699664708441642228600705175390014293552008335495
+0.20260494602163508986435886038875507372698629288814550673043989
+-1.60676961488867304707059971708089350966230774320527046970097582
+3.15518510280904505842966430365895201405695418901423165879874611
+1.61379621395470814910879356891316252399576692591750127903085869
+0.58048331699908802355112481708496364860770881980620738940164023
+-0.62303991724828508783974319400275388823307917762410780051652069
+3.4256621663281041210540409911613560577825412840975131089709623
+0.4302173073452875752895912378707925773938858993600275570161801
+-0.84421239341465261923619223258664829857068808611216713289069289
+0.6148958096241956436270555680537162456597371268299147844157277
+-0.488079522542554372367504183096640870933626748129356846566673
+0.7133503024916639149805762491236083231349809362179040954618478
+-1.9907531437463623070961273248003125524480463515111275764506821
+2.6355466441654656903338090291680132758318442484540748999985083
+3.1158201823993234080076253946295214250843431419026606047057042
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfst_adjoint_1d_20_50.txt b/tests/data/nfst_adjoint_1d_20_50.txt
new file mode 100644
index 0000000..3e39e44
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_20_50.txt
@@ -0,0 +1,128 @@
+1
+
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+3.29030551755756751987162837008274776315876740148870258788668485
+-1.84734796834300686973942269036081472935842581181899653186101268
+-3.6939865315867088409036793775967931837749841773924001176096175
+1.0843565966884434823093342315440295219732917766189142028627867
+0.4360599773498592728406037781703212564919664967271195911618297
+0.974848620355898693682327411611117839858814581261813331319914
+1.6798694728718978955106180189573007940119847368016974167807815
+2.8124928574245440471390682870707153229061661126939629693945885
+-3.0462502444239362621049364637081664759487649491152683748607982
+-2.3500544757794694865501329003347345430266914351867853064776452
+0.7471388255712637333049506588069209202895454677444531474129137
+2.5214906263000047471197582130616700520762038491046387017963446
+2.2680059231559829194353743869819968780857440624745661778465925
+0.1651197726795588454286728765477333905248615378259715357213062
+-0.3477906032097807027040067084393332470027010118085900445400742
+2.44546822148955592935260875580610545295099875381196354490646
+-2.0210347563147220651286042547191236387636306618828982507262884
+-2.538945385866320781159406367040823108578828692499991824411563
+3.7840155037426604232841654514299442803337290683944631246050982
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfst_adjoint_1d_2_1.txt b/tests/data/nfst_adjoint_1d_2_1.txt
new file mode 100644
index 0000000..1d5895d
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_2_1.txt
@@ -0,0 +1,12 @@
+1
+
+2
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.242657038654574569149987696924845126872345709402186808541106154
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfst_adjoint_1d_2_10.txt b/tests/data/nfst_adjoint_1d_2_10.txt
new file mode 100644
index 0000000..b3ba0fb
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_2_10.txt
@@ -0,0 +1,30 @@
+1
+
+2
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-2.39133381649558761846787996062748532086645583928003887496279535
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfst_adjoint_1d_2_20.txt b/tests/data/nfst_adjoint_1d_2_20.txt
new file mode 100644
index 0000000..3e0fff1
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_2_20.txt
@@ -0,0 +1,50 @@
+1
+
+2
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.60181416955370489069022560302259870185972960698264033911466164
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfst_adjoint_1d_2_50.txt b/tests/data/nfst_adjoint_1d_2_50.txt
new file mode 100644
index 0000000..b68feec
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_2_50.txt
@@ -0,0 +1,110 @@
+1
+
+2
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+3.29030551755756751987162837008274776315876740148870258788668485
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfst_adjoint_1d_4_1.txt b/tests/data/nfst_adjoint_1d_4_1.txt
new file mode 100644
index 0000000..72339d7
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_4_1.txt
@@ -0,0 +1,14 @@
+1
+
+4
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.242657038654574569149987696924845126872345709402186808541106154
+-0.407617807517436708162608471658721489509820462934105098778500092
+0.442063577432074355864053400862226090510665130261577729647891387
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfst_adjoint_1d_4_10.txt b/tests/data/nfst_adjoint_1d_4_10.txt
new file mode 100644
index 0000000..45fad22
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_4_10.txt
@@ -0,0 +1,32 @@
+1
+
+4
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-2.39133381649558761846787996062748532086645583928003887496279535
+-1.51959661019646750778865780239981827594565349618976355552661888
+3.63223036228351154340649838297684238016096255533688421552054344
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfst_adjoint_1d_4_20.txt b/tests/data/nfst_adjoint_1d_4_20.txt
new file mode 100644
index 0000000..4b42c4e
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_4_20.txt
@@ -0,0 +1,52 @@
+1
+
+4
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.60181416955370489069022560302259870185972960698264033911466164
+1.19172238459678387400170417103632942467649645516274293814593026
+-2.85175134703177109300829218327113268476825639018130941890474268
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfst_adjoint_1d_4_50.txt b/tests/data/nfst_adjoint_1d_4_50.txt
new file mode 100644
index 0000000..52b5225
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_4_50.txt
@@ -0,0 +1,112 @@
+1
+
+4
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+3.29030551755756751987162837008274776315876740148870258788668485
+-1.84734796834300686973942269036081472935842581181899653186101268
+-3.6939865315867088409036793775967931837749841773924001176096175
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfst_adjoint_1d_50_1.txt b/tests/data/nfst_adjoint_1d_50_1.txt
new file mode 100644
index 0000000..34a064d
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_50_1.txt
@@ -0,0 +1,60 @@
+1
+
+50
+
+1
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+
+0.242657038654574569149987696924845126872345709402186808541106154
+-0.407617807517436708162608471658721489509820462934105098778500092
+0.442063577432074355864053400862226090510665130261577729647891387
+-0.334965169738309858347391317926562521242821297917550500356068475
+0.120614385014336196159632793212550325470417307552363966436533892
+0.132355876197090571096963757495978605131997483446850290432306427
+-0.342947157089028580592381281787833500663923929106305995434200001
+0.443730311296372585110640109487098839675944171517794291427900404
+-0.402435616979731228463737874902628838048729030761438025301876257
+0.23228520743629405520351627919076403253495019889329635486050194
+0.01224051899743664554831799622374548145559463049725290791798969
+-0.25284695806291902405640673614991881571102487476954573449000842
+0.412494420712161343075043458493204742453456684650237806599868383
+-0.440065443391117942481968150299408388090037866555151268514755099
+0.3267320702804357541974217325578461239843023453257114768899711
+-0.10878247328905836230591134731308065809864371964233249341978881
+-0.14399814463679911269454907817916095534768718050845009682203727
+0.3506720485054838890994972050370213783504755955383583679855869
+-0.445064395489765039819920069763373794698476538878439078241994582
+0.39695173401277077150135524742408003035438285156130068104139812
+-0.22173923982065042865343716370421230578855334028579964953407569
+-0.02447186169000397245271993761157471527208946300381172094225019
+0.26284732662191215188207159462655635894039007923356123534631035
+-0.41706180073122239267259231923137433697680751887379519286650272
+0.437737407107302836588069895173261003611618391833050007420824089
+-0.3182540307928043503685143630348746181552087046105253441219414
+0.09686901100701508782418534583133666346039583519241215538893734
+0.1555324625168883909574124664853960514446365361293660150692686
+-0.35813405289673146841425721570163983780652977536155879264093946
+0.44606482989425978910444519387594593796303828363038416899369129
+-0.39117026969893534346430096238519526137018768235732658019932225
+0.21102704176440936039236283142000437705264710735277320779311933
+0.03668485865199939285209377143392063432271280393517302721544131
+-0.27265064739202695323892410736128301020968453152498586151074246
+0.42131652356363488846299696012799297331691090910119478688549088
+-0.435081213831029907355642259286470612981266201642285309823005289
+0.30953740697610521073501076842728065578218111868157598657811759
+-0.08488292928967042594072191691299749873359826852470586426659815
+-0.16695018294768407938145418365940211464935210849577405934731791
+0.36532757624937657426932350498812210428748792865332185718137969
+-0.446730864517875339241525666621844975702050343964184685842419781
+0.38509555820731907753617878699615152104892947878362860262735051
+-0.2001566438416997068711678588104865131550251061975735767434073
+-0.04887035421089670082206052285774713205929565422494607858732897
+0.28224957115382778690094623349738074657529500136856614368348095
+-0.42525539958697735925451165186695757770747573253935083104069286
+0.43209885482094595064556601760711816817408100036066268897179437
+-0.30058873338966461431901888037273024327746632682684592525291639
+0.07283321369883347594081061164667776328091274431074504116616951
+
+0.4471019172896300480425609973334131570061388309850364774868901391
+
diff --git a/tests/data/nfst_adjoint_1d_50_10.txt b/tests/data/nfst_adjoint_1d_50_10.txt
new file mode 100644
index 0000000..aae9357
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_50_10.txt
@@ -0,0 +1,78 @@
+1
+
+50
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+
+-2.39133381649558761846787996062748532086645583928003887496279535
+-1.51959661019646750778865780239981827594565349618976355552661888
+3.63223036228351154340649838297684238016096255533688421552054344
+-0.37612947788012902988137500859909027287607989807391679349796016
+-1.69521393061214736671111053944682856231491885704668626784715654
+1.09315935763003959041462905045719558943690856637614654092832268
+0.25460465077159464206434779005474011664194817523988124874807467
+-1.61561742570469655385451572086914648019498083007420554108468938
+0.46678084241099522488937061005219338898800039962866990837329632
+1.10847548459230714411493430485560916188552438979643685542641795
+1.10078460766302415711013250989370780964182401782726775094537165
+-2.1913744928415857957501994384057480640002933680866011548863447
+-0.49682047366268336889913002989464492805755688516588102037656657
+-0.0968596135911198506261999898723779570941819884056581950686246
+3.03202837234961968076911177728763450769091344647033911676296161
+-1.4081149635395440647476288535344986154234175288166532614496628
+-0.6290276732287110932369862317494299414616544571763965415902619
+-0.8990551498513285938003353408937784155732356120115862565910735
+0.5963950626060895079620763526983997510474008603916174006801075
+1.6463805805716240928238974173305132167900418030242200317198817
+-1.2206624870259228864249565337853211355023262309424712339479878
+-0.6377056562649018214524649229861755352072623240542173039706019
+2.2580355874039587484574048910242717403404211269448532748577577
+-2.7209942546849444156519763343097676944436973458223257324776883
+-0.0842463612674481142934423240480874337676283324369047225975295
+1.5868632614991066165117953028315479678338436294345998597828608
+1.8638780135710126369913580501508565664909464250834623068027072
+-2.271781984781966554664827724373822097387619844610165753771492
+-2.2852934245153659066250888451804857533156599624060997915861448
+1.839938275207918932556869165870437369671316745776028350920673
+2.6779736143564200901046659092257629184642385759727131986891832
+-2.1312476146907161755018889982541418166019788149826685638242721
+-1.0980889340344647019451858435166536012305052169851214075085121
+1.402687552008333968197559654513394950620736349346119297829825
+-0.0367896267769125296535876808294225513575545062259726670840537
+-1.6353862297293136574671915619861615654361433337235955188205134
+1.6629511041263867085668500367411343142247962160544358333437385
+1.1426496489431324976533732075250699007645001549991518791358662
+-1.5990892601104463412559955595812485180667085453538852497856135
+-0.6671188769855435413467486275555474489946972900437922378722649
+-1.09243522805955027352072908104081755119900378817614903851776
+3.7500004259958064943578466795365090974878525848569831615293575
+-0.9993508798622795511987506467692157503816452409976058891593522
+-1.2442466642484257775002038712313429930548879492882942308314042
+-0.410560523124018190678343634296936494716471934968486271986098
+-0.0454083160709699077137180745026130059921627873344406146554766
+1.5668381216364204563644022940936816611416746853442706664518389
+0.215896723983759260474800304461907753617165923262625524245576
+-1.7617001732666680716406817361815883716771090884967150533377499
+
+0.6316345452201721830125859283102821997036574445025868003866206636
+0.7051415661084367709201814372310498119360160763950294411494790334
+-0.9186285185242277638228379667640336837252479527413557249796864599
+0.6059166146272276531659924142280879090009660941492851068272418515
+-0.95114225448595864485771668441096849436578004346293095519883533
+-0.6604794604223456380230982552803888415401900194413775997907443762
+0.1817134261437800570794256414315250650163873891461146114574620382
+-0.8768399197753272524248224977827836246291177209791567885209025379
+-0.2027179913470305147020813461378369947382030993314951020253012762
+0.1375057760993413749724126299163162462121619232755876011030820512
+
diff --git a/tests/data/nfst_adjoint_1d_50_20.txt b/tests/data/nfst_adjoint_1d_50_20.txt
new file mode 100644
index 0000000..9059350
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_50_20.txt
@@ -0,0 +1,98 @@
+1
+
+50
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+
+-0.60181416955370489069022560302259870185972960698264033911466164
+1.19172238459678387400170417103632942467649645516274293814593026
+-2.85175134703177109300829218327113268476825639018130941890474268
+0.71823471380662699664708441642228600705175390014293552008335495
+0.20260494602163508986435886038875507372698629288814550673043989
+-1.60676961488867304707059971708089350966230774320527046970097582
+3.15518510280904505842966430365895201405695418901423165879874611
+1.61379621395470814910879356891316252399576692591750127903085869
+0.58048331699908802355112481708496364860770881980620738940164023
+-0.62303991724828508783974319400275388823307917762410780051652069
+3.4256621663281041210540409911613560577825412840975131089709623
+0.4302173073452875752895912378707925773938858993600275570161801
+-0.84421239341465261923619223258664829857068808611216713289069289
+0.6148958096241956436270555680537162456597371268299147844157277
+-0.488079522542554372367504183096640870933626748129356846566673
+0.7133503024916639149805762491236083231349809362179040954618478
+-1.9907531437463623070961273248003125524480463515111275764506821
+2.6355466441654656903338090291680132758318442484540748999985083
+3.1158201823993234080076253946295214250843431419026606047057042
+-2.3451381206822088943710811756771213526634824860076626006756114
+1.5957339169744645974925812328634344991906440503532209180357051
+2.2056589815270608272415536550478849535020086730239591654942434
+0.3162691456703716083714944318864213366570632079852393500238091
+-0.3042774048620032250108019249989661655149196020206662352652593
+-0.744773624934052117903584266047172339933229102651020016349712
+-1.1977024864620133544953359275887464971444364779316309687155167
+-0.9729654452905903821017975826864360404652699396789209019220983
+-1.8467074143129747197090299022207301878044174000951719778886054
+0.8919072195595885172752703687252751406796623172538819724777841
+-0.3332284596082425238917100855977165765506318987214761952894947
+-1.8999290268316847520559750169631735716552968492739808260498662
+0.4088775968984713292276871963130051414900463250155766993204858
+0.3315957126112086243374044165016937696793465579516448051102665
+-0.6473683463460859953038143869453727809620337183804465902725978
+-0.5348190901012739367707971963395416359007720515066265040712452
+-0.8513236000949739075466151932087634612132586421187704516124764
+-4.0454344415496624227578285852305309442501329281860508437421302
+-1.138919502874280449044286853320925543080295915042373987405404
+-0.6229579637356638560304195919492581256646049870820826508634625
+-1.9459707272526001066515638785447465450017768282643716074415002
+-1.343740500014371541579988231049194502273654238086433263724625
+-1.5285270728060024661392864457700848790540366246565047949192896
+0.5790390147616854729212402728463883711928206341182379505271669
+1.2329411710446945025929007285441082271867431654758051704002501
+-2.4894396071936236988375152640386509547444670446407493606282719
+3.5565340348075619199375793832240934362518722575133464747619266
+-1.5178657130104259993897901525417484995798735304551114110344832
+-2.3143593708208358386789810491499392469151323740456618693719372
+0.6931402845489053773678480331590217155999504331713416667243809
+
+-0.4413098759704276115157486122940138778382450314554048934666388869
+-0.9286394390238346619050912089405834508747965422378917835718069263
+-0.4763986698707299918532811013155870587476071700798709986377725737
+0.2184244610344805776516307003112049282480936070481769173095132673
+0.5284655557490481515292532588784919125603831832265742904204270183
+-0.07838835742104840389052756169146943544000206230123216084325830017
+-0.3158305122954834491361879876118745635891842225287967281157858672
+0.3458309153991207858067077092337332970573207566667458110876416196
+-0.01097686940732606761440422015891875954490441842087149586770120005
+0.2626555858903124974165091427737336367005240661151773835219310271
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/data/nfst_adjoint_1d_50_50.txt b/tests/data/nfst_adjoint_1d_50_50.txt
new file mode 100644
index 0000000..c6117dd
--- /dev/null
+++ b/tests/data/nfst_adjoint_1d_50_50.txt
@@ -0,0 +1,158 @@
+1
+
+50
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.454917586626400190455113486728514743998772785129201763658322789
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.230402910644737899027368109577132641139999484424691959789185425
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.272502449871235944005176337000832389787308384521685260378340781
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.384865504568687870081160661201127839598602309270532264614380477
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.3455515607589044047244320070401003626747106946235853743454314733
+
+3.29030551755756751987162837008274776315876740148870258788668485
+-1.84734796834300686973942269036081472935842581181899653186101268
+-3.6939865315867088409036793775967931837749841773924001176096175
+1.0843565966884434823093342315440295219732917766189142028627867
+0.4360599773498592728406037781703212564919664967271195911618297
+0.974848620355898693682327411611117839858814581261813331319914
+1.6798694728718978955106180189573007940119847368016974167807815
+2.8124928574245440471390682870707153229061661126939629693945885
+-3.0462502444239362621049364637081664759487649491152683748607982
+-2.3500544757794694865501329003347345430266914351867853064776452
+0.7471388255712637333049506588069209202895454677444531474129137
+2.5214906263000047471197582130616700520762038491046387017963446
+2.2680059231559829194353743869819968780857440624745661778465925
+0.1651197726795588454286728765477333905248615378259715357213062
+-0.3477906032097807027040067084393332470027010118085900445400742
+2.44546822148955592935260875580610545295099875381196354490646
+-2.0210347563147220651286042547191236387636306618828982507262884
+-2.538945385866320781159406367040823108578828692499991824411563
+3.7840155037426604232841654514299442803337290683944631246050982
+-0.8297775512606984066475492000519710843539742060696300504276975
+2.9889122746885299631107948494036448555032862772112453449961207
+1.058815540677975371663916445527993126685071295672375386011617
+-5.2869746571720073385368496160481686759786784833909170348944719
+2.6202747825578187530786818174504694514210993508012683008683712
+-1.3641931021236824191233845811897320042016333854692322346298015
+-1.7374416841878461005052176799516251238601415259077498011169946
+-3.3269255390082979080392054963168740610510158696829852723494572
+-3.3249429252521759510021377704236736512308891213504358885500809
+3.1778266697754776994372149956082971726016979270738197675124363
+-1.6439616293597535114642804968108604498288074763553279761249326
+-3.1951600603668184393134011313193066420903136052337644278866321
+-0.438185640047186413988059937207465588955001466937987925493026
+-2.321499017142558624658251381525279569135423558912815343110851
+-3.7630059618147832891618465022488042500656389923101912983276
+-3.983772941412348071941142970906800485488867539597263463205997
+2.250665161270902245744626495443731834227480730664628269446119
+-0.179789034277294091836384782360512131020796444082816037281784
+-0.077785962165937088662128902135196623319674698755105528384668
+-2.327595055638299192506123174520473261690639949575659445056155
+-3.868716593436654708762684465274718417792863251007602993855016
+0.347890328038859967433444905930940625127038006899103316476465
+-0.342015940694207928621059263092297572469936487231839074296693
+-0.650829825424621174019418167072639890868687472644315724032066
+0.176770823830022625923250423912057198134784954914489710553809
+2.95728027842391373417367393512879376041473914155656147210279
+2.299871598619368721976174663067042436932884542001956179917224
+-3.849290462615460520174168432424123824037075391233186407125722
+1.735569020526913735668536426904479723082631450751549935222046
+-1.267338897925592749776922062999416941924707435620728643289434
+
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+-0.5458569288127476004682590208265714990676611459841400026017844665
+0.1856688150172391527088040246433169286752829500750590071977203062
+0.8193143821859564924477154245099351963436429074028089074430038904
+0.4604487491339531156973853721884505256237012331451385915640611729
+-0.8606535828683120015533980099014960687963233985081987928030018579
+-0.2028782443808202039078700152556584967073846417006795171717789768
+0.7727562160593342436881229708062656539223995010850938445718232095
+0.2216455512897554102911455213296037106714896153079531893725412128
+0.8060520707732849845829519568044036159880831172244051400087891596
+0.2494984458565048492106180084187393465587010901621886528310783225
+0.692720462930580375837580120465281755163139346395305274413909974
+0.3484206501444620766420233468327938525050794194268200530793896515
+-0.5365723013330725289094471599220332027885871668229904917249565862
+-0.4969838973904267472552603461634423875526049699439467087064029146
+-0.1099633225953045478540363356794430416477263111166654723490589437
+-0.6756547625687923165084584127259768184144567299620396875756298559
+0.8687355316920355914551191479618699998090617653378680974249892199
+0.6573707348942885034556657549189062350008259948442460481059842193
+0.304092255431421724386276285709205877741518261756931899126135274
+0.6923315191547459490617708873077670147989473956854336908747033971
+-0.8796784447840898801814093263554195453289300559080999490503364787
+-0.02378306045101476542041128049120676361822587626846492046663605803
+0.9854996726419986830846511304498671064695985279263874167222764802
+0.6717005563662298476413580139956207272362245386339234470714331016
+-0.8378043093573693797427988998204722223522674424680899644391943176
+-0.3904035160770493684430115148009967524256991556076221372265894266
+0.3596214942327276879157632590476519168937540906266077357147819608
+0.7958628339830083470736213000945699871834494249238046750007408612
+0.5412530329369591795695895418300581875196694253995928145942436878
+-0.2613537732594101756765510813982454595302525696986533152069370387
+0.435828324052182771698190217679588447000849558850289775314256024
+-0.5937465792299257034198201886287226952400923687140794966015317515
+-0.3218041479377133937935849601301732622610394503588237190352903562
+-0.7360914574746049921434644450737043073420684008447334807822853276
+0.553187364694831117272984365230687982396001421226655790220741406
+0.01417576197421767893279369309359545621976513518858252000938611031
+0.6897588478092123244219967589255606032813281483291811335150355542
+-0.6996703139503628987183738269577949838863048093871175900433716284
+-0.1309677757443125377194229250386971011803561306992623123400631451
+0.09049503268981439002460219767349217513483951010643022102321620286
+
diff --git a/tests/data/nfst_adjoint_2d_10_10_20.txt b/tests/data/nfst_adjoint_2d_10_10_20.txt
new file mode 100644
index 0000000..000d2de
--- /dev/null
+++ b/tests/data/nfst_adjoint_2d_10_10_20.txt
@@ -0,0 +1,151 @@
+2
+
+10
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+-1.76143146893263630507479969102574831711361320243036952536594684
+0.35899770819605732231881762940486068133788301466981915563161211
+2.83885693984458722014048253283289593582617061154339622561573007
+-0.59645159715206175075797653417445997322411208367010787663570892
+-2.70345075644926486124889580951495288356647764274422231897434439
+0.21103420597547403174372582156808481101804208339715706637167539
+0.80419416229930044937796908366804480752145501249073360645110793
+1.61823557797745338421874313098913819576515346547482347035491764
+0.38284768450806290663832043589241261030395899813851113686219901
+2.22689118033568770147464831307785161036355717797638855888804302
+0.18665355785887900118388995331464413721078804025935144929520248
+0.42229477681519930327948017732900551321342813012191274873967201
+1.41338872288696181936200256031878937991371036077637546116810517
+1.62002161552259685721973498080899625803650464222806704943673784
+-0.02337545822870082537306946721421822005123595793586494137024739
+-1.64652761209287698883999627693649701692054493039697913328717427
+0.44263180533338967144262404961245804245381462190156286675620342
+0.92228340697132823292628058252269411175602235872769815202244947
+-0.3108367935356654353877414593399601606611691816399760916695634
+-1.81935833904866201130107098395816442258167414765651570782128582
+-1.74264586388126226268803996281912595485313021430278609610542069
+-0.12973767606025167758694203679244445463657414801580073285651074
+0.90860654114391223623872728334624543939459551945176563710996218
+1.95722815645166269746427888565950602864421022837480104724835179
+2.94287298919397403236168886266953690858190500490543931754001335
+-0.16639669916107372976751657950753450213846826235190622282724962
+-0.16116327963024610354329691317021872984157158523094792669133574
+-0.06673628288418047560134228869477944213687632264958706279654091
+2.83293378737776162539876370057798692612237489483699048545545287
+0.45146062305657285242797520918797305108069875585313283870139339
+0.08934143940779221316458669802868913365252834011281116754182792
+1.99739265411402036627229490652104184677185336652072327820123501
+0.22030870998022632285360682592179072706866532464350574221240961
+-1.32968133055825866275546310116288038033479396274782659923854446
+-0.95365058973474616671726048460686443244560021834273172865371528
+0.48176974473161931659188114377065480614076822825117440593324127
+-0.97153440384426941570401684669334051649459182295444954258905037
+0.18666352144494250850692920084441757154234644598081868719507376
+1.21077252615593697976586057276086641519454747211932288456898783
+0.63498547346755824878504166693642014312695196354342763250058704
+-2.37510898304837156701463759371340458036437161358791579853500166
+-1.9266452456611821386085964120527993339573312333056876417414595
+2.6858653735489308752036481418147882867173218882120176628532612
+2.0579163136778167608181562575464034300538024851799874751263199
+-0.49875679381536352388903337103151365799977548364250560532224709
+0.95476708849363764207890391559124465345505756145123931136135542
+-0.34403551109873699208053471924535714353919958517200729799780336
+-0.19895526408252056032409845135982443834511796757213375457963169
+-0.4475238099526419459886413871952456513681700881927718429593659
+1.23518278360761984613419084432996754050496371463989745279793031
+0.9445661213686883925599246962191602476997062650507088214959299
+-1.805288354686753996355397998794540324998559335969814710818734
+-0.7235133959541791984901935219626046033847038938756732390531334
+1.8046881955308273157701567318463412166940758373310765920014845
+1.18625785604315112504333325767892788323587323876893425355320618
+-2.0344505531371113483476358459845414712253343228913454188217468
+-0.72129099250185619375686944441046077146296140676815788208702117
+0.69700274606603889922387315460622332673227536492327466867325904
+0.0338541803354434153565395229585236366275413935921277031608521
+0.27674134861628521963677988574356345768534610754243278179569536
+0.3450189911379297686147359836332619395978014632728541742395779
+-0.5744612222294662666295095802845946744660060217144183389945272
+-2.1401419851120298884050640897164792031089985938603731098953949
+-2.475306758685792775224097905276378752817608946497611173462498
+0.74414538761380102305612934805024944986718041274867925295958327
+0.4009663622574130770822531144343837361582105319471925667351893
+-2.95640043976892192053226420067679672095386561016639646399203391
+-0.7705877863146956540458499370376907643725783068356462499631948
+1.6318917326119420452001871701673571620713847405506130082417133
+-0.9753554350180776407534694237189415732841517430170038702624415
+-0.6709007216840414789168327689639305312819135042015727691354356
+1.3063090429696816011032918220042441516631077306182734353976986
+2.2687830362339896110180984091935407623465082970400790270612644
+0.74455402362741207311990921755411407795344429555031945206137385
+-0.0464330783628570546769891826610566519069778082652867536396097
+2.0862481489852289847362060654575221444061674995378324876043318
+-0.981873559308810941430389974286071317402261769319129205102677
+-4.4922947751289954392281606881965066549382956771758191511854306
+-0.0426660642827708664251969273176147630319496660877702515848753
+0.0396010444934846036948766942569390602765665474253547165534288
+-1.6077104491836659728053413997955799586957496537628542393547279
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfst_adjoint_2d_10_10_50.txt b/tests/data/nfst_adjoint_2d_10_10_50.txt
new file mode 100644
index 0000000..704c0bb
--- /dev/null
+++ b/tests/data/nfst_adjoint_2d_10_10_50.txt
@@ -0,0 +1,241 @@
+2
+
+10
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+-2.70668492785359953264203689083025128596858544789767186399210503
+-0.7980287843598062182644026521325997234507318426407596649204636
+2.90975315792134540158807879979545029897317978357424943032522203
+-1.7500374489926229685230336613935762266873738223097383106049173
+0.9144060427892110390798822183045604329440646340827081149674575
+2.8311696027444974849124953705108930229424223720097234724104576
+0.1848011723091029062374395000539375620522571390548848994413123
+4.3785237918001196231703768339806214620430241337346077320127897
+-1.4829598225238285665927622193390189579445220977956570877320344
+0.36131938962752668564931956792005495013325505868474278578584952
+0.93601322002679530568915122449216814183554098027726079258184644
+0.17595332536433541971679625934322768155506990037749137502766111
+-0.6678416592075543725402564333537595208041829935646290178123583
+-3.8686261374456848134129823311894507714796483613081895813059453
+-0.1461291370576306799912494257793256534485219607795063385616732
+-1.3003382500307902453099767653035086441621454996750151090610996
+-3.1543155527284074929937641757943734435852864633178726189020653
+6.145313916854393620554734354123494817893668166923060866821956
+-0.97429212762563456274906820184427241260234299372905422337708698
+1.3759776067953720461801361420624123455033169154531054158382798
+0.2376423178248998960522282080844813663564393806129836706561517
+-0.9633905521822569705329501365729889870630017974642559724712133
+3.3609093094800292229549654452713403015256902047506189037783715
+-0.9526475242278619985217187599535049901991155432209022134672693
+4.5491579007618350164240421909845284897372356480434022191814166
+1.557837252521351351462587482933884291083252166324366469862512
+-2.4405061637776431313148232769891398655807788566700624397359942
+-3.4064566851709168754169772701227556093037016825897137223246397
+0.7825833719935938933338872416563408225639681181534641367935008
+2.2685355345106277597306553299038320355759612739707936768963681
+-0.7939893833525746591828501635322673250954840587197598360613255
+-1.6593466279028660786226606963057935071568292017425814207947493
+2.3074706139041294049738931805625399556582395591523383041399607
+0.1816001337668048279780449304335147556631691444463991448612273
+-0.0350191712612427075091297494738116889254692694511877921409157
+-2.1391450255612670962062990251484405964869171693520445638689246
+-0.1227434546454076441295023851860886656580998828697771668236592
+0.7874675952140726128509266603641277331050306044046615236001563
+-1.4119559918420771425866064108225669447423419903335974671054855
+1.0069848580482004313495133825324073172541632290388881835397613
+-2.4642594679682710642594241352724402496082013432307710669974709
+1.3628053680647640474132452206444304759154242264490458742636698
+-3.3912831586988109082802292821020663236843722973521109456890448
+-0.1892094094191945852531983657058519729804243584411160905715112
+-2.0342288614083308491494159660711690933230064747745419731214833
+-0.8735493595462440058907194148433406216402509150818860654058318
+2.4471568663482879395187212781423566859461149449670868841654155
+2.4176451750745355165929583802748574285686526433032642904678503
+-3.12082004133126379630052915657054033262839439360128951984917
+1.8356491175441879483064683401921130103591838798461384916079329
+0.7326241743739036176944770605242068796181054159601501186581634
+-2.1463651023323428109344801721071411862921246402060042555708942
+-1.1215252338279086988020135282679463426852697953692326019994324
+-2.205131839675436629047253564736605737878992737424718325342814
+-2.4422967896572567092541637652527364573924825476060933707572896
+-0.4539400726597934221870087687823420705043129391775678124213158
+-0.2612640794353116227053233418509184540694957063691144914901066
+-3.9724266168669470636430588505631584156543729270203794391930494
+-2.0853767665987169275067854433432360146572911545412749105596996
+2.62177280149801963682736951552500276826041340849148705341841
+-0.0443033212791823783601100399529643226255209094984702721822668
+-4.5010152608790295221713110273162392681416084342277951014064855
+1.07802744208692948763945688445633763983602042637081304505191
+-3.7112968335856745773262691764319318577948290877976900740697014
+2.4127923682949903045256864460995263583632033037557904630827129
+-1.9856798440904900101354352746556906039073148321727535753770752
+-0.8964358831389882386828608699558526151418583773310621413845615
+2.3424407275589633302408731367385115023897254349060166463313401
+-0.2007710396077639864605653523419593088314142876382838058221792
+1.2906595649993539842415029468218824624761722775983106092065546
+0.7527070659815979237152117398648864733058166261744285127364136
+-0.5900553701844957323127325903919366266040675578979712380144366
+0.8315803865643513676897295902353765976727919925999588340187098
+2.0660062935529555810228317482255250563393344573450644810968124
+1.2517713940259354988903941644476061542240930872367232236197187
+-3.3714972747050939412065179555318115257556811699224071162626193
+-0.3365788841435114533085333596508609357347975969656300766765596
+1.0927140843915356225416194757077923212734480515544666537357217
+-2.5063857010336233779804450124446083979432007439275240359551784
+1.3737155681783009638982989606121135646126768515132183987142114
+3.8919093984360680525778696398623144617263756619912107614414318
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfst_adjoint_2d_10_20_20.txt b/tests/data/nfst_adjoint_2d_10_20_20.txt
new file mode 100644
index 0000000..41eb446
--- /dev/null
+++ b/tests/data/nfst_adjoint_2d_10_20_20.txt
@@ -0,0 +1,241 @@
+2
+
+10
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+-1.76143146893263630507479969102574831711361320243036952536594684
+0.35899770819605732231881762940486068133788301466981915563161211
+2.83885693984458722014048253283289593582617061154339622561573007
+-0.59645159715206175075797653417445997322411208367010787663570892
+-2.70345075644926486124889580951495288356647764274422231897434439
+0.21103420597547403174372582156808481101804208339715706637167539
+0.80419416229930044937796908366804480752145501249073360645110793
+1.61823557797745338421874313098913819576515346547482347035491764
+0.38284768450806290663832043589241261030395899813851113686219901
+0.40560700202193532337816644748471112151041375255018741569290129
+1.45454293685326843619385865328664304903329553181427240728217551
+-1.12830432277914550162080892371604656737769895230634702379930972
+-1.2111741018264079038982105404715832582249174484942610471922139
+-0.33057860709593057774474971455516227034960897870508207223007765
+-2.1631665457509841208166688513836022738374125750017972290753481
+0.6579544681292133656828144563115845386034348025147575888302745
+2.4573388337610701586005668699082279015236317267634359623180643
+-1.1303213840152801128902369674933598241975405175426469145989591
+-1.3202607564641824440676057191475051488294080165037908209157315
+2.22689118033568770147464831307785161036355717797638855888804302
+0.18665355785887900118388995331464413721078804025935144929520248
+0.42229477681519930327948017732900551321342813012191274873967201
+1.41338872288696181936200256031878937991371036077637546116810517
+1.62002161552259685721973498080899625803650464222806704943673784
+-0.02337545822870082537306946721421822005123595793586494137024739
+-1.64652761209287698883999627693649701692054493039697913328717427
+0.44263180533338967144262404961245804245381462190156286675620342
+0.92228340697132823292628058252269411175602235872769815202244947
+-1.42824531919632421000568064720547392796364072231757775268092981
+0.48711833138245852553261734972517849237332089036309417870973055
+1.49387725607936522196783849443184686018709166682448120467846762
+0.37567866349895564725500667296409242979762484644521436159623511
+-0.51387163793270107059423505048278209592657005392491425326095608
+0.01048929749160606567562210382488871475626297981836018265687245
+0.485477912813827997761446500476904361844286878052349538035493
+-0.9416709692574697807211135905802181040962699875022078589719227
+-0.073235342431847205988612325253608759414754453646331135421918
+0.57886861398705916290094573554869619969655839934569610380221739
+-0.3108367935356654353877414593399601606611691816399760916695634
+-1.81935833904866201130107098395816442258167414765651570782128582
+-1.74264586388126226268803996281912595485313021430278609610542069
+-0.12973767606025167758694203679244445463657414801580073285651074
+0.90860654114391223623872728334624543939459551945176563710996218
+1.95722815645166269746427888565950602864421022837480104724835179
+2.94287298919397403236168886266953690858190500490543931754001335
+-0.16639669916107372976751657950753450213846826235190622282724962
+-0.16116327963024610354329691317021872984157158523094792669133574
+1.09577841127351046192815010641367543805036397245703174723178227
+-0.4484465012097205485866188786278442587366895850689328800039918
+-1.2768412672926743012813252657952025019175814610975084715629791
+0.3773174596682081687439714302315994885609827077647003382553655
+0.6281913957432409021700609324779578310981684043238482182433803
+0.267064829046074695877163179753260772245961272848407047727946
+-1.4804152716331516900867406877915594905562658430468732209977766
+-2.6071328587962370901018107586534069248070380260914699694549473
+-1.5506381412757315990669253850379659138341312458851599070019461
+0.5447114606380892069959523324943709815164329940395736654934704
+-0.06673628288418047560134228869477944213687632264958706279654091
+2.83293378737776162539876370057798692612237489483699048545545287
+0.45146062305657285242797520918797305108069875585313283870139339
+0.08934143940779221316458669802868913365252834011281116754182792
+1.99739265411402036627229490652104184677185336652072327820123501
+0.22030870998022632285360682592179072706866532464350574221240961
+-1.32968133055825866275546310116288038033479396274782659923854446
+-0.95365058973474616671726048460686443244560021834273172865371528
+0.48176974473161931659188114377065480614076822825117440593324127
+0.6132275337358948078022423262056858209759475403729040487551984
+-0.7517395617943339839157023100463655201805979177208331911498468
+0.6747731993946308873299269149597703475772096819261271624846899
+0.7147611986151006833032051761336881673003442325264153737838267
+0.0614858964706358516501929818837676936174968616425259426510917
+0.5269273896223616869475159634470181305462977746458103186493908
+-1.4836368432641383987280806132081161786452881848992957152742043
+0.6649119274635969454582726157268512700707588716657731300097936
+0.9515633744096675420990961971810926992514225453192302216078136
+-2.0981363036506163367692688013434957636971964810286476952337224
+-0.97153440384426941570401684669334051649459182295444954258905037
+0.18666352144494250850692920084441757154234644598081868719507376
+1.21077252615593697976586057276086641519454747211932288456898783
+0.63498547346755824878504166693642014312695196354342763250058704
+-2.37510898304837156701463759371340458036437161358791579853500166
+-1.9266452456611821386085964120527993339573312333056876417414595
+2.6858653735489308752036481418147882867173218882120176628532612
+2.0579163136778167608181562575464034300538024851799874751263199
+-0.49875679381536352388903337103151365799977548364250560532224709
+1.1429405507426701835284522058083422497725552710274254699869959
+1.8147216520802647049135377080121962810950443143082513880166162
+-0.3895608323327321390484545383263904919067319514444942144915329
+-1.9441220590549683618598570379746464548957804248791207558285712
+-1.911360917410992159979740707273971567773718829760723163494899
+-0.4332606021451201887931778873781820631836566155826536801693182
+0.4013635411937036863882887968227115501619765012794970130534125
+1.4063208631565966784167194522544906687760111040759289030566793
+-0.4846598607170153221396398630392864817920930572303286809253945
+-0.3115489839783544585400898122327124607091647407067230961980346
+0.95476708849363764207890391559124465345505756145123931136135542
+-0.34403551109873699208053471924535714353919958517200729799780336
+-0.19895526408252056032409845135982443834511796757213375457963169
+-0.4475238099526419459886413871952456513681700881927718429593659
+1.23518278360761984613419084432996754050496371463989745279793031
+0.9445661213686883925599246962191602476997062650507088214959299
+-1.805288354686753996355397998794540324998559335969814710818734
+-0.7235133959541791984901935219626046033847038938756732390531334
+1.8046881955308273157701567318463412166940758373310765920014845
+-1.6311692566104175377824106690856382893508454858707418533060143
+-1.6309439084962166936782558880780161025747083253824869277423934
+1.0140448730121283640988430975875879521937438696860588497833986
+1.6132212707786796254034979411658911263800884477564817065068974
+-0.7554796292521770880316086453215086363582907671757929559920391
+0.0706052816886972369433526246238788612020799907846494726977044
+1.3048103845057356099430897528526576200510648668015239987738342
+-0.7686552962176008980058599409300175633288868063687433256010729
+-0.7484654710897942481107523971656005505583460009719958133665619
+0.2422236962891424148974587374761352412254105103412358108990304
+1.18625785604315112504333325767892788323587323876893425355320618
+-2.0344505531371113483476358459845414712253343228913454188217468
+-0.72129099250185619375686944441046077146296140676815788208702117
+0.69700274606603889922387315460622332673227536492327466867325904
+0.0338541803354434153565395229585236366275413935921277031608521
+0.27674134861628521963677988574356345768534610754243278179569536
+0.3450189911379297686147359836332619395978014632728541742395779
+-0.5744612222294662666295095802845946744660060217144183389945272
+-2.1401419851120298884050640897164792031089985938603731098953949
+-0.7738489551364070251809672254733728790728900163771822727537841
+2.0352569844187303009092282727776637627362250158808857516579972
+-1.172044916425913714996262400349360111822198184355021577061512
+-0.0932517665686746095669284119685028014192990847187244034751723
+2.4687236716958889678742775773050457265371063496572186336423835
+0.0293693471843298558801071259039891883710300403529463209002814
+-1.3080780835884512400463166948855032152856554873440621131816372
+-0.5670678312397311328100500455380277717641601431850827445462772
+0.1367428944200031908142387070613481149334043444885785279553009
+2.0029195867699519393010479477029511526281603566457526272625736
+-2.475306758685792775224097905276378752817608946497611173462498
+0.74414538761380102305612934805024944986718041274867925295958327
+0.4009663622574130770822531144343837361582105319471925667351893
+-2.95640043976892192053226420067679672095386561016639646399203391
+-0.7705877863146956540458499370376907643725783068356462499631948
+1.6318917326119420452001871701673571620713847405506130082417133
+-0.9753554350180776407534694237189415732841517430170038702624415
+-0.6709007216840414789168327689639305312819135042015727691354356
+1.3063090429696816011032918220042441516631077306182734353976986
+0.2486386474884816388875252418173620543072670169195672743552431
+-1.0908843623478222628382240250428309563163552496047877514853794
+-0.8649052667017660181791321393484193994411470863653729899182186
+0.4124501220648015976960267346807032903994812467835316675946708
+0.1872468936568535030917695404446001678211987865197623056537281
+-0.2788976312511903516594542024836479267127013655653911984900423
+0.2261847388459337325564608129248938512058929424464453856166749
+1.6823203207427276036715954499484031842671835267471182813149061
+-0.0989487665050107206614526844022065503840606789793129470440085
+-0.4009330520264926069400773802926388902423539482584582212360613
+2.2687830362339896110180984091935407623465082970400790270612644
+0.74455402362741207311990921755411407795344429555031945206137385
+-0.0464330783628570546769891826610566519069778082652867536396097
+2.0862481489852289847362060654575221444061674995378324876043318
+-0.981873559308810941430389974286071317402261769319129205102677
+-4.4922947751289954392281606881965066549382956771758191511854306
+-0.0426660642827708664251969273176147630319496660877702515848753
+0.0396010444934846036948766942569390602765665474253547165534288
+-1.6077104491836659728053413997955799586957496537628542393547279
+-0.4367021738146980469941325607571544614734391112660203672036371
+0.9603268003152493275145389952958160338048458621235922099717952
+1.0129261803640052395050590119169578972470118718530903304497926
+-0.6641381995357217811546390835085151045317499738116576708921783
+-1.8322623201686362167273951813204242580551430782748604423655935
+1.2111651447040516161944629593961572492648981104387769186107376
+1.3874657193197334007851892129722922100618132352399093504857668
+1.6109053379947642664443746447988134179024532801831537108517314
+0.8478740741698271511922221503038596179381560204319005863160594
+0.0263408430269528630954879147450289159925278543659567775893825
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfst_adjoint_2d_10_20_50.txt b/tests/data/nfst_adjoint_2d_10_20_50.txt
new file mode 100644
index 0000000..f08628b
--- /dev/null
+++ b/tests/data/nfst_adjoint_2d_10_20_50.txt
@@ -0,0 +1,331 @@
+2
+
+10
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+-2.70668492785359953264203689083025128596858544789767186399210503
+-0.7980287843598062182644026521325997234507318426407596649204636
+2.90975315792134540158807879979545029897317978357424943032522203
+-1.7500374489926229685230336613935762266873738223097383106049173
+0.9144060427892110390798822183045604329440646340827081149674575
+2.8311696027444974849124953705108930229424223720097234724104576
+0.1848011723091029062374395000539375620522571390548848994413123
+4.3785237918001196231703768339806214620430241337346077320127897
+-1.4829598225238285665927622193390189579445220977956570877320344
+-1.1132907000911929542391627734147386193933906136259302849833079
+5.0391724406295806972081423460707522320608322492428094893994262
+-0.8480926408252967702985399396586643417165660146703395135041582
+1.4905793653004574985788656457775896237363058168951720670633154
+0.7754690209654190786519237772865707292875424192302983665327786
+1.2597421351524133957580012041248962865832366382619104434019139
+-0.7482564049576327463251263373551084647841413401873712639755891
+-1.3114006616124870411949136775451574726903656073360494406009535
+-2.82850356310362669925338567401765910116674474764184277758124
+-0.0701657463528352834546838108465813302285873581313484149607954
+0.36131938962752668564931956792005495013325505868474278578584952
+0.93601322002679530568915122449216814183554098027726079258184644
+0.17595332536433541971679625934322768155506990037749137502766111
+-0.6678416592075543725402564333537595208041829935646290178123583
+-3.8686261374456848134129823311894507714796483613081895813059453
+-0.1461291370576306799912494257793256534485219607795063385616732
+-1.3003382500307902453099767653035086441621454996750151090610996
+-3.1543155527284074929937641757943734435852864633178726189020653
+6.145313916854393620554734354123494817893668166923060866821956
+0.184065485988049656536901678106741626223714105831163343876521
+3.9252478511019191329034331001720755328984154565650311907093188
+3.6101340093956612607818517530745257615703949218555150431106445
+-1.1744347904395104777169697727732023087444064096297176221870838
+-0.8574072977676919949384095938489288443996708933936860474909563
+-1.5371851737460757382869399838434231507049104253222500746937417
+-0.4501545853624475184605897501134019586180560933819168312895555
+-3.1799788942288055869936569592625448938053414101719597632990041
+-1.0764291032799673955052365299860925695210075659219372927218329
+1.438784078452364597103386008350521192720019602773434345599237
+-0.97429212762563456274906820184427241260234299372905422337708698
+1.3759776067953720461801361420624123455033169154531054158382798
+0.2376423178248998960522282080844813663564393806129836706561517
+-0.9633905521822569705329501365729889870630017974642559724712133
+3.3609093094800292229549654452713403015256902047506189037783715
+-0.9526475242278619985217187599535049901991155432209022134672693
+4.5491579007618350164240421909845284897372356480434022191814166
+1.557837252521351351462587482933884291083252166324366469862512
+-2.4405061637776431313148232769891398655807788566700624397359942
+5.4771790872271617226279866815051470848630653111080560732970322
+-2.1152961911829162153122579322863382854667934569064800597917601
+-1.0812556485887466508549848356916311890818452301530836581058895
+-0.1783711308212910513227290778748407605940420361468183714115855
+-1.8274001386536732144208414769451006618430986861640309603207518
+2.1896609024572328526722216659017994610287661707479045967469162
+0.9172743090739534107536621664424691192035501367175305986737491
+-0.7801554043935361292681797197739999129688054210855422709004839
+1.6726525489756411191966672990974841737614872478785811891346975
+1.8276899024690559989174647615885728992957581255375184832222743
+-3.4064566851709168754169772701227556093037016825897137223246397
+0.7825833719935938933338872416563408225639681181534641367935008
+2.2685355345106277597306553299038320355759612739707936768963681
+-0.7939893833525746591828501635322673250954840587197598360613255
+-1.6593466279028660786226606963057935071568292017425814207947493
+2.3074706139041294049738931805625399556582395591523383041399607
+0.1816001337668048279780449304335147556631691444463991448612273
+-0.0350191712612427075091297494738116889254692694511877921409157
+-2.1391450255612670962062990251484405964869171693520445638689246
+-0.3028298295862848320074437875654518353591083254528036216352706
+0.5982770160581810637361384626476756265804653964302415319649739
+2.1908086568630669750773102683551742153751590639602336295695514
+-1.2365013702589745532904863271261538263459940540542321271097682
+0.2134518223271979834737715090391528029897751110530890922396534
+4.0023855116297846471516092676633132588401933854090415315617522
+-1.2991556984933324527864825910281705265876503695670173449006142
+-0.9402938264667808049290741147798221943532253510278843811782226
+-2.6104294572778615861048678760858812506970986770348561323125387
+0.3543666979608898901389286258401308800145737882451910226610964
+-0.1227434546454076441295023851860886656580998828697771668236592
+0.7874675952140726128509266603641277331050306044046615236001563
+-1.4119559918420771425866064108225669447423419903335974671054855
+1.0069848580482004313495133825324073172541632290388881835397613
+-2.4642594679682710642594241352724402496082013432307710669974709
+1.3628053680647640474132452206444304759154242264490458742636698
+-3.3912831586988109082802292821020663236843722973521109456890448
+-0.1892094094191945852531983657058519729804243584411160905715112
+-2.0342288614083308491494159660711690933230064747745419731214833
+-6.9706800001677677718355385352097153798626266608092748782002608
+3.428319426507668401015787689639996857793042782983758487066392
+-1.6822003591206123662179217589552114330863862603818798676208105
+-6.0807747773622976943455171386257161078385262985212041228623732
+2.4477797815692351329550185998594213625880259342338975656473038
+0.6838050747777030174093832041431974766571129742967810032088696
+1.2366245280213200113920769865379489360906714430738198088639504
+-1.5530516959681811676973160427867676984628067560186510337307692
+1.1465145567763507125047830364534883854742331627990327316122143
+3.3034337483919145910101664534210737363031021437865632238626665
+-0.8735493595462440058907194148433406216402509150818860654058318
+2.4471568663482879395187212781423566859461149449670868841654155
+2.4176451750745355165929583802748574285686526433032642904678503
+-3.12082004133126379630052915657054033262839439360128951984917
+1.8356491175441879483064683401921130103591838798461384916079329
+0.7326241743739036176944770605242068796181054159601501186581634
+-2.1463651023323428109344801721071411862921246402060042555708942
+-1.1215252338279086988020135282679463426852697953692326019994324
+-2.205131839675436629047253564736605737878992737424718325342814
+1.6109876250615729762037331994636163440341739081620999336980228
+-2.012682790434683093151087528563231078759496595269397512712089
+-3.5367994024640813481487069066873951417265685668620701702050612
+0.7656224956054276879621402249117049949592809912884014918963981
+-0.3596588401429152038991052679523984848878210866718046043881807
+1.3826237707018137125384662258086274735268433856563419999841885
+1.6321953762580617910728698125895595756760791766938804388558244
+0.4348270707393379824642736530876003065752806640458788543171655
+0.5445036489879887488813739239125806572959741433354683010562248
+3.6518531816846382541397251586258497728106044436232298851769171
+-2.4422967896572567092541637652527364573924825476060933707572896
+-0.4539400726597934221870087687823420705043129391775678124213158
+-0.2612640794353116227053233418509184540694957063691144914901066
+-3.9724266168669470636430588505631584156543729270203794391930494
+-2.0853767665987169275067854433432360146572911545412749105596996
+2.62177280149801963682736951552500276826041340849148705341841
+-0.0443033212791823783601100399529643226255209094984702721822668
+-4.5010152608790295221713110273162392681416084342277951014064855
+1.07802744208692948763945688445633763983602042637081304505191
+1.2898870679514652457725703758226733589489605357350968879173093
+-2.3151890956813878098786973079761258434495004721386501272487738
+1.4526163133100112786914652164465834732756511444338739830783648
+0.0923763203037050224664457775512590780139773207504561380353593
+-2.6672741921614743231159405940338004003643857487419023476541884
+3.1562536460076242747110564049905860322627010324336668290870748
+-2.0164011952635260440313220697053344142626196590940176661300162
+-1.0132796118903577150603037515361876381711869611724000526365201
+-0.6348271908421561313597055789088813349821815324804508894587834
+-0.0709896909827038380883507941210170151176502795448109089643943
+-3.7112968335856745773262691764319318577948290877976900740697014
+2.4127923682949903045256864460995263583632033037557904630827129
+-1.9856798440904900101354352746556906039073148321727535753770752
+-0.8964358831389882386828608699558526151418583773310621413845615
+2.3424407275589633302408731367385115023897254349060166463313401
+-0.2007710396077639864605653523419593088314142876382838058221792
+1.2906595649993539842415029468218824624761722775983106092065546
+0.7527070659815979237152117398648864733058166261744285127364136
+-0.5900553701844957323127325903919366266040675578979712380144366
+-3.7766110119494324901032461264335326402909642818986913848116409
+0.3178147680522773990463993059439820765265152796213570322233238
+-1.6217610792932547358173995494363140321942840158353334254454585
+-1.7731993927337252247690170715896343962816683467538075241320376
+-0.1847952817185350839315475933522750449619832522254057349981583
+2.5776468632364562886804327926525134880568529367872513404888193
+2.4984668924470117625903894403200105085913658521974408024708356
+-2.5192058540906738212139988844458124681680134795847166306848854
+-0.6818228181279743432951649555405360231184393523892655003991675
+2.3891813001591570809150093881212747186033587896823950883042944
+0.8315803865643513676897295902353765976727919925999588340187098
+2.0660062935529555810228317482255250563393344573450644810968124
+1.2517713940259354988903941644476061542240930872367232236197187
+-3.3714972747050939412065179555318115257556811699224071162626193
+-0.3365788841435114533085333596508609357347975969656300766765596
+1.0927140843915356225416194757077923212734480515544666537357217
+-2.5063857010336233779804450124446083979432007439275240359551784
+1.3737155681783009638982989606121135646126768515132183987142114
+3.8919093984360680525778696398623144617263756619912107614414318
+4.765118997976258324120931606349546696671701642311767884238081
+7.1574336996811935388773181430998042405210993493879583861611107
+2.5976058246975308313298196115346850835901380265793833920669029
+-2.0682852463294522748564088548390331010864707071260930675101102
+2.5918197104644275823016274885110853009190941506693618208341544
+-3.5956379214167350296620899493665729045425019172444701551422474
+-3.5163834212867441239008774478025362612213723708874601895005408
+-1.4917485847272523374374165641389452552349647205998028082403249
+0.3298418472692085684085807795325857068353699573070208396743639
+0.26577040791306180848509001907826098322253437677561640834511
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfst_adjoint_2d_20_10_20.txt b/tests/data/nfst_adjoint_2d_20_10_20.txt
new file mode 100644
index 0000000..2cffb89
--- /dev/null
+++ b/tests/data/nfst_adjoint_2d_20_10_20.txt
@@ -0,0 +1,241 @@
+2
+
+20
+10
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+-1.76143146893263630507479969102574831711361320243036952536594684
+0.35899770819605732231881762940486068133788301466981915563161211
+2.83885693984458722014048253283289593582617061154339622561573007
+-0.59645159715206175075797653417445997322411208367010787663570892
+-2.70345075644926486124889580951495288356647764274422231897434439
+0.21103420597547403174372582156808481101804208339715706637167539
+0.80419416229930044937796908366804480752145501249073360645110793
+1.61823557797745338421874313098913819576515346547482347035491764
+0.38284768450806290663832043589241261030395899813851113686219901
+2.22689118033568770147464831307785161036355717797638855888804302
+0.18665355785887900118388995331464413721078804025935144929520248
+0.42229477681519930327948017732900551321342813012191274873967201
+1.41338872288696181936200256031878937991371036077637546116810517
+1.62002161552259685721973498080899625803650464222806704943673784
+-0.02337545822870082537306946721421822005123595793586494137024739
+-1.64652761209287698883999627693649701692054493039697913328717427
+0.44263180533338967144262404961245804245381462190156286675620342
+0.92228340697132823292628058252269411175602235872769815202244947
+-0.3108367935356654353877414593399601606611691816399760916695634
+-1.81935833904866201130107098395816442258167414765651570782128582
+-1.74264586388126226268803996281912595485313021430278609610542069
+-0.12973767606025167758694203679244445463657414801580073285651074
+0.90860654114391223623872728334624543939459551945176563710996218
+1.95722815645166269746427888565950602864421022837480104724835179
+2.94287298919397403236168886266953690858190500490543931754001335
+-0.16639669916107372976751657950753450213846826235190622282724962
+-0.16116327963024610354329691317021872984157158523094792669133574
+-0.06673628288418047560134228869477944213687632264958706279654091
+2.83293378737776162539876370057798692612237489483699048545545287
+0.45146062305657285242797520918797305108069875585313283870139339
+0.08934143940779221316458669802868913365252834011281116754182792
+1.99739265411402036627229490652104184677185336652072327820123501
+0.22030870998022632285360682592179072706866532464350574221240961
+-1.32968133055825866275546310116288038033479396274782659923854446
+-0.95365058973474616671726048460686443244560021834273172865371528
+0.48176974473161931659188114377065480614076822825117440593324127
+-0.97153440384426941570401684669334051649459182295444954258905037
+0.18666352144494250850692920084441757154234644598081868719507376
+1.21077252615593697976586057276086641519454747211932288456898783
+0.63498547346755824878504166693642014312695196354342763250058704
+-2.37510898304837156701463759371340458036437161358791579853500166
+-1.9266452456611821386085964120527993339573312333056876417414595
+2.6858653735489308752036481418147882867173218882120176628532612
+2.0579163136778167608181562575464034300538024851799874751263199
+-0.49875679381536352388903337103151365799977548364250560532224709
+0.95476708849363764207890391559124465345505756145123931136135542
+-0.34403551109873699208053471924535714353919958517200729799780336
+-0.19895526408252056032409845135982443834511796757213375457963169
+-0.4475238099526419459886413871952456513681700881927718429593659
+1.23518278360761984613419084432996754050496371463989745279793031
+0.9445661213686883925599246962191602476997062650507088214959299
+-1.805288354686753996355397998794540324998559335969814710818734
+-0.7235133959541791984901935219626046033847038938756732390531334
+1.8046881955308273157701567318463412166940758373310765920014845
+1.18625785604315112504333325767892788323587323876893425355320618
+-2.0344505531371113483476358459845414712253343228913454188217468
+-0.72129099250185619375686944441046077146296140676815788208702117
+0.69700274606603889922387315460622332673227536492327466867325904
+0.0338541803354434153565395229585236366275413935921277031608521
+0.27674134861628521963677988574356345768534610754243278179569536
+0.3450189911379297686147359836332619395978014632728541742395779
+-0.5744612222294662666295095802845946744660060217144183389945272
+-2.1401419851120298884050640897164792031089985938603731098953949
+-2.475306758685792775224097905276378752817608946497611173462498
+0.74414538761380102305612934805024944986718041274867925295958327
+0.4009663622574130770822531144343837361582105319471925667351893
+-2.95640043976892192053226420067679672095386561016639646399203391
+-0.7705877863146956540458499370376907643725783068356462499631948
+1.6318917326119420452001871701673571620713847405506130082417133
+-0.9753554350180776407534694237189415732841517430170038702624415
+-0.6709007216840414789168327689639305312819135042015727691354356
+1.3063090429696816011032918220042441516631077306182734353976986
+2.2687830362339896110180984091935407623465082970400790270612644
+0.74455402362741207311990921755411407795344429555031945206137385
+-0.0464330783628570546769891826610566519069778082652867536396097
+2.0862481489852289847362060654575221444061674995378324876043318
+-0.981873559308810941430389974286071317402261769319129205102677
+-4.4922947751289954392281606881965066549382956771758191511854306
+-0.0426660642827708664251969273176147630319496660877702515848753
+0.0396010444934846036948766942569390602765665474253547165534288
+-1.6077104491836659728053413997955799586957496537628542393547279
+-1.5349408013906555600106109539207420242506746358654972677136591
+-0.5137669189379050044239193081184290500592898980389602637702685
+-1.5194400662600721540516227226144647569037368008371602956937161
+-1.8736249595537908942731556674459114048444120282166142578754305
+0.1176193619107542223139758235412007899829549192227250957087861
+0.3646378843754825577604179899349616944014378733845789246127044
+0.6614336704749501040523214938942788452320164022147490782119061
+-0.6201909261394876493541780132369834377979063687508998442643737
+1.1336932158706201266427695077855289604668602820892360700911833
+0.4011692583876588689461940808418090827242355185533628893879759
+-0.031981665613701933100133348535252771659131477197664837478189
+-0.4490321447779803137836409499419072587350805850332826723699027
+0.0329475382414193942566590340646769970796713282963859281278106
+1.1871222474761146452455281888547362464217800753431881842814197
+1.327905916926171352667761790457881359187746613801174356144108
+-0.3880158414623024510754050432972355287268393163282409771040508
+-2.1297076612641716090480059740801130191808332209264521669903206
+-2.0650522966286903286635478127647039360574108353984519338515505
+-0.6352791399521314724277897559546586836769299981268470891395981
+-0.4947519972018366209847777194158825926422677506992806992816057
+1.1302881276822531759088036865261492167005720661601291744160478
+-0.6152965031958286080324993839028033659468805864014895264179459
+-1.2319891152892752829661934565954111193063291796743799162278346
+-0.0965748290630814077445069038450904135890916696583891309681339
+-0.4169348251658339565144938939563799468485746045414982658853979
+1.6922625163266315891115331103202956076379441757072862135428972
+1.0466615139241494341841952857979027615696173356004673459594196
+2.4352922526148354662687089239401618934423366810211413960209315
+-0.2015271728220316419201705818130211679005940578877765626351141
+0.5231547867693168694952474231549921227123397337039134678337099
+1.0247984070450733664196791237259375455505543588882022587429184
+-0.3108530041668850308078872241171229641084477245329241971069502
+-0.869235764668352226543321544430016608581641314172446924101723
+0.3337385773009405663756434929175579083635817729797263266065435
+0.7824615933516339858607608957036608759662627966650440134611985
+1.1489447432517010202714369411762497030198457055861695248082207
+-1.2675025648678892390094416522026273217482620786153223091996727
+1.1077280101615961351287295325052859911993532006346971114817787
+1.0258560730572172783065683576747829324456916431384689687875163
+-0.3330435989122286995692900282365708895862188810033448368510979
+0.6363033733124077966633651777211727039515188614469790594528245
+1.295240527305576265306830944971658114570272892581654277830272
+0.8981521611810378433758162458878692118194976051530916764204863
+-1.2444463804396122939087890420682960143602868470598664027172493
+-0.4302659511093591686379337535615584315212054269466411276963959
+0.357839663382418508403421033244035492815637684415620502576932
+-0.0266774526143596505942427440060401202519602400518725427187671
+-3.0862014844727626319831047165191873697683053111827650008300842
+-0.3605109710769521483053863684557276269049242714219563838029289
+2.7460904168814540346257389719981767627627983946827493960854137
+1.4054440482488948788428605594937121160107760810467954870668514
+1.2217690342168398174437106270970273285514430248085206681228696
+0.2777934604126524849162859587873922694884399671380953365217013
+-0.0183768174605447268185647302007627553330211929196041418354499
+-0.2979355072017907718192060959118417575916091398263254579907234
+1.370096988632309755422924603199809199169231656369629731545729
+2.3906500196632812560972428598237222827311785248056684096207134
+1.0222898700966580663256322661385480987099543548977066784588545
+-0.3713525632844606292937815260056711325073473986408370945937134
+-0.447111023421550405039404746201437940169757161479086198993782
+0.4230059645474924061306833576645281991167276687451703735316371
+-0.3446175445072641769756334329698453184433985858811905410167659
+0.1116179558942008593176228951501089344040060545578310235330581
+1.6987626125488153349550523880588347527948629732104167120307034
+-1.1636926159418146487205941875261369172996921750810496779819592
+-0.0931390555224934520883524849708133179610146253164097963541224
+0.4280364909530966963718341061096700037004840657323275289570154
+-1.3122526825377771747565119781477676566743979000648379619171664
+-1.780948437804559773327000979943026467348752362255510124744673
+0.7860264409239121575758928769473192043414390252678253614610689
+2.4891430422182410656435047634265982321749802503391962992509541
+1.2164099837150167725464728637288195435683876490861000113618181
+-1.4529023136104547330625140265743983885295452974090897811281382
+0.7170203724440175251814190360724320672733514023228441448090486
+1.6726238321939850351504736299661018715785889308916031867891208
+-1.7334195718854327066314951540775794160235142783604335032053409
+0.2369013872184233297586885966017926094307519709564849764302474
+3.4705393302243079283872226752061752841187692347625633089463351
+-1.0498215479440293809810320213829386569276458268187761957157179
+-2.6624432649744351428167417619153896727779894258994617946409982
+-0.6353892664730018295379408160490112296110230363087216109551017
+1.7711969997094218604070722448703908876418909728841572202110178
+-1.3908660269024297189140700574835100613031774368366330835264122
+-3.1431360384040415888454836879754593228092672443022233168880651
+0.0827128724359211308136539298498851173255024684168403317324753
+1.2507695144407452328700592953258741274146752150539743835727585
+-0.4171975512811254753093965900396060994632658695249236960800335
+-0.0524041363456177759750758880536729824346278158041556910971585
+0.3457406547083777170425842087266450413594643024566339306526938
+-1.07382810157210482078267734185874008486040255920004869320556
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfst_adjoint_2d_20_10_50.txt b/tests/data/nfst_adjoint_2d_20_10_50.txt
new file mode 100644
index 0000000..d8e506e
--- /dev/null
+++ b/tests/data/nfst_adjoint_2d_20_10_50.txt
@@ -0,0 +1,331 @@
+2
+
+20
+10
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+-2.70668492785359953264203689083025128596858544789767186399210503
+-0.7980287843598062182644026521325997234507318426407596649204636
+2.90975315792134540158807879979545029897317978357424943032522203
+-1.7500374489926229685230336613935762266873738223097383106049173
+0.9144060427892110390798822183045604329440646340827081149674575
+2.8311696027444974849124953705108930229424223720097234724104576
+0.1848011723091029062374395000539375620522571390548848994413123
+4.3785237918001196231703768339806214620430241337346077320127897
+-1.4829598225238285665927622193390189579445220977956570877320344
+0.36131938962752668564931956792005495013325505868474278578584952
+0.93601322002679530568915122449216814183554098027726079258184644
+0.17595332536433541971679625934322768155506990037749137502766111
+-0.6678416592075543725402564333537595208041829935646290178123583
+-3.8686261374456848134129823311894507714796483613081895813059453
+-0.1461291370576306799912494257793256534485219607795063385616732
+-1.3003382500307902453099767653035086441621454996750151090610996
+-3.1543155527284074929937641757943734435852864633178726189020653
+6.145313916854393620554734354123494817893668166923060866821956
+-0.97429212762563456274906820184427241260234299372905422337708698
+1.3759776067953720461801361420624123455033169154531054158382798
+0.2376423178248998960522282080844813663564393806129836706561517
+-0.9633905521822569705329501365729889870630017974642559724712133
+3.3609093094800292229549654452713403015256902047506189037783715
+-0.9526475242278619985217187599535049901991155432209022134672693
+4.5491579007618350164240421909845284897372356480434022191814166
+1.557837252521351351462587482933884291083252166324366469862512
+-2.4405061637776431313148232769891398655807788566700624397359942
+-3.4064566851709168754169772701227556093037016825897137223246397
+0.7825833719935938933338872416563408225639681181534641367935008
+2.2685355345106277597306553299038320355759612739707936768963681
+-0.7939893833525746591828501635322673250954840587197598360613255
+-1.6593466279028660786226606963057935071568292017425814207947493
+2.3074706139041294049738931805625399556582395591523383041399607
+0.1816001337668048279780449304335147556631691444463991448612273
+-0.0350191712612427075091297494738116889254692694511877921409157
+-2.1391450255612670962062990251484405964869171693520445638689246
+-0.1227434546454076441295023851860886656580998828697771668236592
+0.7874675952140726128509266603641277331050306044046615236001563
+-1.4119559918420771425866064108225669447423419903335974671054855
+1.0069848580482004313495133825324073172541632290388881835397613
+-2.4642594679682710642594241352724402496082013432307710669974709
+1.3628053680647640474132452206444304759154242264490458742636698
+-3.3912831586988109082802292821020663236843722973521109456890448
+-0.1892094094191945852531983657058519729804243584411160905715112
+-2.0342288614083308491494159660711690933230064747745419731214833
+-0.8735493595462440058907194148433406216402509150818860654058318
+2.4471568663482879395187212781423566859461149449670868841654155
+2.4176451750745355165929583802748574285686526433032642904678503
+-3.12082004133126379630052915657054033262839439360128951984917
+1.8356491175441879483064683401921130103591838798461384916079329
+0.7326241743739036176944770605242068796181054159601501186581634
+-2.1463651023323428109344801721071411862921246402060042555708942
+-1.1215252338279086988020135282679463426852697953692326019994324
+-2.205131839675436629047253564736605737878992737424718325342814
+-2.4422967896572567092541637652527364573924825476060933707572896
+-0.4539400726597934221870087687823420705043129391775678124213158
+-0.2612640794353116227053233418509184540694957063691144914901066
+-3.9724266168669470636430588505631584156543729270203794391930494
+-2.0853767665987169275067854433432360146572911545412749105596996
+2.62177280149801963682736951552500276826041340849148705341841
+-0.0443033212791823783601100399529643226255209094984702721822668
+-4.5010152608790295221713110273162392681416084342277951014064855
+1.07802744208692948763945688445633763983602042637081304505191
+-3.7112968335856745773262691764319318577948290877976900740697014
+2.4127923682949903045256864460995263583632033037557904630827129
+-1.9856798440904900101354352746556906039073148321727535753770752
+-0.8964358831389882386828608699558526151418583773310621413845615
+2.3424407275589633302408731367385115023897254349060166463313401
+-0.2007710396077639864605653523419593088314142876382838058221792
+1.2906595649993539842415029468218824624761722775983106092065546
+0.7527070659815979237152117398648864733058166261744285127364136
+-0.5900553701844957323127325903919366266040675578979712380144366
+0.8315803865643513676897295902353765976727919925999588340187098
+2.0660062935529555810228317482255250563393344573450644810968124
+1.2517713940259354988903941644476061542240930872367232236197187
+-3.3714972747050939412065179555318115257556811699224071162626193
+-0.3365788841435114533085333596508609357347975969656300766765596
+1.0927140843915356225416194757077923212734480515544666537357217
+-2.5063857010336233779804450124446083979432007439275240359551784
+1.3737155681783009638982989606121135646126768515132183987142114
+3.8919093984360680525778696398623144617263756619912107614414318
+1.9623433509016602985243855130039947725740237397943308887694515
+-0.9036412031934747233469060446971457663558907453386666569588382
+1.2932768502863381614010242904952671097997508022885954680608942
+-0.3064198489946044704357427420294883348879135228183703008926318
+0.179304717620241552738526931458994392865978400655700898891172
+2.7269121964740104475149109763888640409075351867643769242993648
+-2.2744556562665058212359162699936506645687491155820757681041722
+1.150349866497530146542279171741149312741258515527653995190839
+-1.3725635426644162384137368074221688055417431473813294441933595
+-5.7783552036714685401122632579042894831708682614052252206083747
+3.8209885670139769803416203130141756322509818198144443519015268
+-1.9111656247035439351502437141370623449831187306485175665708727
+-1.1780072495155463216531375920456991852107411290334915331177685
+0.5475891681303823399999237906297805284693972226111760964047372
+2.4089693252743315127730692587637607826636168168927353461222366
+-0.0216022512379544715790629876394797680211758387073326718517721
+1.1428790498119717445583848564818081223759797800250731632504822
+-1.8642176457498146336406695726614977948083645372845420415769354
+-1.6416846709844911204001960077330433154050649745658587434093989
+3.9112568271735366597255975731605072269724082625600881156247473
+1.9157069775256919984451889115512286408200532579779768705194455
+0.7932705803597670562893864197163607622016769999946711724941724
+-2.3077398181861033157363706173471313293723937206496109850670581
+0.9681589741964658170679774455251443156213831102000394253510601
+-0.3707306272293738640607967861857229665157479917142287844979193
+-2.7540455251662087093676505902980946846393526802126080550002907
+2.2079252312353883121690891488615401071595373614407955437391926
+-0.5416053644263289311228948993929076010015179563433139650744344
+-1.7063043324477035945991360095450719988378060859264658980977839
+1.8969150435320384059122623032107052017792054829540212132094309
+-4.6160713945368268251884431514206127787588477566099064124297537
+3.1771303197340245789666775538862713829465798926305415181713909
+-0.620175014053055595427786780507883948776696249577947753869642
+-1.7304702793879235565312488816493884508578402909037468492574694
+-0.4151115511016065039359126483715197811239238697177554785077595
+-4.1575999694586630092856248077479270322266316223015354841003617
+-1.6980217512833742066859302570694394375938963587075438108798074
+0.2315094591830748549298126297193992674293536900379639061008392
+0.5818577232334147711235138212762948906977063975226039042666572
+-1.9933247843945049659322682565852542300988300760667561564070178
+-0.2200486146223441674186214369055565272395388949553341920177035
+-1.521213824896037482898119749411706562011140220356123020573323
+-1.4018738885919969048768087241784105555022158368624233760904585
+0.3005550109219729238342768649547168087322745313230072498703753
+-2.2677547590518331411794938267472352607580157340165245949725588
+-4.6418999143944161838415659774403043096836542473554308345366301
+0.8934941240952884067563903564365557092403194176127228623095747
+-2.3843416697046839093989258595042400829711605277057871808151948
+2.2457766140665302909074526342849818716296351315848544405423004
+-4.6892778918258697548631047018354799266074082487408198550793841
+1.9596671815989530233271652227649526057321712292439929248313348
+0.9919819098638936311800668447064982196239781481717607635209042
+0.1875366980602752422751267401342005276939472008022309335047945
+1.626182100111213331827364743340460427328979208452272668160934
+-0.0336605909574112373689053223150038174615396392246645588457314
+1.4027534725653455014568263881099425470950243092403414804024753
+-0.2705421418103551403205284636734185623841398123576246182369523
+-3.4184331845868853438136332670697417266139155335801826263039904
+0.5475856004087716038994201004428365873388110572299779833782171
+-2.520559805528378688225911389999138135392270542204875614242734
+-2.4775055347909230897378931044289683992927958017885951067515386
+2.9953483461529375469062933986266150863820338402293623346663008
+-2.75437039044608199102364424134461347583611290734294588176088
+1.19524703388068571928248528598202007766191264378983567647395
+-2.6973072895473623036974741344016093825577854175328502905559194
+-0.8567074494651868109528013171800843383159727274181221480101945
+1.4567630731077724225027328257775259296607393245546565668948551
+1.7836416604751731603782753073640842711457533377917264646367233
+0.2054133598747529947597571543898705853817956233405866633957913
+-1.6800608100993276064507172227887316876908542531422144989191692
+3.8385891050608586630044088747480603324853983193416081276919362
+1.3507634544587841012791808139956365906225029354973799146131184
+-2.6615697707341923699143704150390917840552983463873136570586689
+5.0813105546035446753668849238293439851645350404712998761969389
+1.6220484489843750364628685772899731110144568721445476099115221
+0.4204268931887054394934265641017963536304005803127955483182565
+0.5697338099682965814358897646715870511858830321011713427646794
+2.5716803813293639194894828668124339842181019782635541171198691
+1.2561928507943461610334687651048358225726023508347943271543954
+-1.702376783689289330123070852464132189282063709117970008850103
+1.6529866509519118218895404273134251415378294613595308388323056
+0.3782058379779012535167692129888044046330795988957637838451448
+0.2743446597856672851883686553019752097213188505106572899816646
+0.6224081762194213177437493143417434607870710164359019890172848
+-0.5808461881386603368206497340809787471401748442234616699303043
+1.9204779253749264480016321381999361462792651740724621768580768
+-5.3310333183549338838080697393256936177582658524139231938946996
+-3.4680932622403560639097539547965516526025322090484550116955947
+0.8976616244516736216368695737233014856278335911657187459019222
+1.1378508806493503612382665806646932408887739819546790519938352
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfst_adjoint_2d_20_20_20.txt b/tests/data/nfst_adjoint_2d_20_20_20.txt
new file mode 100644
index 0000000..796d9d5
--- /dev/null
+++ b/tests/data/nfst_adjoint_2d_20_20_20.txt
@@ -0,0 +1,431 @@
+2
+
+20
+20
+
+20
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.201326401841226822499265144634803231090444660833635656408098582
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.272502449871235944005176337000832389787308384521685260378340781
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.4639578196637028654618426122960844569745924535620377426170001163
+
+-1.76143146893263630507479969102574831711361320243036952536594684
+0.35899770819605732231881762940486068133788301466981915563161211
+2.83885693984458722014048253283289593582617061154339622561573007
+-0.59645159715206175075797653417445997322411208367010787663570892
+-2.70345075644926486124889580951495288356647764274422231897434439
+0.21103420597547403174372582156808481101804208339715706637167539
+0.80419416229930044937796908366804480752145501249073360645110793
+1.61823557797745338421874313098913819576515346547482347035491764
+0.38284768450806290663832043589241261030395899813851113686219901
+0.40560700202193532337816644748471112151041375255018741569290129
+1.45454293685326843619385865328664304903329553181427240728217551
+-1.12830432277914550162080892371604656737769895230634702379930972
+-1.2111741018264079038982105404715832582249174484942610471922139
+-0.33057860709593057774474971455516227034960897870508207223007765
+-2.1631665457509841208166688513836022738374125750017972290753481
+0.6579544681292133656828144563115845386034348025147575888302745
+2.4573388337610701586005668699082279015236317267634359623180643
+-1.1303213840152801128902369674933598241975405175426469145989591
+-1.3202607564641824440676057191475051488294080165037908209157315
+2.22689118033568770147464831307785161036355717797638855888804302
+0.18665355785887900118388995331464413721078804025935144929520248
+0.42229477681519930327948017732900551321342813012191274873967201
+1.41338872288696181936200256031878937991371036077637546116810517
+1.62002161552259685721973498080899625803650464222806704943673784
+-0.02337545822870082537306946721421822005123595793586494137024739
+-1.64652761209287698883999627693649701692054493039697913328717427
+0.44263180533338967144262404961245804245381462190156286675620342
+0.92228340697132823292628058252269411175602235872769815202244947
+-1.42824531919632421000568064720547392796364072231757775268092981
+0.48711833138245852553261734972517849237332089036309417870973055
+1.49387725607936522196783849443184686018709166682448120467846762
+0.37567866349895564725500667296409242979762484644521436159623511
+-0.51387163793270107059423505048278209592657005392491425326095608
+0.01048929749160606567562210382488871475626297981836018265687245
+0.485477912813827997761446500476904361844286878052349538035493
+-0.9416709692574697807211135905802181040962699875022078589719227
+-0.073235342431847205988612325253608759414754453646331135421918
+0.57886861398705916290094573554869619969655839934569610380221739
+-0.3108367935356654353877414593399601606611691816399760916695634
+-1.81935833904866201130107098395816442258167414765651570782128582
+-1.74264586388126226268803996281912595485313021430278609610542069
+-0.12973767606025167758694203679244445463657414801580073285651074
+0.90860654114391223623872728334624543939459551945176563710996218
+1.95722815645166269746427888565950602864421022837480104724835179
+2.94287298919397403236168886266953690858190500490543931754001335
+-0.16639669916107372976751657950753450213846826235190622282724962
+-0.16116327963024610354329691317021872984157158523094792669133574
+1.09577841127351046192815010641367543805036397245703174723178227
+-0.4484465012097205485866188786278442587366895850689328800039918
+-1.2768412672926743012813252657952025019175814610975084715629791
+0.3773174596682081687439714302315994885609827077647003382553655
+0.6281913957432409021700609324779578310981684043238482182433803
+0.267064829046074695877163179753260772245961272848407047727946
+-1.4804152716331516900867406877915594905562658430468732209977766
+-2.6071328587962370901018107586534069248070380260914699694549473
+-1.5506381412757315990669253850379659138341312458851599070019461
+0.5447114606380892069959523324943709815164329940395736654934704
+-0.06673628288418047560134228869477944213687632264958706279654091
+2.83293378737776162539876370057798692612237489483699048545545287
+0.45146062305657285242797520918797305108069875585313283870139339
+0.08934143940779221316458669802868913365252834011281116754182792
+1.99739265411402036627229490652104184677185336652072327820123501
+0.22030870998022632285360682592179072706866532464350574221240961
+-1.32968133055825866275546310116288038033479396274782659923854446
+-0.95365058973474616671726048460686443244560021834273172865371528
+0.48176974473161931659188114377065480614076822825117440593324127
+0.6132275337358948078022423262056858209759475403729040487551984
+-0.7517395617943339839157023100463655201805979177208331911498468
+0.6747731993946308873299269149597703475772096819261271624846899
+0.7147611986151006833032051761336881673003442325264153737838267
+0.0614858964706358516501929818837676936174968616425259426510917
+0.5269273896223616869475159634470181305462977746458103186493908
+-1.4836368432641383987280806132081161786452881848992957152742043
+0.6649119274635969454582726157268512700707588716657731300097936
+0.9515633744096675420990961971810926992514225453192302216078136
+-2.0981363036506163367692688013434957636971964810286476952337224
+-0.97153440384426941570401684669334051649459182295444954258905037
+0.18666352144494250850692920084441757154234644598081868719507376
+1.21077252615593697976586057276086641519454747211932288456898783
+0.63498547346755824878504166693642014312695196354342763250058704
+-2.37510898304837156701463759371340458036437161358791579853500166
+-1.9266452456611821386085964120527993339573312333056876417414595
+2.6858653735489308752036481418147882867173218882120176628532612
+2.0579163136778167608181562575464034300538024851799874751263199
+-0.49875679381536352388903337103151365799977548364250560532224709
+1.1429405507426701835284522058083422497725552710274254699869959
+1.8147216520802647049135377080121962810950443143082513880166162
+-0.3895608323327321390484545383263904919067319514444942144915329
+-1.9441220590549683618598570379746464548957804248791207558285712
+-1.911360917410992159979740707273971567773718829760723163494899
+-0.4332606021451201887931778873781820631836566155826536801693182
+0.4013635411937036863882887968227115501619765012794970130534125
+1.4063208631565966784167194522544906687760111040759289030566793
+-0.4846598607170153221396398630392864817920930572303286809253945
+-0.3115489839783544585400898122327124607091647407067230961980346
+0.95476708849363764207890391559124465345505756145123931136135542
+-0.34403551109873699208053471924535714353919958517200729799780336
+-0.19895526408252056032409845135982443834511796757213375457963169
+-0.4475238099526419459886413871952456513681700881927718429593659
+1.23518278360761984613419084432996754050496371463989745279793031
+0.9445661213686883925599246962191602476997062650507088214959299
+-1.805288354686753996355397998794540324998559335969814710818734
+-0.7235133959541791984901935219626046033847038938756732390531334
+1.8046881955308273157701567318463412166940758373310765920014845
+-1.6311692566104175377824106690856382893508454858707418533060143
+-1.6309439084962166936782558880780161025747083253824869277423934
+1.0140448730121283640988430975875879521937438696860588497833986
+1.6132212707786796254034979411658911263800884477564817065068974
+-0.7554796292521770880316086453215086363582907671757929559920391
+0.0706052816886972369433526246238788612020799907846494726977044
+1.3048103845057356099430897528526576200510648668015239987738342
+-0.7686552962176008980058599409300175633288868063687433256010729
+-0.7484654710897942481107523971656005505583460009719958133665619
+0.2422236962891424148974587374761352412254105103412358108990304
+1.18625785604315112504333325767892788323587323876893425355320618
+-2.0344505531371113483476358459845414712253343228913454188217468
+-0.72129099250185619375686944441046077146296140676815788208702117
+0.69700274606603889922387315460622332673227536492327466867325904
+0.0338541803354434153565395229585236366275413935921277031608521
+0.27674134861628521963677988574356345768534610754243278179569536
+0.3450189911379297686147359836332619395978014632728541742395779
+-0.5744612222294662666295095802845946744660060217144183389945272
+-2.1401419851120298884050640897164792031089985938603731098953949
+-0.7738489551364070251809672254733728790728900163771822727537841
+2.0352569844187303009092282727776637627362250158808857516579972
+-1.172044916425913714996262400349360111822198184355021577061512
+-0.0932517665686746095669284119685028014192990847187244034751723
+2.4687236716958889678742775773050457265371063496572186336423835
+0.0293693471843298558801071259039891883710300403529463209002814
+-1.3080780835884512400463166948855032152856554873440621131816372
+-0.5670678312397311328100500455380277717641601431850827445462772
+0.1367428944200031908142387070613481149334043444885785279553009
+2.0029195867699519393010479477029511526281603566457526272625736
+-2.475306758685792775224097905276378752817608946497611173462498
+0.74414538761380102305612934805024944986718041274867925295958327
+0.4009663622574130770822531144343837361582105319471925667351893
+-2.95640043976892192053226420067679672095386561016639646399203391
+-0.7705877863146956540458499370376907643725783068356462499631948
+1.6318917326119420452001871701673571620713847405506130082417133
+-0.9753554350180776407534694237189415732841517430170038702624415
+-0.6709007216840414789168327689639305312819135042015727691354356
+1.3063090429696816011032918220042441516631077306182734353976986
+0.2486386474884816388875252418173620543072670169195672743552431
+-1.0908843623478222628382240250428309563163552496047877514853794
+-0.8649052667017660181791321393484193994411470863653729899182186
+0.4124501220648015976960267346807032903994812467835316675946708
+0.1872468936568535030917695404446001678211987865197623056537281
+-0.2788976312511903516594542024836479267127013655653911984900423
+0.2261847388459337325564608129248938512058929424464453856166749
+1.6823203207427276036715954499484031842671835267471182813149061
+-0.0989487665050107206614526844022065503840606789793129470440085
+-0.4009330520264926069400773802926388902423539482584582212360613
+2.2687830362339896110180984091935407623465082970400790270612644
+0.74455402362741207311990921755411407795344429555031945206137385
+-0.0464330783628570546769891826610566519069778082652867536396097
+2.0862481489852289847362060654575221444061674995378324876043318
+-0.981873559308810941430389974286071317402261769319129205102677
+-4.4922947751289954392281606881965066549382956771758191511854306
+-0.0426660642827708664251969273176147630319496660877702515848753
+0.0396010444934846036948766942569390602765665474253547165534288
+-1.6077104491836659728053413997955799586957496537628542393547279
+-0.4367021738146980469941325607571544614734391112660203672036371
+0.9603268003152493275145389952958160338048458621235922099717952
+1.0129261803640052395050590119169578972470118718530903304497926
+-0.6641381995357217811546390835085151045317499738116576708921783
+-1.8322623201686362167273951813204242580551430782748604423655935
+1.2111651447040516161944629593961572492648981104387769186107376
+1.3874657193197334007851892129722922100618132352399093504857668
+1.6109053379947642664443746447988134179024532801831537108517314
+0.8478740741698271511922221503038596179381560204319005863160594
+0.0263408430269528630954879147450289159925278543659567775893825
+-1.5349408013906555600106109539207420242506746358654972677136591
+-0.5137669189379050044239193081184290500592898980389602637702685
+-1.5194400662600721540516227226144647569037368008371602956937161
+-1.8736249595537908942731556674459114048444120282166142578754305
+0.1176193619107542223139758235412007899829549192227250957087861
+0.3646378843754825577604179899349616944014378733845789246127044
+0.6614336704749501040523214938942788452320164022147490782119061
+-0.6201909261394876493541780132369834377979063687508998442643737
+1.1336932158706201266427695077855289604668602820892360700911833
+0.1963879840631133048085083577012435856591188729940918218384554
+-1.3116809009858509440112323098750147240603171676073791228903442
+0.566109437417772591424714986731289661392935139649294912319353
+0.0367831950433809544718663999320526838662289351056761848877367
+-1.9730574662175040679065358525901787819790265407582373792297965
+1.4674571619685986920984125254953911430361333108758522516563141
+0.2263634436889931168215402903669916113995263797325392529455254
+-1.3787704010670308679834471377966260708610557426636446585904147
+0.6905637174410055388280157657738354061406056616257086452092977
+1.8035197820169968109307284684879020457312741601971250834861694
+0.4011692583876588689461940808418090827242355185533628893879759
+-0.031981665613701933100133348535252771659131477197664837478189
+-0.4490321447779803137836409499419072587350805850332826723699027
+0.0329475382414193942566590340646769970796713282963859281278106
+1.1871222474761146452455281888547362464217800753431881842814197
+1.327905916926171352667761790457881359187746613801174356144108
+-0.3880158414623024510754050432972355287268393163282409771040508
+-2.1297076612641716090480059740801130191808332209264521669903206
+-2.0650522966286903286635478127647039360574108353984519338515505
+-0.0904238090000428818140893755030459467793348930195485948913758
+-0.1435877115013386660413705612809084530877744287998003882597795
+-1.9605375993547978856129660784596293482677638902556783157242594
+2.2669468589409421676682326216929323159781818363140318937774738
+4.4084665937009685259298733509988920374917650866218931472876024
+-0.4737666595670335224901379861484753002618101025878844546485905
+-2.2130139125585279832013785609477084761446430754883108700441704
+1.8632228069089716299360745281145603369999538095484250587441218
+-0.3859363783222216561715757930217275022805751751543673080220207
+-2.3672400797815551173951882894097002507897334218742746754037369
+-0.6352791399521314724277897559546586836769299981268470891395981
+-0.4947519972018366209847777194158825926422677506992806992816057
+1.1302881276822531759088036865261492167005720661601291744160478
+-0.6152965031958286080324993839028033659468805864014895264179459
+-1.2319891152892752829661934565954111193063291796743799162278346
+-0.0965748290630814077445069038450904135890916696583891309681339
+-0.4169348251658339565144938939563799468485746045414982658853979
+1.6922625163266315891115331103202956076379441757072862135428972
+1.0466615139241494341841952857979027615696173356004673459594196
+-1.227594748830359884823952085724710957253256012059611006767423
+1.8707561071913371183303883701874485668737944211868511497783437
+1.1652170798977703548997625093956489963008256252787300948116798
+-2.0806259628953629206350531894830125509140768222187277042607706
+-2.8347406482205884396626659261203436216678349356658849471760808
+0.0066923236635105230697919539188243642504127733168127855887384
+1.3655728796935377537444473204212353860020320830812039365996023
+-0.9539610262197571989847227031126506867852062641747053443293054
+-0.469737027954702775192715073697834955813944612979059012909441
+3.3585060753541285754034715966486394912613188535963324339021777
+2.4352922526148354662687089239401618934423366810211413960209315
+-0.2015271728220316419201705818130211679005940578877765626351141
+0.5231547867693168694952474231549921227123397337039134678337099
+1.0247984070450733664196791237259375455505543588882022587429184
+-0.3108530041668850308078872241171229641084477245329241971069502
+-0.869235764668352226543321544430016608581641314172446924101723
+0.3337385773009405663756434929175579083635817729797263266065435
+0.7824615933516339858607608957036608759662627966650440134611985
+1.1489447432517010202714369411762497030198457055861695248082207
+-0.2592445830898175569654732175087604681871677236711214011962899
+-0.0342011491396142817083003714167553420704909072311491859581195
+-0.5170876099381527659418946561542363083213638948317423550504901
+0.7544760167092449631213888755352353821394249526092930287334737
+-0.4851060780314592392192130792082967454900451239602639409073549
+-1.1811854476881667623843350094455305168372578223544429108810373
+1.3581371229829790047681029023288546593727491447647367375173196
+1.9643380656086611705324840316493822502728178469265112593884275
+-1.3662356794466954960251943376605372645831293100462011977553277
+-2.3897940868122641258187430541103859263702120130047275653345428
+-1.2675025648678892390094416522026273217482620786153223091996727
+1.1077280101615961351287295325052859911993532006346971114817787
+1.0258560730572172783065683576747829324456916431384689687875163
+-0.3330435989122286995692900282365708895862188810033448368510979
+0.6363033733124077966633651777211727039515188614469790594528245
+1.295240527305576265306830944971658114570272892581654277830272
+0.8981521611810378433758162458878692118194976051530916764204863
+-1.2444463804396122939087890420682960143602868470598664027172493
+-0.4302659511093591686379337535615584315212054269466411276963959
+0.8295227042869193739094441405664141704256549784711287087481462
+0.8929712474006949297209327053566756550203527458828585995227957
+0.4184880360913225259763948979335687208600013226210910754415792
+-0.494073152511769613540941474410921651622090346788503099232824
+-0.8093006493632088467383288879916810767165880964516417609013606
+1.246104739359921017715692345189672912079360024234516871284281
+-0.9931885775115179240373306061199007256101757395810807591225188
+-2.0634648718768740147036531988847078618589960850317907668265538
+-0.0508656014105428350536426195486236663976138295295943640001501
+1.5436864833743159742750915922561046719760586564313358852345142
+0.357839663382418508403421033244035492815637684415620502576932
+-0.0266774526143596505942427440060401202519602400518725427187671
+-3.0862014844727626319831047165191873697683053111827650008300842
+-0.3605109710769521483053863684557276269049242714219563838029289
+2.7460904168814540346257389719981767627627983946827493960854137
+1.4054440482488948788428605594937121160107760810467954870668514
+1.2217690342168398174437106270970273285514430248085206681228696
+0.2777934604126524849162859587873922694884399671380953365217013
+-0.0183768174605447268185647302007627553330211929196041418354499
+1.1281321777391201002462327804790536243730135786137139907004621
+-0.7575958104368157281380376412374055183354455706930442840269075
+-1.530616411041210434274657403809225278246613665622787980116335
+0.7913411432206845002082773712138775822988749614312316659208852
+1.9815722324418087744669585428528286998267653814530301066981006
+-0.3605423648109982190087513612154559492228155110752339089231104
+-3.8416864435372559371562614833547327921396750405397510336491496
+0.4545761192467260517624820712830585815958668389344454942317948
+-0.011455867237755096283907014483580540606535060300528592143629
+-2.7623530486309778079204874990854428125046876935978270118328033
+-0.2979355072017907718192060959118417575916091398263254579907234
+1.370096988632309755422924603199809199169231656369629731545729
+2.3906500196632812560972428598237222827311785248056684096207134
+1.0222898700966580663256322661385480987099543548977066784588545
+-0.3713525632844606292937815260056711325073473986408370945937134
+-0.447111023421550405039404746201437940169757161479086198993782
+0.4230059645474924061306833576645281991167276687451703735316371
+-0.3446175445072641769756334329698453184433985858811905410167659
+0.1116179558942008593176228951501089344040060545578310235330581
+-0.6204005068462781024716002561273461468810515653239520391317346
+-0.0164702105807811552983223057796830835360271663465455751374005
+2.0886451866903745745699948660673813034269630174455162543680589
+0.4196987170530458302916926197987466599408980772328450681627724
+-2.7472400634158959966861154465514152366762588373398619845765536
+1.2497996121905790593538237620745672465402752649427955971216698
+2.6284450414858485778640166953161437429346160265353604408833332
+-0.964252255178775501313754023905459646927827737347813983795653
+-1.9783864189740700507327962285790966348007689455070677451071888
+0.502518762778165434753970203443449278421218287239239207572852
+1.6987626125488153349550523880588347527948629732104167120307034
+-1.1636926159418146487205941875261369172996921750810496779819592
+-0.0931390555224934520883524849708133179610146253164097963541224
+0.4280364909530966963718341061096700037004840657323275289570154
+-1.3122526825377771747565119781477676566743979000648379619171664
+-1.780948437804559773327000979943026467348752362255510124744673
+0.7860264409239121575758928769473192043414390252678253614610689
+2.4891430422182410656435047634265982321749802503391962992509541
+1.2164099837150167725464728637288195435683876490861000113618181
+-0.1995106591432924008281693644949929496195497219057806331023159
+2.093956642977050823789781010893300886523508162877933985043177
+-0.2736666212462762571198823484860720569708528695274644175839588
+-1.9569980525346889411904853381559074689451661246956941054236402
+-2.0191022867553373203411975882790001894442539063634721158058497
+-1.8642754868258519287335770343800991167343446318882960946595756
+-0.0533033459450924414620826379617582724777348328786715115148705
+1.6331709065519849250047550986330533142453266908962298050866026
+1.0073049585506481946377793707822389275264222929991317625387274
+-0.1345637788668715528054018404642677008438334875582146450971728
+-1.4529023136104547330625140265743983885295452974090897811281382
+0.7170203724440175251814190360724320672733514023228441448090486
+1.6726238321939850351504736299661018715785889308916031867891208
+-1.7334195718854327066314951540775794160235142783604335032053409
+0.2369013872184233297586885966017926094307519709564849764302474
+3.4705393302243079283872226752061752841187692347625633089463351
+-1.0498215479440293809810320213829386569276458268187761957157179
+-2.6624432649744351428167417619153896727779894258994617946409982
+-0.6353892664730018295379408160490112296110230363087216109551017
+-0.3029401170293879926363092996395917993004566126359692829814109
+-0.5716248308376305239971614311698773344236354939625795271961611
+-1.3330694138453641553495793843361564698844619615241691547193119
+1.8104858626321508168484192079238181133090803832646170114962594
+2.8216402654410421986261833075476094751587510770436327924445789
+0.220835184452779732620885778632557086085693747212193277348536
+0.4383871879568647420523106925056091277829139259953324404715664
+0.1234851993110179658564860389432616688210777642720533392050427
+-2.2277496360958876484397762525225859545776205720207268131109187
+-0.4765615411124610093690031049132636519711869508610110392477159
+1.7711969997094218604070722448703908876418909728841572202110178
+-1.3908660269024297189140700574835100613031774368366330835264122
+-3.1431360384040415888454836879754593228092672443022233168880651
+0.0827128724359211308136539298498851173255024684168403317324753
+1.2507695144407452328700592953258741274146752150539743835727585
+-0.4171975512811254753093965900396060994632658695249236960800335
+-0.0524041363456177759750758880536729824346278158041556910971585
+0.3457406547083777170425842087266450413594643024566339306526938
+-1.07382810157210482078267734185874008486040255920004869320556
+-0.3201320738709138413000932926667172491621184721046751216886849
+1.4457282344888737377970429969153816434265171417092333240354552
+-0.0933032714587544605626179147224317785437335463858156301926106
+-0.9936556781633783461707289598136182497118999116338111430415862
+0.6050409459161970308719701954431559217284219287567037335788241
+0.6838126019125751615459013131144224282335331325206240117501543
+-1.9006214627758446102600633914176032149827262566786660997632504
+-0.7443942053571110838981746801934621953941291718336860706351144
+1.338006410766089050243871640566579508433070743304586611989292
+2.2274811154563868285327742634033547570838987116931057249251122
+
+0.5356506216935318567168964679980224448474954197740742721804425662
+-0.05251382922654688111844675415661855947948761360659425718759593363
+0.9518095182124288782767378820155949547911261560251647626870735792
+0.9956223852813107496522616247115213137215848581937907906567140918
+0.6741052796006089834676571454955036801632897076493615121596900136
+-0.8697750560716627155371707094260289644371901052310063829991901781
+0.539462018274751480324642644804511358394409237082129058457521908
+-0.4274845026027779916855619203781095649893449575458629944853980527
+-0.8604697501072873707535504424154609782723273602355359333803551115
+0.3822062430356176188977280281604014506988427784943414973817258933
+-0.7335087736711041883089151876515694737975402817556229765975958245
+-0.8786687027770929787301562525828872003547410177701220950278899658
+0.1944979336074391420204691208780533563017707991268605634570366201
+-0.6717069716036456017860348911350501039034020263227184271420653514
+0.1841240265716411858721923885202834145897392121583597644960322461
+0.531416327611542071221970089939764430329756625444579259583169101
+-0.7793598342770851820561551396646691186537674923197586552161425487
+-0.04982739811897050028189209963034074300557183166488389610036293982
+-0.2152831478765442996690076717147867376683641103330644151579049018
+-0.1430325904665435237882241441707630670064919508747748361914900932
+
diff --git a/tests/data/nfst_adjoint_2d_20_20_50.txt b/tests/data/nfst_adjoint_2d_20_20_50.txt
new file mode 100644
index 0000000..ef53837
--- /dev/null
+++ b/tests/data/nfst_adjoint_2d_20_20_50.txt
@@ -0,0 +1,521 @@
+2
+
+20
+20
+
+50
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.06662280658222395292277120308710763155061492956109425585060104387
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.03033282430572675531746093685427819991131474555746947624302750854
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.298624483401859785505117280219513339075442699781715140864259155
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.08207325709908859955349127721623747402414949341932039321448366214
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.2960310066429102964680480971300708536474348030395899411240080615
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.3828540819028855178054925224849411075824391563611448148957922752
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.05516004143072870448596121508383272033655812692006033619596436283
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.237543150470257374929526975092414814248607042083779025974909265
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1961792130308639250827480820713033155829089724167338962105237746
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2142418523833641190529439639573092332483770122813062909521274767
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1135357677968130998829352447933571252330847135039649993495538834
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.2964172037543097881772010061608292321688207375187647517994300766
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.4548285955464891231119288561274837990859107268507022268607509726
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3651121872834882789243463430471126314059253082862846478910152932
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.03483660428292199961165049752462598280091915037295030179924953551
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.1992804389047949490230324961860853758231538395748301207070552558
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.4431890540148335609220307427015664134805998752712734611429558024
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3054113878224388525727863803324009276678724038269882973431353032
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.4515130176933212461457379892011009039970207793061012850021972899
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3123746114641262123026545021046848366396752725405471632077695806
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.4231801157326450939593950301163204387907848365988263186034774935
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.3371051625361155191605058367081984631262698548567050132698474129
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.1158569246667318677726382100194916993028532082942523770687608535
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1257540256523933131861849134591394031118487575140133228233992713
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2225091693511738630364909160801392395880684222208336319127352641
+0.230402910644737899027368109577132641139999484424691959789185425
+0.08108630935780192087288539681850579539638581750949007810609253602
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.467183882923008897863779786990467499952265441334467024356247305
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4143426837235721258639164387297265587502064987110615120264960548
+0.2472557826481684830963989449602703101137738953947821260330747
+0.3260230638578554310965690714273014694353795654392329747815338185
+0.3156638964725781243541272856934334091751310165287943458804827568
+0.4230828797886864872654427218269417536997368489213584227186758493
+0.1291749563767577778093174420442248066853355018583144808226772126
+0.03008038880397752995464766841114511366776748602297501273741588034
+0.08822777041715483808900537550686335988124286767733376669602735212
+0.2440542348872463086448971798771983090954435309328837698833409855
+0.4873897775905716183934451117229193992829973538264409415320627283
+0.4963749181604996707711627826124667766173996319815968541805691201
+0.2820193117835646460363939425636435303399129252463767075702079429
+0.4179251390915574619103395034989051818090561346584808617678582754
+0.201326401841226822499265144634803231090444660833635656408098582
+0.04054892266065765506430027504488194441193313938297750889020142059
+0.04021826656973756695539173905743953803655775666757835902774775232
+0.1523991209807376578892471212997508118935752110980944656933526434
+0.272502449871235944005176337000832389787308384521685260378340781
+0.3399053735581819219789408147619129792234385226566519339286954902
+0.2058296915808363530212836937615578729259850336228305216098969207
+0.4489657084957520867684053250236424967958623562309511687501852153
+0.2249375001022399482177021326361767602306099380452021854751372688
+0.3853132582342397948923973854575145468799173563498982036485609219
+0.4639578196637028654618426122960844569745924535620377426170001163
+0.1846615566851474560808622296504386351174368575753366711982657403
+0.3839126554233829641792241169995056112118738549435185680451106415
+0.358957081013045692924547554419897111750212389712572443828564006
+0.2368715426933632797203883114608453601301280965983514357031010166
+0.1015633551925185741450449528428193261899769078214801258496170621
+0.4879523795531072195691844705038987386977815390062911906717683948
+0.1695489630155716515516037599674566844347401374102940702411774109
+0.4989055963203276874130654061778803284303962145484476976641785229
+0.06597713563134875196413388873157392316448289978881662980442866809
+0.4185263199001522458669142863738759200408224269123403780399225034
+0.3882968411737077793182460913076719955990003553066639475551853515
+0.03255623598208432111570732264349275889070247369224840425020245548
+0.2535439404935544197331984232733988640549412837971456300023465276
+0.384865504568687870081160661201127839598602309270532264614380477
+0.4224397119523030811054991897313901508203320370822952833787588886
+0.1431288743493055020786095199054726087526637606135342513786504868
+0.07508242151240927532040654326055125402842379765322060248915709291
+0.03488256247317815731161238939613475543191815994111601665491122214
+0.2172580560639218655701442687403257247049109673251844219149842137
+0.3455515607589044047244320070401003626747106946235853743454314733
+0.2726237581724535975061505494183730437837098775266075552558040507
+
+-2.70668492785359953264203689083025128596858544789767186399210503
+-0.7980287843598062182644026521325997234507318426407596649204636
+2.90975315792134540158807879979545029897317978357424943032522203
+-1.7500374489926229685230336613935762266873738223097383106049173
+0.9144060427892110390798822183045604329440646340827081149674575
+2.8311696027444974849124953705108930229424223720097234724104576
+0.1848011723091029062374395000539375620522571390548848994413123
+4.3785237918001196231703768339806214620430241337346077320127897
+-1.4829598225238285665927622193390189579445220977956570877320344
+-1.1132907000911929542391627734147386193933906136259302849833079
+5.0391724406295806972081423460707522320608322492428094893994262
+-0.8480926408252967702985399396586643417165660146703395135041582
+1.4905793653004574985788656457775896237363058168951720670633154
+0.7754690209654190786519237772865707292875424192302983665327786
+1.2597421351524133957580012041248962865832366382619104434019139
+-0.7482564049576327463251263373551084647841413401873712639755891
+-1.3114006616124870411949136775451574726903656073360494406009535
+-2.82850356310362669925338567401765910116674474764184277758124
+-0.0701657463528352834546838108465813302285873581313484149607954
+0.36131938962752668564931956792005495013325505868474278578584952
+0.93601322002679530568915122449216814183554098027726079258184644
+0.17595332536433541971679625934322768155506990037749137502766111
+-0.6678416592075543725402564333537595208041829935646290178123583
+-3.8686261374456848134129823311894507714796483613081895813059453
+-0.1461291370576306799912494257793256534485219607795063385616732
+-1.3003382500307902453099767653035086441621454996750151090610996
+-3.1543155527284074929937641757943734435852864633178726189020653
+6.145313916854393620554734354123494817893668166923060866821956
+0.184065485988049656536901678106741626223714105831163343876521
+3.9252478511019191329034331001720755328984154565650311907093188
+3.6101340093956612607818517530745257615703949218555150431106445
+-1.1744347904395104777169697727732023087444064096297176221870838
+-0.8574072977676919949384095938489288443996708933936860474909563
+-1.5371851737460757382869399838434231507049104253222500746937417
+-0.4501545853624475184605897501134019586180560933819168312895555
+-3.1799788942288055869936569592625448938053414101719597632990041
+-1.0764291032799673955052365299860925695210075659219372927218329
+1.438784078452364597103386008350521192720019602773434345599237
+-0.97429212762563456274906820184427241260234299372905422337708698
+1.3759776067953720461801361420624123455033169154531054158382798
+0.2376423178248998960522282080844813663564393806129836706561517
+-0.9633905521822569705329501365729889870630017974642559724712133
+3.3609093094800292229549654452713403015256902047506189037783715
+-0.9526475242278619985217187599535049901991155432209022134672693
+4.5491579007618350164240421909845284897372356480434022191814166
+1.557837252521351351462587482933884291083252166324366469862512
+-2.4405061637776431313148232769891398655807788566700624397359942
+5.4771790872271617226279866815051470848630653111080560732970322
+-2.1152961911829162153122579322863382854667934569064800597917601
+-1.0812556485887466508549848356916311890818452301530836581058895
+-0.1783711308212910513227290778748407605940420361468183714115855
+-1.8274001386536732144208414769451006618430986861640309603207518
+2.1896609024572328526722216659017994610287661707479045967469162
+0.9172743090739534107536621664424691192035501367175305986737491
+-0.7801554043935361292681797197739999129688054210855422709004839
+1.6726525489756411191966672990974841737614872478785811891346975
+1.8276899024690559989174647615885728992957581255375184832222743
+-3.4064566851709168754169772701227556093037016825897137223246397
+0.7825833719935938933338872416563408225639681181534641367935008
+2.2685355345106277597306553299038320355759612739707936768963681
+-0.7939893833525746591828501635322673250954840587197598360613255
+-1.6593466279028660786226606963057935071568292017425814207947493
+2.3074706139041294049738931805625399556582395591523383041399607
+0.1816001337668048279780449304335147556631691444463991448612273
+-0.0350191712612427075091297494738116889254692694511877921409157
+-2.1391450255612670962062990251484405964869171693520445638689246
+-0.3028298295862848320074437875654518353591083254528036216352706
+0.5982770160581810637361384626476756265804653964302415319649739
+2.1908086568630669750773102683551742153751590639602336295695514
+-1.2365013702589745532904863271261538263459940540542321271097682
+0.2134518223271979834737715090391528029897751110530890922396534
+4.0023855116297846471516092676633132588401933854090415315617522
+-1.2991556984933324527864825910281705265876503695670173449006142
+-0.9402938264667808049290741147798221943532253510278843811782226
+-2.6104294572778615861048678760858812506970986770348561323125387
+0.3543666979608898901389286258401308800145737882451910226610964
+-0.1227434546454076441295023851860886656580998828697771668236592
+0.7874675952140726128509266603641277331050306044046615236001563
+-1.4119559918420771425866064108225669447423419903335974671054855
+1.0069848580482004313495133825324073172541632290388881835397613
+-2.4642594679682710642594241352724402496082013432307710669974709
+1.3628053680647640474132452206444304759154242264490458742636698
+-3.3912831586988109082802292821020663236843722973521109456890448
+-0.1892094094191945852531983657058519729804243584411160905715112
+-2.0342288614083308491494159660711690933230064747745419731214833
+-6.9706800001677677718355385352097153798626266608092748782002608
+3.428319426507668401015787689639996857793042782983758487066392
+-1.6822003591206123662179217589552114330863862603818798676208105
+-6.0807747773622976943455171386257161078385262985212041228623732
+2.4477797815692351329550185998594213625880259342338975656473038
+0.6838050747777030174093832041431974766571129742967810032088696
+1.2366245280213200113920769865379489360906714430738198088639504
+-1.5530516959681811676973160427867676984628067560186510337307692
+1.1465145567763507125047830364534883854742331627990327316122143
+3.3034337483919145910101664534210737363031021437865632238626665
+-0.8735493595462440058907194148433406216402509150818860654058318
+2.4471568663482879395187212781423566859461149449670868841654155
+2.4176451750745355165929583802748574285686526433032642904678503
+-3.12082004133126379630052915657054033262839439360128951984917
+1.8356491175441879483064683401921130103591838798461384916079329
+0.7326241743739036176944770605242068796181054159601501186581634
+-2.1463651023323428109344801721071411862921246402060042555708942
+-1.1215252338279086988020135282679463426852697953692326019994324
+-2.205131839675436629047253564736605737878992737424718325342814
+1.6109876250615729762037331994636163440341739081620999336980228
+-2.012682790434683093151087528563231078759496595269397512712089
+-3.5367994024640813481487069066873951417265685668620701702050612
+0.7656224956054276879621402249117049949592809912884014918963981
+-0.3596588401429152038991052679523984848878210866718046043881807
+1.3826237707018137125384662258086274735268433856563419999841885
+1.6321953762580617910728698125895595756760791766938804388558244
+0.4348270707393379824642736530876003065752806640458788543171655
+0.5445036489879887488813739239125806572959741433354683010562248
+3.6518531816846382541397251586258497728106044436232298851769171
+-2.4422967896572567092541637652527364573924825476060933707572896
+-0.4539400726597934221870087687823420705043129391775678124213158
+-0.2612640794353116227053233418509184540694957063691144914901066
+-3.9724266168669470636430588505631584156543729270203794391930494
+-2.0853767665987169275067854433432360146572911545412749105596996
+2.62177280149801963682736951552500276826041340849148705341841
+-0.0443033212791823783601100399529643226255209094984702721822668
+-4.5010152608790295221713110273162392681416084342277951014064855
+1.07802744208692948763945688445633763983602042637081304505191
+1.2898870679514652457725703758226733589489605357350968879173093
+-2.3151890956813878098786973079761258434495004721386501272487738
+1.4526163133100112786914652164465834732756511444338739830783648
+0.0923763203037050224664457775512590780139773207504561380353593
+-2.6672741921614743231159405940338004003643857487419023476541884
+3.1562536460076242747110564049905860322627010324336668290870748
+-2.0164011952635260440313220697053344142626196590940176661300162
+-1.0132796118903577150603037515361876381711869611724000526365201
+-0.6348271908421561313597055789088813349821815324804508894587834
+-0.0709896909827038380883507941210170151176502795448109089643943
+-3.7112968335856745773262691764319318577948290877976900740697014
+2.4127923682949903045256864460995263583632033037557904630827129
+-1.9856798440904900101354352746556906039073148321727535753770752
+-0.8964358831389882386828608699558526151418583773310621413845615
+2.3424407275589633302408731367385115023897254349060166463313401
+-0.2007710396077639864605653523419593088314142876382838058221792
+1.2906595649993539842415029468218824624761722775983106092065546
+0.7527070659815979237152117398648864733058166261744285127364136
+-0.5900553701844957323127325903919366266040675578979712380144366
+-3.7766110119494324901032461264335326402909642818986913848116409
+0.3178147680522773990463993059439820765265152796213570322233238
+-1.6217610792932547358173995494363140321942840158353334254454585
+-1.7731993927337252247690170715896343962816683467538075241320376
+-0.1847952817185350839315475933522750449619832522254057349981583
+2.5776468632364562886804327926525134880568529367872513404888193
+2.4984668924470117625903894403200105085913658521974408024708356
+-2.5192058540906738212139988844458124681680134795847166306848854
+-0.6818228181279743432951649555405360231184393523892655003991675
+2.3891813001591570809150093881212747186033587896823950883042944
+0.8315803865643513676897295902353765976727919925999588340187098
+2.0660062935529555810228317482255250563393344573450644810968124
+1.2517713940259354988903941644476061542240930872367232236197187
+-3.3714972747050939412065179555318115257556811699224071162626193
+-0.3365788841435114533085333596508609357347975969656300766765596
+1.0927140843915356225416194757077923212734480515544666537357217
+-2.5063857010336233779804450124446083979432007439275240359551784
+1.3737155681783009638982989606121135646126768515132183987142114
+3.8919093984360680525778696398623144617263756619912107614414318
+4.765118997976258324120931606349546696671701642311767884238081
+7.1574336996811935388773181430998042405210993493879583861611107
+2.5976058246975308313298196115346850835901380265793833920669029
+-2.0682852463294522748564088548390331010864707071260930675101102
+2.5918197104644275823016274885110853009190941506693618208341544
+-3.5956379214167350296620899493665729045425019172444701551422474
+-3.5163834212867441239008774478025362612213723708874601895005408
+-1.4917485847272523374374165641389452552349647205998028082403249
+0.3298418472692085684085807795325857068353699573070208396743639
+0.26577040791306180848509001907826098322253437677561640834511
+1.9623433509016602985243855130039947725740237397943308887694515
+-0.9036412031934747233469060446971457663558907453386666569588382
+1.2932768502863381614010242904952671097997508022885954680608942
+-0.3064198489946044704357427420294883348879135228183703008926318
+0.179304717620241552738526931458994392865978400655700898891172
+2.7269121964740104475149109763888640409075351867643769242993648
+-2.2744556562665058212359162699936506645687491155820757681041722
+1.150349866497530146542279171741149312741258515527653995190839
+-1.3725635426644162384137368074221688055417431473813294441933595
+1.1801342971563052096497257927564628202114799598991787057134897
+0.2112117060375260015988847502791054959660093243015783822331158
+-0.739227115049686131983945575246089543229635709149608547180439
+-0.6767635218177338633079402947250058643817543201663350174909833
+2.0992295481749908094417534927183421564651011049294778439676429
+3.3327109672379600111420335384110770426667080561786546744802764
+-4.2272151395463320598799537714489586018198967339848509552073411
+0.3068994914384037701089477197430379966918339025149198543408369
+0.1672510109212676537054232372711791476732290489041712861187775
+0.5653211099826707927524967617500210742629999358382718799603711
+-5.7783552036714685401122632579042894831708682614052252206083747
+3.8209885670139769803416203130141756322509818198144443519015268
+-1.9111656247035439351502437141370623449831187306485175665708727
+-1.1780072495155463216531375920456991852107411290334915331177685
+0.5475891681303823399999237906297805284693972226111760964047372
+2.4089693252743315127730692587637607826636168168927353461222366
+-0.0216022512379544715790629876394797680211758387073326718517721
+1.1428790498119717445583848564818081223759797800250731632504822
+-1.8642176457498146336406695726614977948083645372845420415769354
+0.5272425041853327274843529474069092273510220445130713124860365
+-1.4279427133568193330545966451114740384035623962399580166232972
+1.2643605583065737240169870692133611454566259270872391617414808
+1.4083103112870766903854531372378121448253562940876972325014631
+-4.5462774469289276021975631180646563700336132482280007103704215
+2.6520552155082792286883737702681512713280614992702509989720288
+3.4399214320541260797433968479347163407099080594230631042260397
+-1.6168433334562393313331699159345987013714153416246471100630771
+-3.0913017130476856052601245417668241377300051004184042384550495
+4.161956563201275955423879835606854367294917013901093874675236
+-1.6416846709844911204001960077330433154050649745658587434093989
+3.9112568271735366597255975731605072269724082625600881156247473
+1.9157069775256919984451889115512286408200532579779768705194455
+0.7932705803597670562893864197163607622016769999946711724941724
+-2.3077398181861033157363706173471313293723937206496109850670581
+0.9681589741964658170679774455251443156213831102000394253510601
+-0.3707306272293738640607967861857229665157479917142287844979193
+-2.7540455251662087093676505902980946846393526802126080550002907
+2.2079252312353883121690891488615401071595373614407955437391926
+-3.0299808006448945367636646326480378522083558114721952698088835
+2.4586943399622090144811302022977612081013419280928921579140202
+-0.5825442130763841093173830507822514103461833141299950012095307
+-2.7314010921361140652470001481058977814843359123296740201068275
+2.6644317701288045903782411811460291986820244216461212110068889
+1.0901155465370415234169621053841572278437039652159253052281912
+0.5598444933990884129619551721365475416168387462823114045609568
+0.7535443318060561715282253747389777302514298461886366942239879
+1.8290626565629136669905728245752459550993161755457947068987536
+1.0342648904938937332085363443859394390789628463575848727293294
+-0.5416053644263289311228948993929076010015179563433139650744344
+-1.7063043324477035945991360095450719988378060859264658980977839
+1.8969150435320384059122623032107052017792054829540212132094309
+-4.6160713945368268251884431514206127787588477566099064124297537
+3.1771303197340245789666775538862713829465798926305415181713909
+-0.620175014053055595427786780507883948776696249577947753869642
+-1.7304702793879235565312488816493884508578402909037468492574694
+-0.4151115511016065039359126483715197811239238697177554785077595
+-4.1575999694586630092856248077479270322266316223015354841003617
+-1.9240679988877262814420848584546026596356952913643637416760822
+-2.3585273671632559902182905637027370480117027837342719036390645
+-3.3967298840115553811664856116340751160042842854717380205147947
+-3.6222212857094389844220698128298578901367780998840025096773751
+0.3338316856135595426856999243648405798375165707453820660928113
+0.6720333699760723764214041797353822287964280667640037207493589
+0.5086870087210876839464927207632270039784842482267268076486753
+2.0680804689065381943642074714160665585344534248156817253718344
+1.8878929566855593053918589588421357628874047943621958101873356
+0.5657225273438288234638837425305442079734450162029453216605149
+-1.6980217512833742066859302570694394375938963587075438108798074
+0.2315094591830748549298126297193992674293536900379639061008392
+0.5818577232334147711235138212762948906977063975226039042666572
+-1.9933247843945049659322682565852542300988300760667561564070178
+-0.2200486146223441674186214369055565272395388949553341920177035
+-1.521213824896037482898119749411706562011140220356123020573323
+-1.4018738885919969048768087241784105555022158368624233760904585
+0.3005550109219729238342768649547168087322745313230072498703753
+-2.2677547590518331411794938267472352607580157340165245949725588
+-2.5292713482670927331773764639278522451045801893934942351795016
+0.9509536568354160343296993989580278020957357924368848490008406
+1.6551021377189108829080959377755556827179703026995285800231529
+1.2739308783449109316424575945287046339465786143785445941645133
+-0.10793478282505310474683680056202093644066050416970285839846
+2.5307081521704386523916266717404294592317451589603983349007509
+-1.7039767128644944434212183485334695035066588980432292711862314
+-2.248206181160154083080404961359744075808910341460976977710973
+-4.0481319199462569663246801836050077656006300891136683329055
+1.8764432769644546402142266826102637239008373314458880216334834
+-4.6418999143944161838415659774403043096836542473554308345366301
+0.8934941240952884067563903564365557092403194176127228623095747
+-2.3843416697046839093989258595042400829711605277057871808151948
+2.2457766140665302909074526342849818716296351315848544405423004
+-4.6892778918258697548631047018354799266074082487408198550793841
+1.9596671815989530233271652227649526057321712292439929248313348
+0.9919819098638936311800668447064982196239781481717607635209042
+0.1875366980602752422751267401342005276939472008022309335047945
+1.626182100111213331827364743340460427328979208452272668160934
+-2.13255174383708854434797087652308780764662577043109755290427
+2.9127558873759690193296635630412754351608933430168178900171673
+-0.9399887614401286088092612457044613489757526360389447582701698
+-3.2205007486768812404931429546337275252111915620739873456541769
+-1.0000183361816517175995547461711476547017177442165277213152575
+-0.716943863482807797591287204372069135372761353140944737094974
+1.4251618910825152068393708285529081701118561722088531029172987
+-0.4963897855798728198385652636120012137909275260159973369695953
+1.1093862668620070506674523739119705603847490337549350703216684
+-1.1875745850110008298268502818824634430269673579997624697663722
+-0.0336605909574112373689053223150038174615396392246645588457314
+1.4027534725653455014568263881099425470950243092403414804024753
+-0.2705421418103551403205284636734185623841398123576246182369523
+-3.4184331845868853438136332670697417266139155335801826263039904
+0.5475856004087716038994201004428365873388110572299779833782171
+-2.520559805528378688225911389999138135392270542204875614242734
+-2.4775055347909230897378931044289683992927958017885951067515386
+2.9953483461529375469062933986266150863820338402293623346663008
+-2.75437039044608199102364424134461347583611290734294588176088
+2.4550254044822293748947360341467932533745759631470016323217113
+-0.6252052699489457452746036113240506035455946625371214344070298
+-0.4068208861584028275110904377366715663865364011094367588009624
+0.8205181412784799775754186676590796842032668321350115088306304
+-0.4698364137600558581504127609440545894042187057575362099193844
+-0.6235401033882087417513051625260045569421331440975717635184284
+-2.160192714710601933655203317001365414127968003413734704299678
+2.7195369206594637700341065429333473864622524549575665285174197
+-1.3285425816700597586364693649556879227943180277195695128263072
+2.8914585086109743386080275827935722394594570555808800193267056
+1.19524703388068571928248528598202007766191264378983567647395
+-2.6973072895473623036974741344016093825577854175328502905559194
+-0.8567074494651868109528013171800843383159727274181221480101945
+1.4567630731077724225027328257775259296607393245546565668948551
+1.7836416604751731603782753073640842711457533377917264646367233
+0.2054133598747529947597571543898705853817956233405866633957913
+-1.6800608100993276064507172227887316876908542531422144989191692
+3.8385891050608586630044088747480603324853983193416081276919362
+1.3507634544587841012791808139956365906225029354973799146131184
+1.3196064418713805644124430758612100752639752596677190492899388
+2.7768382133880486181864902495639169515405162502086783056430178
+2.7288285763781174065030276415961657875826564493526413993153914
+-0.8978004067596388087865270979991307120322109536519581356732819
+2.863309195037584503228168618526521395932351362579453358756901
+-0.5575280627727209146280641727558386732385228486066753377899154
+-3.8191124395463898335099900063300604952961263313079954810381507
+1.9719944583675363558616199401194877809159924098465966538903055
+-1.4604012361423014831001089898644153876196570428031382308851698
+-2.9847329458995021896815467894172265364122453727762482378850755
+-2.6615697707341923699143704150390917840552983463873136570586689
+5.0813105546035446753668849238293439851645350404712998761969389
+1.6220484489843750364628685772899731110144568721445476099115221
+0.4204268931887054394934265641017963536304005803127955483182565
+0.5697338099682965814358897646715870511858830321011713427646794
+2.5716803813293639194894828668124339842181019782635541171198691
+1.2561928507943461610334687651048358225726023508347943271543954
+-1.702376783689289330123070852464132189282063709117970008850103
+1.6529866509519118218895404273134251415378294613595308388323056
+-3.5193561355350118830406501910753679571652867621876149606241654
+-1.1231935126327182373122100721118584689296587050851158367371807
+-0.0281938766740276985552851308181726486571971104998321654510331
+3.1196354999259884500813444157405688039812151370977961168925785
+-0.0490172522815352282046281493097834535613169717905109457297973
+-0.5786571003231785734438275240642191672809118262670550832453487
+2.4347248934132812892081314882963604151138771337458356911537848
+0.64985688929298595732191786023339257032927027682244696571317
+0.7026048136119361104831698364324042263875235815780984565114585
+-1.6106953645470086880202019963275328035220321137253938639197989
+0.3782058379779012535167692129888044046330795988957637838451448
+0.2743446597856672851883686553019752097213188505106572899816646
+0.6224081762194213177437493143417434607870710164359019890172848
+-0.5808461881386603368206497340809787471401748442234616699303043
+1.9204779253749264480016321381999361462792651740724621768580768
+-5.3310333183549338838080697393256936177582658524139231938946996
+-3.4680932622403560639097539547965516526025322090484550116955947
+0.8976616244516736216368695737233014856278335911657187459019222
+1.1378508806493503612382665806646932408887739819546790519938352
+1.9766602674881044100382201747071377183977367532290493438762082
+0.6967214545454003174652526599181522536598930625160444816010384
+0.0881408971123433901428708065955224712308704473876277140064313
+0.245921013908029845307295956506145837778108959906431640169308
+-1.0616480597794301658421488186987047273071671571729275493341087
+-3.9148026626186090556536533955556973928098675610866978899421338
+0.3336677493181094972216590859955623664640940718136543182029857
+2.3877813769888859220350253912454671983066071902983426263543559
+0.2027106951165770038727858305480875063263986195475540269593212
+0.0809558545985279759193825035288101619403900144881804712298128
+
+0.7721031360269444536624854764846278079390436516442447307214583713
+0.7113282365127787106295924505560767722199840055537543517442585349
+0.7679535856628120283990827155162180966010981503917935490380557142
+-0.6127602430473631495393181955733023028663546816025211937039540524
+-0.5944056790460496081717996899055920305811666877696698395774078378
+0.9839367502424209997890558933686976016082869978582241397510153252
+-0.4548419343247805224460011391703079342763504118566706946966391853
+-0.8849845588398620212194475625021727518116463369860566764411889312
+-0.2496600323413886386258990085306122333313701779141184118995463959
+0.2013567579813494116381818105314838610969816486807952028421948124
+-0.85858010457166611374976182888109386496982051035674989499979384
+0.7326702292582058588316598422918662773838658327971514003421703067
+-0.2697443704573465465233716116511309018200366900116819867580635278
+-0.6468087813680422377672655136982917947328505318460482424201962
+-0.2812302577494115409480047067683469320314228801749259890701395474
+-0.02167413194230472805204979364706614220652157873015883116130884482
+-0.680894955890704100546661726757747116024714493408288024374190234
+-0.9306530725185795934583927665790248017610038861531896668451002839
+0.3319152007540851906913026983763584438955853838764895977762668678
+-0.4414898031680223608932387792017485771255689761890070706015387399
+0.04675554236208552284539297942143061834219393972333359647545914081
+-0.8152568938325646993310760006867681539054279301843202148958871677
+0.3952163240756655529212705355453418848569049122249531536768131848
+-0.9395163144138835125672454933008856593503204403133472584898229717
+-0.08780353633292157461769946866167963633505729824902226238512671868
+-0.1743560068378512679152575299947443762504689480476570621749324843
+0.6018835924636782523215034400201993341434060856497418585329625279
+0.5094537464059880326374352490064905763350159638438638190213421193
+-0.6412882157453879879998117648467144628970706782597054160685555631
+0.9017103216368149546517732133490469846549850682301607701578308401
+0.9631270643127979384664069651403286361478505285019531813591892173
+-0.6210835173793688086670082589175993809833456274087668762475476635
+-0.8137281645240375388576750044830353268919925528507904843095256157
+-0.7041297500866612607234884784407130317305843364144413223065323821
+-0.1235721593345202217795554759876880268687368789792682195280803184
+0.01793996302825844948175557573252934185711456214972052895861572493
+-0.3411596862218241172328579047617234818967459872060847679144866809
+-0.7379746599220903325806827424480469595800618414934950958452657346
+0.6843546378904107483368305041075808036585650068151329599810630045
+0.4265099420399003863248167494626862205659560797404855195341684806
+-0.9874151891964456486571993218370826427302121071375833081581536189
+0.4601637140807105378191037234478805179877043129140064777542238544
+-0.4841039802362244364267157134690841461075259779700777041439742307
+0.9965877589863013394561112420396792373833365736836351278348301833
+0.191567730523304776574190978829765313731471509331205854313016986
+-0.9100049476348622207723944867294612891098821253248738836563459568
+0.8085565025927605798160394591787637574375967583263627553971120289
+-0.8851479413535487385573817957243936843534909265401263726020814395
+0.6064591258881136876029163103297147737049475826316704311935105558
+-0.7125906556497681391201675092436355218810428000432951124150783383
+
diff --git a/tests/data/nfst_adjoint_3d_10_10_10_10.txt b/tests/data/nfst_adjoint_3d_10_10_10_10.txt
new file mode 100644
index 0000000..4895536
--- /dev/null
+++ b/tests/data/nfst_adjoint_3d_10_10_10_10.txt
@@ -0,0 +1,780 @@
+3
+
+10
+10
+10
+
+10
+
+0.4086947450855356169152189517431289973211444954704229578022411938
+0.4079086363050430457531464820775705499259143611256467000966551659
+0.1396725310073930971210628469264965305404387421361487766333402783
+0.3617754793224075120106402493333532892515347077462591193717225348
+0.4262853915271091927300453593077624529840040190987573602873697583
+0.01784014024404133452372719776485413728130086444052705410704826844
+0.2551137528766617462886122490206495815569455954864954532175619087
+0.02034287036894305904429050830899157906868801181466106875507838504
+0.1309003325323175020366797246711032353130982074800322503405568566
+0.4850387857231816989255603701842555993429712922989359894063243118
+0.4014791536568069132914981035570219772502415235373212767068104629
+0.3046061152586201444129076750778012320620234017620442293273783168
+0.1846756636605197740712178956225839284519707534951816516372261742
+0.0122144363785103387855708288972578764085549891342672612002911675
+0.3821163889372620378823133147196229781400957958066435726051067546
+0.2551600602597774365486102373198315508673893529063690086963412748
+0.08488013489441359049422543617990278961495249513965560005231390596
+0.230402910644737899027368109577132641139999484424691959789185425
+0.4984872126540227872347412673378447253277376592352237791484436604
+0.2954283565359450142698564103578812662540968472865286528643655096
+0.1710423719261291377159530030970313591027039443678008179710535332
+0.2885748634834933385833932549862271040440871541372365705684137295
+0.03079002005616818689379437555430409384272056975521080286977436553
+0.3364577288497801964516769273084333242643301891666864527719104049
+0.4457173920991993292046584733412564701849156222343790520841535928
+0.1993205021632423713244796634655407513154492251671262244936746809
+0.2472557826481684830963989449602703101137738953947821260330747
+0.454917586626400190455113486728514743998772785129201763658322789
+0.2843764440248353437431031574790790615530404808188969002757705128
+0.3156638964725781243541272856934334091751310165287943458804827568
+
+-0.317506274646869580548454268805612043899686570766713498562127397
+-0.307034477835959299570683520403927220025022217179456068532924642
+0.269368734761000541856343381326864853735134472492995864646000068
+0.356220324044757383345179963837451066656798302860305773988528817
+-0.535734752759729667076603619273324555713420943448950587335632027
+-0.59131622055689728174099188673967119675640665864817030254111163
+0.33079794515641789291829804746814863349011711936180598120372537
+0.11844647192260302966935214314107004181160297679005449934179399
+-0.65753884127558427471376447323953354110888756364807556191728327
+-0.520592765422360310228512031932824815470670375017613041950942196
+0.548369578050911265571134862173675887370205928264096533963972264
+1.11495699386547430218925097462549681168288240704755099655349015
+0.23872505258985766343492309395286434916423664131775382904044182
+-0.7123752984980525972557351525419455851997067306734689929265677
+-0.65107560916679525768055024035902453727207871779224171936602667
+0.49029054599541124368080312822723093507855275843877096640802743
+1.21683162616516363291290227371355778449421160609575294628114385
+0.51670318244622632447008549444386144900999254241766879260750554
+-1.078128458399305730329287735272024026350625716080453717795686736
+0.044169026629006002693117395913013638887160603833377402974832553
+0.716248190142019255101767009430730644015681923227618988816693852
+-0.02329339843511378647239831698587542959755402689628387530376347
+-0.77494374448101563755655232052049015693485817520925443827136098
+-0.93415095156943893043768364712883488533889346010652519618873862
+-0.17349080126507455698125912999347422954392973451855995257083788
+0.35388379244758450063106079368527834347881225578903787498796764
+-0.58791466361738652812893758307148985686868717726696661432676993
+-0.108876016209983935988194634501148487964054758392164294728933686
+0.61803413698970602272778394279272251887416737003224473579444553
+1.06442196857057578741297939833087771833088911939184824345283995
+0.48489062585807176326550655525970799687562299690593674024506579
+-0.8088296877501163353049709008810524721016992291119396098656563
+-0.96786025688105091132235847141737476962308403163239180272257928
+0.62996177154058136298217825611828275535767952614324273113322045
+1.2849464529307127228915625892054469279093617673432848278838409
+0.5402109553706818146413228872287638174434214970391783951178455
+-0.11740385673317551751821476981851754627789099540409167854798848
+0.43538360517372941681144875060519196921553723505616932101364375
+0.46049889718325352990924887578040189054827768061042072454562461
+-0.02813620328526495538820480212592534335088247248764463578916011
+-0.80071686375499240264384383688958513791170530079425133410042226
+-1.13286377940559237373028442531065602370516172893594550795857042
+-0.22502217045692293679460680798501001019122551744939353652201733
+0.24879582145640529944816246722328394672804363797546587004065142
+-0.17807400518987813535212681316222225824953633500039745257766776
+0.06000602545078867563149396230618898918606673636926743480442229
+1.00545762402111349407092174223819958464824498091643178534880473
+0.41312685119548702945623402541559560880124746572809698514203341
+-0.34947821360464111024826597610474943306850753025836857774952285
+-0.06733763414113451107905728267668779936266696879782415405344784
+-0.38978778644266111363190660758885878323823884722959866755317975
+-0.46771827698201821890887465944443764095481891732527247558959025
+0.39322461725101402414533067072660410036335444430156759834484941
+0.77643291631293147768712654713464794190099716244472028964643464
+0.92277238452913628198713808667722430429119716836778588274513745
+1.3229531701735197052135972092302614559603069744488079802149941
+0.09138827977716309811650951650042572413151283862960772469551562
+-0.52932063225129450257754688141207131008555807126070143597964808
+-0.21007999811571809858568139980182935410035199891661892425048447
+-0.64352349411797406515846214667325340183093949481016106748862012
+-0.72200661645547467087258106322814507599449059510100061422471733
+0.12983626576386976952571178733325343197110172496745329003425602
+1.06249262277033303479496392584405522692083596004801821832996971
+1.14452631737961783989490426896583139633632354664382867375948241
+0.75099627289661478120102355232715867100954576943700962343059567
+-0.60840717537779150720244198850357565679604507747146242180215328
+-0.375630424309563199179457483109779189743916353684571236970922
+0.17259906963750373199660642992865899042166000140664806234448655
+-0.49604985166899223294837230552499149947482154577641725184624122
+-0.87365492418393533089004493779812843107708315026460417672352204
+-0.68676495336456370152578805963764130230188551491861370980750441
+0.32140831388297028537169130043545056450772411700530699605643119
+1.41179309595317959173517218351961181770965862237668269971467462
+1.72097185026577090149314399209728899487721863232200098220653172
+-0.08636878264579627864236539862371797813138559042605566521693965
+-0.6382958121840480944177595038287903134520909149460591386337012
+0.26255129073250539630552071120127580903619599065917987782170638
+-0.28100809387066894073864348770004716001684483277117443152310054
+-0.86744696137387087345783373744950270294245692952390306211231818
+0.16622392572272921819809581723006549322102598107282517006006282
+1.78161741603338906876417856148907718798754721626819793001502189
+-0.120354160520429638960533237001943221812123331440776115003584882
+0.635224853661208888181377087019821865370836874220356779116476061
+0.267114215205163696581127354956174607763422050886290033509064644
+-0.423677506774587185033959563192751174583874664014986036128805772
+0.2186362474668545877290411389650067930708346533163478875661335
+0.28556166522921761237456995584384491629921930773762129557916749
+-0.32975951848683244315485354595086249379727320848357545734653739
+0.39711651620911285403244810771218470170405805971902158917204273
+0.93695175952178652577628521444132847497200136760508210344577632
+-0.08370549397632306746069344438552507359610735584617372588532557
+-0.67316882104686642318706828687529821951025063673564472125520604
+-0.546560778463776558004008316652663980666009597023131569277854618
+0.14396961512198309728763329955923688712191632773042118873867052
+0.08872307921887377015789810387430094871113895073462360468352823
+-0.07956095640074007049658301754872351686038776409630453349905916
+-0.11704430576473268053763926727060709808906787100535350302691954
+-0.77691961029953074635599823402376970599756378631550004934025406
+-0.97751777263579365125478596976919949255084610844114331774406019
+0.7368259947863945957822886697397196698985532785484258708856552
+0.29492292363491004357637323173094848296390193829835914337593016
+0.25919022000825214248135716809052747735339740782912776299266547
+0.48014704841745711613398310277291913894747944529750714993285088
+-0.2458341427016025911071703096939128350454096065571166917358402
+-0.15555436555965660760538296136606270770318651659337776945338965
+0.7983496043490133895190594512268367016889007969679026115776566
+0.61618427825542442001223193998025932890895080328120326196198744
+0.64349655532860899488254429575779631763674207008609430366000489
+-0.6418645429330039638730526082463247312505399436439684598508278
+-0.23778845272249867093361611740692349087878589040364240631144777
+-0.28556114531275972689439484716537457649504151515028513658247278
+-0.43920528865559371166151949288357010477861347468167808580004536
+0.11812041846281916356536919712492013297177290491779675816208874
+0.11564352277590553528993227662780024145269532043515066098845712
+-0.58774305001135487499002623930726470416101836707055581634376169
+-0.74464151221722933965234391847092913435765991901834453311182533
+-0.63529899588735345821891921637622295416926272651410456515981806
+-0.04507007763215467235808022674830165867879835452984504662591543
+0.33323847921241477665527093351148142820525931475707910526911795
+0.19597773467802049964622635260229189998695489251083922647132844
+0.00667546858234157063388587887186786504025296827522744952222653
+0.26496120764823034868448653635728196640224383607961385913301235
+0.34340216207172423878253879842659887253857151944097190513325125
+0.21010997776790563545341946693434817376132205003732151772505398
+0.35992636483330881358349706760036556112137414828032441942794836
+0.65749374408589436736028473435228425034067164715407603648776418
+0.52616957894287496424561056419388696845888547310036912823598721
+-0.26972299799445449688518362386555256570131999893569638137240781
+-0.27197374715518862427814402123427874495702380155591813915305222
+0.35393252808831464725045922805598784824064769867783021343993832
+-0.40742024023921097254656298049651666008612767597708043007557999
+-0.53090703379068920225794836423949935598333238114252187699707618
+0.32020661123386794361385271678699635584297694774182987275921916
+-0.26515753821965977476594522167073428596996681410983044284177511
+-0.39911929716990965686925737507983529167142029797263853784506671
+-0.23609708134617773562194193732968087301798382543200620055372408
+-0.44245906552761970639507434505291218902556873953527091316183999
+-0.30395467391986170140200775980648710980539920072681358123290022
+0.24482350420574400780479975709713481554844450855774859726442929
+0.29856965961427327868824076872374390850336637287144537751462941
+0.18847416560730799188590882836098114391845017873316237063247928
+0.17879147542246520511714483502653259577487555528539131490856861
+-0.3745022870440659530680123310949553366103036226541302965177013
+-0.4774018270368043268364537185241206109221587581286753957863893
+-0.16987062913946616351733640401877497318055254243601991885783235
+0.79822000474465605488355305217171715717363148372762898322996844
+0.47499803589876071159176579071249210424850818147870697775620567
+-0.36853762973639966784459616978820280352434995123462147943558949
+-0.07979285346070725756653484830106419334139425718177972684953076
+0.08408951537983417134186078900036184941358022959010575476547002
+-0.04667850449152006368430127786301359692359913443231845693006936
+0.54854756048116825623658271870123839373865330220224419251826272
+1.0124160624637938366360962546743402786689828580792288588649812
+-0.33704266703194138448992193588298760898798103770884709758493603
+-0.68644687276650035786601732401504732475466739878267307828587184
+-0.42288982225939561569637130137219419939777271794871036282655612
+0.20499667268873883668089953435415373780759075649904356893913236
+-0.08975397871125794871253584874835797675254554994910360591820749
+-0.19382407582011467006003381893762522879766569995348990974401296
+0.11173081774398938902658473963789461967365915420560263404259812
+-0.7770573487581099079070088829041140393021461970018011333216475
+-1.16018503692540946956717310254715133075863531841572166733771154
+0.65621844426919718164561432098093651012910674925960580993451459
+-0.80891753425521589757882269153576262078501641866909840470915823
+-0.77671785363305319857083172841136106689748636190352509958140926
+0.51678904262272587537432206563784273936032268569370642628506596
+0.20690834670286192517378099641183839360995495632440557409810516
+0.12728724200143504862292533528828223760905411211306054483970336
+0.43795866979926696478539143993872013379951665989748209481545257
+-0.7805407251898733933640564398409290261399864172275162917044517
+-0.9282812782434059065600206272888858597495301790325201974625244
+0.63564134406222543776722818128789074128055034889118788297061781
+0.59103571150718919755567058706079930151043280401658411676901359
+-0.36364300175325179335618422523514063632871318051459935147416143
+-0.610904555109933755486654746512525103075236030995570833501062
+0.55170944107695064159499290664674190650745145127351944694676441
+0.72382041094989024319469223432140398377987739901995289068389787
+-0.43615538475071289128916832053664897684952475348305713308105051
+-0.18594986278190566067858406274922846242569795640560950843453056
+0.99457762445345827927071922534142867710941500313295633646681602
+-0.14704492534933129870212807500893622789078243716586293941971128
+-0.40838359995056704933153958523042167857159796635137230616600844
+-1.21938011947017231456197108217830688926510869718618060557077607
+-0.73578230780053562877209691926143693427926321928678485828995286
+1.46129086036105427611086448196744185231167291536273657442735497
+1.41968801920744570909694417611843885118958511760529163003393357
+-1.00744784151945250798052976302294524085126146110202273581315118
+-1.34601217833510704724366626800944362063216850924560271448007686
+-0.227180419589626436027355710075714545113197694039238920799045
+1.27144531916234778051737965437427077039052356199368390155516823
+-0.31420625335802785853330514490587144375598786950022382538016565
+-0.8808286635585073357472490867276680628792792364114472421717518
+0.27560730499839558322577047195011114747844433116490420934665518
+0.55132614708612461838693355234554752128785300282151892902354049
+0.58129571426750175059626414146288934834923789684250818620088549
+0.38075931753088366425430396127623235583659234058901038229851036
+-0.41404881191143296237908123758086005380113933019175774612928719
+0.23390813668958185834977031386298471125562737930785076380042918
+0.2390710177115017188153187624985119786884880714525736028206
+-0.98225968932680522951988559766248375030679315652051842909237177
+-0.92160719234858839690476127056502588790025362667993196932251973
+0.22817727663057684074137834238024895530642980946317277783469575
+0.50552147711485318035051975483536193073260922018887051310819768
+0.60340311869307978353739695248627356220517673795884433487513088
+0.23633195617863402712300929599999105534315633901686702677230232
+-0.89218385605059847908775544245063991534083357908975629254332158
+-0.88634375337548970847141731299496258509946641535474641042462014
+-1.14345425631926484030610029559727711003791723959106595280470206
+-0.49056968833630526180240975812046820267008508519562971109262019
+-0.09764471677031369427590766311240588633625007998555888441715145
+-0.26871870978517884513494099797372092361054513231767762362606614
+0.79625630109515554719148687477761403456683336462058189920343129
+1.21030970335592213735554706593150558319302723172755026661889888
+0.02831847291600485413513992413811316347479539883476331372845679
+-0.15194199440410102610868104420991281138452907883153725785407915
+-0.21332083798859008550630057797447125053797405180483552144972783
+-0.69338557388183147655634080238109124813048827675467310403949668
+-0.57016915046024954063990252628357041739918154420859704531045836
+0.28428780508425792253046012488712731313601183232522168925379774
+0.24052464431526763437577302711213336570933807901673506463178723
+-0.27686687437037934805214045292402393634411936807922942730844112
+0.199910811054792133743104995250846438628490091756603841928732
+0.70827250509838518644668234042558532418076588182371996304699054
+0.34449162966993861407047295098952698997175191596903338363285736
+-0.41862346055241411754139829088860138716564811151790527605889693
+-0.92294188733352063637214267199180326613455129836958163492265527
+-2.13458528466864290136150091272751755967298423152281718831748567
+-0.32707405371206687859581585845851659941820265214894951834297353
+1.33446323455005895087251382313709833041363334460168841326761189
+0.0091513355522953394938705421369569275785538702191202197632551
+0.20834776805046772417479620574334951286684714595339749354102447
+1.50249971230832314234092723033516414305776142891668924159546692
+-0.26848444558419510177002230472109955083367603538981780307254722
+-2.17172314495313043667968011176379007146109529594960480568232462
+-1.1198773566379448614593906899562202760069318653039599153039642
+-0.555407647356228447174390544901650530277685325921601512576582
+0.58241526571137727125533032536147250463514062566088042325835018
+0.3316655998935208533025868751459729915028678067333764828310022
+-0.1579074287855982534102874869185335969355094213523190163992514
+0.32844400103262516244913692944172649120116374266891611669007493
+0.85392577414926342693336975163662189697419644932595717779800217
+0.8530353979327815472016008836683184465820786359187157793122127
+-0.1476744234253251765995535530861264315620843476177658608149121
+-0.54455699510988297564173888708819679364051749084670688308259354
+0.75964518201123861889915945050016454846740181431375961021163786
+0.30546869025237988972487168878072495453333829934644650250916947
+-0.89910560257184021481533902971997022017851156483723909965783811
+0.17899612438013366809862266574659119920538800479937645685173741
+0.2325775061251144993302844361454421438309059506635583260386766
+-0.9502229368795955197502536109349399894483987651303175962319441
+0.23545127961865943925291281013187355872717430353194891525539745
+0.8648573590947316373362111470302094445748022905913295708979582
+0.06419845223363463358395365874249854469647363672882285800620694
+-0.52483690528688618674549933218068149792177743542072708173530299
+-0.16506536206657374669556499861786526632013910411860065626974788
+0.5438467278381310130944431664699292028081525449262789779513816
+0.23220355947034900747373258643299318213926475670408510013419317
+0.08196018028264297556111766982797229420498630349371498326572228
+0.4329269889184248800725809925206519153834679100759280453253355
+0.01792285802473146808133441708129861268605329203360087060279769
+-0.46182588214906575199732683662451799888591911777282125535246817
+0.60773189751521653679067376686288875112970656137877624809629743
+-0.0750561756334006083804036410523026396136557941740272425282791
+0.14318407238535901820133471153431125388908761443578594613913614
+0.32575447100778211887172601758038080585327154369688502737438702
+-0.86960266634394070012953294142923535529566016844521302517243794
+-0.86491429138396399457088090177431292320705558303859062513708484
+0.3719262073641128112738713181480081224291377160474537680722247
+0.16584835009227230501693806549145215854511530783010345256534247
+-0.35508562357519934453088589837415234167071936008817547016623144
+-0.88649109507770467722881884782689741892384868598091575068357151
+0.2605778308598690374028670710813805048344895560445543914601401
+0.37225763856392717102615365616938788316085664464980887078011649
+-0.42556072979353817463478759483660692855126425111825545296851923
+0.48106000613514621899929008188101873248713595425088851049585565
+0.60619032453592906120602909308396755631495191350079590162420796
+-0.38121094860306578668066095944414288194722495395545152576341984
+0.30393795789066777555967373910176270366926190907003837405904939
+0.29683607802551185133848930178543836932792531249914834215210951
+-0.33784146778170435083335842383165845876398869590965417441362675
+0.41638283792713359100293363664379484797371980600843272729297477
+0.25723578786005072957412989620192307301383768365227136045550189
+-0.56418421048384033319089215625326240559821793758694864790677484
+-0.02555575299567037459709619017574571889388786568863380263495622
+0.00674128552734471925178602684970416823437848019453679045507552
+-0.639335918318941244608693228700984627741082029607764433972653
+0.19557786710335259589148430194574778528551014388500437437014265
+0.31438117469875240217139541450428142697270812554620323267516024
+0.86561355741542276871427694490138069892031305609106601753716522
+-0.27580907122485711341724026888325780938631630340522863150164629
+-0.13394810161796836229469600905586931214548921660872508034771313
+0.55844155006885174767580694235401559329521480638352626057725869
+-0.31957833266578895505374530347349149482865496108232953288260455
+-0.49221945815021686279874077085599029079951977015486207197817929
+0.42243900910001773768311042268346246332978251351331377552606085
+0.17359677825995643173323154963969664919645982213865319598084942
+-0.24321241865873008958231873988197795127930305369309207504387045
+-0.00075210471988359232573539177361241322604680344946791958311976
+-0.19997280665147243974766400368827105733745906829414089041796338
+-0.15589203093923188309240115364305774401199977229968153707658511
+0.01998014421832518706486048226563176294239701666279811975541263
+0.36276079495100689918132444899192743368218474232532410346268098
+0.22268425906152320900328779538474505941201119941058020548957849
+-0.21755307761103558732086143929201602908937024424675171135239597
+-0.03018220335724012608292110631027972728361487156396118218290461
+-0.16515510646815216997834261368920968285842178322342000845389311
+-0.41253319634408645688479246063262118411878344276448766052138735
+1.06186744277647043111621954444768607231470075945215969549001873
+0.52140928343058449383742051877909940983059690824390457245717106
+-1.18234901561470150347696804615753983116746791525891185458802996
+-0.0190737005575736277824660345601339421725517426230389696277304
+0.1854320510917415995293456263451057053430281258000068555456173
+-1.18333058257835747173027384600982483929709860552781318138474512
+0.38764803751950903593161762458263881043759729925240161322748026
+1.05422156921936707649212400346393965583905232779015050349812287
+0.12036664605395458740365948388371175525067053922006752162659685
+-0.35993267190008222319925468841032677119336684701715140667462835
+-0.05125673987283950774281558057018191039164425022562598735808641
+0.30095413129499095280985978609986920108318985547104480045441978
+0.22515296692474438954356679345945085111636292249451823253191063
+0.23944398781563881304658402737120420379287937341421360470236864
+0.21514730677169731253080395592938755230405355274369340275900465
+0.02889728379664460958399830732449995517627004604205601389849868
+-0.35850160417213017631810892772361567978817758947456650293243953
+0.33713952126396551463440910144895691411718446741148837508086162
+-0.61793540510861141977179707956373873412398412472018945427968654
+0.33269709271925856903836861210703169278459262423442366483872678
+1.17203359608881698885512486658183517817800509899709524396678457
+-0.71661859153659101877642292971578515557318531301717244556848802
+-0.71540505301239937980205839531380063862356443017670530263802761
+1.32091302559995559366462831205140280085040607898471653298073861
+0.46015385933709088726183394904452386961810843391823280873785448
+-0.74555661894297127563455547045361649069273971578058103228172693
+-0.95584134873980249184097321520809360772893416868812750025936889
+0.3676092246786738330907238235139552805752864934930271058733077
+0.9359322903421794719288185174298351763274992325058574790036663
+-0.3665115981088389956338250982555072613735198681187394799376011
+-1.02497111596269903216393187834603518425357891535808954083264434
+-0.8502304347107091960079520175139827143057528953133223149468309
+-0.36192717309966558630425014113265498635445541016349692210795908
+0.4449456753506494042915220255998058503781052793874887650045255
+-0.10346727158059402137257564660459840548931278336439405924982681
+-1.12267993434114440545271574838137552099709407099805883128719132
+0.6227457927222622015950021820655076739949923168715203350016581
+1.27307391597074087392389231581403727923151163887914084745298167
+-0.00742950964201122084579404130267935369609649950233898668232724
+-0.13793245529690642278688781940663847527092686198001212735823351
+-0.03155269233686356079153403132296248943978610852784336290328296
+0.08372815738366041062846241352977111736713560018728147054226112
+1.32673792911277813674565368935695785854741580675183909370643899
+0.89030827897347474028339643033581226428318235989074330372258429
+0.2848510373960648322753629197049660416532909643775115595401621
+-0.1798616121400507167395876263358496089425097379494379143836082
+0.52725960645917087204447966850386455401558151676787801697559696
+0.53289335480045453686886201320266421716565694886882086987129357
+-1.53152366492359717696994695542014812632149488698349299146608071
+-1.69584817867273571566634104413995543809756474381487786003697581
+0.24987007679559752981166227901436952322010134367945591313575107
+0.25371143374602820922572100798324293479748301381892527017255813
+-0.70415110816438816665397750641215647116599450157199550463845742
+0.40816859791189948038877227801620120749036516702339732366690749
+0.24994740635616931198448284427936577784689873317818234800811908
+0.72288411583725268964428131836896029798041708540239560602037622
+0.65144423732726335727576146950676122336993574855164075944566357
+-0.66300749400283498759992699974923252424380632935121536108134624
+-0.71861889882035949802302625105157031988951134585072844444479091
+0.59965501455505757451354239355197832774407182276855405938106531
+0.80152878027189188511089081454380084978923526779447454834959078
+0.34488182787312775253978908581728461480959399860823155961462729
+-0.36698053439545040377454514912512862591004150885824363836290967
+1.1529960219311199889031800813743257984095679097739260300592257
+0.64211148891231104256466181100615999903208206213144881611710314
+-1.02068089055656433403168082166470430138044936011833353606369463
+-0.25056100745940574605928624249658482921630493088462808156262288
+-0.20250602893218294389529480968687612068134062409660979274814566
+-1.25952678325846796374093219972457275517412745723231086455670409
+0.17220892405617314085944996419736619743442960516605371446022582
+0.9499915590094281947744830127008869299563684122456171853037326
+0.8902430618526901849734701801450388309260837938156181062952346
+1.00712674203004455092763125314490220189339469139434176700883765
+0.19353775717983092911536662666023062914667329607707611854575663
+-0.54773753382549617346038144949440226103441479698348338336424947
+-0.3560838677920549054887021734361501480602220838372433737303024
+-0.41764911067379316970043627937608118335737470505420970692945176
+-0.83969471866068562582635918034518492204805134400332329318546271
+-0.07989345435188292174708455241026918517401048948752366209675717
+0.95716903133619520793769678955106194922762914650584856022500322
+2.12244510702691603565785852403925839910920102617148557329831606
+0.28235319269621733694669232871833569054082734287699708049250892
+-0.4745745495543330692919201065885216686984126407382970750642648
+0.53573144536234045268986547258100059021040987435247951411982608
+-0.07676199903776981765535265491576627000279352998763897624601082
+-0.48254784377824383923364399166019439460643982871518855037064693
+0.06071329015856319763256291333684820284314156149378251483147512
+-0.26398782574252945777770130915042753872173733897958585579509773
+0.50009644097121960335149187577282498545190240041770190650963946
+1.23700566906337225830678977781238343009684299348437090438799466
+1.30016156930273741511509147475984470253154907434973331910345732
+-0.28236967775701521125394026806951661002873720976349564194325332
+-1.19003383289145260250768179132620622209598521772621285911262365
+-0.14158383449783883605964779087581447907241899642773255301050895
+-0.41687083096428993649322210385338472061552204756384521774227213
+-1.87148664423876052883672507095683868828724407077688445242887463
+-0.66796438812601974790251651381250808579032621640645886293316891
+1.21892252804762786618946991054424933750647866167455553345156033
+-0.71775726394027753193628349095260770871162846849574004566949313
+0.47610614222305318638253931213460306121312644281745029636489847
+-0.01135931386870170488593700347609205637491998214714520606045834
+-0.95464355672321331128275096265321684954098997020441063441529508
+0.48554731160528964094018128780462331497019182288606073135573647
+0.53678163300933295487442093620216978203022477191361173523729978
+-1.09609478707500448670821082254556549074268472303262748119987494
+-0.26059917432334144813794662194453237543860252467145598983913213
+0.54707085906295939522934300952888211539177006592475412015348041
+0.74480627387015695530470443657963888990025052204374315144985665
+-0.11935532260306044176764812877168580919307361448873370467817302
+-0.16108010218306731649205385635356447409884858750886629522347125
+0.55874093825183499441247248796441303693347995273878749166960196
+0.09428393729128036528371599602363663478441848966347093620974191
+0.03101006123033447218024039856595276470583933262910157093074037
+0.64406799702777189352673305813659389859913713641399695556275064
+0.2063944955053228597111983123431077103862922127865900755445461
+0.23019252743844098524783028000651690510666339618937138757327195
+0.51307033248500893875484655253757796283902480782278322295259904
+-0.80321643173763300081892578735529373966413398559883918102218684
+-0.59970196436882133026852590078878627194713046880295343959098139
+0.43683919389089143546195833599409064676167336142793763865004534
+-0.41180860731657991073373108337708256918530193264671938026390029
+-0.43310437198130255581386998710776691189687083016518155248762313
+0.31496702242997345630792490938510357682873855995327762685792962
+-0.90925636147025653082386594239139944758197515264711445324899821
+-1.15162291431859630081821472376809448730365570291077461549658555
+-0.34769367209241694867118010304633232887188430716554323670470781
+0.53833533812670381978972256303672535696612459875734768901249343
+0.30044313164052322629250243368915778803611884670479697448337431
+-0.33717500238104904473776659215624091246367877859187195584362374
+0.50147112033152025470436871484678025818961554897436449476258332
+0.7604216881024744799028397323187076414706010375963937083017426
+-0.05728163473001421502777355834652390275809679812013986275421519
+0.35635806061005554812809325172862722162137531196071836647965134
+0.97358075639747505764033909330692819197125993538478355828504254
+-0.35892891577672055136622124956050410388834052500957738779056709
+-0.00462617933106671007089891459772948103797418405322817182683534
+-0.18541518637651894736077901034380095550407033151983289078436152
+-0.46135752099071839917959161447725846493205531345314640268406596
+0.04233722017941729191672568213203407812480739916033677683267881
+0.14802413386291955196058051617538463150986134992498123444630111
+-0.51770591710028277374733608908856524653670707328548172704326025
+-0.53265029735515999051178906905490102110411493319168431596797825
+-0.10695241739230895013643092553466520166928146274377569873325413
+0.78797906912150827484316579990639360765216145324973768484688918
+-0.78677444552260602216703407732994027538830613223049579607144276
+-0.39208933904754738874593905266809939022033292662940075453389292
+1.03703344625836238471190937295953668266605633729081056293992428
+-0.17094934153213427887364811347713981764775152149721099850124409
+-0.21415848978798640759943260608200924999841160314145936051359978
+1.07862595961465049573910112963885045832994019091480304836221937
+-0.22348683859050657634932990080924115541278471445753807263402993
+-0.5537713317134071134995450695650089663206015346371836087548346
+0.16216103114094572677188890651734694209011322091396329528502514
+-0.20617933869695360584279248301408174390065762551904785766556349
+-0.07346890397977393264362084345350799530246169531038827978346433
+0.31047028604655149257292963119987342612532480233160692773011536
+-0.13290776090147577113128647590890110159338218608496874624512964
+-0.10492363654060410208377450600222385806950100076179517502745248
+0.38483888342096466899576664759172302877126857462714333082239882
+-0.01992098681222544704245043164068742849865093094628253648237389
+-0.05140231325108720497290130574819552449681195230987006062806063
+-1.1838881563225958555247963328844264739354283453912751566527672
+0.16973453697952017054655507556858882495735833289373316140018027
+0.18269587048136820121899446575243994938579725341259948443999792
+-0.72484100385163558885387733571714966598991845101278068385964888
+0.21911723012986413169080167195706748758094200321956044968874049
+0.50869361587056984318839619692650447112200980912911831209213369
+-0.63499290396357656756147802399936039978148431123149703580736886
+-0.3339398628615402136274984566514345714103890055542330911914312
+0.1232037887440655414628963363548306446598912020292827724300921
+0.2082546341096203761129432504071222966326274987190340655200528
+-0.30363052440045878179977768610689412542299053950661529564946319
+0.17810739107030135331361456966398201567086238420247262584254032
+0.77701401982799393598838643542507882000561865359511192268284917
+-0.21316174116040925702215882214187842553576500359212861339129275
+-0.04460628503347691692647086204009824870103256944476230681935265
+1.14223569172808721924180198748548075184528074814471614797712817
+0.34523886944427217881202408080406636318880641197544704349452459
+-0.07364344720345730257716903913602310750275041356637693206610411
+1.1595614839213411184871898730100931064334251787883717004378587
+-0.37489517678433139044050388624000345523411090805945891018913406
+-0.56414564924005890334723544451925461659689362563451597913739061
+0.57956744447529395401224404214749517957440479232365209897427553
+-0.15071888988644506501144202377318806236751457387085912609963546
+-0.27471203276329896879117373810227309634298472157022393536876374
+0.65632513047986201420083929116422324104644017577009427274619832
+-0.29043661082580386301380451857313608345071285023906927343528365
+-0.43014728291082606233248068751002966368828402135574592327129825
+-0.17456223884676262512914088366253908708252802184932257076067916
+-0.09588700014487515768740299479847886355125931262536691520624664
+-0.85040689258145356184359106706508974416374669374480228588397092
+-0.6228234854398421124880150754189980855529471026818515857161381
+1.19432337101821735804201350609048809543769236546320177225755518
+1.16887693033372699256912773256337937602430620113608554159062476
+-0.69118945703359105683697155676356722118598906524221847224060206
+-0.95062711300244050338162220162571998669807312502397505654420104
+-0.02047000088566139321946570375576934371866877094282234989576339
+0.34780524567992035946417093173802411435738719304961329324806581
+0.705229879917532957249012892850946520974589304004641622468396
+-0.66603064760051010380322922824678749676277479964549224392863134
+-0.96240861885750424402179769819863463403085989124475751270753527
+1.03593773836165431268145159066119491667200492047036727477449944
+0.93791392584372613526253701593468598791716095340629140271087591
+-0.88249590055557327954453326336562780647652812814662783575000063
+-0.3196436423026192509012669309441645978315044240298985000702159
+1.00025030397433963441265732300417027989117514621959490583899043
+0.65019327310972615535037372200182565060142323970396867957012683
+-0.90964035564960367473317905076995648727444579078955982031611782
+-1.38418591224176596052963103215371260631077501979481521470206287
+0.31854155892043254484753963771248143234381724447995466399322861
+0.9608291157242809781609872709923186724288736047938276686442198
+0.68666728094685081326742152613593540639694477080590488265170361
+0.24615392674699090812265090496341832382009357792998689978963048
+-1.11398808216408785172255383444340537947308485028678471938595359
+-0.89144711349193013152849247965612112432271702031828354143542827
+0.32859761340238523692982640351385159483105642438908861217959598
+-0.53536988525616537326272872552901174960033135542479337653753688
+-0.79842247531617253479538058312515509745927397391372434911496165
+0.28223713284328823898627494195666043439695539672302136147885572
+0.60537819828808217684953408954180315717590208857888859075902582
+0.4714584294986386315615461227757162390792974662836501978853383
+0.49705031561920671307678973080505012073316632547323353483794653
+-0.40072009096129601617262383247356968690003171968350031366695029
+-0.50007892373248756840216192469544398288205367177574483460721026
+-1.22583102277843193151971925869257118412511877235828114771787279
+0.07715525753341878581839734712932794387887585792169338983105034
+-0.09084525343813255976626695512732088430072677872837096397339981
+-0.64884237631511154097436335192173902530901319952396337871935392
+0.70626249677255484150638024995026768951369543343021941536051904
+0.80164490529177559841822830591501830357299823035917536713074228
+-0.27858123559546763158268718620576867158822486257332715195173999
+0.02676216328210245070647413976238843368755102032257601666746032
+-0.02319878117227912824572697505591672066975376647924742281788407
+-1.44198398402792324877346493208130966317981185331269244918805529
+-0.92613200347195514040973093959322081099618456272087251186505438
+-0.15565784474975381649943553516748689795317426837383862952251096
+0.30456387241901752203748092143723404908503355413742068043194955
+0.55319801703528986889670640227779737389897080012659841265421587
+0.63146794770808338128879143482074446318529870507722874191947815
+0.70492130558930047472852405401481958151705466359677003359508861
+-0.06457451463923217495889910880605972890520265441088178167835126
+-1.12669676361663296502085883698190634772925275270208582650390688
+-0.287380219454989269548879783888887499615733878818778613706404
+-1.07370669206431680525847655577926739722900971664055222271075588
+-0.02067643330291749713907863432723829205786083590140192545086881
+1.20356816207024334971820120652656511156637053211864947778532399
+-0.52763158491259281195275252656491550685571417518380438545234406
+-0.64499389619017287018022930910793277530230758343337759224861717
+1.72554519083331403967984630910411044660005527966748723543139848
+0.57454357144603726693613930505043270723604691535514043026709188
+-1.34652748599150823499729988878686675995062922651736888630186125
+-2.03887924855115419977149886924486870156582781210838749193979872
+-1.00785182769114673363966358545714224412548790262489740845219595
+-0.00594044672870419467466446403449874851168328462219408729765292
+0.24716537519012703132036746739206975851058125144350786291008261
+0.57790631287614627286491316833214688561482838143318959643450785
+0.59344546338987713097538350887107081220603444064357256617408113
+0.62516670291787228949238350805662898346686999109858900245598572
+0.11611547922412208759375347087812230052114158594668482489239155
+-1.23493040404497862102184598576311723215620244617561374567028592
+-0.89980972524206703322128554690077260449303708553350773765165963
+0.31550497270131339579458085429275969906541982503180286511957154
+0.24715685634134334817217108542195473770116089266449056400471287
+-0.49295323283626389222045565705709059467713170508124393031826388
+0.61255050813356272636402598579977562938952433707841263933337115
+0.66921172938113519470774658856140160420567435438964117611135557
+-0.50773756956681185529392722286890115054313254511221782488198266
+0.16390462418526800141336139682967702660102954000758921343350611
+0.49126263743885515441574332153228349404800151710125204883237315
+0.4608916705731183919164770479166043982518842193767907061715475
+0.18440686731802838898953429325351742015693883052079543233867296
+0.15871865751401574306190290385643350034506381285439043350211228
+0.08323260630504089009188239298549903691754027796660347248637621
+-0.85224408128079575840218507242217476035705407151406759741767299
+-1.01030736618026896585257462283881514365603256231907414034453559
+0.06704813629947926571204061330816165497639962105670299100151582
+0.26532333084738952626909949688828281227058290233706652215772231
+-0.1641521509232403564483570050994829739372249489330922286018414
+-0.16728227915440861859231131168617097954540557991504926831165912
+-0.58275427100058300265268393344829273806858595480465723683669337
+0.0405281160371267951133963375812277473157833506214992943261356
+0.79326560346058833986375773290261942699623205422162632948218542
+0.23053470455924924942561290081455129152861157936244607048691555
+0.14624109347218700383267786663399197111211128951788899939208141
+0.8449426170641577203605040837051100305357593657485665337615179
+0.16750770114486314576488967510891226937343799304666365231046406
+-0.55432775040865880875539475542593255492897425297433141875914255
+-0.42057547782533992436457082721549029684466627348171632970335292
+0.77180505014776678536863500172581653275328587948567859042726774
+0.4500374584742393343642015963832108495396091963881829795700962
+-0.75511875178155349679103610615308299528004743001559310553376835
+-0.48025456497703719124738177895336128556654883752402187167216162
+-0.54250551883052506299707162398409863337900481339636599255805592
+-0.75602656451200551044810022648187590028191983846559278754373321
+0.32942261072854082090988475547180464717097976520415462940478882
+0.35972139403808289988702717290571679892781972981203243788200238
+-0.46252816877959293804540677845128710232980700708839521677656
+0.42854905177787767955814309190566824148888089910421154244636783
+0.30914500754043084080740535451591009975766840638436169776662444
+-0.22684922461737636139525823477264982671449360610388008596318484
+0.34455270590770718480055734559534121649773789564648994339203967
+0.24529464601158603816160854821248821381522031444867562848008537
+-0.18530071485761463651397517369965180387382097480695521990559999
+0.44400234732030998569838987452857513550929257402512625452855961
+0.45232715263068945122851033698948896783041643618325425676165147
+0.44075376224202597144712035944853711057038088545446936332442188
+-0.29591836223301960681577172853087032420641518788931876464089221
+-0.26904114559527030827264268600579542630446527016425805049020208
+0.41679928899827000265612933586294810178359876096085144407232814
+-0.17121103922121247068393844335208924579934837057545217073876417
+-0.48434437810785910349660663430666039318920004702469432831281925
+0.26698816688557902281598604391316645375137795666946897830094352
+-0.15856372092860918525191357357642495260857481005851904435898968
+-0.59880062288958050710730507977210242158841144495732574803800797
+0.5303829536293809019901899502551834400449532847211870708773681
+0.65516244092248090354168872293923800156473434762397902450525711
+0.07714028188618532872520168162890447864032972905354423483196469
+-0.24938505014713264243338482692626155085160147384100018608524009
+-0.28638395705011424359473872681596963077370655856369202431196928
+-0.5758266482544085967212798062378217402195537649370184400489813
+-0.2979935672501387068759635229672146422275415992063930460196974
+0.34330085128921554851909569269509769094723026903856517629447711
+0.44482666833324027888349158232240977907096766263186334124817488
+-0.8536224568228841447165769197747919930151088279895969810636971
+0.5175469242587268436018530513414379219438489727038978367048427
+0.04166452510043741423273758035408357469173552876418879554223601
+-0.71454161118236656013820410741761894173256007419060809259653569
+1.01404113929653954667393486212382438684373223648275493520559355
+0.90771115661678010001847376045164314424808116017926808220759801
+-0.80195664201690797263886517780299623845745383354172163208751567
+-0.03886327719563442870624750154364773922911455036457862902231889
+0.5498356739012961564875629083916561483328372446218972528694603
+0.74940518385743593694890066199443639448646567249752931479244556
+0.56348616134055819187428372341220957406114408717422179020119491
+-0.0625814678742988450564245896730722264675728849274847703631923
+-0.2726290563845122200527609457401486802720122225741635436710447
+-0.59564447477069606469721110334142224552956201883777133613537541
+-0.88005208764268468308900257500843809582193715635851372293211156
+-0.34505319493617459433165181870610093109496557297583103778275063
+0.04191377995743885748645592340221040105416406186912661157299775
+0.09319770555407409448733554838582588351529987077187864294137301
+0.33498684153127503935985735818716282950312168051562710075679574
+-0.2162879861658452858973954548217841776243915999901942105783052
+0.31024257046317145323225389027077123090331735126076844626035218
+0.49228158666330306107247272230229972676576002816041366756837017
+-1.07402296492897066956314848399492380680010207258130239239443892
+-1.09315578463357360096720266948502541871237655856806558874755493
+0.48103875783686711856465314476588320834252388861394268720811193
+0.24887292635613893022688717991985394304473933123336104822451958
+-0.533187194774627516453956735235760986568292385406644271491897
+-1.00497632630191489278546561593570540177819500494936654680821928
+-0.07703660100310754462280001029575752511822004699232538317487674
+0.91551444774209905262706746217462064782485244163328182493148837
+0.4092622367421827422835422180006081893719390101493459326780258
+-0.05378266572871804861358946541643877954976193271731958601495132
+0.19412982714989108432891489048894558959399107186915072425109275
+0.51078659450416974677839523941103392441548827153007223484389131
+0.75700241605453253921989936831477455397251024624903991369056986
+0.2041812966931652384788972031331081396782437309883718768704996
+-0.47830210933194266072384193399460887394900120583471488274476369
+0.55481785350337345848194275692490885523231535464632807458046921
+1.06758361982878824467345451166772637502051588433786201962295238
+-0.3470010401505532485928955175894890646034915451014417400890706
+-1.57757418181162179497621867708305745922755611985678045156148606
+-1.43769734701747149509302586740266996052827011250359745935331863
+-0.45682914411034667292982084918070195006039848108667250952103252
+0.61351709559216006547771143365692135977138786959785587817803961
+0.09605182311054125479055842620101460268181711282807612526881214
+-0.14064700968361165501387718709188809561779672575577048297665207
+-0.23411094735889701636637279978539017718249276635261802685201931
+0.90924493629458326769915668621197782862116507572362484150403983
+0.98698490789607361039937432964380405753357253221489209036988857
+-0.54184425557917661199529627323922078339418559671906118962464428
+-0.34650889312590208426987157300333083278067388862439618108020951
+1.02159291107362383418708121469487745474600145339405579628222045
+0.84187970822323352109441342518582690842419690161617575011577252
+0.09283611076113367179686402310145234416670051678326555573206107
+0.38705314017395173002118608389330602069779602572362438312926862
+0.1483196411087991533817940949617668098438023435351317853013984
+0.55500105498373573594199899612483519769472983880527282348312207
+0.13449770907477672236818711681143506425588320948761230539760419
+-1.3189380431403856051812993375541389673818252784970631831196143
+-1.23739762106231037099763731190893356792942005479204739791320425
+-0.15128143830846520632282333722157241677197900497912107612301511
+0.07620816391547048740340152539673361312194539091694424758317669
+-0.12708793616729126712041235027515401712759402920296302183300906
+0.38686427669268455523151134811818013120109771756655434215069156
+0.97358446129530387545984874264603050257574179348952318956593669
+0.68997993269339574019947088881128706580856083480301398716860702
+-0.4033939880684783657265316937916238997045892338934740019196719
+-0.40959473049365329013204723414088537734440050836035850872922533
+-0.24333036160853095132714062540945172704199103588214185953447161
+-0.60458490612566148824885380440976141327934387599257337244223112
+0.44687833732716914330115964852704536926368890895435146359017658
+1.29793938661449722245589728682163490415139181664843959533066801
+0.73910223326131837387247608412453398241189692469387586818559551
+0.40193844664156791720391796969554840150868588596748312655122651
+0.01198385872447105382747487701921233698551526675685806495989415
+-0.21651569350873962506775943625010705493599115507513357328163788
+0.02363485657535318007804516260035300582883894343245711919485679
+0.13129206997911563109072543140350005462034904811538207023662676
+-0.63740976439301554110257378956973093288700222036867438508159913
+-0.43572386514023495434245119275886271775540395506992910723966048
+0.70740457599492328945388345232324581489481502234812302111001148
+2.26388073034335986617738815499462806965502364413094919637748014
+0.71534075302170235297980180172182269363469822987128353634759079
+-0.21901026546161404435383770868539924354453071980566336686197286
+-0.1411199504222229416909303693844588309850575831838035702481027
+-1.02370270152365755532372536901226148994206346560162348627455041
+-1.12195743185457149638873723835278107128798716298447254322533016
+-0.6446111148781443699106000103911779974153673205690922187865354
+-0.45176454058343313735599361024447164209927987257389421048653274
+0.72931519629956900569451168858839727011679239975344133832494355
+1.11031271252959237611368317228846169105970495398481753882935182
+0.73945616789200816235455046181362403397291007055747281197209853
+-0.05909797913688038892712918192861878987264041931765464592149296
+-0.2895903174684020252515016470833021516563749160866148583256946
+0.58092092365364991463228279418261733017956710104620168852094567
+0.67524585151014348471509645535544120922323825382465243268657276
+-0.73692820548812698373852668540635595355217933359304295435083523
+-0.30795305638636499059036099785920536889302474743904683264968157
+1.46512581194160690223440559196175785272980931631110868493530352
+
+-0.4833001744929688887627302318231007732586579925667420767092911497
+-0.6470889183313806476439784979725465604750285292906649332158905915
+0.9495591103622864735737804468916775971319894153057637661282509133
+0.1280772471342585841455757702545741213596517009855068302808317718
+-0.1946943926350927100029394214607870756382213566654573743676056718
+-0.8391269337210497321784330437702418478537689733296865638890089907
+0.09000979948494377602070534800332955914923353808674104151336312387
+-0.1766812336766545879148652249537685082960598655086779135604123172
+-0.1002499995910402071291914694552929590775602478191912580994509247
+0.8558312786548114618473704491843378278983698142481509704680004653
+
diff --git a/tests/nfct.c b/tests/nfct.c
new file mode 100644
index 0000000..9b4c096
--- /dev/null
+++ b/tests/nfct.c
@@ -0,0 +1,1263 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <complex.h>
+#include <CUnit/CUnit.h>
+
+#include "config.h"
+#include "nfft3.h"
+#include "infft.h"
+#include "cycle.h"
+#include "nfct.h"
+
+#define ABSPATH(x) ABS_SRCDIR SEP "tests" SEP x
+
+/* Testcase delegate. */
+typedef struct testcase_delegate_s testcase_delegate_t;
+
+typedef void (*setup_t)(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f);
+typedef void (*destroy_t)(const testcase_delegate_t *ego_, R *x, R *f_hat, R *f);
+
+struct testcase_delegate_s
+{
+  setup_t setup;
+  destroy_t destroy;
+};
+
+typedef struct testcase_delegate_file_s
+{
+  setup_t setup;
+  destroy_t destroy;
+  const char *filename;
+} testcase_delegate_file_t;
+
+static void setup_file(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f);
+static void destroy_file(const testcase_delegate_t *ego_, R *x, R *f_hat, R *f);
+
+typedef struct testcase_delegate_online_s
+{
+  setup_t setup;
+  destroy_t destroy;
+  const int d;
+  const int N;
+  const int M;
+} testcase_delegate_online_t;
+
+static void setup_online(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f);
+static void destroy_online(const testcase_delegate_t *ego_, R *x, R *f_hat, R *f);
+
+/* Initialization delegate. */
+typedef struct init_delegate_s init_delegate_t;
+typedef void (*init_t)(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+
+struct init_delegate_s
+{
+  const char *name;
+  init_t init;
+  const int m;
+  const unsigned flags;
+  const unsigned fftw_flags;
+};
+
+/* Prepare delegate. */
+typedef struct check_delegate_s check_delegate_t;
+typedef void (*prepare_t)(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat);
+typedef R (*compare_t)(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat);
+
+struct check_delegate_s
+{
+  prepare_t prepare;
+  compare_t compare;
+};
+
+/* Trafo delegate. */
+typedef void (*trafo_t)(X(plan) *p);
+typedef R (*cost_t)(X(plan) *p);
+typedef const char* (*check_t)(X(plan) *p);
+typedef R (*acc_t)(X(plan) *p);
+
+typedef struct trafo_delegate_s
+{
+  const char *name;
+  trafo_t trafo;
+  check_t check;
+  cost_t cost;
+  acc_t acc;
+
+} trafo_delegate_t;
+
+static R trafo_direct_cost(X(plan) *p);
+
+static R err_trafo(X(plan) *p);
+static R err_trafo_direct(X(plan) *p);
+
+/* Check single test case.*/
+static int check_single(const testcase_delegate_t *testcase,
+    init_delegate_t *init_delegate, check_delegate_t *check_delegate,
+    trafo_delegate_t *trafo_delegate);
+
+/* Check multiple test cases.*/
+static void check_many(const size_t nf, const size_t ni, const size_t nt,
+  const testcase_delegate_t **testcases, init_delegate_t **initializers,
+  check_delegate_t *check_delegate, trafo_delegate_t **trafos);
+
+/* Initializers. */
+static void init_1d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_2d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_3d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_advanced_pre_psi_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+
+#define DEFAULT_NFFT_FLAGS MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT | FFT_OUT_OF_PLACE
+#define DEFAULT_FFTW_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT
+
+static init_delegate_t init_1d;
+static init_delegate_t init_2d;
+static init_delegate_t init_3d;
+static init_delegate_t init;
+static init_delegate_t init_advanced_pre_psi;
+static init_delegate_t init_advanced_pre_full_psi;
+static init_delegate_t init_advanced_pre_lin_psi;
+#if defined(GAUSSIAN)
+static init_delegate_t init_advanced_pre_fg_psi;
+#endif
+
+static check_delegate_t check_trafo;
+static check_delegate_t check_adjoint;
+
+static trafo_delegate_t trafo_direct;
+static trafo_delegate_t trafo;
+
+static R trafo_direct_cost_factor = K(1.0E-6);
+
+static R trafo_direct_cost(X(plan) *p)
+{
+  if (trafo_direct_cost_factor == 0.0)
+  {
+    int M, d, Nd, x = 0;
+    for (d = 1; d <= 4; d++)
+    {
+      for (Nd = 4; Nd < 128; Nd *= 2)
+      {
+        for (M = 4; M <= 128; M *= 2)
+        {
+          X(plan) p2;
+          int *N = Y(malloc)((size_t)(d) * sizeof(int)), i;
+          for (i = 0; i < d; i++)
+          {
+            N[i] = Nd;
+          }
+          X(init)(&p2, d, N, M);
+          for (i = 0; i < M; i++)
+            p2.x[i] = K(0.0);
+          if(p2.flags & PRE_ONE_PSI)
+            X(precompute_one_psi)(&p2);
+          for (i = 0; i < d * (Nd); i++)
+          {
+            p2.f_hat[i] = K(0.0);
+          }
+          {
+            R r;
+            ticks t0, t1;
+            t0 = getticks();
+            X(trafo_direct)(&p2);
+            t1 = getticks();
+            r = Y(elapsed_seconds)(t1, t0) / (R)(M);
+            for (i = 0; i < d; i++)
+              r = r / Nd;
+            trafo_direct_cost_factor += r;
+            printf(__FE__ "\n", r);
+            x += 1;
+          }
+          X(finalize)(&p2);
+          free(N);
+        }
+      }
+    }
+    trafo_direct_cost_factor = trafo_direct_cost_factor/((R)x);
+    printf("--> " __FE__ "\n", trafo_direct_cost_factor);
+  }
+
+  {
+    INT c = p->M_total, i;
+
+    for (i = 0; i < p->d; i++)
+      c *= p->N[i];
+
+    return trafo_direct_cost_factor * (R)(c);
+  }
+}
+
+static R err_trafo_direct(X(plan) *p)
+{
+  UNUSED(p);
+  return K(120.0) * EPSILON;
+}
+
+static R err_trafo(X(plan) *p)
+{
+  const R m = ((R)p->m);
+  R s; /* oversampling factor */
+  R a;
+  R b;
+  R eps = EPSILON;
+  R err;
+  int i;
+  for (i = 0, s = ((R)p->sigma[0]); i < p->d; i++)
+    s = FMIN(s, ((R)p->sigma[i]));
+#if defined(GAUSSIAN)
+#if defined(NFFT_LDOUBLE)
+    a = K(3.0);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.4);
+    b = K(9500.0);
+#else
+    a = K(1.5);
+    b = K(50.0);
+#endif
+    err = EXP(-m*KPI*(K(1.0)-K(1.0)/(K(2.0)*K(2.0) - K(1.0))));
+#elif defined(B_SPLINE)
+    //printf("m = %E, s = %E, a1 = %E, a2 = %E, z = %E\n", m, s, K(1.0)/(K(2.0)*s-K(1.0)), K(2.0)*m, K(4.0) * POW(K(1.0)/(K(2.0)*s-K(1.0)),K(2.0)*m));
+    //printf("\n<s = %E>\n", s);
+    //fflush(stdout);
+#if defined(NFFT_LDOUBLE)
+    a = K(0.3);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.4);
+    b = K(4800.0);
+#else
+    a = K(1.0);
+    b = K(4100.0);
+#endif
+    err = K(3000.0) * K(4.0) * POW(K(1.0)/(K(2.0)*s-K(1.0)),K(2.0)*m);
+  #elif defined(SINC_POWER)
+#if defined(NFFT_LDOUBLE)
+    a = K(0.3);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.4);
+    b = K(4800.0);
+#else
+    a = K(1.0);
+    b = K(4100.0);
+#endif
+    err = (K(1.0)/(m-K(1.0))) * ((K(2.0)/(POW(s,K(2.0)*m))) + POW(s/(K(2.0)*s-K(1.0)),K(2.0)*m));
+  #elif defined(KAISER_BESSEL)
+#if defined(NFFT_LDOUBLE)
+    a = K(2.9);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.95);
+    b = K(4800.0);
+#else
+    a = K(0.3);
+    b = K(5000.0);
+#endif
+    err = KPI * (SQRT(m) + m) * SQRT(SQRT(K(1.0) - K(1.0)/K(2.0))) * EXP(-K2PI * m * SQRT(K(1.0) - K(1.0) / K(2.0)));
+  #else
+    #error Unsupported window function.
+  #endif
+
+  return FMAX(FMAX(a * err, b * eps), err_trafo_direct(p));
+}
+
+#define MAX_SECONDS 0.1
+
+static int check_single(const testcase_delegate_t *testcase,
+  init_delegate_t *init_delegate, check_delegate_t *check_delegate,
+  trafo_delegate_t *trafo_delegate)
+{
+  int ok = 0;
+  X(plan) p;
+  int d, j, *N, NN, M;
+  R *x;
+  R *f_hat, *f;
+
+  testcase->setup(testcase, &d, &N, &NN, &M, &x, &f_hat, &f);
+
+  /* Init plan. */
+  printf(", %-28s", init_delegate->name);
+  init_delegate->init(init_delegate, &p, d, N, M);
+
+  printf(", m = %2d", (int)p.m);
+  printf(", %-14s", trafo_delegate->name);
+
+  /* Nodes. */
+  for (j = 0; j < M*d; j++)
+  {
+    p.x[j] = x[j];
+  }
+
+  if (trafo_delegate->check)
+  {
+    const char* check = trafo_delegate->check(&p);
+    if (check != 0)
+    {
+      printf(" -> %-4s (","OK");
+      printf("%s", check);
+      printf(")\n");
+      ok = 1;
+      goto cleanup;
+    }
+  }
+  else if (trafo_delegate->cost)
+  {
+    const R cost = trafo_delegate->cost(&p);
+    if (cost > MAX_SECONDS)
+    {
+      printf(" -> %-4s (cost too high)\n","OK");
+      ok = 1;
+      goto cleanup;
+    }
+  }
+
+  /* Pre-compute Psi, maybe. */
+  if(p.flags & PRE_ONE_PSI)
+    X(precompute_one_psi)(&p);
+
+  check_delegate->prepare(check_delegate, &p, NN, M, f, f_hat);
+
+  trafo_delegate->trafo(&p);
+
+  /* Standard NFFT error measure. */
+  {
+    R err = check_delegate->compare(check_delegate, &p, NN, M, f, f_hat);
+    R bound = trafo_delegate->acc(&p);
+    ok = IF(err < bound, 1, 0);
+    printf(" -> %-4s " __FE__ " (" __FE__ ")\n", IF(ok == 0, "FAIL", "OK"), err, bound);
+  }
+
+cleanup:
+  testcase->destroy(testcase, x, f_hat, f);
+  X(finalize)(&p);
+
+  return ok;
+}
+
+static void check_many(const size_t nf, const size_t ni, const size_t nt,
+  const testcase_delegate_t **testcases, init_delegate_t **initializers,
+  check_delegate_t *check_delegate, trafo_delegate_t **trafos)
+{
+  size_t i, j, k;
+  int ok = 1, r;
+  for (k = 0; k < nt; k++)
+  {
+    for (i = 0; i < nf; i++)
+    {
+      for (j = 0; j < ni; j++)
+      {
+         r = check_single(testcases[i], initializers[j], check_delegate, trafos[k]);
+         ok = MIN(ok, r);
+      }
+    }
+  }
+  CU_ASSERT(ok);
+}
+
+static void setup_file(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f)
+{
+  const testcase_delegate_file_t *ego = (const testcase_delegate_file_t*)ego_;
+  int j;
+  char filename[200];
+  char* c = rindex(ego->filename, SEP[0]);
+  FILE *file = fopen(ego->filename, "r");
+
+  filename[0] = (char) 0;
+  strcpy(filename, &c[1]);
+  printf("%-31s", filename);
+
+  /* Dimensions. */
+  fscanf(file, "%d", d);
+  /* Bandwidths. */
+  *N = Y(malloc)((size_t)(*d) * sizeof(int));
+  for (j = 0; j < *d; j++)
+    fscanf(file, "%d", &((*N)[j]));
+  /* Number of nodes. */
+  fscanf(file, "%d", M);
+
+  printf(" d = %-1d, N = [", *d);
+  {
+    for (j = 0; j < *d; j++)
+    {
+      printf("%s%-5d", IF(j > 0,", ", ""), (*N)[j]);
+    }
+    for (j = 0; j < (4-*d); j++)
+    {
+      printf("%s%-5s", "  ", "");
+    }
+  }
+  printf("],");
+  printf(" M = %-5d", *M);
+
+  for (j = 0, *NN = 1; j < *d; j++)
+    *NN *= ((*N)[j]);
+
+  /* Nodes. */
+  *x = Y(malloc)((size_t)(M[0]*d[0])*sizeof(R));
+  for (j = 0; j < M[0]*d[0]; j++)
+  {
+    fscanf(file, __FI__, &((*x)[j]));
+  }
+
+  /* Fourier coefficients. */
+  *f_hat = Y(malloc)((size_t)(NN[0])*sizeof(R));
+  for (j = 0; j < NN[0]; j++)
+  {
+    R re;
+    fscanf(file, __FI__, &re);
+    (*f_hat)[j] = re;
+  }
+
+  /* Reference function values. */
+  *f = Y(malloc)((size_t)(M[0]) * sizeof(R));
+  for (j = 0; j < M[0]; j++)
+  {
+    R re;
+    fscanf(file, __FI__, &re);
+    (*f)[j] = re;
+  }
+
+  fclose(file);
+}
+
+static void destroy_file(const testcase_delegate_t *ego_, R *x, R *f_hat, R *f)
+{
+  UNUSED(ego_);
+  free(x);
+  free(f_hat);
+  free(f);
+}
+
+static void setup_online(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f)
+{
+  const testcase_delegate_online_t *ego = (const testcase_delegate_online_t*)ego_;
+  int j;
+
+  /* Dimensions. */
+  *d = ego->d;
+  /* Bandwidths. */
+  *N = Y(malloc)((size_t)(*d) * sizeof(int));
+  for (j = 0; j < *d; j++)
+    (*N)[j] = ego->N;
+  /* Number of nodes. */
+  *M = ego->M;
+
+  printf("%-31s", "nfct_online");
+
+  printf(" d = %-1d, N = [", *d);
+  {
+    for (j = 0; j < *d; j++)
+    {
+      printf("%s%-5d", IF(j > 0,", ", ""), (*N)[j]);
+    }
+    for (j = 0; j < (4-*d); j++)
+    {
+      printf("%s%-5s", "  ", "");
+    }
+  }
+  printf("],");
+  printf(" M = %-5d", *M);
+
+  for (j = 0, *NN = 1; j < *d; j++)
+    *NN *= ((*N)[j]);
+
+  /* Nodes. */
+  *x = Y(malloc)((size_t)(M[0]*d[0])*sizeof(R));
+  for (j = 0; j < M[0]*d[0]; j++)
+  {
+    (*x)[j] = K(0.5) * Y(drand48)();
+  }
+
+  /* Fourier coefficients. */
+  *f_hat = Y(malloc)((size_t)(NN[0])*sizeof(R));
+  for (j = 0; j < NN[0]; j++)
+  {
+    (*f_hat)[j] = Y(drand48)() - K(0.5);
+  }
+
+  {
+    X(plan) p;
+
+    X(init)(&p, *d, *N, *M);
+
+    /* Nodes. */
+    for (j = 0; j < M[0]*d[0]; j++)
+    {
+      p.x[j] = (*x)[j];
+    }
+
+    /* Pre-compute Psi, maybe. */
+    if(p.flags & PRE_ONE_PSI)
+      X(precompute_one_psi)(&p);
+
+    /* Fourier coefficients. */
+    for (j = 0; j < *NN; j++)
+    {
+      p.f_hat[j] = (*f_hat)[j];
+    }
+
+    X(trafo_direct)(&p);
+
+    /* Reference function values. */
+    *f = Y(malloc)((size_t)(M[0]) * sizeof(R));
+    for (j = 0; j < M[0]; j++)
+    {
+      (*f)[j] = p.f[j];
+    }
+
+    X(finalize)(&p);
+  }
+}
+
+static void setup_adjoint_online(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f)
+{
+  const testcase_delegate_online_t *ego = (const testcase_delegate_online_t*)ego_;
+  int j;
+
+  /* Dimensions. */
+  *d = ego->d;
+
+  /* Bandwidths. */
+  *N = Y(malloc)((size_t)(*d) * sizeof(int));
+
+  for (j = 0; j < *d; j++)
+    (*N)[j] = ego->N;
+
+  /* Number of nodes. */
+  *M = ego->M;
+
+  printf("%-31s", "nfct_online");
+
+  printf(" d = %-1d, N = [", *d);
+  {
+    for (j = 0; j < *d; j++)
+    {
+      printf("%s%-5d", IF(j > 0,", ", ""), (*N)[j]);
+    }
+    for (j = 0; j < (4-*d); j++)
+    {
+      printf("%s%-5s", "  ", "");
+    }
+  }
+  printf("],");
+  printf(" M = %-5d", *M);
+
+  for (j = 0, *NN = 1; j < *d; j++)
+    *NN *= ((*N)[j]);
+
+  /* Nodes. */
+  *x = Y(malloc)((size_t)(M[0]*d[0])*sizeof(R));
+
+  for (j = 0; j < M[0]*d[0]; j++)
+  {
+    (*x)[j] = K(0.5) * Y(drand48)();
+  }
+
+  /* Function values. */
+  *f = Y(malloc)((size_t)(M[0]) * sizeof(C));
+  for (j = 0; j < M[0]; j++)
+  {
+    (*f)[j] = Y(drand48)() - K(0.5);
+  }
+
+  {
+    X(plan) p;
+
+    X(init)(&p, *d, *N, *M);
+
+    /* Nodes. */
+    for (j = 0; j < M[0]*d[0]; j++)
+    {
+      p.x[j] = (*x)[j];
+    }
+
+    /* Pre-compute Psi, maybe. */
+    if(p.flags & PRE_ONE_PSI)
+      X(precompute_one_psi)(&p);
+
+    /* Function values. */
+    for (j = 0; j < M[0]; j++)
+    {
+      p.f[j] = (*f)[j];
+    }
+
+    X(adjoint_direct)(&p);
+
+    /* Reference pseudo Fourier coefficients. */
+    *f_hat = Y(malloc)((size_t)(NN[0])*sizeof(R));
+
+    for (j = 0; j < NN[0]; j++)
+    {
+      (*f_hat)[j] = p.f_hat[j];
+    }
+
+    X(finalize)(&p);
+  }
+}
+
+static void destroy_online(const testcase_delegate_t *ego_, R *x, R *f_hat, R *f)
+{
+  UNUSED(ego_);
+  free(x);
+  free(f_hat);
+  free(f);
+}
+
+/* Initializers. */
+static void init_1d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  UNUSED(d);
+  X(init_1d)(p, N[0], M);
+}
+
+static void init_2d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  UNUSED(d);
+  X(init_2d)(p, N[0], N[1], M);
+}
+
+static void init_3d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  UNUSED(d);
+  X(init_3d)(p, N[0], N[1], N[2], M);
+}
+
+static void init_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  X(init)(p, d, N, M);
+}
+
+static void init_advanced_pre_psi_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  int *n = Y(malloc)((size_t)(d)*sizeof(int));
+  int i;
+  for (i = 0; i < d; i++)
+    n[i] = 2 * (int)(Y(next_power_of_2)(N[i]));
+  X(init_guru)(p, d, N, M, n, ego->m, ego->flags, ego->fftw_flags);
+  free(n);
+}
+
+static init_delegate_t init_direct = {"init_guru ()", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, (DEFAULT_NFFT_FLAGS ^ PRE_PSI), DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_1d = {"init_1d", init_1d_, 0, 0, 0};
+static init_delegate_t init_2d = {"init_2d", init_2d_, 0, 0, 0};
+static init_delegate_t init_3d = {"init_3d", init_3d_, 0, 0, 0};
+static init_delegate_t init = {"init", init_, 0, 0, 0};
+static init_delegate_t init_advanced_pre_psi = {"init_guru (PRE PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_advanced_pre_full_psi = {"init_guru (PRE FULL PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_FULL_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_advanced_pre_lin_psi = {"init_guru (PRE LIN PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+#if defined(GAUSSIAN)
+static init_delegate_t init_advanced_pre_fg_psi = {"init_guru (PRE FG PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | FG_PSI | PRE_FG_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+#endif
+
+/* Check routines. */
+static void prepare_trafo(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(M);
+  UNUSED(f);
+  int j;
+
+  /* Fourier coefficients. */
+  for (j = 0; j < NN; j++)
+  {
+    p->f_hat[j] = f_hat[j];
+  }
+}
+
+static void prepare_adjoint(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(NN);
+  UNUSED(f_hat);
+  int j;
+
+  /* Fourier coefficients. */
+  for (j = 0; j < M; j++)
+  {
+    p->f[j] = f[j];
+  }
+}
+
+static R compare_trafo(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(f_hat);
+  int j;
+  R numerator = K(0.0), denominator = K(0.0);
+
+  /* debug */
+//  fprintf(stderr, "\n");
+//  for (j = 0; j < M; j++)
+//    fprintf(stderr, "f[%2d] = " __FE__ ", f[%2d] = " __FE__ ", err = " __FE__ "\n", j,
+//      f[j], j, p->f[j], ABS(f[j] - p->f[j]) / ABS(f[j]));
+
+  for (j = 0; j < M; j++)
+    numerator = MAX(numerator, ABS(f[j] - p->f[j]));
+
+  for (j = 0; j < NN; j++)
+    denominator += ABS(p->f_hat[j]);
+
+  return numerator == K(0.0) ? K(0.0) : numerator/denominator;
+}
+
+static R compare_adjoint(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(f);
+  int j;
+  R numerator = K(0.0), denominator = K(0.0);
+
+  /* debug */
+//  fprintf(stderr, "\n");
+//  for (j = 0; j < NN; j++)
+//    fprintf(stderr, "f_hat[%2d] = " __FE__ ", f_hat[%2d] = " __FE__ ", err = " __FE__ "\n", j,
+//      f_hat[j], j, p->f_hat[j], ABS(f_hat[j] - p->f_hat[j]) / ABS(f_hat[j]));
+
+  for (j = 0; j < NN; j++)
+    numerator = MAX(numerator, ABS(f_hat[j] - p->f_hat[j]));
+
+  for (j = 0; j < M; j++)
+    denominator += ABS(p->f[j]);
+
+  return numerator == K(0.0) ? K(0.0) : numerator/denominator;
+}
+
+static check_delegate_t check_trafo = {prepare_trafo, compare_trafo};
+static check_delegate_t check_adjoint = {prepare_adjoint, compare_adjoint};
+
+static trafo_delegate_t trafo_direct = {"trafo_direct", X(trafo_direct), 0, trafo_direct_cost, err_trafo_direct};
+static trafo_delegate_t trafo = {"trafo", X(trafo), X(check), 0, err_trafo};
+//static trafo_delegate_t trafo_1d = {"trafo_1d", X(trafo_1d), X(check), 0, err_trafo};
+//static trafo_delegate_t trafo_2d = {"trafo_2d", X(trafo_2d), X(check), 0, err_trafo};
+//static trafo_delegate_t trafo_3d = {"trafo_3d", X(trafo_3d), X(check), 0, err_trafo};
+
+static trafo_delegate_t adjoint_direct = {"adjoint_direct", X(adjoint_direct), 0, trafo_direct_cost, err_trafo_direct};
+static trafo_delegate_t adjoint = {"adjoint", X(adjoint), X(check), 0, err_trafo};
+//static trafo_delegate_t adjoint_1d = {"adjoint_1d", adjoint_1d, X(check), 0, err_trafo};
+//static trafo_delegate_t adjoint_2d = {"adjoint_2d", adjoint_2d, X(check), 0, err_trafo};
+//static trafo_delegate_t adjoint_3d = {"adjoint_3d", adjoint_3d, X(check), 0, err_trafo};
+
+/* 1D */
+
+/* Initializers. */
+static const init_delegate_t* initializers_direct[] =
+{
+  &init_direct,
+};
+
+static const init_delegate_t* initializers_1d[] =
+{
+  &init_1d,
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_file_t nfct_1d_1_1 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_1_1.txt")};
+static const testcase_delegate_file_t nfct_1d_1_10 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_1_10.txt")};
+static const testcase_delegate_file_t nfct_1d_1_20 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_1_20.txt")};
+static const testcase_delegate_file_t nfct_1d_1_50 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_1_50.txt")};
+static const testcase_delegate_file_t nfct_1d_2_1 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_2_1.txt")};
+static const testcase_delegate_file_t nfct_1d_2_10 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_2_10.txt")};
+static const testcase_delegate_file_t nfct_1d_2_20 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_2_20.txt")};
+static const testcase_delegate_file_t nfct_1d_2_50 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_2_50.txt")};
+static const testcase_delegate_file_t nfct_1d_4_1 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_4_1.txt")};
+static const testcase_delegate_file_t nfct_1d_4_10 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_4_10.txt")};
+static const testcase_delegate_file_t nfct_1d_4_20 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_4_20.txt")};
+static const testcase_delegate_file_t nfct_1d_4_50 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_4_50.txt")};
+static const testcase_delegate_file_t nfct_1d_10_1 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_10_1.txt")};
+static const testcase_delegate_file_t nfct_1d_10_10 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_10_10.txt")};
+static const testcase_delegate_file_t nfct_1d_10_20 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_10_20.txt")};
+static const testcase_delegate_file_t nfct_1d_10_50 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_10_50.txt")};
+static const testcase_delegate_file_t nfct_1d_20_1 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_20_1.txt")};
+static const testcase_delegate_file_t nfct_1d_20_10 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_20_10.txt")};
+static const testcase_delegate_file_t nfct_1d_20_20 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_20_20.txt")};
+static const testcase_delegate_file_t nfct_1d_20_50 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_20_50.txt")};
+static const testcase_delegate_file_t nfct_1d_50_1 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_50_1.txt")};
+static const testcase_delegate_file_t nfct_1d_50_10 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_50_10.txt")};
+static const testcase_delegate_file_t nfct_1d_50_20 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_50_20.txt")};
+static const testcase_delegate_file_t nfct_1d_50_50 = {setup_file,destroy_file,ABSPATH("data/nfct_1d_50_50.txt")};
+
+static const testcase_delegate_file_t *testcases_1d_file[] =
+{
+    &nfct_1d_1_1,
+    &nfct_1d_1_10,
+    &nfct_1d_1_20,
+    &nfct_1d_1_50,
+    &nfct_1d_2_1,
+    &nfct_1d_2_10,
+    &nfct_1d_2_20,
+    &nfct_1d_2_50,
+    &nfct_1d_4_1,
+    &nfct_1d_4_10,
+    &nfct_1d_4_20,
+    &nfct_1d_4_50,
+    &nfct_1d_10_1,
+    &nfct_1d_10_10,
+    &nfct_1d_10_20,
+    &nfct_1d_10_50,
+    &nfct_1d_20_1,
+    &nfct_1d_20_10,
+    &nfct_1d_20_20,
+    &nfct_1d_20_50,
+    &nfct_1d_50_1,
+    &nfct_1d_50_10,
+    &nfct_1d_50_20,
+    &nfct_1d_50_50,
+};
+
+static const trafo_delegate_t* trafos_1d_direct_file[] = {&trafo_direct};
+
+void X(check_1d_direct_file)(void)
+{
+  printf("check_1d_direct_file:\n");
+  check_many(SIZE(testcases_1d_file), SIZE(initializers_direct), SIZE(trafos_1d_direct_file),
+    testcases_1d_file, initializers_direct, &check_trafo, trafos_1d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_1d_fast_file[] = {&trafo/*, &trafo_1d*/};
+
+void X(check_1d_fast_file)(void)
+{
+  printf("check_1d_fast_file:\n");
+  check_many(SIZE(testcases_1d_file), SIZE(initializers_1d), SIZE(trafos_1d_fast_file),
+    testcases_1d_file, initializers_1d, &check_trafo, trafos_1d_fast_file);
+}
+
+static const testcase_delegate_file_t nfct_adjoint_1d_1_1 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_1_1.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_1_10 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_1_10.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_1_20 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_1_20.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_1_50 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_1_50.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_2_1 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_2_1.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_2_10 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_2_10.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_2_20 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_2_20.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_2_50 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_2_50.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_4_1 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_4_1.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_4_10 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_4_10.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_4_20 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_4_20.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_4_50 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_4_50.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_10_1 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_10_1.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_10_10 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_10_10.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_10_20 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_10_20.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_10_50 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_10_50.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_20_1 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_20_1.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_20_10 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_20_10.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_20_20 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_20_20.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_20_50 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_20_50.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_50_1 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_50_1.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_50_10 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_50_10.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_50_20 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_50_20.txt")};
+static const testcase_delegate_file_t nfct_adjoint_1d_50_50 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_1d_50_50.txt")};
+
+static const testcase_delegate_file_t *testcases_adjoint_1d_file[] =
+{
+  &nfct_adjoint_1d_1_1,
+  &nfct_adjoint_1d_1_10,
+  &nfct_adjoint_1d_1_20,
+  &nfct_adjoint_1d_1_50,
+  &nfct_adjoint_1d_2_1,
+  &nfct_adjoint_1d_2_10,
+  &nfct_adjoint_1d_2_20,
+  &nfct_adjoint_1d_2_50,
+  &nfct_adjoint_1d_4_1,
+  &nfct_adjoint_1d_4_10,
+  &nfct_adjoint_1d_4_20,
+  &nfct_adjoint_1d_4_50,
+  &nfct_adjoint_1d_10_1,
+  &nfct_adjoint_1d_10_10,
+  &nfct_adjoint_1d_10_20,
+  &nfct_adjoint_1d_10_50,
+  &nfct_adjoint_1d_20_1,
+  &nfct_adjoint_1d_20_10,
+  &nfct_adjoint_1d_20_20,
+  &nfct_adjoint_1d_20_50,
+  &nfct_adjoint_1d_50_1,
+  &nfct_adjoint_1d_50_10,
+  &nfct_adjoint_1d_50_20,
+  &nfct_adjoint_1d_50_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_direct_1d_file[] = {&adjoint_direct};
+
+void X(check_adjoint_1d_direct_file)(void)
+{
+  printf("check_adjoint_1d_direct_file:\n");
+  check_many(SIZE(testcases_adjoint_1d_file), SIZE(initializers_direct), SIZE(trafos_adjoint_direct_1d_file),
+    testcases_adjoint_1d_file, initializers_direct, &check_adjoint, trafos_adjoint_direct_1d_file);
+}
+
+static const trafo_delegate_t* trafos_adjoint_fast_1d_file[] = {&adjoint/*, &adjoint_1d*/};
+
+void X(check_adjoint_1d_fast_file)(void)
+{
+  printf("check_adjoint_1d_fast_file:\n");
+  check_many(SIZE(testcases_adjoint_1d_file), SIZE(initializers_1d), SIZE(trafos_adjoint_fast_1d_file),
+    testcases_adjoint_1d_file, initializers_1d, &check_adjoint, trafos_adjoint_fast_1d_file);
+}
+
+static const testcase_delegate_online_t nfct_online_1d_50_50 = {setup_online, destroy_online, 1, 50 ,50};
+static const testcase_delegate_online_t nfct_online_1d_100_50 = {setup_online, destroy_online, 1, 100 ,50};
+static const testcase_delegate_online_t nfct_online_1d_200_50 = {setup_online, destroy_online, 1, 200 ,50};
+static const testcase_delegate_online_t nfct_online_1d_500_50 = {setup_online, destroy_online, 1, 500 ,50};
+static const testcase_delegate_online_t nfct_online_1d_1000_50 = {setup_online, destroy_online, 1, 1000 ,50};
+static const testcase_delegate_online_t nfct_online_1d_2000_50 = {setup_online, destroy_online, 1, 2000 ,50};
+static const testcase_delegate_online_t nfct_online_1d_5000_50 = {setup_online, destroy_online, 1, 5000 ,50};
+static const testcase_delegate_online_t nfct_online_1d_10000_50 = {setup_online, destroy_online, 1, 10000 ,50};
+
+static const testcase_delegate_online_t *testcases_1d_online[] =
+{
+  &nfct_online_1d_50_50,
+  &nfct_online_1d_100_50,
+  &nfct_online_1d_200_50,
+  &nfct_online_1d_500_50,
+  &nfct_online_1d_1000_50,
+  &nfct_online_1d_2000_50,
+  &nfct_online_1d_5000_50,
+  &nfct_online_1d_10000_50,
+};
+
+static const trafo_delegate_t* trafos_1d_online[] = {&trafo/*, &trafo_1d*/};
+
+void X(check_1d_online)(void)
+{
+  check_many(SIZE(testcases_1d_online), SIZE(initializers_1d), SIZE(trafos_1d_online),
+    testcases_1d_online, initializers_1d, &check_trafo, trafos_1d_online);
+}
+
+static const testcase_delegate_online_t nfct_adjoint_online_1d_50_50 = {setup_adjoint_online, destroy_online, 1, 50 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_1d_100_50 = {setup_adjoint_online, destroy_online, 1, 100 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_1d_200_50 = {setup_adjoint_online, destroy_online, 1, 200 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_1d_500_50 = {setup_adjoint_online, destroy_online, 1, 500 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_1d_1000_50 = {setup_adjoint_online, destroy_online, 1, 1000 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_1d_2000_50 = {setup_adjoint_online, destroy_online, 1, 2000 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_1d_5000_50 = {setup_adjoint_online, destroy_online, 1, 5000 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_1d_10000_50 = {setup_adjoint_online, destroy_online, 1, 10000 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_1d_online[] =
+{
+  &nfct_adjoint_online_1d_50_50,
+  &nfct_adjoint_online_1d_100_50,
+  &nfct_adjoint_online_1d_200_50,
+  &nfct_adjoint_online_1d_500_50,
+  &nfct_adjoint_online_1d_1000_50,
+  &nfct_adjoint_online_1d_2000_50,
+  &nfct_adjoint_online_1d_5000_50,
+  &nfct_adjoint_online_1d_10000_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_1d_online[] = {&adjoint/*, &adjoint_1d*/};
+
+void X(check_adjoint_1d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_1d_online), SIZE(initializers_1d), SIZE(trafos_adjoint_1d_online),
+    testcases_adjoint_1d_online, initializers_1d, &check_adjoint, trafos_adjoint_1d_online);
+}
+
+/* 2D */
+
+/* Initializers. */
+static const init_delegate_t* initializers_2d[] =
+{
+  &init_2d,
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_file_t nfct_2d_10_10_20 = {setup_file,destroy_file,ABSPATH("data/nfct_2d_10_10_20.txt")};
+static const testcase_delegate_file_t nfct_2d_10_10_50 = {setup_file,destroy_file,ABSPATH("data/nfct_2d_10_10_50.txt")};
+static const testcase_delegate_file_t nfct_2d_10_20_20 = {setup_file,destroy_file,ABSPATH("data/nfct_2d_10_20_20.txt")};
+static const testcase_delegate_file_t nfct_2d_10_20_50 = {setup_file,destroy_file,ABSPATH("data/nfct_2d_10_20_50.txt")};
+static const testcase_delegate_file_t nfct_2d_20_10_20 = {setup_file,destroy_file,ABSPATH("data/nfct_2d_20_10_20.txt")};
+static const testcase_delegate_file_t nfct_2d_20_10_50 = {setup_file,destroy_file,ABSPATH("data/nfct_2d_20_10_50.txt")};
+static const testcase_delegate_file_t nfct_2d_20_20_20 = {setup_file,destroy_file,ABSPATH("data/nfct_2d_20_20_20.txt")};
+static const testcase_delegate_file_t nfct_2d_20_20_50 = {setup_file,destroy_file,ABSPATH("data/nfct_2d_20_20_50.txt")};
+
+static const testcase_delegate_file_t *testcases_2d_file[] =
+{
+  &nfct_2d_10_10_20,
+  &nfct_2d_10_10_50,
+  &nfct_2d_10_20_20,
+  &nfct_2d_10_20_50,
+  &nfct_2d_20_10_20,
+  &nfct_2d_20_10_50,
+  &nfct_2d_20_20_20,
+  &nfct_2d_20_20_50,
+};
+
+static const trafo_delegate_t* trafos_2d_direct_file[] = {&trafo_direct};
+
+void X(check_2d_direct_file)(void)
+{
+  printf("check_2d_direct_file:\n");
+  check_many(SIZE(testcases_2d_file), SIZE(initializers_direct), SIZE(trafos_2d_direct_file),
+    testcases_2d_file, initializers_direct, &check_trafo, trafos_2d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_2d_fast_file[] = {&trafo/*, &trafo_2d*/};
+
+void X(check_2d_fast_file)(void)
+{
+  printf("check_2d_fast_file:\n");
+  check_many(SIZE(testcases_2d_file), SIZE(initializers_2d), SIZE(trafos_2d_fast_file),
+    testcases_2d_file, initializers_2d, &check_trafo, trafos_2d_fast_file);
+}
+
+static const testcase_delegate_file_t nfct_adjoint_2d_10_10_20 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_2d_10_10_20.txt")};
+static const testcase_delegate_file_t nfct_adjoint_2d_10_10_50 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_2d_10_10_50.txt")};
+static const testcase_delegate_file_t nfct_adjoint_2d_10_20_20 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_2d_10_20_20.txt")};
+static const testcase_delegate_file_t nfct_adjoint_2d_10_20_50 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_2d_10_20_50.txt")};
+static const testcase_delegate_file_t nfct_adjoint_2d_20_10_20 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_2d_20_10_20.txt")};
+static const testcase_delegate_file_t nfct_adjoint_2d_20_10_50 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_2d_20_10_50.txt")};
+static const testcase_delegate_file_t nfct_adjoint_2d_20_20_20 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_2d_20_20_20.txt")};
+static const testcase_delegate_file_t nfct_adjoint_2d_20_20_50 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_2d_20_20_50.txt")};
+
+static const testcase_delegate_file_t *testcases_adjoint_2d_file[] =
+{
+  &nfct_adjoint_2d_10_10_20,
+  &nfct_adjoint_2d_10_10_50,
+  &nfct_adjoint_2d_10_20_20,
+  &nfct_adjoint_2d_10_20_50,
+  &nfct_adjoint_2d_20_10_20,
+  &nfct_adjoint_2d_20_10_50,
+  &nfct_adjoint_2d_20_20_20,
+  &nfct_adjoint_2d_20_20_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_2d_direct_file[] = {&adjoint_direct};
+
+void X(check_adjoint_2d_direct_file)(void)
+{
+  printf("check_adjoint_2d_direct_file:\n");
+  check_many(SIZE(testcases_adjoint_2d_file), SIZE(initializers_direct), SIZE(trafos_adjoint_2d_direct_file),
+    testcases_adjoint_2d_file, initializers_direct, &check_adjoint, trafos_adjoint_2d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_adjoint_2d_fast_file[] = {&adjoint/*, &adjoint_2d*/};
+
+void X(check_adjoint_2d_fast_file)(void)
+{
+  printf("check_adjoint_2d_fast_file:\n");
+  check_many(SIZE(testcases_adjoint_2d_file), SIZE(initializers_2d), SIZE(trafos_adjoint_2d_fast_file),
+    testcases_adjoint_2d_file, initializers_2d, &check_adjoint, trafos_adjoint_2d_fast_file);
+}
+
+static const testcase_delegate_online_t nfct_online_2d_50_50 = {setup_online, destroy_online, 2, 50 ,50};
+static const testcase_delegate_online_t nfct_online_2d_100_50 = {setup_online, destroy_online, 2, 100 ,50};
+static const testcase_delegate_online_t nfct_online_2d_200_50 = {setup_online, destroy_online, 2, 200 ,50};
+static const testcase_delegate_online_t nfct_online_2d_500_50 = {setup_online, destroy_online, 2, 500 ,50};
+static const testcase_delegate_online_t nfct_online_2d_1000_50 = {setup_online, destroy_online, 2, 1000 ,50};
+
+static const testcase_delegate_online_t *testcases_2d_online[] =
+{
+  &nfct_online_2d_50_50,
+  &nfct_online_2d_100_50,
+  &nfct_online_2d_200_50,
+  &nfct_online_2d_500_50,
+  &nfct_online_2d_1000_50,
+};
+
+static const trafo_delegate_t* trafos_2d_online[] = {&trafo/*, &trafo_2d*/};
+
+void X(check_2d_online)(void)
+{
+  check_many(SIZE(testcases_2d_online), SIZE(initializers_2d), SIZE(trafos_2d_online),
+    testcases_2d_online, initializers_2d, &check_trafo, trafos_2d_online);
+}
+
+static const testcase_delegate_online_t nfct_adjoint_online_2d_50_50 = {setup_adjoint_online, destroy_online, 2, 50 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_2d_100_50 = {setup_adjoint_online, destroy_online, 2, 100 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_2d_200_50 = {setup_adjoint_online, destroy_online, 2, 200 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_2d_500_50 = {setup_adjoint_online, destroy_online, 2, 500 ,50};
+static const testcase_delegate_online_t nfct_adjoint_online_2d_1000_50 = {setup_adjoint_online, destroy_online, 2, 1000 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_2d_online[] =
+{
+  &nfct_adjoint_online_2d_50_50,
+  &nfct_adjoint_online_2d_100_50,
+  &nfct_adjoint_online_2d_200_50,
+  &nfct_adjoint_online_2d_500_50,
+  &nfct_adjoint_online_2d_1000_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_2d_online[] = {&adjoint/*, &adjoint_2d*/};
+
+void X(check_adjoint_2d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_2d_online), SIZE(initializers_2d), SIZE(trafos_adjoint_2d_online),
+    testcases_adjoint_2d_online, initializers_2d, &check_adjoint, trafos_adjoint_2d_online);
+}
+
+/* 3D */
+
+/* Initializers. */
+static const init_delegate_t* initializers_3d[] =
+{
+  &init_3d,
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_file_t nfct_3d_10_10_10_10 = {setup_file,destroy_file,ABSPATH("data/nfct_3d_10_10_10_10.txt")};
+
+static const testcase_delegate_file_t *testcases_3d_file[] =
+{
+  &nfct_3d_10_10_10_10,
+};
+
+static const trafo_delegate_t* trafos_3d_direct_file[] = {&trafo_direct};
+
+void X(check_3d_direct_file)(void)
+{
+  printf("check_3d_direct_file:\n");
+  check_many(SIZE(testcases_3d_file), SIZE(initializers_direct), SIZE(trafos_3d_direct_file),
+    testcases_3d_file, initializers_direct, &check_trafo, trafos_3d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_3d_fast_file[] = {&trafo/*, &trafo_3d*/};
+
+void X(check_3d_fast_file)(void)
+{
+  printf("check_3d_fast_file:\n");
+  check_many(SIZE(testcases_3d_file), SIZE(initializers_3d), SIZE(trafos_3d_fast_file),
+    testcases_3d_file, initializers_3d, &check_trafo, trafos_3d_fast_file);
+}
+
+static const testcase_delegate_file_t nfct_adjoint_3d_10_10_10_10 = {setup_file,destroy_file,ABSPATH("data/nfct_adjoint_3d_10_10_10_10.txt")};
+
+static const testcase_delegate_file_t *testcases_adjoint_3d_file[] =
+{
+  &nfct_adjoint_3d_10_10_10_10,
+};
+
+static const trafo_delegate_t* trafos_adjoint_3d_direct_file[] = {&adjoint_direct};
+
+void X(check_adjoint_3d_direct_file)(void)
+{
+  printf("check_adjoint_3d_direct_file:\n");
+  check_many(SIZE(testcases_adjoint_3d_file), SIZE(initializers_direct), SIZE(trafos_adjoint_3d_direct_file),
+    testcases_adjoint_3d_file, initializers_direct, &check_adjoint, trafos_adjoint_3d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_adjoint_3d_fast_file[] = {&adjoint/*, &adjoint_3d*/};
+
+void X(check_adjoint_3d_fast_file)(void)
+{
+  printf("check_adjoint_3d_fast_file:\n");
+  check_many(SIZE(testcases_adjoint_3d_file), SIZE(initializers_3d), SIZE(trafos_adjoint_3d_fast_file),
+    testcases_adjoint_3d_file, initializers_3d, &check_adjoint, trafos_adjoint_3d_fast_file);
+}
+
+static const testcase_delegate_online_t nfct_online_3d_50_50 = {setup_online, destroy_online, 3, 50 ,50};
+
+static const testcase_delegate_online_t *testcases_3d_online[] =
+{
+  &nfct_online_3d_50_50,
+};
+
+static const trafo_delegate_t* trafos_3d_online[] = {&trafo/*, &trafo_3d*/};
+
+void X(check_3d_online)(void)
+{
+  check_many(SIZE(testcases_3d_online), SIZE(initializers_3d), SIZE(trafos_3d_online),
+    testcases_3d_online, initializers_3d, &check_trafo, trafos_3d_online);
+}
+
+static const testcase_delegate_online_t nfct_adjoint_online_3d_50_50 = {setup_adjoint_online, destroy_online, 3, 50 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_3d_online[] =
+{
+  &nfct_adjoint_online_3d_50_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_3d_online[] = {&adjoint/*, &adjoint_3d*/};
+
+void X(check_adjoint_3d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_3d_online), SIZE(initializers_3d), SIZE(trafos_adjoint_3d_online),
+    testcases_adjoint_3d_online, initializers_3d, &check_adjoint, trafos_adjoint_3d_online);
+}
+
+/* 4D. */
+
+/* Initializers. */
+static const init_delegate_t* initializers_4d[] =
+{
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_online_t nfct_online_4d_28_50 = {setup_online, destroy_online, 4, 28 ,50};
+
+static const testcase_delegate_online_t *testcases_4d_online[] =
+{
+  &nfct_online_4d_28_50,
+};
+
+static const trafo_delegate_t* trafos_4d_online[] = {&trafo};
+
+void X(check_4d_online)(void)
+{
+  check_many(SIZE(testcases_4d_online), SIZE(initializers_4d), SIZE(trafos_4d_online),
+    testcases_4d_online, initializers_4d, &check_trafo, trafos_4d_online);
+}
+
+static const testcase_delegate_online_t nfct_adjoint_online_4d_28_50 = {setup_adjoint_online, destroy_online, 4, 28 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_4d_online[] =
+{
+  &nfct_adjoint_online_4d_28_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_4d_online[] = {&adjoint};
+
+void X(check_adjoint_4d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_4d_online), SIZE(initializers_4d), SIZE(trafos_adjoint_4d_online),
+    testcases_adjoint_4d_online, initializers_4d, &check_adjoint, trafos_adjoint_4d_online);
+}
diff --git a/tests/nfct.h b/tests/nfct.h
new file mode 100644
index 0000000..e57f02e
--- /dev/null
+++ b/tests/nfct.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+#include "infft.h"
+
+#undef X
+#define X(name) NFCT(name)
+
+void X(check_1d_direct_file)(void);
+void X(check_1d_fast_file)(void);
+void X(check_1d_online)(void);
+void X(check_2d_direct_file)(void);
+void X(check_2d_fast_file)(void);
+void X(check_2d_online)(void);
+void X(check_3d_direct_file)(void);
+void X(check_3d_fast_file)(void);
+void X(check_3d_online)(void);
+void X(check_4d_online)(void);
+
+void X(check_adjoint_1d_direct_file)(void);
+void X(check_adjoint_1d_fast_file)(void);
+void X(check_adjoint_1d_online)(void);
+void X(check_adjoint_2d_direct_file)(void);
+void X(check_adjoint_2d_fast_file)(void);
+void X(check_adjoint_2d_online)(void);
+void X(check_adjoint_3d_direct_file)(void);
+void X(check_adjoint_3d_fast_file)(void);
+void X(check_adjoint_3d_online)(void);
+void X(check_adjoint_4d_online)(void);
diff --git a/tests/nfft.c b/tests/nfft.c
new file mode 100644
index 0000000..4407142
--- /dev/null
+++ b/tests/nfft.c
@@ -0,0 +1,1490 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <complex.h>
+#include <CUnit/CUnit.h>
+
+#include "config.h"
+#include "nfft3.h"
+#include "infft.h"
+#include "cycle.h"
+#include "nfft.h"
+
+#define ABSPATH(x) ABS_SRCDIR SEP "tests" SEP x
+
+/* Testcase delegate. */
+typedef struct testcase_delegate_s testcase_delegate_t;
+
+typedef void (*setup_t)(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f);
+typedef void (*destroy_t)(const testcase_delegate_t *ego_, R *x, C *f_hat, C *f);
+
+struct testcase_delegate_s
+{
+  setup_t setup;
+  destroy_t destroy;
+};
+
+typedef struct testcase_delegate_file_s
+{
+  setup_t setup;
+  destroy_t destroy;
+  const char *filename;
+} testcase_delegate_file_t;
+
+static void setup_file(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f);
+static void destroy_file(const testcase_delegate_t *ego_, R *x, C *f_hat, C *f);
+
+typedef struct testcase_delegate_online_s
+{
+  setup_t setup;
+  destroy_t destroy;
+  const int d;
+  const int N;
+  const int M;
+} testcase_delegate_online_t;
+
+static void setup_online(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f);
+static void destroy_online(const testcase_delegate_t *ego_, R *x, C *f_hat, C *f);
+
+/* Initialization delegate. */
+typedef struct init_delegate_s init_delegate_t;
+typedef void (*init_t)(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+
+struct init_delegate_s
+{
+  const char *name;
+  init_t init;
+  const int m;
+  const unsigned flags;
+  const unsigned fftw_flags;
+  const int K;
+};
+
+/* Prepare delegate. */
+typedef struct check_delegate_s check_delegate_t;
+typedef void (*prepare_t)(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const C *f, const C *f_hat);
+typedef R (*compare_t)(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const C *f, const C *f_hat);
+
+struct check_delegate_s
+{
+  prepare_t prepare;
+  compare_t compare;
+};
+
+/* Trafo delegate. */
+typedef void (*trafo_t)(X(plan) *p);
+typedef R (*cost_t)(X(plan) *p);
+typedef const char* (*check_t)(X(plan) *p);
+typedef R (*acc_t)(X(plan) *p);
+
+typedef struct trafo_delegate_s
+{
+  const char *name;
+  trafo_t trafo;
+  check_t check;
+  cost_t cost;
+  acc_t acc;
+
+} trafo_delegate_t;
+
+static R trafo_direct_cost(X(plan) *p);
+
+static R err_trafo(X(plan) *p);
+static R err_trafo_direct(X(plan) *p);
+
+/* Check single test case.*/
+static int check_single(const testcase_delegate_t *testcase,
+    init_delegate_t *init_delegate, check_delegate_t *check_delegate,
+    trafo_delegate_t *trafo_delegate);
+
+/* Check multiple test cases.*/
+static void check_many(const size_t nf, const size_t ni, const size_t nt,
+  const testcase_delegate_t **testcases, init_delegate_t **initializers,
+  check_delegate_t *check_delegate, trafo_delegate_t **trafos);
+
+/* Initializers. */
+static void init_1d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_2d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_3d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_advanced_pre_psi_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+
+#define DEFAULT_NFFT_FLAGS MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT | FFT_OUT_OF_PLACE
+#define DEFAULT_FFTW_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT
+
+static init_delegate_t init_1d;
+static init_delegate_t init_2d;
+static init_delegate_t init_3d;
+static init_delegate_t init;
+static init_delegate_t init_advanced_pre_psi;
+static init_delegate_t init_advanced_pre_full_psi;
+static init_delegate_t init_advanced_pre_lin_psi;
+#if defined(GAUSSIAN)
+static init_delegate_t init_advanced_pre_fg_psi;
+#endif
+
+static check_delegate_t check_trafo;
+static check_delegate_t check_adjoint;
+
+static trafo_delegate_t trafo_direct;
+static trafo_delegate_t trafo;
+
+static R trafo_direct_cost_factor = K(1.0E-6);
+
+static R trafo_direct_cost(X(plan) *p)
+{
+  if (trafo_direct_cost_factor == 0.0)
+  {
+    int M, d, Nd, x = 0;
+    for (d = 1; d <= 4; d++)
+    {
+      for (Nd = 4; Nd < 128; Nd *= 2)
+      {
+        for (M = 4; M <= 128; M *= 2)
+        {
+          X(plan) p2;
+          int *N = Y(malloc)((size_t)(d) * sizeof(int)), i;
+          for (i = 0; i < d; i++)
+          {
+            N[i] = Nd;
+          }
+          X(init)(&p2, d, N, M);
+          for (i = 0; i < M; i++)
+            p2.x[i] = K(0.0);
+          if(p2.flags & PRE_ONE_PSI)
+            X(precompute_one_psi)(&p2);
+          for (i = 0; i < d * Nd; i++)
+          {
+            p2.f_hat[i] = K(0.0) + K(0.0) * I;
+          }
+          {
+            R r;
+            ticks t0, t1;
+            t0 = getticks();
+            X(trafo_direct)(&p2);
+            t1 = getticks();
+            r = Y(elapsed_seconds)(t1, t0) / (R)(M);
+            for (i = 0; i < d; i++)
+              r = r / Nd;
+            trafo_direct_cost_factor += r;
+            printf(__FE__ "\n", r);
+            x += 1;
+          }
+          X(finalize)(&p2);
+          free(N);
+        }
+      }
+    }
+    trafo_direct_cost_factor = trafo_direct_cost_factor/((R)x);
+    printf("--> " __FE__ "\n", trafo_direct_cost_factor);
+  }
+
+  {
+    INT c = p->M_total, i;
+
+    for (i = 0; i < p->d; i++)
+      c *= p->N[i];
+
+    return trafo_direct_cost_factor * (R)(c);
+  }
+}
+
+static R err_trafo_direct(X(plan) *p)
+{
+  UNUSED(p);
+  return K(40.0) * EPSILON;
+}
+
+static R err_trafo(X(plan) *p)
+{
+  const R m = ((R)p->m);
+  R s; /* oversampling factor */
+  R a;
+  R b;
+  R eps = EPSILON;
+  R err;
+  int i;
+  for (i = 0, s = ((R)p->sigma[0]); i < p->d; i++)
+    s = FMIN(s, ((R)p->sigma[i]));
+#if defined(GAUSSIAN)
+#if defined(NFFT_LDOUBLE)
+    a = K(0.6);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.4);
+    b = K(2000.0);
+#else
+    a = K(0.4);
+    b = K(50.0);
+#endif
+    err = EXP(-m*KPI*(K(1.0)-K(1.0)/(K(2.0)*K(2.0) - K(1.0))));
+#elif defined(B_SPLINE)
+    //printf("m = %E, s = %E, a1 = %E, a2 = %E, z = %E\n", m, s, K(1.0)/(K(2.0)*s-K(1.0)), K(2.0)*m, K(4.0) * POW(K(1.0)/(K(2.0)*s-K(1.0)),K(2.0)*m));
+    //printf("\n<s = %E>\n", s);
+    //fflush(stdout);
+#if defined(NFFT_LDOUBLE)
+    a = K(0.3);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.4);
+    b = K(2000.0);
+#else
+    a = K(1.0);
+    b = K(2000.0);
+#endif
+    err = K(3000.0) * K(4.0) * POW(K(1.0)/(K(2.0)*s-K(1.0)),K(2.0)*m);
+  #elif defined(SINC_POWER)
+#if defined(NFFT_LDOUBLE)
+    a = K(0.3);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.4);
+    b = K(2000.0);
+#else
+    a = K(1.0);
+    b = K(2000.0);
+#endif
+    err = (K(1.0)/(m-K(1.0))) * ((K(2.0)/(POW(s,K(2.0)*m))) + POW(s/(K(2.0)*s-K(1.0)),K(2.0)*m));
+  #elif defined(KAISER_BESSEL)
+#if defined(NFFT_LDOUBLE)
+    a = K(1.5);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.4);
+    b = K(2000.0);
+#else
+    a = K(0.3);
+    b = K(2100.0);
+#endif
+    err = KPI * (SQRT(m) + m) * SQRT(SQRT(K(1.0) - K(1.0)/K(2.0))) * EXP(-K2PI * m * SQRT(K(1.0) - K(1.0) / K(2.0)));
+  #else
+    #error Unsupported window function.
+  #endif
+
+  return FMAX(FMAX(a * err, b * eps), err_trafo_direct(p));
+}
+
+#define MAX_SECONDS 0.1
+
+static int check_single(const testcase_delegate_t *testcase,
+  init_delegate_t *init_delegate, check_delegate_t *check_delegate,
+  trafo_delegate_t *trafo_delegate)
+{
+  int ok = 0;
+  X(plan) p;
+  int d, j, *N, NN, M;
+  R *x;
+  C *f_hat, *f;
+
+  testcase->setup(testcase, &d, &N, &NN, &M, &x, &f_hat, &f);
+
+  /* Init plan. */
+  printf(", %-28s", init_delegate->name);
+  init_delegate->init(init_delegate, &p, d, N, M);
+
+  printf(", m = %2d", (int)p.m);
+  printf(", %-14s", trafo_delegate->name);
+
+  /* Nodes. */
+  for (j = 0; j < M*d; j++)
+  {
+    p.x[j] = x[j];
+  }
+
+  if (trafo_delegate->check)
+  {
+    const char* check = trafo_delegate->check(&p);
+    if (check != 0)
+    {
+      printf(" -> %-4s (","OK");
+      printf("%s", check);
+      printf(")\n");
+      ok = 1;
+      goto cleanup;
+    }
+  }
+  else if (trafo_delegate->cost)
+  {
+    const R cost = trafo_delegate->cost(&p);
+    if (cost > MAX_SECONDS)
+    {
+      printf(" -> %-4s (cost too high)\n","OK");
+      ok = 1;
+      goto cleanup;
+    }
+  }
+
+  /* Pre-compute Psi, maybe. */
+  if(p.flags & PRE_ONE_PSI)
+    X(precompute_one_psi)(&p);
+
+  check_delegate->prepare(check_delegate, &p, NN, M, f, f_hat);
+
+  trafo_delegate->trafo(&p);
+
+  /* Standard NFFT error measure. */
+  {
+    R err = check_delegate->compare(check_delegate, &p, NN, M, f, f_hat);
+    R bound = trafo_delegate->acc(&p);
+    ok = IF(err < bound, 1, 0);
+    printf(" -> %-4s " __FE__ " (" __FE__ ")\n", IF(ok == 0, "FAIL", "OK"), err, bound);
+  }
+
+cleanup:
+  testcase->destroy(testcase, x, f_hat, f);
+  X(finalize)(&p);
+
+  return ok;
+}
+
+static void check_many(const size_t nf, const size_t ni, const size_t nt,
+  const testcase_delegate_t **testcases, init_delegate_t **initializers,
+  check_delegate_t *check_delegate, trafo_delegate_t **trafos)
+{
+  size_t i, j, k;
+  int ok = 1, r;
+  for (k = 0; k < nt; k++)
+  {
+    for (i = 0; i < nf; i++)
+    {
+      for (j = 0; j < ni; j++)
+      {
+         r = check_single(testcases[i], initializers[j], check_delegate, trafos[k]);
+         ok = MIN(ok, r);
+      }
+    }
+  }
+  CU_ASSERT(ok);
+}
+
+static void setup_file(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f)
+{
+  const testcase_delegate_file_t *ego = (const testcase_delegate_file_t*)ego_;
+  int j;
+  char filename[200];
+  char* c = rindex(ego->filename, SEP[0]);
+  FILE *file = fopen(ego->filename, "r");
+
+  filename[0] = (char) 0;
+  strcpy(filename, &c[1]);
+  printf("%-31s", filename);
+
+  /* Dimensions. */
+  fscanf(file, "%d", d);
+  /* Bandwidths. */
+  *N = Y(malloc)((size_t)(*d) * sizeof(int));
+  for (j = 0; j < *d; j++)
+    fscanf(file, "%d", &((*N)[j]));
+  /* Number of nodes. */
+  fscanf(file, "%d", M);
+
+  printf(" d = %-1d, N = [", *d);
+  {
+    for (j = 0; j < *d; j++)
+    {
+      printf("%s%-5d", IF(j > 0,", ", ""), (*N)[j]);
+    }
+    for (j = 0; j < (4-*d); j++)
+    {
+      printf("%s%-5s", "  ", "");
+    }
+  }
+  printf("],");
+  printf(" M = %-5d", *M);
+
+#ifdef _OPENMP
+  printf(" nthreads = %td", X(get_num_threads)());
+#endif
+
+  for (j = 0, *NN = 1; j < *d; j++)
+    *NN *= (*N)[j];
+
+  /* Nodes. */
+  *x = Y(malloc)((size_t)(M[0]*d[0])*sizeof(R));
+  for (j = 0; j < M[0]*d[0]; j++)
+  {
+    fscanf(file, __FI__, &((*x)[j]));
+  }
+
+  /* Fourier coefficients. */
+  *f_hat = Y(malloc)((size_t)(NN[0])*sizeof(C));
+  for (j = 0; j < NN[0]; j++)
+  {
+    R re, im;
+    fscanf(file, __FI__ " " __FI__, &re, &im);
+    (*f_hat)[j] = re + im * I;
+  }
+
+  /* Reference function values. */
+  *f = Y(malloc)((size_t)(M[0]) * sizeof(C));
+  for (j = 0; j < M[0]; j++)
+  {
+    R re, im;
+    fscanf(file, __FI__ " " __FI__, &re, &im);
+    (*f)[j] = re + im * I;
+  }
+
+  fclose(file);
+}
+
+static void destroy_file(const testcase_delegate_t *ego_, R *x, C *f_hat, C *f)
+{
+  UNUSED(ego_);
+  free(x);
+  free(f_hat);
+  free(f);
+}
+
+static void setup_online(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f)
+{
+  const testcase_delegate_online_t *ego = (const testcase_delegate_online_t*)ego_;
+  int j;
+
+  /* Dimensions. */
+  *d = ego->d;
+  /* Bandwidths. */
+  *N = Y(malloc)((size_t)(*d) * sizeof(int));
+  for (j = 0; j < *d; j++)
+    (*N)[j] = ego->N;
+  /* Number of nodes. */
+  *M = ego->M;
+
+  printf("%-31s", "nfft_online");
+
+  printf(" d = %-1d, N = [", *d);
+  {
+    for (j = 0; j < *d; j++)
+    {
+      printf("%s%-5d", IF(j > 0,", ", ""), (*N)[j]);
+    }
+    for (j = 0; j < (4-*d); j++)
+    {
+      printf("%s%-5s", "  ", "");
+    }
+  }
+  printf("],");
+  printf(" M = %-5d", *M);
+
+#ifdef _OPENMP
+  printf(" nthreads = %td", X(get_num_threads)());
+#endif
+
+  for (j = 0, *NN = 1; j < *d; j++)
+    *NN *= (*N)[j];
+
+  /* Nodes. */
+  *x = Y(malloc)((size_t)(M[0]*d[0])*sizeof(R));
+  for (j = 0; j < M[0]*d[0]; j++)
+  {
+    (*x)[j] = Y(drand48)() - K(0.5);
+  }
+
+  /* Fourier coefficients. */
+  *f_hat = Y(malloc)((size_t)(NN[0])*sizeof(C));
+  for (j = 0; j < NN[0]; j++)
+  {
+    (*f_hat)[j] = (Y(drand48)() - K(0.5)) + (Y(drand48)() - K(0.5)) * I;
+  }
+
+  {
+    X(plan) p;
+
+    X(init)(&p, *d, *N, *M);
+
+    /* Nodes. */
+    for (j = 0; j < M[0]*d[0]; j++)
+    {
+      p.x[j] = (*x)[j];
+    }
+
+    /* Pre-compute Psi, maybe. */
+    if(p.flags & PRE_ONE_PSI)
+      X(precompute_one_psi)(&p);
+
+    /* Fourier coefficients. */
+    for (j = 0; j < *NN; j++)
+    {
+      p.f_hat[j] = (*f_hat)[j];
+    }
+
+    X(trafo_direct)(&p);
+
+    /* Reference function values. */
+    *f = Y(malloc)((size_t)(M[0]) * sizeof(C));
+    for (j = 0; j < M[0]; j++)
+    {
+      (*f)[j] = p.f[j];
+    }
+
+    X(finalize)(&p);
+  }
+}
+
+static void setup_adjoint_online(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, C **f_hat, C **f)
+{
+  const testcase_delegate_online_t *ego = (const testcase_delegate_online_t*)ego_;
+  int j;
+
+  /* Dimensions. */
+  *d = ego->d;
+
+  /* Bandwidths. */
+  *N = Y(malloc)((size_t)(*d) * sizeof(int));
+
+  for (j = 0; j < *d; j++)
+    (*N)[j] = ego->N;
+
+  /* Number of nodes. */
+  *M = ego->M;
+
+  printf("%-31s", "nfft_online");
+
+  printf(" d = %-1d, N = [", *d);
+  {
+    for (j = 0; j < *d; j++)
+    {
+      printf("%s%-5d", IF(j > 0,", ", ""), (*N)[j]);
+    }
+    for (j = 0; j < (4-*d); j++)
+    {
+      printf("%s%-5s", "  ", "");
+    }
+  }
+  printf("],");
+  printf(" M = %-5d", *M);
+
+#ifdef _OPENMP
+  printf(" nthreads = %td", X(get_num_threads)());
+#endif
+
+  for (j = 0, *NN = 1; j < *d; j++)
+    *NN *= (*N)[j];
+
+  /* Nodes. */
+  *x = Y(malloc)((size_t)(M[0]*d[0])*sizeof(R));
+
+  for (j = 0; j < M[0]*d[0]; j++)
+  {
+    (*x)[j] = Y(drand48)() - K(0.5);
+  }
+
+  /* Function values. */
+  *f = Y(malloc)((size_t)(M[0]) * sizeof(C));
+  for (j = 0; j < M[0]; j++)
+  {
+    (*f)[j] = (Y(drand48)() - K(0.5)) + (Y(drand48)() - K(0.5)) * I;
+  }
+
+  {
+    X(plan) p;
+
+    X(init)(&p, *d, *N, *M);
+
+    /* Nodes. */
+    for (j = 0; j < M[0]*d[0]; j++)
+    {
+      p.x[j] = (*x)[j];
+    }
+
+    /* Pre-compute Psi, maybe. */
+    if(p.flags & PRE_ONE_PSI)
+      X(precompute_one_psi)(&p);
+
+    /* Function values. */
+    for (j = 0; j < M[0]; j++)
+    {
+      p.f[j] = (*f)[j];
+    }
+
+    X(adjoint_direct)(&p);
+
+    /* Reference pseudo Fourier coefficients. */
+    *f_hat = Y(malloc)((size_t)(NN[0])*sizeof(C));
+
+    for (j = 0; j < NN[0]; j++)
+    {
+      (*f_hat)[j] = p.f_hat[j];
+    }
+
+    X(finalize)(&p);
+  }
+}
+
+static void destroy_online(const testcase_delegate_t *ego_, R *x, C *f_hat, C *f)
+{
+  UNUSED(ego_);
+  free(x);
+  free(f_hat);
+  free(f);
+}
+
+/* Initializers. */
+static void init_1d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  UNUSED(d);
+  X(init_1d)(p, N[0], M);
+}
+
+static void init_2d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  UNUSED(d);
+  X(init_2d)(p, N[0], N[1], M);
+}
+
+static void init_3d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  UNUSED(d);
+  X(init_3d)(p, N[0], N[1], N[2], M);
+}
+
+static void init_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  X(init)(p, d, N, M);
+}
+
+static void init_advanced_pre_psi_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  int *n = Y(malloc)((size_t)(d)*sizeof(int));
+  int i;
+  for (i = 0; i < d; i++)
+    n[i] = 2 * (int)(Y(next_power_of_2)(N[i]));
+  X(init_guru)(p, d, N, M, n, ego->m, ego->flags, ego->fftw_flags);
+  free(n);
+}
+
+//static void init_advanced_pre_lin_psi_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+//{
+//  int *n = Y(malloc)((size_t)(d)*sizeof(int));
+//  int i;
+//  for (i = 0; i < d; i++)
+//    n[i] = 2 * (int)(Y(next_power_of_2)(N[i]));
+//  int K = ego->K  * (ego->m + 2);
+//  //printf("\n%d\n", K);
+//  X(init_lin)(p, d, N, M, n, ego->m, K, ego->flags, ego->fftw_flags);
+//  free(n);
+//}
+
+static init_delegate_t init_direct = {"init_guru ()", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, (DEFAULT_NFFT_FLAGS ^ PRE_PSI), DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_1d = {"init_1d", init_1d_, 0, 0, 0};
+static init_delegate_t init_2d = {"init_2d", init_2d_, 0, 0, 0};
+static init_delegate_t init_3d = {"init_3d", init_3d_, 0, 0, 0};
+static init_delegate_t init = {"init", init_, 0, 0, 0};
+static init_delegate_t init_advanced_pre_psi = {"init_guru (PRE PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_advanced_pre_full_psi = {"init_guru (PRE FULL PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_FULL_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_advanced_pre_lin_psi = {"init_guru (PRE LIN PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+//static init_delegate_t init_advanced_pre_lin_psi_00 = {"init_guru (PRE LIN PSI) 00", init_advanced_pre_lin_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, (1U << 23)};
+//static init_delegate_t init_advanced_pre_lin_psi_01 = {"init_guru (PRE LIN PSI) 01", init_advanced_pre_lin_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, (1U << 24)};
+//static init_delegate_t init_advanced_pre_lin_psi_02 = {"init_guru (PRE LIN PSI) 02", init_advanced_pre_lin_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, (1U << 25)};
+//static init_delegate_t init_advanced_pre_lin_psi_03 = {"init_guru (PRE LIN PSI) 03", init_advanced_pre_lin_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, (1U << 26)};
+//static init_delegate_t init_advanced_pre_lin_psi_04 = {"init_guru (PRE LIN PSI) 04", init_advanced_pre_lin_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, (1U << 27)};
+//static init_delegate_t init_advanced_pre_lin_psi_05 = {"init_guru (PRE LIN PSI) 05", init_advanced_pre_lin_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, (1U << 28)};
+//static init_delegate_t init_advanced_pre_lin_psi_06 = {"init_guru (PRE LIN PSI) 06", init_advanced_pre_lin_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, (1U << 29)};
+#if defined(GAUSSIAN)
+static init_delegate_t init_advanced_pre_fg_psi = {"init_guru (PRE FG PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | FG_PSI | PRE_FG_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+#endif
+
+/* Check routines. */
+static void prepare_trafo(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const C *f, const C *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(M);
+  UNUSED(f);
+  int j;
+
+  /* Fourier coefficients. */
+  for (j = 0; j < NN; j++)
+  {
+    p->f_hat[j] = f_hat[j];
+  }
+}
+
+static void prepare_adjoint(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const C *f, const C *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(NN);
+  UNUSED(f_hat);
+  int j;
+
+  /* Fourier coefficients. */
+  for (j = 0; j < M; j++)
+  {
+    p->f[j] = f[j];
+  }
+}
+
+static R compare_trafo(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const C *f, const C *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(f_hat);
+  int j;
+  R numerator = K(0.0), denominator = K(0.0);
+
+  /* debug */
+//  fprintf(stderr, "\n");
+//  for (j = 0; j < M; j++)
+//    fprintf(stderr, "f[%2d] = " __FE__ " + " __FE__ "I, f[%2d] = " __FE__ " + " __FE__ "I, err = " __FE__ "\n", j,
+//      CREAL(f[j]), CIMAG(f[j]), j, CREAL(p.f[j]), CIMAG(p.f[j]), CABS(f[j] - p.f[j]) / CABS(f[j]));
+
+  for (j = 0; j < M; j++)
+    numerator = MAX(numerator, CABS(f[j] - p->f[j]));
+
+  for (j = 0; j < NN; j++)
+    denominator += CABS(p->f_hat[j]);
+
+  return numerator == K(0.0) ? K(0.0) : numerator/denominator;
+}
+
+static R compare_adjoint(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const C *f, const C *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(f);
+  int j;
+  R numerator = K(0.0), denominator = K(0.0);
+
+  /* debug */
+//  fprintf(stderr, "\n");
+//  for (j = 0; j < NN; j++)
+//    fprintf(stderr, "f_hat[%2d] = " __FE__ " + " __FE__ "I, f_hat[%2d] = " __FE__ " + " __FE__ "I, err = " __FE__ "\n", j,
+//      CREAL(f_hat[j]), CIMAG(f_hat[j]), j, CREAL(p->f_hat[j]), CIMAG(p->f_hat[j]), CABS(f_hat[j] - p->f_hat[j]) / CABS(f_hat[j]));
+
+  for (j = 0; j < NN; j++)
+    numerator = MAX(numerator, CABS(f_hat[j] - p->f_hat[j]));
+
+  for (j = 0; j < M; j++)
+    denominator += CABS(p->f[j]);
+
+  return numerator == K(0.0) ? K(0.0) : numerator/denominator;
+}
+
+static check_delegate_t check_trafo = {prepare_trafo, compare_trafo};
+static check_delegate_t check_adjoint = {prepare_adjoint, compare_adjoint};
+
+static trafo_delegate_t trafo_direct = {"trafo_direct", X(trafo_direct), 0, trafo_direct_cost, err_trafo_direct};
+static trafo_delegate_t trafo = {"trafo", X(trafo), X(check), 0, err_trafo};
+static trafo_delegate_t trafo_1d = {"trafo_1d", X(trafo_1d), X(check), 0, err_trafo};
+static trafo_delegate_t trafo_2d = {"trafo_2d", X(trafo_2d), X(check), 0, err_trafo};
+static trafo_delegate_t trafo_3d = {"trafo_3d", X(trafo_3d), X(check), 0, err_trafo};
+
+static trafo_delegate_t adjoint_direct = {"adjoint_direct", X(adjoint_direct), 0, trafo_direct_cost, err_trafo_direct};
+static trafo_delegate_t adjoint = {"adjoint", X(adjoint), X(check), 0, err_trafo};
+static trafo_delegate_t adjoint_1d = {"adjoint_1d", X(adjoint_1d), X(check), 0, err_trafo};
+static trafo_delegate_t adjoint_2d = {"adjoint_2d", X(adjoint_2d), X(check), 0, err_trafo};
+static trafo_delegate_t adjoint_3d = {"adjoint_3d", X(adjoint_3d), X(check), 0, err_trafo};
+
+/* 1D */
+
+/* Initializers. */
+static const init_delegate_t* initializers_direct[] =
+{
+  &init_direct,
+};
+
+static const init_delegate_t* initializers_1d[] =
+{
+  &init_1d,
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+//  &init_advanced_pre_lin_psi_00,
+//  &init_advanced_pre_lin_psi_01,
+//  &init_advanced_pre_lin_psi_02,
+//  &init_advanced_pre_lin_psi_03,
+//  &init_advanced_pre_lin_psi_04,
+//  &init_advanced_pre_lin_psi_05,
+//  &init_advanced_pre_lin_psi_06,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_file_t nfft_1d_1_1 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_1_1.txt")};
+static const testcase_delegate_file_t nfft_1d_1_10 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_1_10.txt")};
+static const testcase_delegate_file_t nfft_1d_1_20 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_1_20.txt")};
+static const testcase_delegate_file_t nfft_1d_1_50 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_1_50.txt")};
+static const testcase_delegate_file_t nfft_1d_2_1 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_2_1.txt")};
+static const testcase_delegate_file_t nfft_1d_2_10 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_2_10.txt")};
+static const testcase_delegate_file_t nfft_1d_2_20 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_2_20.txt")};
+static const testcase_delegate_file_t nfft_1d_2_50 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_2_50.txt")};
+static const testcase_delegate_file_t nfft_1d_4_1 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_4_1.txt")};
+static const testcase_delegate_file_t nfft_1d_4_10 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_4_10.txt")};
+static const testcase_delegate_file_t nfft_1d_4_20 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_4_20.txt")};
+static const testcase_delegate_file_t nfft_1d_4_50 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_4_50.txt")};
+static const testcase_delegate_file_t nfft_1d_10_1 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_10_1.txt")};
+static const testcase_delegate_file_t nfft_1d_10_10 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_10_10.txt")};
+static const testcase_delegate_file_t nfft_1d_10_20 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_10_20.txt")};
+static const testcase_delegate_file_t nfft_1d_10_50 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_10_50.txt")};
+static const testcase_delegate_file_t nfft_1d_20_1 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_20_1.txt")};
+static const testcase_delegate_file_t nfft_1d_20_10 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_20_10.txt")};
+static const testcase_delegate_file_t nfft_1d_20_20 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_20_20.txt")};
+static const testcase_delegate_file_t nfft_1d_20_50 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_20_50.txt")};
+static const testcase_delegate_file_t nfft_1d_50_1 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_50_1.txt")};
+static const testcase_delegate_file_t nfft_1d_50_10 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_50_10.txt")};
+static const testcase_delegate_file_t nfft_1d_50_20 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_50_20.txt")};
+static const testcase_delegate_file_t nfft_1d_50_50 = {setup_file, destroy_file, ABSPATH("data/nfft_1d_50_50.txt")};
+
+static const testcase_delegate_file_t *testcases_1d_file[] =
+{
+  &nfft_1d_1_1,
+  &nfft_1d_1_10,
+  &nfft_1d_1_20,
+  &nfft_1d_1_50,
+  &nfft_1d_2_1,
+  &nfft_1d_2_10,
+  &nfft_1d_2_20,
+  &nfft_1d_2_50,
+  &nfft_1d_4_1,
+  &nfft_1d_4_10,
+  &nfft_1d_4_20,
+  &nfft_1d_4_50,
+  &nfft_1d_10_1,
+  &nfft_1d_10_10,
+  &nfft_1d_10_20,
+  &nfft_1d_10_50,
+  &nfft_1d_20_1,
+  &nfft_1d_20_10,
+  &nfft_1d_20_20,
+  &nfft_1d_20_50,
+  &nfft_1d_50_1,
+  &nfft_1d_50_10,
+  &nfft_1d_50_20,
+  &nfft_1d_50_50,
+};
+
+static const trafo_delegate_t* trafos_1d_direct_file[] = {&trafo_direct};
+
+void X(check_1d_direct_file)(void)
+{
+  printf("check_1d_direct_file:\n");
+  check_many(SIZE(testcases_1d_file), SIZE(initializers_direct), SIZE(trafos_1d_direct_file),
+    testcases_1d_file, initializers_direct, &check_trafo, trafos_1d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_1d_fast_file[] = {&trafo, &trafo_1d};
+
+void X(check_1d_fast_file)(void)
+{
+  printf("check_1d_fast_file:\n");
+  check_many(SIZE(testcases_1d_file), SIZE(initializers_1d), SIZE(trafos_1d_fast_file),
+    testcases_1d_file, initializers_1d, &check_trafo, trafos_1d_fast_file);
+}
+
+static const testcase_delegate_file_t nfft_adjoint_1d_1_1 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_1_1.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_1_10 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_1_10.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_1_20 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_1_20.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_1_50 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_1_50.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_2_1 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_2_1.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_2_10 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_2_10.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_2_20 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_2_20.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_2_50 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_2_50.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_4_1 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_4_1.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_4_10 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_4_10.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_4_20 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_4_20.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_4_50 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_4_50.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_10_1 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_10_1.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_10_10 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_10_10.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_10_20 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_10_20.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_10_50 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_10_50.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_20_1 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_20_1.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_20_10 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_20_10.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_20_20 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_20_20.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_20_50 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_20_50.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_50_1 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_50_1.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_50_10 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_50_10.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_50_20 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_50_20.txt")};
+static const testcase_delegate_file_t nfft_adjoint_1d_50_50 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_1d_50_50.txt")};
+
+static const testcase_delegate_file_t *testcases_adjoint_1d_file[] =
+{
+  &nfft_adjoint_1d_1_1,
+  &nfft_adjoint_1d_1_10,
+  &nfft_adjoint_1d_1_20,
+  &nfft_adjoint_1d_1_50,
+  &nfft_adjoint_1d_2_1,
+  &nfft_adjoint_1d_2_10,
+  &nfft_adjoint_1d_2_20,
+  &nfft_adjoint_1d_2_50,
+  &nfft_adjoint_1d_4_1,
+  &nfft_adjoint_1d_4_10,
+  &nfft_adjoint_1d_4_20,
+  &nfft_adjoint_1d_4_50,
+  &nfft_adjoint_1d_10_1,
+  &nfft_adjoint_1d_10_10,
+  &nfft_adjoint_1d_10_20,
+  &nfft_adjoint_1d_10_50,
+  &nfft_adjoint_1d_20_1,
+  &nfft_adjoint_1d_20_10,
+  &nfft_adjoint_1d_20_20,
+  &nfft_adjoint_1d_20_50,
+  &nfft_adjoint_1d_50_1,
+  &nfft_adjoint_1d_50_10,
+  &nfft_adjoint_1d_50_20,
+  &nfft_adjoint_1d_50_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_direct_1d_file[] = {&adjoint_direct};
+
+void X(check_adjoint_1d_direct_file)(void)
+{
+  printf("check_adjoint_1d_direct_file:\n");
+  check_many(SIZE(testcases_adjoint_1d_file), SIZE(initializers_direct), SIZE(trafos_adjoint_direct_1d_file),
+    testcases_adjoint_1d_file, initializers_direct, &check_adjoint, trafos_adjoint_direct_1d_file);
+}
+
+static const trafo_delegate_t* trafos_adjoint_fast_1d_file[] = {&adjoint, &adjoint_1d};
+
+void X(check_adjoint_1d_fast_file)(void)
+{
+  printf("check_adjoint_1d_fast_file:\n");
+  check_many(SIZE(testcases_adjoint_1d_file), SIZE(initializers_1d), SIZE(trafos_adjoint_fast_1d_file),
+    testcases_adjoint_1d_file, initializers_1d, &check_adjoint, trafos_adjoint_fast_1d_file);
+}
+
+static const testcase_delegate_online_t nfft_online_1d_50_50 = {setup_online, destroy_online, 1, 50 ,50};
+static const testcase_delegate_online_t nfft_online_1d_100_50 = {setup_online, destroy_online, 1, 100 ,50};
+static const testcase_delegate_online_t nfft_online_1d_200_50 = {setup_online, destroy_online, 1, 200 ,50};
+static const testcase_delegate_online_t nfft_online_1d_500_50 = {setup_online, destroy_online, 1, 500 ,50};
+static const testcase_delegate_online_t nfft_online_1d_1000_50 = {setup_online, destroy_online, 1, 1000 ,50};
+static const testcase_delegate_online_t nfft_online_1d_2000_50 = {setup_online, destroy_online, 1, 2000 ,50};
+static const testcase_delegate_online_t nfft_online_1d_5000_50 = {setup_online, destroy_online, 1, 5000 ,50};
+static const testcase_delegate_online_t nfft_online_1d_10000_50 = {setup_online, destroy_online, 1, 10000 ,50};
+
+static const testcase_delegate_online_t *testcases_1d_online[] =
+{
+  &nfft_online_1d_50_50,
+  &nfft_online_1d_100_50,
+  &nfft_online_1d_200_50,
+  &nfft_online_1d_500_50,
+  &nfft_online_1d_1000_50,
+  &nfft_online_1d_2000_50,
+  &nfft_online_1d_5000_50,
+  &nfft_online_1d_10000_50,
+};
+
+static const trafo_delegate_t* trafos_1d_online[] = {&trafo, &trafo_1d};
+
+void X(check_1d_online)(void)
+{
+  check_many(SIZE(testcases_1d_online), SIZE(initializers_1d), SIZE(trafos_1d_online),
+    testcases_1d_online, initializers_1d, &check_trafo, trafos_1d_online);
+}
+
+static const testcase_delegate_online_t nfft_adjoint_online_1d_50_50 = {setup_adjoint_online, destroy_online, 1, 50 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_1d_100_50 = {setup_adjoint_online, destroy_online, 1, 100 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_1d_200_50 = {setup_adjoint_online, destroy_online, 1, 200 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_1d_500_50 = {setup_adjoint_online, destroy_online, 1, 500 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_1d_1000_50 = {setup_adjoint_online, destroy_online, 1, 1000 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_1d_2000_50 = {setup_adjoint_online, destroy_online, 1, 2000 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_1d_5000_50 = {setup_adjoint_online, destroy_online, 1, 5000 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_1d_10000_50 = {setup_adjoint_online, destroy_online, 1, 10000 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_1d_online[] =
+{
+  &nfft_adjoint_online_1d_50_50,
+  &nfft_adjoint_online_1d_100_50,
+  &nfft_adjoint_online_1d_200_50,
+  &nfft_adjoint_online_1d_500_50,
+  &nfft_adjoint_online_1d_1000_50,
+  &nfft_adjoint_online_1d_2000_50,
+  &nfft_adjoint_online_1d_5000_50,
+  &nfft_adjoint_online_1d_10000_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_1d_online[] = {&adjoint, &adjoint_1d};
+
+void X(check_adjoint_1d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_1d_online), SIZE(initializers_1d), SIZE(trafos_adjoint_1d_online),
+    testcases_adjoint_1d_online, initializers_1d, &check_adjoint, trafos_adjoint_1d_online);
+}
+
+/* 2D */
+
+/* Initializers. */
+static const init_delegate_t* initializers_2d[] =
+{
+  &init_2d,
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+//  &init_advanced_pre_lin_psi_00,
+//  &init_advanced_pre_lin_psi_01,
+//  &init_advanced_pre_lin_psi_02,
+//  &init_advanced_pre_lin_psi_03,
+//  &init_advanced_pre_lin_psi_04,
+//  &init_advanced_pre_lin_psi_05,
+//  &init_advanced_pre_lin_psi_06,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_file_t nfft_2d_10_10_20 = {setup_file,destroy_file,ABSPATH("data/nfft_2d_10_10_20.txt")};
+static const testcase_delegate_file_t nfft_2d_10_10_50 = {setup_file,destroy_file,ABSPATH("data/nfft_2d_10_10_50.txt")};
+static const testcase_delegate_file_t nfft_2d_10_20_20 = {setup_file,destroy_file,ABSPATH("data/nfft_2d_10_20_20.txt")};
+static const testcase_delegate_file_t nfft_2d_10_20_50 = {setup_file,destroy_file,ABSPATH("data/nfft_2d_10_20_50.txt")};
+static const testcase_delegate_file_t nfft_2d_20_10_20 = {setup_file,destroy_file,ABSPATH("data/nfft_2d_20_10_20.txt")};
+static const testcase_delegate_file_t nfft_2d_20_10_50 = {setup_file,destroy_file,ABSPATH("data/nfft_2d_20_10_50.txt")};
+static const testcase_delegate_file_t nfft_2d_20_20_20 = {setup_file,destroy_file,ABSPATH("data/nfft_2d_20_20_20.txt")};
+static const testcase_delegate_file_t nfft_2d_20_20_50 = {setup_file,destroy_file,ABSPATH("data/nfft_2d_20_20_50.txt")};
+
+static const testcase_delegate_file_t *testcases_2d_file[] =
+{
+  &nfft_2d_10_10_20,
+  &nfft_2d_10_10_50,
+  &nfft_2d_10_20_20,
+  &nfft_2d_10_20_50,
+  &nfft_2d_20_10_20,
+  &nfft_2d_20_10_50,
+  &nfft_2d_20_20_20,
+  &nfft_2d_20_20_50,
+};
+
+static const trafo_delegate_t* trafos_2d_direct_file[] = {&trafo_direct};
+
+void X(check_2d_direct_file)(void)
+{
+  printf("check_2d_direct_file:\n");
+  check_many(SIZE(testcases_2d_file), SIZE(initializers_direct), SIZE(trafos_2d_direct_file),
+    testcases_2d_file, initializers_direct, &check_trafo, trafos_2d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_2d_fast_file[] = {&trafo, &trafo_2d};
+
+void X(check_2d_fast_file)(void)
+{
+  printf("check_2d_fast_file:\n");
+  check_many(SIZE(testcases_2d_file), SIZE(initializers_2d), SIZE(trafos_2d_fast_file),
+    testcases_2d_file, initializers_2d, &check_trafo, trafos_2d_fast_file);
+}
+
+static const testcase_delegate_file_t nfft_adjoint_2d_10_10_20 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_2d_10_10_20.txt")};
+static const testcase_delegate_file_t nfft_adjoint_2d_10_10_50 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_2d_10_10_50.txt")};
+static const testcase_delegate_file_t nfft_adjoint_2d_10_20_20 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_2d_10_20_20.txt")};
+static const testcase_delegate_file_t nfft_adjoint_2d_10_20_50 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_2d_10_20_50.txt")};
+static const testcase_delegate_file_t nfft_adjoint_2d_20_10_20 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_2d_20_10_20.txt")};
+static const testcase_delegate_file_t nfft_adjoint_2d_20_10_50 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_2d_20_10_50.txt")};
+static const testcase_delegate_file_t nfft_adjoint_2d_20_20_20 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_2d_20_20_20.txt")};
+static const testcase_delegate_file_t nfft_adjoint_2d_20_20_50 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_2d_20_20_50.txt")};
+
+static const testcase_delegate_file_t *testcases_adjoint_2d_file[] =
+{
+  &nfft_adjoint_2d_10_10_20,
+  &nfft_adjoint_2d_10_10_50,
+  &nfft_adjoint_2d_10_20_20,
+  &nfft_adjoint_2d_10_20_50,
+  &nfft_adjoint_2d_20_10_20,
+  &nfft_adjoint_2d_20_10_50,
+  &nfft_adjoint_2d_20_20_20,
+  &nfft_adjoint_2d_20_20_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_2d_direct_file[] = {&adjoint_direct};
+
+void X(check_adjoint_2d_direct_file)(void)
+{
+  printf("check_adjoint_2d_direct_file:\n");
+  check_many(SIZE(testcases_adjoint_2d_file), SIZE(initializers_direct), SIZE(trafos_adjoint_2d_direct_file),
+    testcases_adjoint_2d_file, initializers_direct, &check_adjoint, trafos_adjoint_2d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_adjoint_2d_fast_file[] = {&adjoint, &adjoint_2d};
+
+void X(check_adjoint_2d_fast_file)(void)
+{
+  printf("check_adjoint_2d_fast_file:\n");
+  check_many(SIZE(testcases_adjoint_2d_file), SIZE(initializers_2d), SIZE(trafos_adjoint_2d_fast_file),
+    testcases_adjoint_2d_file, initializers_2d, &check_adjoint, trafos_adjoint_2d_fast_file);
+}
+
+static const testcase_delegate_online_t nfft_online_2d_50_50 = {setup_online, destroy_online, 2, 50 ,50};
+static const testcase_delegate_online_t nfft_online_2d_100_50 = {setup_online, destroy_online, 2, 100 ,50};
+static const testcase_delegate_online_t nfft_online_2d_200_50 = {setup_online, destroy_online, 2, 200 ,50};
+static const testcase_delegate_online_t nfft_online_2d_500_50 = {setup_online, destroy_online, 2, 500 ,50};
+static const testcase_delegate_online_t nfft_online_2d_1000_50 = {setup_online, destroy_online, 2, 1000 ,50};
+
+static const testcase_delegate_online_t *testcases_2d_online[] =
+{
+  &nfft_online_2d_50_50,
+  &nfft_online_2d_100_50,
+  &nfft_online_2d_200_50,
+  &nfft_online_2d_500_50,
+  &nfft_online_2d_1000_50,
+};
+
+static const trafo_delegate_t* trafos_2d_online[] = {&trafo, &trafo_2d};
+
+void X(check_2d_online)(void)
+{
+  check_many(SIZE(testcases_2d_online), SIZE(initializers_2d), SIZE(trafos_2d_online),
+    testcases_2d_online, initializers_2d, &check_trafo, trafos_2d_online);
+}
+
+static const testcase_delegate_online_t nfft_adjoint_online_2d_50_50 = {setup_adjoint_online, destroy_online, 2, 50 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_2d_100_50 = {setup_adjoint_online, destroy_online, 2, 100 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_2d_200_50 = {setup_adjoint_online, destroy_online, 2, 200 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_2d_500_50 = {setup_adjoint_online, destroy_online, 2, 500 ,50};
+static const testcase_delegate_online_t nfft_adjoint_online_2d_1000_50 = {setup_adjoint_online, destroy_online, 2, 1000 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_2d_online[] =
+{
+  &nfft_adjoint_online_2d_50_50,
+  &nfft_adjoint_online_2d_100_50,
+  &nfft_adjoint_online_2d_200_50,
+  &nfft_adjoint_online_2d_500_50,
+  &nfft_adjoint_online_2d_1000_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_2d_online[] = {&adjoint, &adjoint_2d};
+
+void X(check_adjoint_2d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_2d_online), SIZE(initializers_2d), SIZE(trafos_adjoint_2d_online),
+    testcases_adjoint_2d_online, initializers_2d, &check_adjoint, trafos_adjoint_2d_online);
+}
+
+/* 3D */
+
+/* Initializers. */
+static const init_delegate_t* initializers_3d[] =
+{
+  &init_3d,
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+//  &init_advanced_pre_lin_psi_00,
+//  &init_advanced_pre_lin_psi_01,
+//  &init_advanced_pre_lin_psi_02,
+//  &init_advanced_pre_lin_psi_03,
+//  &init_advanced_pre_lin_psi_04,
+//  &init_advanced_pre_lin_psi_05,
+//  &init_advanced_pre_lin_psi_06,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_file_t nfft_3d_10_10_10_10 = {setup_file,destroy_file,ABSPATH("data/nfft_3d_10_10_10_10.txt")};
+
+static const testcase_delegate_file_t *testcases_3d_file[] =
+{
+  &nfft_3d_10_10_10_10,
+};
+
+static const trafo_delegate_t* trafos_3d_direct_file[] = {&trafo_direct};
+
+void X(check_3d_direct_file)(void)
+{
+  printf("check_3d_direct_file:\n");
+  check_many(SIZE(testcases_3d_file), SIZE(initializers_direct), SIZE(trafos_3d_direct_file),
+    testcases_3d_file, initializers_direct, &check_trafo, trafos_3d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_3d_fast_file[] = {&trafo, &trafo_3d};
+
+void X(check_3d_fast_file)(void)
+{
+  printf("check_3d_fast_file:\n");
+  check_many(SIZE(testcases_3d_file), SIZE(initializers_3d), SIZE(trafos_3d_fast_file),
+    testcases_3d_file, initializers_3d, &check_trafo, trafos_3d_fast_file);
+}
+
+static const testcase_delegate_file_t nfft_adjoint_3d_10_10_10_10 = {setup_file,destroy_file,ABSPATH("data/nfft_adjoint_3d_10_10_10_10.txt")};
+
+static const testcase_delegate_file_t *testcases_adjoint_3d_file[] =
+{
+  &nfft_adjoint_3d_10_10_10_10,
+};
+
+static const trafo_delegate_t* trafos_adjoint_3d_direct_file[] = {&adjoint_direct};
+
+void X(check_adjoint_3d_direct_file)(void)
+{
+  printf("check_adjoint_3d_direct_file:\n");
+  check_many(SIZE(testcases_adjoint_3d_file), SIZE(initializers_direct), SIZE(trafos_adjoint_3d_direct_file),
+    testcases_adjoint_3d_file, initializers_direct, &check_adjoint, trafos_adjoint_3d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_adjoint_3d_fast_file[] = {&adjoint, &adjoint_3d};
+
+void X(check_adjoint_3d_fast_file)(void)
+{
+  printf("check_adjoint_3d_fast_file:\n");
+  check_many(SIZE(testcases_adjoint_3d_file), SIZE(initializers_3d), SIZE(trafos_adjoint_3d_fast_file),
+    testcases_adjoint_3d_file, initializers_3d, &check_adjoint, trafos_adjoint_3d_fast_file);
+}
+
+static const testcase_delegate_online_t nfft_online_3d_50_50 = {setup_online, destroy_online, 3, 50 ,50};
+
+static const testcase_delegate_online_t *testcases_3d_online[] =
+{
+  &nfft_online_3d_50_50,
+};
+
+static const trafo_delegate_t* trafos_3d_online[] = {&trafo, &trafo_3d};
+
+void X(check_3d_online)(void)
+{
+  check_many(SIZE(testcases_3d_online), SIZE(initializers_3d), SIZE(trafos_3d_online),
+    testcases_3d_online, initializers_3d, &check_trafo, trafos_3d_online);
+}
+
+static const testcase_delegate_online_t nfft_adjoint_online_3d_50_50 = {setup_adjoint_online, destroy_online, 3, 50 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_3d_online[] =
+{
+  &nfft_adjoint_online_3d_50_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_3d_online[] = {&adjoint, &adjoint_3d};
+
+void X(check_adjoint_3d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_3d_online), SIZE(initializers_3d), SIZE(trafos_adjoint_3d_online),
+    testcases_adjoint_3d_online, initializers_3d, &check_adjoint, trafos_adjoint_3d_online);
+}
+
+/* 4D. */
+
+/* Initializers. */
+static const init_delegate_t* initializers_4d[] =
+{
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+//  &init_advanced_pre_lin_psi_00,
+//  &init_advanced_pre_lin_psi_01,
+//  &init_advanced_pre_lin_psi_02,
+//  &init_advanced_pre_lin_psi_03,
+//  &init_advanced_pre_lin_psi_04,
+//  &init_advanced_pre_lin_psi_05,
+//  &init_advanced_pre_lin_psi_06,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_online_t nfft_online_4d_28_50 = {setup_online, destroy_online, 4, 28 ,50};
+
+static const testcase_delegate_online_t *testcases_4d_online[] =
+{
+  &nfft_online_4d_28_50,
+};
+
+static const trafo_delegate_t* trafos_4d_online[] = {&trafo};
+
+void X(check_4d_online)(void)
+{
+  check_many(SIZE(testcases_4d_online), SIZE(initializers_4d), SIZE(trafos_4d_online),
+    testcases_4d_online, initializers_4d, &check_trafo, trafos_4d_online);
+}
+
+static const testcase_delegate_online_t nfft_adjoint_online_4d_28_50 = {setup_adjoint_online, destroy_online, 4, 28 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_4d_online[] =
+{
+  &nfft_adjoint_online_4d_28_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_4d_online[] = {&adjoint};
+
+void X(check_adjoint_4d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_4d_online), SIZE(initializers_4d), SIZE(trafos_adjoint_4d_online),
+    testcases_adjoint_4d_online, initializers_4d, &check_adjoint, trafos_adjoint_4d_online);
+}
+
+/* accuracy */
+
+static int check_single_file(const testcase_delegate_t *testcase,
+  init_delegate_t *init_delegate, check_delegate_t *check_delegate,
+  trafo_delegate_t *trafo_delegate, const char *filename)
+{
+  int ok = 0;
+  X(plan) p;
+  int d, j, *N, NN, M;
+  R *x;
+  C *f_hat, *f;
+
+  testcase->setup(testcase, &d, &N, &NN, &M, &x, &f_hat, &f);
+
+  /* Init plan. */
+  printf(", %-28s", init_delegate->name);
+  init_delegate->init(init_delegate, &p, d, N, M);
+
+  printf(", m = %2d", (int)p.m);
+  printf(", %-14s", trafo_delegate->name);
+
+  /* Nodes. */
+  for (j = 0; j < M*d; j++)
+  {
+    p.x[j] = x[j];
+  }
+
+  if (trafo_delegate->check)
+  {
+    const char* check = trafo_delegate->check(&p);
+    if (check != 0)
+    {
+      printf(" -> %-4s (","OK");
+      printf("%s", check);
+      printf(")\n");
+      ok = 1;
+      goto cleanup;
+    }
+  }
+  else if (trafo_delegate->cost)
+  {
+    const R cost = trafo_delegate->cost(&p);
+    if (cost > MAX_SECONDS)
+    {
+      printf(" -> %-4s (cost too high)\n","OK");
+      ok = 1;
+      goto cleanup;
+    }
+  }
+
+  /* Pre-compute Psi, maybe. */
+  if(p.flags & PRE_ONE_PSI)
+    X(precompute_one_psi)(&p);
+
+  check_delegate->prepare(check_delegate, &p, NN, M, f, f_hat);
+
+  trafo_delegate->trafo(&p);
+
+  /* Standard NFFT error measure. */
+  {
+    R err = check_delegate->compare(check_delegate, &p, NN, M, f, f_hat);
+    FILE *file = fopen(filename, "a");
+    fprintf(file, "%d % 20.16lE\n", (int)p.m, (double)err);
+    printf(", %2d % 20.16lE (" __FE__ ")\n", (int)p.m, (double)err, EPSILON);
+    fclose(file);
+  }
+
+cleanup:
+  testcase->destroy(testcase, x, f_hat, f);
+  X(finalize)(&p);
+
+  return ok;
+}
+
+static void check_many_file(const size_t nf, const size_t ni, const size_t nt,
+  const testcase_delegate_t **testcases, init_delegate_t **initializers,
+  check_delegate_t *check_delegate, trafo_delegate_t **trafos)
+{
+  size_t i, j, k;
+  int ok = 1, r;
+  for (k = 0; k < nt; k++)
+  {
+    for (i = 0; i < nf; i++)
+    {
+      for (j = 0; j < ni; j++)
+      {
+         r = check_single_file(testcases[i], initializers[j], check_delegate, trafos[k], ABSPATH("nfft_accuracy.txt"));
+         ok = MIN(ok, r);
+      }
+    }
+  }
+  CU_ASSERT(ok);
+}
+
+static init_delegate_t init_acc_0 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 0, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_1 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 1, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_2 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 2, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_3 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 3, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_4 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 4, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_5 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 5, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_6 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 6, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_7 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 7, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_8 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 8, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_9 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 9, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_10 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 10, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_11 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 11, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_12 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 12, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_13 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 13, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_14 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 14, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_15 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 15, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_16 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 16, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_17 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 17, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_18 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 18, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_19 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 19, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_20 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 20, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_21 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 21, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_22 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 22, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_23 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 23, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_24 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 24, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+static init_delegate_t init_acc_25 = {"init_guru (PRE PSI)", init_advanced_pre_psi_, 25, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS, 0};
+
+/* Initializers. */
+static const init_delegate_t* initializers_acc[] =
+{
+//    &init_acc_0,
+    &init_acc_1,
+    &init_acc_2,
+    &init_acc_3,
+    &init_acc_4,
+    &init_acc_5,
+    &init_acc_6,
+    &init_acc_7,
+    &init_acc_8,
+    &init_acc_9,
+    &init_acc_10,
+    &init_acc_11,
+    &init_acc_12,
+    &init_acc_13,
+    &init_acc_14,
+    &init_acc_15,
+    &init_acc_16,
+    &init_acc_17,
+    &init_acc_18,
+    &init_acc_19,
+    &init_acc_20,
+    &init_acc_21,
+    &init_acc_22,
+    &init_acc_23,
+    &init_acc_24,
+    &init_acc_25,
+};
+
+static const testcase_delegate_online_t nfft_acc = {setup_online, destroy_online, 1, 1000 ,10000};
+
+static const testcase_delegate_online_t *testcases_acc[] =
+{
+  &nfft_acc,
+};
+
+static const trafo_delegate_t* trafos_acc[] = {&trafo};
+
+void X(check_acc)(void)
+{
+  check_many_file(SIZE(testcases_acc), SIZE(initializers_acc), SIZE(trafos_acc),
+    testcases_acc, initializers_acc, &check_trafo, trafos_acc);
+}
diff --git a/tests/nfft.h b/tests/nfft.h
new file mode 100644
index 0000000..7dfc99c
--- /dev/null
+++ b/tests/nfft.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+#include "infft.h"
+
+#undef X
+#define X(name) NFFT(name)
+
+void X(check_1d_direct_file)(void);
+void X(check_1d_fast_file)(void);
+void X(check_1d_online)(void);
+void X(check_2d_direct_file)(void);
+void X(check_2d_fast_file)(void);
+void X(check_2d_online)(void);
+void X(check_3d_direct_file)(void);
+void X(check_3d_fast_file)(void);
+void X(check_3d_online)(void);
+void X(check_4d_online)(void);
+
+void X(check_adjoint_1d_direct_file)(void);
+void X(check_adjoint_1d_fast_file)(void);
+void X(check_adjoint_1d_online)(void);
+void X(check_adjoint_2d_direct_file)(void);
+void X(check_adjoint_2d_fast_file)(void);
+void X(check_adjoint_2d_online)(void);
+void X(check_adjoint_3d_direct_file)(void);
+void X(check_adjoint_3d_fast_file)(void);
+void X(check_adjoint_3d_online)(void);
+void X(check_adjoint_4d_online)(void);
+
+void X(check_acc)(void);
diff --git a/tests/nfst.c b/tests/nfst.c
new file mode 100644
index 0000000..837cc9a
--- /dev/null
+++ b/tests/nfst.c
@@ -0,0 +1,1255 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+/* Standard headers. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <complex.h>
+#include <CUnit/CUnit.h>
+
+#include "config.h"
+#include "nfft3.h"
+#include "infft.h"
+#include "cycle.h"
+#include "nfst.h"
+
+#define ABSPATH(x) ABS_SRCDIR SEP "tests" SEP x
+
+/* Testcase delegate. */
+typedef struct testcase_delegate_s testcase_delegate_t;
+
+typedef void (*setup_t)(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f);
+typedef void (*destroy_t)(const testcase_delegate_t *ego_, int *N, R *x, R *f_hat, R *f);
+
+struct testcase_delegate_s
+{
+  setup_t setup;
+  destroy_t destroy;
+};
+
+typedef struct testcase_delegate_file_s
+{
+  setup_t setup;
+  destroy_t destroy;
+  const char *filename;
+} testcase_delegate_file_t;
+
+static void setup_file(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f);
+static void destroy_file(const testcase_delegate_t *ego_, int *N, R *x, R *f_hat, R *f);
+
+typedef struct testcase_delegate_online_s
+{
+  setup_t setup;
+  destroy_t destroy;
+  const int d;
+  const int N;
+  const int M;
+} testcase_delegate_online_t;
+
+static void setup_online(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f);
+static void destroy_online(const testcase_delegate_t *ego_, int *N, R *x, R *f_hat, R *f);
+
+/* Initialization delegate. */
+typedef struct init_delegate_s init_delegate_t;
+typedef void (*init_t)(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+
+struct init_delegate_s
+{
+  const char *name;
+  init_t init;
+  const int m;
+  const unsigned flags;
+  const unsigned fftw_flags;
+};
+
+/* Prepare delegate. */
+typedef struct check_delegate_s check_delegate_t;
+typedef void (*prepare_t)(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat);
+typedef R (*compare_t)(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat);
+
+struct check_delegate_s
+{
+  prepare_t prepare;
+  compare_t compare;
+};
+
+/* Trafo delegate. */
+typedef void (*trafo_t)(X(plan) *p);
+typedef R (*cost_t)(X(plan) *p);
+typedef const char* (*check_t)(X(plan) *p);
+typedef R (*acc_t)(X(plan) *p);
+
+typedef struct trafo_delegate_s
+{
+  const char *name;
+  trafo_t trafo;
+  check_t check;
+  cost_t cost;
+  acc_t acc;
+
+} trafo_delegate_t;
+
+static R trafo_direct_cost(X(plan) *p);
+
+static R err_trafo(X(plan) *p);
+static R err_trafo_direct(X(plan) *p);
+
+/* Check single test case.*/
+static int check_single(const testcase_delegate_t *testcase,
+    init_delegate_t *init_delegate, check_delegate_t *check_delegate,
+    trafo_delegate_t *trafo_delegate);
+
+/* Check multiple test cases.*/
+static void check_many(const size_t nf, const size_t ni, const size_t nt,
+  const testcase_delegate_t **testcases, init_delegate_t **initializers,
+  check_delegate_t *check_delegate, trafo_delegate_t **trafos);
+
+/* Initializers. */
+static void init_1d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_2d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_3d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+static void init_advanced_pre_psi_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M);
+
+#define DEFAULT_NFFT_FLAGS MALLOC_X | MALLOC_F | MALLOC_F_HAT | FFTW_INIT | FFT_OUT_OF_PLACE
+#define DEFAULT_FFTW_FLAGS FFTW_ESTIMATE | FFTW_DESTROY_INPUT
+
+static init_delegate_t init_1d;
+static init_delegate_t init_2d;
+static init_delegate_t init_3d;
+static init_delegate_t init;
+static init_delegate_t init_advanced_pre_psi;
+static init_delegate_t init_advanced_pre_full_psi;
+static init_delegate_t init_advanced_pre_lin_psi;
+#if defined(GAUSSIAN)
+static init_delegate_t init_advanced_pre_fg_psi;
+#endif
+
+static check_delegate_t check_trafo;
+static check_delegate_t check_adjoint;
+
+static trafo_delegate_t trafo_direct;
+static trafo_delegate_t trafo;
+
+static R trafo_direct_cost_factor = K(1.0E-6);
+
+static R trafo_direct_cost(X(plan) *p)
+{
+  if (trafo_direct_cost_factor == 0.0)
+  {
+    int M, d, Nd, x = 0;
+    for (d = 1; d <= 4; d++)
+    {
+      for (Nd = 4; Nd < 128; Nd *= 2)
+      {
+        for (M = 4; M <= 128; M *= 2)
+        {
+          X(plan) p2;
+          int *N = Y(malloc)((size_t)(d) * sizeof(int)), i;
+          for (i = 0; i < d; i++)
+          {
+            N[i] = Nd;
+          }
+          X(init)(&p2, d, N, M);
+          for (i = 0; i < M; i++)
+            p2.x[i] = K(0.0);
+          if(p2.flags & PRE_ONE_PSI)
+            X(precompute_one_psi)(&p2);
+          for (i = 0; i < d * (Nd - 1); i++)
+          {
+            p2.f_hat[i] = K(0.0);
+          }
+          {
+            R r;
+            ticks t0, t1;
+            t0 = getticks();
+            X(trafo_direct)(&p2);
+            t1 = getticks();
+            r = Y(elapsed_seconds)(t1, t0) / (R)(M);
+            for (i = 0; i < d; i++)
+              r = r / Nd;
+            trafo_direct_cost_factor += r;
+            printf(__FE__ "\n", r);
+            x += 1;
+          }
+          X(finalize)(&p2);
+          free(N);
+        }
+      }
+    }
+    trafo_direct_cost_factor = trafo_direct_cost_factor/((double)x);
+    printf("--> " __FE__ "\n", trafo_direct_cost_factor);
+  }
+
+  {
+    INT c = p->M_total, i;
+
+    for (i = 0; i < p->d; i++)
+      c *= p->N[i];
+
+    return trafo_direct_cost_factor * (R)(c);
+  }
+}
+
+static R err_trafo_direct(X(plan) *p)
+{
+  UNUSED(p);
+  return K(120.0) * EPSILON;
+}
+
+static R err_trafo(X(plan) *p)
+{
+  const R m = ((R)p->m);
+  R s; /* oversampling factor */
+  R a;
+  R b;
+  R eps = EPSILON;
+  R err;
+  int i;
+  for (i = 0, s = ((R)p->sigma[0]); i < p->d; i++)
+    s = FMIN(s, ((R)p->sigma[i]));
+#if defined(GAUSSIAN)
+#if defined(NFFT_LDOUBLE)
+    a = K(3.0);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.4);
+    b = K(9500.0);
+#else
+    a = K(1.95);
+    b = K(50.0);
+#endif
+    err = EXP(-m*KPI*(K(1.0)-K(1.0)/(K(2.0)*K(2.0) - K(1.0))));
+#elif defined(B_SPLINE)
+    //printf("m = %E, s = %E, a1 = %E, a2 = %E, z = %E\n", m, s, K(1.0)/(K(2.0)*s-K(1.0)), K(2.0)*m, K(4.0) * POW(K(1.0)/(K(2.0)*s-K(1.0)),K(2.0)*m));
+    //printf("\n<s = %E>\n", s);
+    //fflush(stdout);
+#if defined(NFFT_LDOUBLE)
+    a = K(0.3);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.4);
+    b = K(4800.0);
+#else
+    a = K(1.0);
+    b = K(4100.0);
+#endif
+    err = K(3000.0) * K(4.0) * POW(K(1.0)/(K(2.0)*s-K(1.0)),K(2.0)*m);
+  #elif defined(SINC_POWER)
+#if defined(NFFT_LDOUBLE)
+    a = K(0.3);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.4);
+    b = K(4800.0);
+#else
+    a = K(1.0);
+    b = K(4100.0);
+#endif
+    err = (K(1.0)/(m-K(1.0))) * ((K(2.0)/(POW(s,K(2.0)*m))) + POW(s/(K(2.0)*s-K(1.0)),K(2.0)*m));
+  #elif defined(KAISER_BESSEL)
+#if defined(NFFT_LDOUBLE)
+    a = K(2.9);
+    b = K(50.0);
+#elif defined(NFFT_SINGLE)
+    a = K(0.95);
+    b = K(4800.0);
+#else
+    a = K(0.7);
+    b = K(5000.0);
+#endif
+    err = KPI * (SQRT(m) + m) * SQRT(SQRT(K(1.0) - K(1.0)/K(2.0))) * EXP(-K2PI * m * SQRT(K(1.0) - K(1.0) / K(2.0)));
+  #else
+    #error Unsupported window function.
+  #endif
+
+  return FMAX(FMAX(a * err, b * eps), err_trafo_direct(p));
+}
+
+#define MAX_SECONDS 0.1
+
+static int check_single(const testcase_delegate_t *testcase,
+  init_delegate_t *init_delegate, check_delegate_t *check_delegate,
+  trafo_delegate_t *trafo_delegate)
+{
+  int ok = 0;
+  X(plan) p;
+  int d, j, *N, NN, M;
+  R *x;
+  R *f_hat, *f;
+
+  testcase->setup(testcase, &d, &N, &NN, &M, &x, &f_hat, &f);
+
+  /* Init plan. */
+  printf(", %-28s", init_delegate->name);
+  init_delegate->init(init_delegate, &p, d, N, M);
+
+  printf(", m = %2d", (int)p.m);
+  printf(", %-14s", trafo_delegate->name);
+
+  /* Nodes. */
+  for (j = 0; j < M*d; j++)
+  {
+    p.x[j] = x[j];
+  }
+
+  if (trafo_delegate->check)
+  {
+    const char* check = trafo_delegate->check(&p);
+    if (check != 0)
+    {
+      printf(" -> %-4s (","OK");
+      printf("%s", check);
+      printf(")\n");
+      ok = 1;
+      goto cleanup;
+    }
+  }
+  else if (trafo_delegate->cost)
+  {
+    const R cost = trafo_delegate->cost(&p);
+    if (cost > MAX_SECONDS)
+    {
+      printf(" -> %-4s (cost too high)\n","OK");
+      ok = 1;
+      goto cleanup;
+    }
+  }
+
+  /* Pre-compute Psi, maybe. */
+  if(p.flags & PRE_ONE_PSI)
+    X(precompute_one_psi)(&p);
+
+  check_delegate->prepare(check_delegate, &p, NN, M, f, f_hat);
+
+  trafo_delegate->trafo(&p);
+
+  /* debug */
+  /*fprintf(stderr, "\n");
+  for (j = 0; j < M; j++)
+    fprintf(stderr, "f[%2d] = " __FE__ ", f[%2d] = " __FE__ ", err = " __FE__ "\n", j,
+      f[j], j, p.f[j], ABS(f[j] - p.f[j]) / ABS(f[j]));*/
+
+  /* Standard NFFT error measure. */
+  {
+    R err = check_delegate->compare(check_delegate, &p, NN, M, f, f_hat);
+    R bound = trafo_delegate->acc(&p);
+    ok = IF(err < bound, 1, 0);
+    printf(" -> %-4s " __FE__ " (" __FE__ ")\n", IF(ok == 0, "FAIL", "OK"), err, bound);
+  }
+
+cleanup:
+  testcase->destroy(testcase, N, x, f_hat, f);
+  X(finalize)(&p);
+
+  return ok;
+}
+
+static void check_many(const size_t nf, const size_t ni, const size_t nt,
+  const testcase_delegate_t **testcases, init_delegate_t **initializers,
+  check_delegate_t *check_delegate, trafo_delegate_t **trafos)
+{
+  size_t i, j, k;
+  int ok = 1, r;
+  for (k = 0; k < nt; k++)
+  {
+    for (i = 0; i < nf; i++)
+    {
+      for (j = 0; j < ni; j++)
+      {
+         r = check_single(testcases[i], initializers[j], check_delegate, trafos[k]);
+         ok = MIN(ok, r);
+      }
+    }
+  }
+  CU_ASSERT(ok);
+}
+
+static void setup_file(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f)
+{
+  const testcase_delegate_file_t *ego = (const testcase_delegate_file_t*)ego_;
+  int j;
+  char filename[200];
+  char* c = rindex(ego->filename, SEP[0]);
+  FILE *file = fopen(ego->filename, "r");
+
+  filename[0] = (char) 0;
+  strcpy(filename, &c[1]);
+  printf("%-31s", filename);
+
+  /* Dimensions. */
+  fscanf(file, "%d", d);
+  /* Bandwidths. */
+  *N = Y(malloc)((size_t)(*d) * sizeof(int));
+  for (j = 0; j < *d; j++)
+    fscanf(file, "%d", &((*N)[j]));
+  /* Number of nodes. */
+  fscanf(file, "%d", M);
+
+  printf(" d = %-1d, N = [", *d);
+  {
+    for (j = 0; j < *d; j++)
+    {
+      printf("%s%-5d", IF(j > 0,", ", ""), (*N)[j]);
+    }
+    for (j = 0; j < (4-*d); j++)
+    {
+      printf("%s%-5s", "  ", "");
+    }
+  }
+  printf("],");
+  printf(" M = %-5d", *M);
+
+  for (j = 0, *NN = 1; j < *d; j++)
+    *NN *= ((*N)[j] - 1);
+
+  /* Nodes. */
+  *x = Y(malloc)((size_t)(M[0]*d[0])*sizeof(R));
+  for (j = 0; j < M[0]*d[0]; j++)
+  {
+    fscanf(file, __FI__, &((*x)[j]));
+  }
+
+  /* Fourier coefficients. */
+  *f_hat = Y(malloc)((size_t)(NN[0])*sizeof(R));
+  for (j = 0; j < NN[0]; j++)
+  {
+    R re;
+    fscanf(file, __FI__, &re);
+    (*f_hat)[j] = re;
+  }
+
+  /* Reference function values. */
+  *f = Y(malloc)((size_t)(M[0]) * sizeof(R));
+  for (j = 0; j < M[0]; j++)
+  {
+    R re;
+    fscanf(file, __FI__, &re);
+    (*f)[j] = re;
+  }
+
+  fclose(file);
+}
+
+static void destroy_file(const testcase_delegate_t *ego_, int *N, R *x, R *f_hat, R *f)
+{
+  UNUSED(ego_);
+  free(N);
+  free(x);
+  free(f_hat);
+  free(f);
+}
+
+static void setup_online(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f)
+{
+  const testcase_delegate_online_t *ego = (const testcase_delegate_online_t*)ego_;
+  int j;
+
+  /* Dimensions. */
+  *d = ego->d;
+  /* Bandwidths. */
+  *N = Y(malloc)((size_t)(*d) * sizeof(int));
+  for (j = 0; j < *d; j++)
+    (*N)[j] = ego->N;
+  /* Number of nodes. */
+  *M = ego->M;
+
+  printf("%-31s", "nfst_online");
+
+  printf(" d = %-1d, N = [", *d);
+  {
+    for (j = 0; j < *d; j++)
+    {
+      printf("%s%-5d", IF(j > 0,", ", ""), (*N)[j]);
+    }
+    for (j = 0; j < (4-*d); j++)
+    {
+      printf("%s%-5s", "  ", "");
+    }
+  }
+  printf("],");
+  printf(" M = %-5d", *M);
+
+  for (j = 0, *NN = 1; j < *d; j++)
+    *NN *= ((*N)[j] - 1);
+
+  /* Nodes. */
+  *x = Y(malloc)((size_t)(M[0]*d[0])*sizeof(R));
+  for (j = 0; j < M[0]*d[0]; j++)
+  {
+    (*x)[j] = K(0.5) * Y(drand48)();
+  }
+
+  /* Fourier coefficients. */
+  *f_hat = Y(malloc)((size_t)(NN[0])*sizeof(R));
+  for (j = 0; j < NN[0]; j++)
+  {
+    (*f_hat)[j] = Y(drand48)() - K(0.5);
+  }
+
+  {
+    X(plan) p;
+
+    X(init)(&p, *d, *N, *M);
+
+    /* Nodes. */
+    for (j = 0; j < M[0]*d[0]; j++)
+    {
+      p.x[j] = (*x)[j];
+    }
+
+    /* Pre-compute Psi, maybe. */
+    if(p.flags & PRE_ONE_PSI)
+      X(precompute_one_psi)(&p);
+
+    /* Fourier coefficients. */
+    for (j = 0; j < *NN; j++)
+    {
+      p.f_hat[j] = (*f_hat)[j];
+    }
+
+    X(trafo_direct)(&p);
+
+    /* Reference function values. */
+    *f = Y(malloc)((size_t)(M[0]) * sizeof(R));
+    for (j = 0; j < M[0]; j++)
+    {
+      (*f)[j] = p.f[j];
+    }
+
+    X(finalize)(&p);
+  }
+}
+
+static void setup_adjoint_online(const testcase_delegate_t *ego_, int *d, int **N, int *NN, int *M, R **x, R **f_hat, R **f)
+{
+  const testcase_delegate_online_t *ego = (const testcase_delegate_online_t*)ego_;
+  int j;
+
+  /* Dimensions. */
+  *d = ego->d;
+
+  /* Bandwidths. */
+  *N = Y(malloc)((size_t)(*d) * sizeof(int));
+
+  for (j = 0; j < *d; j++)
+    (*N)[j] = ego->N;
+
+  /* Number of nodes. */
+  *M = ego->M;
+
+  printf("%-31s", "nfst_online");
+
+  printf(" d = %-1d, N = [", *d);
+  {
+    for (j = 0; j < *d; j++)
+    {
+      printf("%s%-5d", IF(j > 0,", ", ""), (*N)[j]);
+    }
+    for (j = 0; j < (4-*d); j++)
+    {
+      printf("%s%-5s", "  ", "");
+    }
+  }
+  printf("],");
+  printf(" M = %-5d", *M);
+
+  for (j = 0, *NN = 1; j < *d; j++)
+    *NN *= ((*N)[j] - 1);
+
+  /* Nodes. */
+  *x = Y(malloc)((size_t)(M[0]*d[0])*sizeof(R));
+
+  for (j = 0; j < M[0]*d[0]; j++)
+  {
+    (*x)[j] = K(0.5) * Y(drand48)();
+  }
+
+  /* Function values. */
+  *f = Y(malloc)((size_t)(M[0]) * sizeof(C));
+  for (j = 0; j < M[0]; j++)
+  {
+    (*f)[j] = Y(drand48)() - K(0.5);
+  }
+
+  {
+    X(plan) p;
+
+    X(init)(&p, *d, *N, *M);
+
+    /* Nodes. */
+    for (j = 0; j < M[0]*d[0]; j++)
+    {
+      p.x[j] = (*x)[j];
+    }
+
+    /* Pre-compute Psi, maybe. */
+    if(p.flags & PRE_ONE_PSI)
+      X(precompute_one_psi)(&p);
+
+    /* Function values. */
+    for (j = 0; j < M[0]; j++)
+    {
+      p.f[j] = (*f)[j];
+    }
+
+    X(adjoint_direct)(&p);
+
+    /* Reference pseudo Fourier coefficients. */
+    *f_hat = Y(malloc)((size_t)(NN[0])*sizeof(R));
+
+    for (j = 0; j < NN[0]; j++)
+    {
+      (*f_hat)[j] = p.f_hat[j];
+    }
+
+    X(finalize)(&p);
+  }
+}
+
+static void destroy_online(const testcase_delegate_t *ego_, int *N, R *x, R *f_hat, R *f)
+{
+  UNUSED(ego_);
+  free(N);
+  free(x);
+  free(f_hat);
+  free(f);
+}
+
+/* Initializers. */
+static void init_1d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  UNUSED(d);
+  X(init_1d)(p, N[0], M);
+}
+
+static void init_2d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  UNUSED(d);
+  X(init_2d)(p, N[0], N[1], M);
+}
+
+static void init_3d_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  UNUSED(d);
+  X(init_3d)(p, N[0], N[1], N[2], M);
+}
+
+static void init_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  UNUSED(ego);
+  X(init)(p, d, N, M);
+}
+
+static void init_advanced_pre_psi_(init_delegate_t *ego, X(plan) *p, const int d, const int *N, const int M)
+{
+  int *n = Y(malloc)((size_t)(d)*sizeof(int));
+  int i;
+  for (i = 0; i < d; i++)
+    n[i] = 2 * (int)(Y(next_power_of_2)(N[i]));
+  X(init_guru)(p, d, N, M, n, ego->m, ego->flags, ego->fftw_flags);
+  free(n);
+}
+
+static init_delegate_t init_direct = {"init_guru ()", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, (DEFAULT_NFFT_FLAGS ^ PRE_PSI), DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_1d = {"init_1d", init_1d_, 0, 0, 0};
+static init_delegate_t init_2d = {"init_2d", init_2d_, 0, 0, 0};
+static init_delegate_t init_3d = {"init_3d", init_3d_, 0, 0, 0};
+static init_delegate_t init = {"init", init_, 0, 0, 0};
+static init_delegate_t init_advanced_pre_psi = {"init_guru (PRE PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_advanced_pre_full_psi = {"init_guru (PRE FULL PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_FULL_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+static init_delegate_t init_advanced_pre_lin_psi = {"init_guru (PRE LIN PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | PRE_LIN_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+#if defined(GAUSSIAN)
+static init_delegate_t init_advanced_pre_fg_psi = {"init_guru (PRE FG PSI)", init_advanced_pre_psi_, WINDOW_HELP_ESTIMATE_m, PRE_PHI_HUT | FG_PSI | PRE_FG_PSI | DEFAULT_NFFT_FLAGS, DEFAULT_FFTW_FLAGS};
+#endif
+
+/* Check routines. */
+static void prepare_trafo(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(M);
+  UNUSED(f);
+  int j;
+
+  /* Fourier coefficients. */
+  for (j = 0; j < NN; j++)
+  {
+    p->f_hat[j] = f_hat[j];
+  }
+}
+
+static void prepare_adjoint(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(NN);
+  UNUSED(f_hat);
+  int j;
+
+  /* Fourier coefficients. */
+  for (j = 0; j < M; j++)
+  {
+    p->f[j] = f[j];
+  }
+}
+
+static R compare_trafo(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(f_hat);
+  int j;
+  R numerator = K(0.0), denominator = K(0.0);
+
+  /* debug */
+//  fprintf(stderr, "\n");
+//  for (j = 0; j < M; j++)
+//    fprintf(stderr, "f[%2d] = " __FE__ ", f[%2d] = " __FE__ ", err = " __FE__ "\n", j,
+//      f[j], j, p->f[j], ABS(f[j] - p->f[j]) / ABS(f[j]));
+
+  for (j = 0; j < M; j++)
+    numerator = MAX(numerator, ABS(f[j] - p->f[j]));
+
+  for (j = 0; j < NN; j++)
+    denominator += ABS(p->f_hat[j]);
+
+  return numerator == K(0.0) ? K(0.0) : numerator/denominator;
+}
+
+static R compare_adjoint(check_delegate_t *ego, X(plan) *p, const int NN, const int M, const R *f, const R *f_hat)
+{
+  UNUSED(ego);
+  UNUSED(f);
+  int j;
+  R numerator = K(0.0), denominator = K(0.0);
+
+  /* debug */
+//  fprintf(stderr, "\n");
+//  for (j = 0; j < NN; j++)
+//    fprintf(stderr, "f_hat[%2d] = " __FE__ ", f_hat[%2d] = " __FE__ ", err = " __FE__ "\n", j,
+//      f_hat[j], j, p->f_hat[j], ABS(f_hat[j] - p->f_hat[j]) / ABS(f_hat[j]));
+
+  for (j = 0; j < NN; j++)
+    numerator = MAX(numerator, ABS(f_hat[j] - p->f_hat[j]));
+
+  for (j = 0; j < M; j++)
+    denominator += ABS(p->f[j]);
+
+  return numerator == K(0.0) ? K(0.0) : numerator/denominator;
+}
+
+static check_delegate_t check_trafo = {prepare_trafo, compare_trafo};
+static check_delegate_t check_adjoint = {prepare_adjoint, compare_adjoint};
+
+static trafo_delegate_t trafo_direct = {"trafo_direct", X(trafo_direct), 0, trafo_direct_cost, err_trafo_direct};
+static trafo_delegate_t trafo = {"trafo", X(trafo), X(check), 0, err_trafo};
+//static trafo_delegate_t trafo_1d = {"trafo_1d", X(trafo_1d), X(check), 0, err_trafo};
+//static trafo_delegate_t trafo_2d = {"trafo_2d", X(trafo_2d), X(check), 0, err_trafo};
+//static trafo_delegate_t trafo_3d = {"trafo_3d", X(trafo_3d), X(check), 0, err_trafo};
+
+static trafo_delegate_t adjoint_direct = {"adjoint_direct", X(adjoint_direct), 0, trafo_direct_cost, err_trafo_direct};
+static trafo_delegate_t adjoint = {"adjoint", X(adjoint), X(check), 0, err_trafo};
+//static trafo_delegate_t adjoint_1d = {"adjoint_1d", adjoint_1d, X(check), 0, err_trafo};
+//static trafo_delegate_t adjoint_2d = {"adjoint_2d", adjoint_2d, X(check), 0, err_trafo};
+//static trafo_delegate_t adjoint_3d = {"adjoint_3d", adjoint_3d, X(check), 0, err_trafo};
+
+/* 1D */
+
+/* Initializers. */
+static const init_delegate_t* initializers_direct[] =
+{
+  &init_direct,
+};
+
+static const init_delegate_t* initializers_1d[] =
+{
+  &init_1d,
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_file_t nfst_1d_2_1 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_2_1.txt")};
+static const testcase_delegate_file_t nfst_1d_2_10 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_2_10.txt")};
+static const testcase_delegate_file_t nfst_1d_2_20 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_2_20.txt")};
+static const testcase_delegate_file_t nfst_1d_2_50 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_2_50.txt")};
+static const testcase_delegate_file_t nfst_1d_4_1 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_4_1.txt")};
+static const testcase_delegate_file_t nfst_1d_4_10 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_4_10.txt")};
+static const testcase_delegate_file_t nfst_1d_4_20 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_4_20.txt")};
+static const testcase_delegate_file_t nfst_1d_4_50 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_4_50.txt")};
+static const testcase_delegate_file_t nfst_1d_10_1 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_10_1.txt")};
+static const testcase_delegate_file_t nfst_1d_10_10 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_10_10.txt")};
+static const testcase_delegate_file_t nfst_1d_10_20 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_10_20.txt")};
+static const testcase_delegate_file_t nfst_1d_10_50 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_10_50.txt")};
+static const testcase_delegate_file_t nfst_1d_20_1 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_20_1.txt")};
+static const testcase_delegate_file_t nfst_1d_20_10 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_20_10.txt")};
+static const testcase_delegate_file_t nfst_1d_20_20 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_20_20.txt")};
+static const testcase_delegate_file_t nfst_1d_20_50 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_20_50.txt")};
+static const testcase_delegate_file_t nfst_1d_50_1 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_50_1.txt")};
+static const testcase_delegate_file_t nfst_1d_50_10 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_50_10.txt")};
+static const testcase_delegate_file_t nfst_1d_50_20 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_50_20.txt")};
+static const testcase_delegate_file_t nfst_1d_50_50 = {setup_file,destroy_file,ABSPATH("data/nfst_1d_50_50.txt")};
+
+static const testcase_delegate_file_t *testcases_1d_file[] =
+{
+    &nfst_1d_2_1,
+    &nfst_1d_2_10,
+    &nfst_1d_2_20,
+    &nfst_1d_2_50,
+    &nfst_1d_4_1,
+    &nfst_1d_4_10,
+    &nfst_1d_4_20,
+    &nfst_1d_4_50,
+    &nfst_1d_10_1,
+    &nfst_1d_10_10,
+    &nfst_1d_10_20,
+    &nfst_1d_10_50,
+    &nfst_1d_20_1,
+    &nfst_1d_20_10,
+    &nfst_1d_20_20,
+    &nfst_1d_20_50,
+    &nfst_1d_50_1,
+    &nfst_1d_50_10,
+    &nfst_1d_50_20,
+    &nfst_1d_50_50,
+};
+
+static const trafo_delegate_t* trafos_1d_direct_file[] = {&trafo_direct};
+
+void X(check_1d_direct_file)(void)
+{
+  printf("check_1d_direct_file:\n");
+  check_many(SIZE(testcases_1d_file), SIZE(initializers_direct), SIZE(trafos_1d_direct_file),
+    testcases_1d_file, initializers_direct, &check_trafo, trafos_1d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_1d_fast_file[] = {&trafo/*, &trafo_1d*/};
+
+void X(check_1d_fast_file)(void)
+{
+  printf("check_1d_fast_file:\n");
+  check_many(SIZE(testcases_1d_file), SIZE(initializers_1d), SIZE(trafos_1d_fast_file),
+    testcases_1d_file, initializers_1d, &check_trafo, trafos_1d_fast_file);
+}
+
+static const testcase_delegate_file_t nfst_adjoint_1d_2_1 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_2_1.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_2_10 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_2_10.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_2_20 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_2_20.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_2_50 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_2_50.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_4_1 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_4_1.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_4_10 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_4_10.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_4_20 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_4_20.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_4_50 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_4_50.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_10_1 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_10_1.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_10_10 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_10_10.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_10_20 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_10_20.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_10_50 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_10_50.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_20_1 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_20_1.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_20_10 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_20_10.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_20_20 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_20_20.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_20_50 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_20_50.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_50_1 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_50_1.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_50_10 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_50_10.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_50_20 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_50_20.txt")};
+static const testcase_delegate_file_t nfst_adjoint_1d_50_50 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_1d_50_50.txt")};
+
+static const testcase_delegate_file_t *testcases_adjoint_1d_file[] =
+{
+  &nfst_adjoint_1d_2_1,
+  &nfst_adjoint_1d_2_10,
+  &nfst_adjoint_1d_2_20,
+  &nfst_adjoint_1d_2_50,
+  &nfst_adjoint_1d_4_1,
+  &nfst_adjoint_1d_4_10,
+  &nfst_adjoint_1d_4_20,
+  &nfst_adjoint_1d_4_50,
+  &nfst_adjoint_1d_10_1,
+  &nfst_adjoint_1d_10_10,
+  &nfst_adjoint_1d_10_20,
+  &nfst_adjoint_1d_10_50,
+  &nfst_adjoint_1d_20_1,
+  &nfst_adjoint_1d_20_10,
+  &nfst_adjoint_1d_20_20,
+  &nfst_adjoint_1d_20_50,
+  &nfst_adjoint_1d_50_1,
+  &nfst_adjoint_1d_50_10,
+  &nfst_adjoint_1d_50_20,
+  &nfst_adjoint_1d_50_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_direct_1d_file[] = {&adjoint_direct};
+
+void X(check_adjoint_1d_direct_file)(void)
+{
+  printf("check_adjoint_1d_direct_file:\n");
+  check_many(SIZE(testcases_adjoint_1d_file), SIZE(initializers_direct), SIZE(trafos_adjoint_direct_1d_file),
+    testcases_adjoint_1d_file, initializers_direct, &check_adjoint, trafos_adjoint_direct_1d_file);
+}
+
+static const trafo_delegate_t* trafos_adjoint_fast_1d_file[] = {&adjoint/*, &adjoint_1d*/};
+
+void X(check_adjoint_1d_fast_file)(void)
+{
+  printf("check_adjoint_1d_fast_file:\n");
+  check_many(SIZE(testcases_adjoint_1d_file), SIZE(initializers_1d), SIZE(trafos_adjoint_fast_1d_file),
+    testcases_adjoint_1d_file, initializers_1d, &check_adjoint, trafos_adjoint_fast_1d_file);
+}
+
+static const testcase_delegate_online_t nfst_online_1d_50_50 = {setup_online, destroy_online, 1, 50 ,50};
+static const testcase_delegate_online_t nfst_online_1d_100_50 = {setup_online, destroy_online, 1, 100 ,50};
+static const testcase_delegate_online_t nfst_online_1d_200_50 = {setup_online, destroy_online, 1, 200 ,50};
+static const testcase_delegate_online_t nfst_online_1d_500_50 = {setup_online, destroy_online, 1, 500 ,50};
+static const testcase_delegate_online_t nfst_online_1d_1000_50 = {setup_online, destroy_online, 1, 1000 ,50};
+static const testcase_delegate_online_t nfst_online_1d_2000_50 = {setup_online, destroy_online, 1, 2000 ,50};
+static const testcase_delegate_online_t nfst_online_1d_5000_50 = {setup_online, destroy_online, 1, 5000 ,50};
+static const testcase_delegate_online_t nfst_online_1d_10000_50 = {setup_online, destroy_online, 1, 10000 ,50};
+
+static const testcase_delegate_online_t *testcases_1d_online[] =
+{
+  &nfst_online_1d_50_50,
+  &nfst_online_1d_100_50,
+  &nfst_online_1d_200_50,
+  &nfst_online_1d_500_50,
+  &nfst_online_1d_1000_50,
+  &nfst_online_1d_2000_50,
+  &nfst_online_1d_5000_50,
+  &nfst_online_1d_10000_50,
+};
+
+static const trafo_delegate_t* trafos_1d_online[] = {&trafo/*, &trafo_1d*/};
+
+void X(check_1d_online)(void)
+{
+  check_many(SIZE(testcases_1d_online), SIZE(initializers_1d), SIZE(trafos_1d_online),
+    testcases_1d_online, initializers_1d, &check_trafo, trafos_1d_online);
+}
+
+static const testcase_delegate_online_t nfst_adjoint_online_1d_50_50 = {setup_adjoint_online, destroy_online, 1, 50 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_1d_100_50 = {setup_adjoint_online, destroy_online, 1, 100 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_1d_200_50 = {setup_adjoint_online, destroy_online, 1, 200 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_1d_500_50 = {setup_adjoint_online, destroy_online, 1, 500 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_1d_1000_50 = {setup_adjoint_online, destroy_online, 1, 1000 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_1d_2000_50 = {setup_adjoint_online, destroy_online, 1, 2000 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_1d_5000_50 = {setup_adjoint_online, destroy_online, 1, 5000 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_1d_10000_50 = {setup_adjoint_online, destroy_online, 1, 10000 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_1d_online[] =
+{
+  &nfst_adjoint_online_1d_50_50,
+  &nfst_adjoint_online_1d_100_50,
+  &nfst_adjoint_online_1d_200_50,
+  &nfst_adjoint_online_1d_500_50,
+  &nfst_adjoint_online_1d_1000_50,
+  &nfst_adjoint_online_1d_2000_50,
+  &nfst_adjoint_online_1d_5000_50,
+  &nfst_adjoint_online_1d_10000_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_1d_online[] = {&adjoint/*, &adjoint_1d*/};
+
+void X(check_adjoint_1d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_1d_online), SIZE(initializers_1d), SIZE(trafos_adjoint_1d_online),
+    testcases_adjoint_1d_online, initializers_1d, &check_adjoint, trafos_adjoint_1d_online);
+}
+
+/* 2D */
+
+/* Initializers. */
+static const init_delegate_t* initializers_2d[] =
+{
+  &init_2d,
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_file_t nfst_2d_10_10_20 = {setup_file,destroy_file,ABSPATH("data/nfst_2d_10_10_20.txt")};
+static const testcase_delegate_file_t nfst_2d_10_10_50 = {setup_file,destroy_file,ABSPATH("data/nfst_2d_10_10_50.txt")};
+static const testcase_delegate_file_t nfst_2d_10_20_20 = {setup_file,destroy_file,ABSPATH("data/nfst_2d_10_20_20.txt")};
+static const testcase_delegate_file_t nfst_2d_10_20_50 = {setup_file,destroy_file,ABSPATH("data/nfst_2d_10_20_50.txt")};
+static const testcase_delegate_file_t nfst_2d_20_10_20 = {setup_file,destroy_file,ABSPATH("data/nfst_2d_20_10_20.txt")};
+static const testcase_delegate_file_t nfst_2d_20_10_50 = {setup_file,destroy_file,ABSPATH("data/nfst_2d_20_10_50.txt")};
+static const testcase_delegate_file_t nfst_2d_20_20_20 = {setup_file,destroy_file,ABSPATH("data/nfst_2d_20_20_20.txt")};
+static const testcase_delegate_file_t nfst_2d_20_20_50 = {setup_file,destroy_file,ABSPATH("data/nfst_2d_20_20_50.txt")};
+
+static const testcase_delegate_file_t *testcases_2d_file[] =
+{
+  &nfst_2d_10_10_20,
+  &nfst_2d_10_10_50,
+  &nfst_2d_10_20_20,
+  &nfst_2d_10_20_50,
+  &nfst_2d_20_10_20,
+  &nfst_2d_20_10_50,
+  &nfst_2d_20_20_20,
+  &nfst_2d_20_20_50,
+};
+
+static const trafo_delegate_t* trafos_2d_direct_file[] = {&trafo_direct};
+
+void X(check_2d_direct_file)(void)
+{
+  printf("check_2d_direct_file:\n");
+  check_many(SIZE(testcases_2d_file), SIZE(initializers_direct), SIZE(trafos_2d_direct_file),
+    testcases_2d_file, initializers_direct, &check_trafo, trafos_2d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_2d_fast_file[] = {&trafo/*, &trafo_2d*/};
+
+void X(check_2d_fast_file)(void)
+{
+  printf("check_2d_fast_file:\n");
+  check_many(SIZE(testcases_2d_file), SIZE(initializers_2d), SIZE(trafos_2d_fast_file),
+    testcases_2d_file, initializers_2d, &check_trafo, trafos_2d_fast_file);
+}
+
+static const testcase_delegate_file_t nfst_adjoint_2d_10_10_20 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_2d_10_10_20.txt")};
+static const testcase_delegate_file_t nfst_adjoint_2d_10_10_50 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_2d_10_10_50.txt")};
+static const testcase_delegate_file_t nfst_adjoint_2d_10_20_20 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_2d_10_20_20.txt")};
+static const testcase_delegate_file_t nfst_adjoint_2d_10_20_50 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_2d_10_20_50.txt")};
+static const testcase_delegate_file_t nfst_adjoint_2d_20_10_20 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_2d_20_10_20.txt")};
+static const testcase_delegate_file_t nfst_adjoint_2d_20_10_50 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_2d_20_10_50.txt")};
+static const testcase_delegate_file_t nfst_adjoint_2d_20_20_20 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_2d_20_20_20.txt")};
+static const testcase_delegate_file_t nfst_adjoint_2d_20_20_50 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_2d_20_20_50.txt")};
+
+static const testcase_delegate_file_t *testcases_adjoint_2d_file[] =
+{
+  &nfst_adjoint_2d_10_10_20,
+  &nfst_adjoint_2d_10_10_50,
+  &nfst_adjoint_2d_10_20_20,
+  &nfst_adjoint_2d_10_20_50,
+  &nfst_adjoint_2d_20_10_20,
+  &nfst_adjoint_2d_20_10_50,
+  &nfst_adjoint_2d_20_20_20,
+  &nfst_adjoint_2d_20_20_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_2d_direct_file[] = {&adjoint_direct};
+
+void X(check_adjoint_2d_direct_file)(void)
+{
+  printf("check_adjoint_2d_direct_file:\n");
+  check_many(SIZE(testcases_adjoint_2d_file), SIZE(initializers_direct), SIZE(trafos_adjoint_2d_direct_file),
+    testcases_adjoint_2d_file, initializers_direct, &check_adjoint, trafos_adjoint_2d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_adjoint_2d_fast_file[] = {&adjoint/*, &adjoint_2d*/};
+
+void X(check_adjoint_2d_fast_file)(void)
+{
+  printf("check_adjoint_2d_fast_file:\n");
+  check_many(SIZE(testcases_adjoint_2d_file), SIZE(initializers_2d), SIZE(trafos_adjoint_2d_fast_file),
+    testcases_adjoint_2d_file, initializers_2d, &check_adjoint, trafos_adjoint_2d_fast_file);
+}
+
+static const testcase_delegate_online_t nfst_online_2d_50_50 = {setup_online, destroy_online, 2, 50 ,50};
+static const testcase_delegate_online_t nfst_online_2d_100_50 = {setup_online, destroy_online, 2, 100 ,50};
+static const testcase_delegate_online_t nfst_online_2d_200_50 = {setup_online, destroy_online, 2, 200 ,50};
+static const testcase_delegate_online_t nfst_online_2d_500_50 = {setup_online, destroy_online, 2, 500 ,50};
+static const testcase_delegate_online_t nfst_online_2d_1000_50 = {setup_online, destroy_online, 2, 1000 ,50};
+
+static const testcase_delegate_online_t *testcases_2d_online[] =
+{
+  &nfst_online_2d_50_50,
+  &nfst_online_2d_100_50,
+  &nfst_online_2d_200_50,
+  &nfst_online_2d_500_50,
+  &nfst_online_2d_1000_50,
+};
+
+static const trafo_delegate_t* trafos_2d_online[] = {&trafo/*, &trafo_2d*/};
+
+void X(check_2d_online)(void)
+{
+  check_many(SIZE(testcases_2d_online), SIZE(initializers_2d), SIZE(trafos_2d_online),
+    testcases_2d_online, initializers_2d, &check_trafo, trafos_2d_online);
+}
+
+static const testcase_delegate_online_t nfst_adjoint_online_2d_50_50 = {setup_adjoint_online, destroy_online, 2, 50 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_2d_100_50 = {setup_adjoint_online, destroy_online, 2, 100 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_2d_200_50 = {setup_adjoint_online, destroy_online, 2, 200 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_2d_500_50 = {setup_adjoint_online, destroy_online, 2, 500 ,50};
+static const testcase_delegate_online_t nfst_adjoint_online_2d_1000_50 = {setup_adjoint_online, destroy_online, 2, 1000 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_2d_online[] =
+{
+  &nfst_adjoint_online_2d_50_50,
+  &nfst_adjoint_online_2d_100_50,
+  &nfst_adjoint_online_2d_200_50,
+  &nfst_adjoint_online_2d_500_50,
+  &nfst_adjoint_online_2d_1000_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_2d_online[] = {&adjoint/*, &adjoint_2d*/};
+
+void X(check_adjoint_2d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_2d_online), SIZE(initializers_2d), SIZE(trafos_adjoint_2d_online),
+    testcases_adjoint_2d_online, initializers_2d, &check_adjoint, trafos_adjoint_2d_online);
+}
+
+/* 3D */
+
+/* Initializers. */
+static const init_delegate_t* initializers_3d[] =
+{
+  &init_3d,
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_file_t nfst_3d_10_10_10_10 = {setup_file,destroy_file,ABSPATH("data/nfst_3d_10_10_10_10.txt")};
+
+static const testcase_delegate_file_t *testcases_3d_file[] =
+{
+  &nfst_3d_10_10_10_10,
+};
+
+static const trafo_delegate_t* trafos_3d_direct_file[] = {&trafo_direct};
+
+void X(check_3d_direct_file)(void)
+{
+  printf("check_3d_direct_file:\n");
+  check_many(SIZE(testcases_3d_file), SIZE(initializers_direct), SIZE(trafos_3d_direct_file),
+    testcases_3d_file, initializers_direct, &check_trafo, trafos_3d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_3d_fast_file[] = {&trafo/*, &trafo_3d*/};
+
+void X(check_3d_fast_file)(void)
+{
+  printf("check_3d_fast_file:\n");
+  check_many(SIZE(testcases_3d_file), SIZE(initializers_3d), SIZE(trafos_3d_fast_file),
+    testcases_3d_file, initializers_3d, &check_trafo, trafos_3d_fast_file);
+}
+
+static const testcase_delegate_file_t nfst_adjoint_3d_10_10_10_10 = {setup_file,destroy_file,ABSPATH("data/nfst_adjoint_3d_10_10_10_10.txt")};
+
+static const testcase_delegate_file_t *testcases_adjoint_3d_file[] =
+{
+  &nfst_adjoint_3d_10_10_10_10,
+};
+
+static const trafo_delegate_t* trafos_adjoint_3d_direct_file[] = {&adjoint_direct};
+
+void X(check_adjoint_3d_direct_file)(void)
+{
+  printf("check_adjoint_3d_direct_file:\n");
+  check_many(SIZE(testcases_adjoint_3d_file), SIZE(initializers_direct), SIZE(trafos_adjoint_3d_direct_file),
+    testcases_adjoint_3d_file, initializers_direct, &check_adjoint, trafos_adjoint_3d_direct_file);
+}
+
+static const trafo_delegate_t* trafos_adjoint_3d_fast_file[] = {&adjoint/*, &adjoint_3d*/};
+
+void X(check_adjoint_3d_fast_file)(void)
+{
+  printf("check_adjoint_3d_fast_file:\n");
+  check_many(SIZE(testcases_adjoint_3d_file), SIZE(initializers_3d), SIZE(trafos_adjoint_3d_fast_file),
+    testcases_adjoint_3d_file, initializers_3d, &check_adjoint, trafos_adjoint_3d_fast_file);
+}
+
+static const testcase_delegate_online_t nfst_online_3d_50_50 = {setup_online, destroy_online, 3, 50 ,50};
+
+static const testcase_delegate_online_t *testcases_3d_online[] =
+{
+  &nfst_online_3d_50_50,
+};
+
+static const trafo_delegate_t* trafos_3d_online[] = {&trafo/*, &trafo_3d*/};
+
+void X(check_3d_online)(void)
+{
+  check_many(SIZE(testcases_3d_online), SIZE(initializers_3d), SIZE(trafos_3d_online),
+    testcases_3d_online, initializers_3d, &check_trafo, trafos_3d_online);
+}
+
+static const testcase_delegate_online_t nfst_adjoint_online_3d_50_50 = {setup_adjoint_online, destroy_online, 3, 50 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_3d_online[] =
+{
+  &nfst_adjoint_online_3d_50_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_3d_online[] = {&adjoint/*, &adjoint_3d*/};
+
+void X(check_adjoint_3d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_3d_online), SIZE(initializers_3d), SIZE(trafos_adjoint_3d_online),
+    testcases_adjoint_3d_online, initializers_3d, &check_adjoint, trafos_adjoint_3d_online);
+}
+
+/* 4D. */
+
+/* Initializers. */
+static const init_delegate_t* initializers_4d[] =
+{
+  &init,
+  &init_advanced_pre_psi,
+  &init_advanced_pre_full_psi,
+//  &init_advanced_pre_lin_psi,
+#if defined(GAUSSIAN)
+  &init_advanced_pre_fg_psi,
+#endif
+};
+
+static const testcase_delegate_online_t nfst_online_4d_28_50 = {setup_online, destroy_online, 4, 28 ,50};
+
+static const testcase_delegate_online_t *testcases_4d_online[] =
+{
+  &nfst_online_4d_28_50,
+};
+
+static const trafo_delegate_t* trafos_4d_online[] = {&trafo};
+
+void X(check_4d_online)(void)
+{
+  check_many(SIZE(testcases_4d_online), SIZE(initializers_4d), SIZE(trafos_4d_online),
+    testcases_4d_online, initializers_4d, &check_trafo, trafos_4d_online);
+}
+
+static const testcase_delegate_online_t nfst_adjoint_online_4d_28_50 = {setup_adjoint_online, destroy_online, 4, 28 ,50};
+
+static const testcase_delegate_online_t *testcases_adjoint_4d_online[] =
+{
+  &nfst_adjoint_online_4d_28_50,
+};
+
+static const trafo_delegate_t* trafos_adjoint_4d_online[] = {&adjoint};
+
+void X(check_adjoint_4d_online)(void)
+{
+  check_many(SIZE(testcases_adjoint_4d_online), SIZE(initializers_4d), SIZE(trafos_adjoint_4d_online),
+    testcases_adjoint_4d_online, initializers_4d, &check_adjoint, trafos_adjoint_4d_online);
+}
diff --git a/tests/nfst.h b/tests/nfst.h
new file mode 100644
index 0000000..7bf9321
--- /dev/null
+++ b/tests/nfst.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2002, 2015 Jens Keiner, Stefan Kunis, Daniel Potts
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/* $Id: simple_test.c 3509 2010-05-25 19:00:59Z keiner $ */
+
+#include "infft.h"
+
+#undef X
+#define X(name) NFST(name)
+
+void X(check_1d_direct_file)(void);
+void X(check_1d_fast_file)(void);
+void X(check_1d_online)(void);
+void X(check_2d_direct_file)(void);
+void X(check_2d_fast_file)(void);
+void X(check_2d_online)(void);
+void X(check_3d_direct_file)(void);
+void X(check_3d_fast_file)(void);
+void X(check_3d_online)(void);
+void X(check_4d_online)(void);
+
+void X(check_adjoint_1d_direct_file)(void);
+void X(check_adjoint_1d_fast_file)(void);
+void X(check_adjoint_1d_online)(void);
+void X(check_adjoint_2d_direct_file)(void);
+void X(check_adjoint_2d_fast_file)(void);
+void X(check_adjoint_2d_online)(void);
+void X(check_adjoint_3d_direct_file)(void);
+void X(check_adjoint_3d_fast_file)(void);
+void X(check_adjoint_3d_online)(void);
+void X(check_adjoint_4d_online)(void);
diff --git a/util/Makefile.am b/util/Makefile.am
deleted file mode 100644
index c92f3d5..0000000
--- a/util/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
-
-AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/3rdparty/cstripack
-
-if HAVE_THREADS
-  LIBUTIL_THREADS_LA = libutil_threads.la
-else
-  LIBUTIL_THREADS_LA =
-endif
-
-noinst_LTLIBRARIES = libutil.la $(LIBUTIL_THREADS_LA)
-
-libutil_la_SOURCES = util.c
-
-if HAVE_THREADS
-  libutil_threads_la_SOURCES = util.c
-if HAVE_OPENMP
-  libutil_threads_la_CFLAGS = $(OPENMP_CFLAGS)
-endif
-endif
-
diff --git a/util/Makefile.in b/util/Makefile.in
deleted file mode 100644
index 4fd1750..0000000
--- a/util/Makefile.in
+++ /dev/null
@@ -1,580 +0,0 @@
-# Makefile.in generated by automake 1.12.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# $Id: Makefile.am 3896 2012-10-10 12:19:26Z tovo $
-
-VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
-    esac; \
-    test $$am__dry = yes; \
-  }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = util
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(top_srcdir)/config/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_apple_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_cc_maxopt.m4 \
-	$(top_srcdir)/m4/ax_check_compiler_flags.m4 \
-	$(top_srcdir)/m4/ax_check_dir.m4 \
-	$(top_srcdir)/m4/ax_compiler_vendor.m4 \
-	$(top_srcdir)/m4/ax_gcc_archflag.m4 \
-	$(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \
-	$(top_srcdir)/m4/ax_lib_fftw3.m4 \
-	$(top_srcdir)/m4/ax_nfft_module.m4 \
-	$(top_srcdir)/m4/ax_openmp.m4 \
-	$(top_srcdir)/m4/ax_prog_matlab.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/include/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libutil_la_LIBADD =
-am_libutil_la_OBJECTS = util.lo
-libutil_la_OBJECTS = $(am_libutil_la_OBJECTS)
-libutil_threads_la_LIBADD =
-am__libutil_threads_la_SOURCES_DIST = util.c
- at HAVE_THREADS_TRUE@am_libutil_threads_la_OBJECTS =  \
- at HAVE_THREADS_TRUE@	libutil_threads_la-util.lo
-libutil_threads_la_OBJECTS = $(am_libutil_threads_la_OBJECTS)
-libutil_threads_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(libutil_threads_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
- at HAVE_THREADS_TRUE@am_libutil_threads_la_rpath =
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include
-depcomp = $(SHELL) $(top_srcdir)/config/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-SOURCES = $(libutil_la_SOURCES) $(libutil_threads_la_SOURCES)
-DIST_SOURCES = $(libutil_la_SOURCES) \
-	$(am__libutil_threads_la_SOURCES_DIST)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-AR = @AR@
-AS = @AS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAVE_FPT = @HAVE_FPT@
-HAVE_MRI = @HAVE_MRI@
-HAVE_NFCT = @HAVE_NFCT@
-HAVE_NFSFT = @HAVE_NFSFT@
-HAVE_NFSOFT = @HAVE_NFSOFT@
-HAVE_NFST = @HAVE_NFST@
-HAVE_NNFFT = @HAVE_NNFFT@
-HAVE_NSFFT = @HAVE_NSFFT@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-POW_LIB = @POW_LIB@
-PRTDIAG = @PRTDIAG@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TICKS_PER_SECOND = @TICKS_PER_SECOND@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-fftw3_LDFLAGS = @fftw3_LDFLAGS@
-fftw3_LIBS = @fftw3_LIBS@
-fftw3_threads_LIBS = @fftw3_threads_LIBS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-matlab_CPPFLAGS = @matlab_CPPFLAGS@
-matlab_LDFLAGS = @matlab_LDFLAGS@
-matlab_LIBS = @matlab_LIBS@
-matlab_fftw3_LDFLAGS = @matlab_fftw3_LDFLAGS@
-matlab_fftw3_LIBS = @matlab_fftw3_LIBS@
-matlab_mexext = @matlab_mexext@
-matlab_prog_mexext = @matlab_prog_mexext@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/3rdparty/cstripack
- at HAVE_THREADS_FALSE@LIBUTIL_THREADS_LA = 
- at HAVE_THREADS_TRUE@LIBUTIL_THREADS_LA = libutil_threads.la
-noinst_LTLIBRARIES = libutil.la $(LIBUTIL_THREADS_LA)
-libutil_la_SOURCES = util.c
- at HAVE_THREADS_TRUE@libutil_threads_la_SOURCES = util.c
- at HAVE_OPENMP_TRUE@@HAVE_THREADS_TRUE at libutil_threads_la_CFLAGS = $(OPENMP_CFLAGS)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu util/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu util/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; \
-	locs=`for p in $$list; do echo $$p; done | \
-	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-	      sort -u`; \
-	test -z "$$locs" || { \
-	  echo rm -f $${locs}; \
-	  rm -f $${locs}; \
-	}
-libutil.la: $(libutil_la_OBJECTS) $(libutil_la_DEPENDENCIES) $(EXTRA_libutil_la_DEPENDENCIES) 
-	$(LINK)  $(libutil_la_OBJECTS) $(libutil_la_LIBADD) $(LIBS)
-libutil_threads.la: $(libutil_threads_la_OBJECTS) $(libutil_threads_la_DEPENDENCIES) $(EXTRA_libutil_threads_la_DEPENDENCIES) 
-	$(libutil_threads_la_LINK) $(am_libutil_threads_la_rpath) $(libutil_threads_la_OBJECTS) $(libutil_threads_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libutil_threads_la-util.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/util.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-libutil_threads_la-util.lo: util.c
- at am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_threads_la_CFLAGS) $(CFLAGS) -MT libutil_threads_la-util.lo -MD -MP -MF $(DEPDIR)/libutil_threads_la-util.Tpo -c -o libutil_threads_la-util.lo `test -f 'util.c' || echo '$(srcdir)/'`util.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libutil_threads_la-util.Tpo $(DEPDIR)/libutil_threads_la-util.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='util.c' object='libutil_threads_la-util.lo' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libutil_threads_la_CFLAGS) $(CFLAGS) -c -o libutil_threads_la-util.lo `test -f 'util.c' || echo '$(srcdir)/'`util.c
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
-	distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/util/util.c b/util/util.c
deleted file mode 100644
index e517788..0000000
--- a/util/util.c
+++ /dev/null
@@ -1,1488 +0,0 @@
-/*
- * Copyright (c) 2002, 2012 Jens Keiner, Stefan Kunis, Daniel Potts
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* $Id: util.c 3896 2012-10-10 12:19:26Z tovo $ */
-
-/** Sources for utilities.
- *  functions for vectors, window functions, ...
- *  (c) if not stated otherwise: Daniel Potts, Stefan Kunis
- */
-#include "config.h"
-
-#include "infft.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <float.h>
-#include <sys/time.h>
-#include "cstripack.h"
-#ifdef HAVE_COMPLEX_H
-#include <complex.h>
-#endif
-
-#ifdef _OPENMP
-#include <omp.h>
-#endif
-
-#include "nfft3.h"
-#include "nfft3util.h"
-#include "infft.h"
-
-double nfft_elapsed_seconds(ticks t1, ticks t0)
-{
-  UNUSED(t1);
-  UNUSED(t0);
-  return elapsed(t1,t0) / TICKS_PER_SECOND;
-}
-
-/** Computes integer /f$\prod_{t=0}^{d-1} v_t/f$.
- */
-int nfft_prod_int(int *vec, int d)
-{
-  int t, prod;
-
-  prod=1;
-  for(t=0; t<d; t++)
-    prod *= vec[t];
-
-  return prod;
-}
-
-/** Computes integer /f$\prod_{t=0}^{d-1} v_t-a/f$.
- */
-int nfst_prod_minus_a_int(int *vec, int a, int d)
-{
-  int t, prod;
-
-  prod=1;
-  for(t=0; t<d; t++)
-    prod *= vec[t]-a;
-
-  return prod;
-}
-
-/** Computes /f$\sum_{t=0}^{d-1} i_t \prod_{t'=t+1}^{d-1} N_{t'}/f$.
- */
-int nfft_plain_loop(int *idx,int *N,int d)
-{
-  int t,sum;
-
-  sum = idx[0];
-  for (t = 1; t < d; t++)
-    sum = sum * N[t] + idx[t];
-
-  return sum;
-}
-
-/** Computes double /f$\prod_{t=0}^{d-1} v_t/f$.
- */
-double nfft_prod_real(double *vec,int d)
-{
-  int t;
-  double prod;
-
-  prod=1.0;
-  for(t=0; t<d; t++)
-    prod*=vec[t];
-
-  return prod;
-}
-
-static void bspline_help(int k, double x, double *scratch, int j, int ug,
-  int og, int r)
-{
-  int i; /* row index of the de Boor scheme */
-  int idx; /* index in scratch */
-  double a; /* alpha of the de Boor scheme */
-
-  /* computation of one column */
-  for (i = og + r - k + 1, idx = og; idx >= ug; i--, idx--)
-  {
-    a = ((R)(x - i)) / ((R)(k - j));
-    scratch[idx] = (1 - a) * scratch[idx-1] + a * scratch[idx];
-  }
-} /* bspline_help */
-
-/** Computes \f$M_{k,0}\left(x\right)\f$
- *  scratch is used for de Boor's scheme
- */
-double nfft_bspline(int k, double x, double *scratch)
-{
-  double result_value;                  /**< M_{k,0}\left(x\right)            */
-  int r;                                /**< \f$x \in {\rm supp}(M_{0,r}) \f$ */
-  int g1,g2;                            /**< boundaries                       */
-  int j,idx,ug,og;                    /**< indices                          */
-  double a;                             /**< alpha of the de Boor scheme      */
-
-  result_value=0.0;
-  if(0<x && x<k)
-    {
-      /* using symmetry around k/2 */
-      if((k-x)<x) x=k-x;
-
-      r=(int)(ceil(x)-1.0);
-
-      for(idx=0; idx<k; idx++)
-  scratch[idx]=0.0;
-
-      scratch[k-r-1]=1.0;
-
-      /* bounds of the algorithm */
-      g1 = r;
-      g2 = k - 1 - r;
-      ug = g2;
-
-      /* g1<=g2 holds */
-
-      for(j=1, og=g2+1; j<=g1; j++, og++)
-  {
-    a = (x - r + k - 1 - og)/(k - j);
-    scratch[og] = (1 - a) * scratch[og-1];
-    bspline_help(k,x,scratch,j,ug+1,og-1,r);
-    a = (x - r + k - 1 - ug)/(k - j);
-    scratch[ug] = a * scratch[ug];
-  }
-      for(og-- ; j<=g2; j++)
-  {
-    bspline_help(k,x,scratch,j,ug+1,og,r);
-    a = (x - r + k - 1 - ug)/(k - j);
-    scratch[ug] = a * scratch[ug];
-  }
-      for( ; j<k; j++)
-  {
-    ug++;
-    bspline_help(k,x,scratch,j,ug,og,r);
-  }
-      result_value = scratch[k-1];
-    }
-  return(result_value);
-} /* bspline */
-
-/** Computes the inner/dot product \f$x^H x\f$.
- */
-double nfft_dot_complex(double _Complex *x, int n)
-{
-  int k;
-  double dot;
-
-  for(k=0,dot=0; k<n; k++)
-    dot+=conj(x[k])*x[k];
-
-  return dot;
-}
-
-/** Computes the inner/dot product \f$x^H x\f$.
- */
-double nfft_dot_double(double *x, int n)
-{
-  int k;
-  double dot;
-
-  for(k=0,dot=0; k<n; k++)
-    dot+=x[k]*x[k];
-
-  return dot;
-}
-
-
-/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
- */
-double nfft_dot_w_complex(double _Complex *x, double *w, int n)
-{
-  int k;
-  double dot;
-
-  for(k=0,dot=0.0; k<n; k++)
-    dot+=w[k]*conj(x[k])*x[k];
-
-  return dot;
-}
-
-/** Computes the weighted inner/dot product \f$x^H (w \odot x)\f$.
- */
-double nfft_dot_w_double(double *x, double *w, int n)
-{
-  int k;
-  double dot;
-
-  for(k=0,dot=0.0; k<n; k++)
-    dot+=w[k]*x[k]*x[k];
-
-  return dot;
-}
-
-
-/** Computes the weighted inner/dot product
-    \f$x^H (w\odot w2\odot w2 \odot x)\f$.
- */
-double nfft_dot_w_w2_complex(double _Complex *x, double *w, double *w2, int n)
-{
-  int k;
-  double dot;
-
-  for(k=0,dot=0.0; k<n; k++)
-    dot+=w[k]*w2[k]*w2[k]*conj(x[k])*x[k];
-
-  return dot;
-}
-
-/** Computes the weighted inner/dot product
-    \f$x^H (w2\odot w2 \odot x)\f$.
- */
-double nfft_dot_w2_complex(double _Complex *x, double *w2, int n)
-{
-  int k;
-  double dot;
-
-  for(k=0,dot=0.0; k<n; k++)
-    dot+=w2[k]*w2[k]*conj(x[k])*x[k];
-
-  return dot;
-}
-
-/** Copies \f$x \leftarrow y\f$.
- */
-void nfft_cp_complex(double _Complex *x, double _Complex *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=y[k];
-}
-
-/** Copies \f$x \leftarrow y\f$.
- */
-void nfft_cp_double(double *x, double *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=y[k];
-}
-
-/** Copies \f$x \leftarrow a y\f$.
- */
-void nfft_cp_a_complex(double _Complex *x, double a, double _Complex *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=a*y[k];
-}
-
-/** Copies \f$x \leftarrow a y\f$.
- */
-void nfft_cp_a_double(double *x, double a, double *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=a*y[k];
-}
-
-
-/** Copies \f$x \leftarrow w\odot y\f$.
- */
-void nfft_cp_w_complex(double _Complex *x, double *w, double _Complex *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=w[k]*y[k];
-}
-
-/** Copies \f$x \leftarrow w\odot y\f$.
- */
-void nfft_cp_w_double(double *x, double *w, double *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=w[k]*y[k];
-}
-
-
-
-/** Updates \f$x \leftarrow a x + y\f$.
- */
-void nfft_upd_axpy_complex(double _Complex *x, double a, double _Complex *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=a*x[k]+y[k];
-}
-
-/** Updates \f$x \leftarrow a x + y\f$.
- */
-void nfft_upd_axpy_double(double *x, double a, double *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=a*x[k]+y[k];
-}
-
-
-/** Updates \f$x \leftarrow x + a y\f$.
- */
-void nfft_upd_xpay_complex(double _Complex *x, double a, double _Complex *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]+=a*y[k];
-}
-
-/** Updates \f$x \leftarrow x + a y\f$.
- */
-void nfft_upd_xpay_double(double *x, double a, double *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]+=a*y[k];
-}
-
-
-
-/** Updates \f$x \leftarrow a x + b y\f$.
- */
-void nfft_upd_axpby_complex(double _Complex *x, double a, double _Complex *y, double b, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=a*x[k]+b*y[k];
-}
-
-/** Updates \f$x \leftarrow a x + b y\f$.
- */
-void nfft_upd_axpby_double(double *x, double a, double *y, double b, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=a*x[k]+b*y[k];
-}
-
-
-/** Updates \f$x \leftarrow x + a w\odot y\f$.
- */
-void nfft_upd_xpawy_complex(double _Complex *x, double a, double *w, double _Complex *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]+=a*w[k]*y[k];
-}
-
-/** Updates \f$x \leftarrow x + a w\odot y\f$.
- */
-void nfft_upd_xpawy_double(double *x, double a, double *w, double *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]+=a*w[k]*y[k];
-}
-
-
-
-/** Updates \f$x \leftarrow a x +  w\odot y\f$.
- */
-void nfft_upd_axpwy_complex(double _Complex *x, double a, double *w, double _Complex *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=a*x[k]+w[k]*y[k];
-}
-
-/** Updates \f$x \leftarrow a x +  w\odot y\f$.
- */
-void nfft_upd_axpwy_double(double *x, double a, double *w, double *y, int n)
-{
-  int k;
-
-  for(k=0;k<n;k++)
-    x[k]=a*x[k]+w[k]*y[k];
-}
-
-
-void nfft_fftshift_complex(double _Complex *x, int d, int* N)
-{
-  int d_pre, d_act, d_post;
-  int N_pre, N_act, N_post;
-  int k_pre, k_act, k_post;
-  int k,k_swap;
-
-  double _Complex x_swap;
-
-  for(d_act=0;d_act<d;d_act++)
-    {
-      for(d_pre=0, N_pre=1;d_pre<d_act;d_pre++)
-  N_pre*=N[d_pre];
-
-      N_act=N[d_act];
-
-      for(d_post=d_act+1, N_post=1;d_post<d;d_post++)
-  N_post*=N[d_post];
-
-      for(k_pre=0;k_pre<N_pre;k_pre++)
-  for(k_act=0;k_act<N_act/2;k_act++)
-    for(k_post=0;k_post<N_post;k_post++)
-      {
-        k=(k_pre*N_act+k_act)*N_post+k_post;
-        k_swap=(k_pre*N_act+k_act+N_act/2)*N_post+k_post;
-
-        x_swap=x[k];
-        x[k]=x[k_swap];
-        x[k_swap]=x_swap;
-      }
-    }
-}
-
-/** vector print
- */
-void nfft_vpr_int(int *x, int n, char *text)
-{
-  int k;
-
-  if(text!=NULL)
-  {
-      printf ("\n %s, adr=%p\n", text, (void*)x);
-      for (k=0; k<n; k++)
-      {
-    if (k%8==0)
-        printf("%6d.\t", k);
-    printf("%d,", x[k]);
-    if (k%8==7)
-        printf("\n");
-      }
-      if (n%8!=0)
-        printf("\n");
-  }
-  else
-      for (k=0; k<n; k++)
-    printf("%d,\n", x[k]);
-  fflush(stdout);
-}
-
-/** Print real vector to standard output. */
-void X(vpr_double)(R *x, const int n, const char *text)
-{
-  int k;
-
-  if (x == NULL)
-  {
-    printf("null pointer\n");
-    fflush(stdout);
-    exit(-1);
-  }
-
-  if (text != NULL)
-  {
-    printf ("\n %s, adr=%p\n", text, (void*)x);
-
-    for (k = 0; k < n; k++)
-    {
-      if (k%8 == 0)
-        printf("%6d.\t", k);
-
-      printf("%+.1" FE ",", x[k]);
-
-      if (k%8 == 7)
-        printf("\n");
-    }
-
-    if (n%8 != 0)
-      printf("\n");
-  }
-  else
-    for (k = 0; k < n; k++)
-      printf("%+" FE ",\n", x[k]);
-
-  fflush(stdout);
-}
-
-/** Print complex vector to standard output. */
-void X(vpr_complex)(C *x, const int n, const char *text)
-{
-  int k;
-
-  if(text != NULL)
-  {
-    printf("\n %s, adr=%p\n", text, (void*)x);
-    for (k = 0; k < n; k++)
-    {
-      if (k%4 == 0)
-        printf("%6d.\t", k);
-
-      printf("%+.1" FE "%+.1" FE "i,", CREAL(x[k]), CIMAG(x[k]));
-
-      if (k%4==3)
-        printf("\n");
-    }
-    if (n%4!=0)
-      printf("\n");
-  }
-  else
-    for (k = 0; k < n; k++)
-      printf("%+" FE "%+" FE "i,\n", CREAL(x[k]), CIMAG(x[k]));
-
-  fflush(stdout);
-}
-
-void X(vrand_unit_complex)(C *x, const int n)
-{
-  int k;
-
-  for (k = 0; k < n; k++)
-    x[k] = nfft_drand48() + II*nfft_drand48();
-}
-
-void X(vrand_shifted_unit_double)(R *x, const int n)
-{
-  int k;
-
-  for (k = 0; k < n; k++)
-    x[k] = nfft_drand48() - K(0.5);
-}
-
-/** Compute non periodic voronoi weights for ordered nodes x_j */
-void X(voronoi_weights_1d)(R *w, R *x, const int M)
-{
-  int j;
-
-  w[0] = (x[1]-x[0])/K(2.0);
-
-  for(j = 1; j < M-1; j++)
-    w[j] = (x[j+1]-x[j-1])/K(2.0);
-
-  w[M-1] = (x[M-1]-x[M-2])/K(2.0);
-}
-
-void nfft_voronoi_weights_S2(double *w, double *xi, int M)
-{
-  double *x;
-  double *y;
-  double *z;
-  int j;
-  int k;
-  int el;
-  int Mlocal = M;
-  int lnew;
-  int ier;
-  int *list;
-  int *lptr;
-  int *lend;
-  int *near;
-  int *next;
-  double  *dist;
-  int *ltri;
-  int *listc;
-  int nb;
-  double *xc;
-  double *yc;
-  double *zc;
-  double *rc;
-  double *vr;
-  int lp;
-  int lpl;
-  int kv;
-  double a;
-
-  /* Allocate memory for auxilliary arrays. */
-  x = (double*)nfft_malloc(M * sizeof(double));
-  y = (double*)nfft_malloc(M * sizeof(double));
-  z = (double*)nfft_malloc(M * sizeof(double));
-
-  list = (int*)nfft_malloc((6*M-12+1)*sizeof(int));
-  lptr = (int*)nfft_malloc((6*M-12+1)*sizeof(int));
-  lend = (int*)nfft_malloc((M+1)*sizeof(int));
-  near = (int*)nfft_malloc((M+1)*sizeof(int));
-  next = (int*)nfft_malloc((M+1)*sizeof(int));
-  dist = (double*)nfft_malloc((M+1)*sizeof(double));
-  ltri = (int*)nfft_malloc((6*M+1)*sizeof(int));
-  listc = (int*)nfft_malloc((6*M-12+1)*sizeof(int));
-  xc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
-  yc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
-  zc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
-  rc = (double*)nfft_malloc((2*M-4+1)*sizeof(double));
-  vr = (double*)nfft_malloc(3*(2*M-4+1)*sizeof(double));
-
-  /* Convert from spherical Coordinates in [0,1/2]x[-1/2,1/2) to Cartesian
-   * coordinates. */
-  for (k = 0; k < M; k++)
-  {
-    x[k] = sin(2.0*PI*xi[2*k+1])*cos(2.0*PI*xi[2*k]);
-    y[k] = sin(2.0*PI*xi[2*k+1])*sin(2.0*PI*xi[2*k]);
-    z[k] = cos(2.0*PI*xi[2*k+1]);
-  }
-
-  /* Generate Delaunay triangulation. */
-  trmesh_(&Mlocal, x, y, z, list, lptr, lend, &lnew, near, next, dist, &ier);
-
-  /* Check error flag. */
-  if (ier == 0)
-  {
-    /* Get Voronoi vertices. */
-    crlist_(&Mlocal, &Mlocal, x, y, z, list, lend, lptr, &lnew, ltri, listc, &nb, xc,
-      yc, zc, rc, &ier);
-
-    if (ier == 0)
-    {
-      /* Calcuate sizes of Voronoi regions. */
-      for (k = 0; k < M; k++)
-      {
-        /* Get last neighbour index. */
-        lpl = lend[k];
-        lp = lpl;
-
-        j = 0;
-        vr[3*j] = x[k];
-        vr[3*j+1] = y[k];
-        vr[3*j+2] = z[k];
-
-        do
-        {
-          j++;
-          /* Get next neighbour. */
-          lp = lptr[lp-1];
-          kv = listc[lp-1];
-          vr[3*j] = xc[kv-1];
-          vr[3*j+1] = yc[kv-1];
-          vr[3*j+2] = zc[kv-1];
-          /* fprintf(stderr, "lp = %ld\t", lp); */
-        } while (lp != lpl);
-
-        a = 0;
-        for (el = 0; el < j; el++)
-        {
-          a += areas_(vr, &vr[3*(el+1)],&vr[3*(((el+1)%j)+1)]);
-        }
-
-        w[k] = a;
-      }
-    }
-  }
-
-  /* Deallocate memory. */
-  nfft_free(x);
-  nfft_free(y);
-  nfft_free(z);
-
-  nfft_free(list);
-  nfft_free(lptr);
-  nfft_free(lend);
-  nfft_free(near);
-  nfft_free(next);
-  nfft_free(dist);
-  nfft_free(ltri);
-  nfft_free(listc);
-  nfft_free(xc);
-  nfft_free(yc);
-  nfft_free(zc);
-  nfft_free(rc);
-  nfft_free(vr);
-}
-
-/**
- * Compute damping factor for modified Fejer kernel:
- * /f$\frac{2}{N}\left(1-\frac{\left|2k+1\right|}{N}\right)/f$
- */
-R X(modified_fejer)(const int N, const int kk)
-{
-  return (K(2.0)/((R)(N*N))*(K(1.0)-FABS(K(2.0)*kk+K(1.0))/((R)N)));
-}
-
-/** Compute damping factor for modified Jackson kernel. */
-R X(modified_jackson2)(const int N, const int kk)
-{
-  int kj;
-  const R n=(N/K(2.0)+K(1.0))/K(2.0);
-  R result, k;
-
-  for (result = K(0.0), kj = kk; kj <= kk+1; kj++)
-  {
-    k = ABS(kj);
-
-    if(k/n < K(1.0))
-      result += K(1.0) - (K(3.0)*k + K(6.0)*n*POW(k,K(2.0))
-        - K(3.0)*POW(k,K(3.0)))/(K(2.0)*n*(K(2.0)*POW(n,K(2.0))+K(1.0)));
-    else
-      result+= (K(2.0)*n-k)*(POW(2*n-k,K(2.0))-K(1.0))/(K(2.0)
-        *n*(K(2.0)*POW(n,K(2.0))+K(1.0)));
-  }
-
-  return result;
-}
-
-/** Compute damping factor for modified generalised Jackson kernel. */
-R X(modified_jackson4)(const int N, const int kk)
-{
-  int kj;
-  const R n = (N/K(2.0)+K(3.0))/K(4.0), normalisation = (K(2416.0)*POW(n,K(7.0))
-    + K(1120.0)*POW(n,K(5.0)) + K(784.0)*POW(n,K(3.0)) + K(720.0)*n);
-  R result, k;
-
-  for (result = K(0.0), kj = kk; kj <= kk + 1; kj++)
-  {
-    k = ABS(kj);
-
-    if (k/n < K(1.0))
-      result += K(1.0) - (K(1260.0)*k + (K(1680.0)*POW(n, K(5.0))
-        + K(2240.0)*POW(n, K(3.0)) + K(2940.0)*n)*POW(k, K(2.0))
-        - K(1715.0)*POW(k, K(3.0)) - (K(560.0)*POW(n, K(3.0))
-        + K(1400.0)*n)*POW(k, K(4.0)) + K(490.0)*POW(k, K(5.0))
-        + K(140.0)*n*POW(k, K(6.0)) - K(35.0)*POW(k,K(7.0)))/normalisation;
-
-    if ((K(1.0) <= k/n) && (k/n < K(2.0)))
-      result += ((K(2472.0)*POW(n, K(7.0)) + K(336.0)*POW(n, K(5.0))
-        + K(3528.0)*POW(n, K(3.0)) - K(1296.0)*n) - (K(392.0)*POW(n, K(6.0))
-        - K(3920.0)*POW(n, K(4.0)) + K(8232.0)*POW(n, K(2.0)) - K(756.0))*k
-        - (K(504.0)*POW(n, K(5.0)) + K(10080.0)*POW(n, K(3.0))
-        - K(5292.0)*n)*POW(k, K(2.0)) - (K(1960.0)*POW(n, K(4.0))
-        - K(7840.0)*POW(n, K(2.0)) + K(1029.0))*POW(k, K(3.0))
-        + (K(2520.0)*POW(n, K(3.0)) - K(2520.0)*n) * POW(k, K(4.0))
-        - (K(1176.0)*POW(n, K(2.0)) - K(294.0)) * POW(k, K(5.0))
-        + K(252.0)*n*POW(k, K(6.0)) - K(21.0)*POW(k, K(7.0)))/normalisation;
-
-    if ((K(2.0) <= k/n) && (k/n < K(3.0)))
-      result += (-(K(1112.0)*POW(n, K(7.0)) - K(12880.0)*POW(n, K(5.0))
-        + K(7448.0)*POW(n, K(3.0)) - K(720.0)*n) + (K(12152.0)*POW(n, K(6.0))
-        - K(27440.0)*POW(n, K(4.0)) + K(8232.0)*POW(n, K(2.0)) - K(252.0))*k
-        - (K(19320.0)*POW(n, K(5.0)) - K(21280.0)*POW(n, K(3.0))
-        + K(2940.0)*n)*POW(k, K(2.0)) + (K(13720.0)*POW(n, K(4.0))
-        - K(7840.0)*POW(n, K(2.0)) + K(343.0))*POW(k, K(3.0))
-        - (K(5320.0)*POW(n, K(3.0)) - K(1400.0)*n)*POW(k, K(4.0))
-        + (K(1176.0)*POW(n, K(2.0)) - K(98.0))*POW(k, K(5.0))
-        - K(140.0)*n*POW(k, K(6.0)) + K(7.0) * POW(k, K(7.0)))/normalisation;
-
-    if ((K(3.0) <= k/n) && (k/n < K(4.0)))
-      result += ((4*n-k)*(POW(4*n-k, K(2.0)) - K(1.0))*(POW(4*n-k, K(2.0))
-        - K(4.0))*(POW(4*n-k, K(2.0)) - K(9.0)))/normalisation;
-  }
-
-  return result;
-}
-
-/** Compute damping factor for modified Sobolev kernel. */
-R X(modified_sobolev)(const R mu, const int kk)
-{
-  R result;
-  int kj, k;
-
-  for (result = K(0.0), kj = kk; kj <= kk+1; kj++)
-  {
-    k = ABS(kj);
-    if (k == 0)
-      result += K(1.0);
-    else
-      result += POW((double)k,-K(2.0)*mu);
-  }
-
-  return result;
-}
-
-/** Comput damping factor for modified multiquadric kernel. */
-R X(modified_multiquadric)(const R mu, const R c, const int kk)
-{
-  R result;
-  int kj, k;
-
-  for (result = K(0.0), kj = kk; kj <= kk+1; kj++)
-    {
-      k = ABS(kj);
-      result += POW((double)(k*k + c*c), -mu);
-    }
-
-  return result;
-}
-
-static inline int scaled_modified_bessel_i_series(const R x, const R alpha,
-  const int nb, const int ize, R *b)
-{
-  const R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);
-  R tempa = K(1.0), empal = K(1.0) + alpha, halfx = K(0.0), tempb = K(0.0);
-  int n, ncalc = nb;
-
-  if (enmten < x)
-    halfx = x/K(2.0);
-
-  if (alpha != K(0.0))
-    tempa = POW(halfx, alpha)/TGAMMA(empal);
-
-  if (ize == 2)
-    tempa *= EXP(-x);
-
-  if (K(1.0) < x + K(1.0))
-    tempb = halfx*halfx;
-
-  b[0] = tempa + tempa*tempb/empal;
-
-  if (x != K(0.0) && b[0] == K(0.0))
-    ncalc = 0;
-
-  if (nb == 1)
-    return ncalc;
-
-  if (K(0.0) < x)
-  {
-    R tempc = halfx, tover = (enmten + enmten)/x;
-
-    if (tempb != K(0.0))
-      tover = enmten/tempb;
-
-    for (n = 1; n < nb; n++)
-    {
-      tempa /= empal;
-      empal += K(1.0);
-      tempa *= tempc;
-
-      if (tempa <= tover*empal)
-        tempa = K(0.0);
-
-      b[n] = tempa + tempa*tempb/empal;
-
-      if (b[n] == K(0.0) && n < ncalc)
-        ncalc = n;
-    }
-  }
-  else
-    for (n = 1; n < nb; n++)
-      b[n] = K(0.0);
-
-  return ncalc;
-}
-
-static inline void scaled_modified_bessel_i_normalize(const R x,
-  const R alpha, const int nb, const int ize, R *b, const R sum_)
-{
-  const R enmten = K(4.0)*nfft_float_property(NFFT_R_MIN);
-  R sum = sum_, tempa;
-  int n;
-
-  /* Normalize, i.e., divide all b[n] by sum */
-  if (alpha != K(0.0))
-    sum = sum * TGAMMA(K(1.0) + alpha) * POW(x/K(2.0), -alpha);
-
-  if (ize == 1)
-    sum *= EXP(-x);
-
-  tempa = enmten;
-
-  if (K(1.0) < sum)
-    tempa *= sum;
-
-  for (n = 1; n <= nb; n++)
-  {
-    if (b[n-1] < tempa)
-      b[n-1] = K(0.0);
-
-    b[n-1] /= sum;
-  }
-}
-
-/**
- * Calculates the modified bessel function \f$I_{n+\alpha}(x)\f$, possibly
- * scaled by \f$\mathrm{e}^{-x}\f$, for real non-negative \f$x,alpha\f$ with
- * \f$0 \le \alpha < 1\f$, and \f$n=0,1,\ldots,nb-1\f$.
- *
- * \arg[in] \c x non-negative real number in \f$I_{n+\alpha}(x)\f$
- * \arg[in] \c alpha non-negative real number with \f$0 \le \alpha < 1\f$ in
- *   \f$I_{n+\alpha}(x)\f$
- * \arg[in] \c nb number of functions to be calculated
- * \arg[in] \c ize switch between no scaling (\c ize = 1) and exponential
- *   scaling (\c ize = 2)
- * \arg[out] \c b real output vector to contain \f$I_{n+\alpha}(x)\f$,
- *   \f$n=0,1,\ldots,nb-1\f$
- * \return error indicator. Only if this value is identical to \c nb, then all
- *   values in \c b have been calculated to full accuracy. If not, errors are
- *   indicated using the following scheme:
- *   - ncalc < 0: At least one of the arguments was out of range (e.g. nb <= 0,
- *     ize neither equals 1 nor 2, \f$|x| \ge exparg\f$). In this case, the
- *     output vector b is not calculated and \c ncalc is set to
- *     \f$\min(nb,0)-1\f$.
- *   - 0 < ncalc < nb: Not all requested functions could be calculated to full
- *     accuracy. This can occur when nb is much larger than |x|. in this case,
- *     the values \f$I_{n+\alpha}(x)\f$ are calculated to full accuracy for
- *     \f$n=0,1,\ldots,ncalc\f$. The rest of the values up to
- *     \f$n=0,1,\ldots,nb-1\f$ is calculated to a lower accuracy.
- *
- * \acknowledgement
- *
- * This program is based on a program written by David J. Sookne [2] that
- * computes values of the Bessel functions \f$J_{\nu}(x)\f$ or \f$I_{\nu}(x)\f$
- * for real argument \f$x\f$ and integer order \f$\nu\f$. modifications include
- * the restriction of the computation to the Bessel function \f$I_{\nu}(x)\f$
- * for non-negative real argument, the extension of the computation to arbitrary
- * non-negative orders \f$\nu\f$, and the elimination of most underflow.
- *
- * References:
- * [1] F. W. J. Olver and D. J. Sookne, A note on backward recurrence
- *   algorithms", Math. Comput. (26), 1972, pp 125 -- 132.
- * [2] D. J. Sookne, "Bessel functions of real argument and int order", NBS
- *   Jour. of Res. B. (77B), 1973, pp. 125 -- 132.
- *
- * Modified by W. J. Cody, Applied Mathematics Division, Argonne National
- *   Laboratory, Argonne, IL, 60439, USA
- *
- * Modified by Jens Keiner, Institute of Mathematics, University of Lübeck,
- *   23560 Lübeck, Germany
- */
-int nfft_smbi(const R x, const R alpha, const int nb, const int ize, R *b)
-{
-  /* machine dependent parameters */
-  /* NSIG   - DECIMAL SIGNIFICANCE DESIRED.  SHOULD BE SET TO */
-  /*          IFIX(ALOG10(2)*NBIT+1), WHERE NBIT IS THE NUMBER OF */
-  /*          BITS IN THE MANTISSA OF A WORKING PRECISION VARIABLE. */
-  /*          SETTING NSIG LOWER WILL RESULT IN DECREASED ACCURACY */
-  /*          WHILE SETTING NSIG HIGHER WILL INCREASE CPU TIME */
-  /*          WITHOUT INCREASING ACCURACY.  THE TRUNCATION ERROR */
-  /*          IS LIMITED TO A RELATIVE ERROR OF T=.5*10**(-NSIG). */
-  /* ENTEN  - 10.0 ** K, WHERE K IS THE LARGEST int SUCH THAT */
-  /*          ENTEN IS MACHINE-REPRESENTABLE IN WORKING PRECISION. */
-  /* ENSIG  - 10.0 ** NSIG. */
-  /* RTNSIG - 10.0 ** (-K) FOR THE SMALLEST int K SUCH THAT */
-  /*          K .GE. NSIG/4. */
-  /* ENMTEN - THE SMALLEST ABS(X) SUCH THAT X/4 DOES NOT UNDERFLOW. */
-  /* XLARGE - UPPER LIMIT ON THE MAGNITUDE OF X WHEN IZE=2.  BEAR */
-  /*          IN MIND THAT IF ABS(X)=N, THEN AT LEAST N ITERATIONS */
-  /*          OF THE BACKWARD RECURSION WILL BE EXECUTED. */
-  /* EXPARG - LARGEST WORKING PRECISION ARGUMENT THAT THE LIBRARY */
-  /*          EXP ROUTINE CAN HANDLE AND UPPER LIMIT ON THE */
-  /*          MAGNITUDE OF X WHEN IZE=1. */
-  const int nsig = MANT_DIG + 2;
-  const R enten = nfft_float_property(NFFT_R_MAX);
-  const R ensig = POW(K(10.0),(R)nsig);
-  const R rtnsig = POW(K(10.0),-CEIL((R)nsig/K(4.0)));
-  const R xlarge = K(1E4);
-  const R exparg = FLOOR(LOG(POW(K(R_RADIX),K(DBL_MAX_EXP-1))));
-
-  /* System generated locals */
-  int l, n, nend, magx, nbmx, ncalc, nstart;
-  R p, em, en, sum, pold, test, empal, tempa, tempb, tempc, psave, plast, tover,
-    emp2al, psavel;
-
-  magx = LRINT(FLOOR(x));
-
-  /* return if x, nb, or ize out of range */
-  if (   nb <= 0 || x < K(0.0) || alpha < K(0.0) || K(1.0) <= alpha
-      || ((ize != 1 || exparg < x) && (ize != 2 || xlarge < x)))
-    return (MIN(nb,0) - 1);
-
-  /* 2-term ascending series for small x */
-  if (x < rtnsig)
-    return scaled_modified_bessel_i_series(x,alpha,nb,ize,b);
-
-  ncalc = nb;
-  /* forward sweep, Olver's p-sequence */
-
-  nbmx = nb - magx;
-  n = magx + 1;
-
-  en = (R) (n+n) + (alpha+alpha);
-  plast = K(1.0);
-  p = en/x;
-
-  /* significance test */
-  test = ensig + ensig;
-
-  if ((5*nsig) < (magx << 1))
-    test = SQRT(test*p);
-  else
-    test /= POW(K(1.585),(R)magx);
-
-  if (3 <= nbmx)
-  {
-    /* calculate p-sequence until n = nb-1 */
-    tover = enten/ensig;
-    nstart = magx+2;
-    nend = nb - 1;
-
-    for (n = nstart; n <= nend; n++)
-    {
-      en += K(2.0);
-      pold = plast;
-      plast = p;
-      p = en*plast/x + pold;
-      if (p > tover)
-      {
-        /* divide p-sequence by tover to avoid overflow. Calculate p-sequence
-         * until 1 <= |p| */
-        tover = enten;
-        p /= tover;
-        plast /= tover;
-        psave = p;
-        psavel = plast;
-        nstart = n + 1;
-
-        do
-        {
-          n++;
-          en += K(2.0);
-          pold = plast;
-          plast = p;
-          p = en*plast/x + pold;
-        } while (p <= K(1.0));
-
-        tempb = en/x;
-
-        /* Backward test. Find ncalc as the largest n such that test is passed. */
-        test = pold*plast*(K(0.5) - K(0.5)/(tempb * tempb))/ensig;
-        p = plast*tover;
-        n--;
-        en -= K(2.0);
-        nend = MIN(nb,n);
-
-        for (ncalc = nstart; ncalc <= nend; ncalc++)
-        {
-          pold = psavel;
-          psavel = psave;
-          psave = en*psavel/x + pold;
-          if (test < psave * psavel)
-            break;
-        }
-
-        ncalc--;
-        goto L80;
-      }
-    }
-
-    n = nend;
-    en = (R) (n+n) + (alpha+alpha);
-
-    /* special significance test for 2 <= nbmx */
-    test = FMAX(test,SQRT(plast*ensig)*SQRT(p+p));
-  }
-
-  /* calculate p-sequence until significance test is passed */
-  do
-  {
-    n++;
-    en += K(2.0);
-    pold = plast;
-    plast = p;
-    p = en*plast/x + pold;
-  } while (p < test);
-
-  /* Initialize backward recursion and normalization sum. */
-L80:
-  n++;
-  en += K(2.0);
-  tempb = K(0.0);
-  tempa = K(1.0)/p;
-  em = (R)(n-1);
-  empal = em + alpha;
-  emp2al = em - K(1.0) + (alpha+alpha);
-  sum = tempa*empal*emp2al/em;
-  nend = n-nb;
-
-  if (nend < 0)
-  {
-    /* We have n <= nb. So store b[n] and set higher orders to zero */
-    b[n-1] = tempa;
-    nend = -nend;
-    for (l = 1; l <= nend; ++l)
-      b[n-1 + l] = K(0.0);
-  }
-  else
-  {
-    if (nend != 0)
-    {
-      /* recur backward via difference equation, calculating b[n] until n = nb */
-      for (l = 1; l <= nend; ++l)
-      {
-        n--;
-        en -= K(2.0);
-        tempc = tempb;
-        tempb = tempa;
-        tempa = en*tempb/x + tempc;
-        em -= K(1.0);
-        emp2al -= K(1.0);
-
-        if (n == 1)
-          break;
-
-        if (n == 2)
-          emp2al = K(1.0);
-
-        empal -= K(1.0);
-        sum = (sum + tempa*empal)*emp2al/em;
-      }
-    }
-
-    /* store b[nb] */
-    b[n-1] = tempa;
-
-    if (nb <= 1)
-    {
-      sum = sum + sum + tempa;
-      scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
-      return ncalc;
-    }
-
-    /* calculate and store b[nb-1] */
-    n--;
-    en -= 2.0;
-    b[n-1] = en*tempa/x + tempb;
-
-    if (n == 1)
-    {
-      sum = sum + sum + b[0];
-      scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
-      return ncalc;
-    }
-
-    em -= K(1.0);
-    emp2al -= K(1.0);
-
-    if (n == 2)
-      emp2al = K(1.0);
-
-    empal -= K(1.0);
-    sum = (sum + b[n-1]*empal)*emp2al/em;
-  }
-
-  nend = n - 2;
-
-  if (nend != 0)
-  {
-    /* Calculate and store b[n] until n = 2. */
-    for (l = 1; l <= nend; ++l)
-    {
-      n--;
-      en -= K(2.0);
-      b[n-1] = en*b[n]/x + b[n+1];
-      em -= K(1.0);
-      emp2al -= K(1.0);
-
-      if (n == 2)
-        emp2al = K(1.0);
-
-      empal -= K(1.0);
-      sum = (sum + b[n-1]*empal)*emp2al/em;
-    }
-  }
-
-  /* calculate b[1] */
-  b[0] = K(2.0)*empal*b[1]/x + b[2];
-  sum = sum + sum + b[0];
-
-  scaled_modified_bessel_i_normalize(x,alpha,nb,ize,b,sum);
-  return ncalc;
-}
-
-/**
- * Prints an error message for a failed assertion together with filename and the
- * line where the assertion failed.
- */
-void nfft_assertion_failed(const char *s, int line, const char *file)
-{
-  fflush(stdout);
-  fprintf(stderr, "nfft: %s:%d: assertion failed: %s\n", file, line, s);
-#ifdef HAVE_ABORT
-  /* Use abort function. */
-  abort();
-#else
-  /* Use exit function. */
-  exit(EXIT_FAILURE);
-#endif
-}
-
-/* We declare drand48() and srand48() ourselves, if they are is not declared in
- * math.h (e.g. on SuSE 9.3), grrr. */
-#include "config.h"
-#if HAVE_DECL_DRAND48 == 0
-  extern double drand48(void);
-#endif
-#if HAVE_DECL_SRAND48 == 0
-  extern void srand48(long int);
-#endif
-
-double nfft_drand48(void)
-{
-#ifdef HAVE_DRAND48
-  return drand48();
-#else
-  return ((R)rand())/((R)RAND_MAX);
-#endif
-}
-
-void nfft_srand48(long int seed)
-{
-#ifdef HAVE_SRAND48
-  srand48(seed);
-#else
-  srand((unsigned int)seed);
-#endif
-}
-
-
-#define z_swap(_a_, _b_, _t_)     do { (_t_) = (_a_); (_a_) = (_b_); (_b_) = (_t_); } while (0)
-
-/**
- * Auxiliary function of radix sort for node indices.
- *
- * \author Michael Hofmann
- */
-static void nfft_sort_node_indices_sort_bubble(int n, int *keys)
-{
-  int i, j, ti;
-
-  for (i = 0; i < n; ++i)
-  {
-    j = i;
-    while (j > 0 && keys[2 * j + 0] < keys[2 * (j - 1) + 0])
-    {
-      z_swap(keys[2 * j + 0], keys[2 * (j - 1) + 0], ti);
-      z_swap(keys[2 * j + 1], keys[2 * (j - 1) + 1], ti);
-      --j;
-    }
-  }
-}
-
-/**
- * Auxiliary function of radix sort for node indices.
- *
- * \author Michael Hofmann
- */
-static void nfft_sort_node_indices_radix_count(int n, int *keys, int shift, int mask, int *counts)
-{
-  int i, k;
-
-  for (i = 0; i < n; ++i)
-  {
-    k = (keys[2 * i + 0] >> shift) & mask;
-    ++counts[k];
-  }
-}
-
-/**
- * Auxiliary function of radix sort for node indices.
- *
- * \author Michael Hofmann
- */
-static void nfft_sort_node_indices_radix_rearrange(int n, int *keys_in, int *keys_out, int shift, int mask, int *displs)
-{
-  int i, k;
-
-  for (i = 0; i < n; ++i)
-  {
-    k = (keys_in[2 * i + 0] >> shift) & mask;
-    keys_out[2 * displs[k] + 0] = keys_in[2 * i + 0];
-    keys_out[2 * displs[k] + 1] = keys_in[2 * i + 1];
-    ++displs[k];
-  }
-}
-
-/**
- * Radix sort for node indices with OpenMP support.
- *
- * \author Michael Hofmann
- */
-void nfft_sort_node_indices_radix_lsdf(int n, int *keys0, int *keys1, int rhigh)
-{
-  const int rwidth = 9;
-  const int radix_n = 1 << rwidth;
-  const int radix_mask = radix_n - 1;
-  const int rhigh_in = rhigh;
-
-  const int tmax =
-#ifdef _OPENMP
-    omp_get_max_threads();
-#else
-    1;
-#endif
-
-  int *from, *to, *tmp;
-
-  int i, k, l, h;
-  int lcounts[tmax * radix_n];
-
-  int tid = 0, tnum = 1;
-
-
-  from = keys0;
-  to = keys1;
-
-  while (rhigh >= 0)
-  {
-#ifdef _OPENMP
-    #pragma omp parallel private(tid, tnum, i, l, h)
-    {
-      tid = omp_get_thread_num();
-      tnum = omp_get_num_threads();
-#endif
-
-      for (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;
-
-      l = (tid * n) / tnum;
-      h = ((tid + 1) * n) / tnum;
-
-      nfft_sort_node_indices_radix_count(h - l, from + (2 * l), rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);
-#ifdef _OPENMP
-    }
-#endif
-
-    k = 0;
-    for (i = 0; i < radix_n; ++i)
-    {
-      for (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];
-    }
-
-#ifdef _OPENMP
-    #pragma omp parallel private(tid, tnum, i, l, h)
-    {
-      tid = omp_get_thread_num();
-      tnum = omp_get_num_threads();
-#endif
-
-      l = (tid * n) / tnum;
-      h = ((tid + 1) * n) / tnum;
-
-      nfft_sort_node_indices_radix_rearrange(h - l, from + (2 * l), to, rhigh_in - rhigh, radix_mask, &lcounts[tid * radix_n]);
-#ifdef _OPENMP
-    }
-#endif
-
-/*    print_keys(n, to);*/
-
-    tmp = from;
-    from = to;
-    to = tmp;
-
-    rhigh -= rwidth;
-  }
-
-  if (to == keys0) memcpy(to, from, n * 2 * sizeof(int));
-}
-
-/**
- * Radix sort for node indices with OpenMP support.
- *
- * \author Michael Hofmann
- */
-void nfft_sort_node_indices_radix_msdf(int n, int *keys0, int *keys1, int rhigh)
-{
-  const int rwidth = 9;
-  const int radix_n = 1 << rwidth;
-  const int radix_mask = radix_n - 1;
-
-  const int tmax =
-#ifdef _OPENMP
-    omp_get_max_threads();
-#else
-    1;
-#endif
-
-  int i, k, l, h;
-  int lcounts[tmax * radix_n];
-
-  int counts[radix_n], displs[radix_n];
-
-  int tid = 0, tnum = 1;
-
-
-  rhigh -= rwidth;
-
-#ifdef _OPENMP
-  #pragma omp parallel private(tid, tnum, i, l, h)
-  {
-    tid = omp_get_thread_num();
-    tnum = omp_get_num_threads();
-#endif
-
-    for (i = 0; i < radix_n; ++i) lcounts[tid * radix_n + i] = 0;
-
-    l = (tid * n) / tnum;
-    h = ((tid + 1) * n) / tnum;
-
-    nfft_sort_node_indices_radix_count(h - l, keys0 + (2 * l), rhigh + 1, radix_mask, &lcounts[tid * radix_n]);
-#ifdef _OPENMP
-  }
-#endif
-
-  k = 0;
-  for (i = 0; i < radix_n; ++i)
-  {
-    for (l = 0; l < tmax; ++l) lcounts[l * radix_n + i] = (k += lcounts[l * radix_n + i]) - lcounts[l * radix_n + i];
-
-    displs[i] = lcounts[0 * radix_n + i];
-    if (i > 0) counts[i - 1] = displs[i] - displs[i - 1];
-  }
-  counts[radix_n - 1] = n - displs[radix_n - 1];
-
-#ifdef _OPENMP
-  #pragma omp parallel private(tid, tnum, i, l, h)
-  {
-    tid = omp_get_thread_num();
-    tnum = omp_get_num_threads();
-#endif
-
-    l = (tid * n) / tnum;
-    h = ((tid + 1) * n) / tnum;
-
-    nfft_sort_node_indices_radix_rearrange(h - l, keys0 + (2 * l), keys1, rhigh + 1, radix_mask, &lcounts[tid * radix_n]);
-#ifdef _OPENMP
-  }
-#endif
-
-  memcpy(keys0, keys1, n * 2 * sizeof(int));
-
-  if (rhigh >= 0)
-  {
-    for (i = 0; i < radix_n; ++i)
-    {
-      if (counts[i] > 1)
-      {
-        if (counts[i] > 256)
-          nfft_sort_node_indices_radix_msdf(counts[i], keys0 + 2 * displs[i], keys1 + 2 * displs[i], rhigh);
-        else
-          nfft_sort_node_indices_sort_bubble(counts[i], keys0 + 2 * displs[i]);
-      }
-    }
-  }
-}
-
-int nfft_get_num_threads(void)
-{
-#ifdef _OPENMP
-  return nfft_get_omp_num_threads();
-#else
-  return 1;
-#endif
-}
-
-#ifdef _OPENMP
-int nfft_get_omp_num_threads(void)
-{
-  int nthreads;
-  #pragma omp parallel default(shared)
-  {
-    int n = omp_get_num_threads();
-    #pragma omp master
-    {
-      nthreads = n;
-    }
-  }
-  return nthreads;
-}
-#endif

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/nfft.git



More information about the debian-science-commits mailing list